시작은 미미하나 끝은 쥬쥬하리라.

분류 전체보기 105

[Window System Programming] Chapter 07. 프로세스 간 통신(IPC)의 의미 / 메일 슬롯 방식 IPC / Signaled vs Non-Signaled

2-7 프로세스 간 통신(IPC)의 의미 / 메일 슬롯 방식 IPC / Signaled vs Non-Signaled 프로세스 간 통신(IPC)의 의미 메일 슬롯 방식 IPC Signaled vs Non-Signaled 프로세스 간 통신(IPC)의 의미 일반적인 통신 : 데이터의 송수신하는 방식 프로세스 간 통신 : 같은 메모리 영역을 공유하는 방식 ex) 프로세스 A의 데이터 영역에 프로세스 B가 접근이 가능한 경우 -> 프로그램 A가 프로그램 B에게 영향을 받을 수 있음 -> 이를 제한하고자 운영체제에서 프로세스의 공유 가능한 메모리 영역을 지정 -> 프로세스 A가 공유 메모리 영역에 데이터를 저장, 프로세스 B가 공유 메모리 영역에서 데이터를 로드하는 방식 IPC(Inner Process Commun..

[Window System Programming] Chapter 06. 커널 오브젝트에 대한 이해 / 핸들의 종속 관계

2-6 커널 오브젝트에 대한 이해 / 핸들의 종속 관계 커널 오브젝트에 대한 이해 핸들의 종속 관계 커널 오브젝트 커널 모든 OS가 가지고 있는 핵심에 해당하는 부분 -> Windows OS와 Linux가 번들로 제공하는 소프트웨어(커널)에는 차이가 있음 -> 이전에는 운영체제와 커널은 동의어 -> 지금에는 운영체제의 기능이 늘어나고 운영체제 별 기능의 차이가 생기면서 그 의미가 분리 -> 따라서 처음 운영체제에서 지금에 이르는 과정에서 변하지 않고 유지되고 있는 부분을 커널이라 함 커널 오브젝트 커널에 의해 관리되는 리소스 정보를 담고 있는 데이터 블록 리소스 : 운영체제에 의해 생성 및 소멸되는 것 -> 커널 오브젝트는 리소를 관리하기 위함 ex) 사용자가 파일을 하나 생성해서 해당 파일에 접근하려는..

[Window System Programming] Chapter 05. 프로세스와 스케쥴러 / 프로세스 생성

2-5 프로세스와 스케쥴러 / 프로세스 생성 프로세스와 스케쥴러 프로세스 생성 프로세스와 스케쥴러 프로세스 메인 메모리로 이동하여 실행 중인 프로그램 하드디스크에 있는 실행 파일을 실행시키는 순간에 메모리 공간이 할당되고 이 순간부터 프로그램은 프로세스 메모리 공간 메모리 공간 : 데이터 영역 + 스택 영역 + 힙 영역 + 코드 영역 -> 데이터 영역 : 전역 변수나 static 변수 할당을 위한 영역 -> 스택 영역 : 지역변수 할당과 함수 호출 시 인자 값 저장을 위한 영역 -> 힙 영역 : 동적 할당을 위한 영역 -> 코드 영역 : 프로그램 실행 시, 명령어들이 올라가는 영역 ex) RAM이 256MB인데 프로세스의 메모리 공간을 4GB 할당 받는 경우 -> 메모리 공간 전체가 RAM에 올라갈 수 ..

[Window System Programming] Chapter 04. 컴퓨터 구조와 접근 방법 / LOAD & STORE 명령어 / Direct & Indirect Mode

2-4 컴퓨터 구조와 접근 방법 / LOAD & STORE 명령어 / Direct & Indirect Mode 컴퓨터 구조와 접근 방법 LOAD & STORE 명령어 Direct & Indirect Mode 컴퓨터 구조와 접근 방법 CPU 디자인 프로그래머 관점 CPU 디자인 : 명령어(컴파일러를 통해 만들어지는 명령어 집합) + 레지스터 디자인 -> 아래부터 간단한 레지스터 디자인을 진행 레지스터 중심 CPU 디자인 예시 1. 고려사항 : 레지스터의 비트수(N비트 시스템에서는 레지스터 역시 N비트로 구성), 레지스터의 개수, 레지스터의 저장 용도(범용 RAM, 하드디스크와 차별되는 부분, 용도를 정하면 명령어가 단순해지고 연산 속도 향상, 필수는 아님) 2. 레지스터 디자인 : 16비트, 레지스터 8개..

[Window System Programming] Chapter 03. 64비트 기반 프로그래밍

1-3 64비트 기반 프로그래밍 WIN32 vs WIN64 프로그램 구현 관점에서의 WIN32, WIN64 WIN32 vs WIN64 32비트와 64비트의 차이 한 번에 송수신 가능한 데이터의 크기, 데이터의 처리 능력 즉, 버스 시스템의 능력과 CPU의 차이가 주요 ex) 32비트 시스템에서는 32비트 명령어를 한 번에 fetch(명령어 이동) 한다고 하면 64비트 시스템에서는 64비트 명령어를 한번에 fetch 하면서 한 번에 fetch 할 수 있는 데이터의 크기가 증가 -> 같은 시간에 32비트 명렁어를 64비트는 2번 fetch 할 수 있다고 생각할 수 있으나, 보통 64비트 시스템에서는 64비트 명령어 길이를 사용하는 것이 일반적 하드웨어 관점에서 WIN32 vs WIN64 버스 인터페이스가 한..

[Window System Programming] Chapter 02. 아스키 코드 VS 유니코드

1-2 아스키 코드 VS 유니코드 윈도우에서 유니코드 MBCS와 WBCS의 동시지원 윈도우에서 유니코드 Window OS 문자셋 SBCS, MBCS, WBCS 3가지 지원 SBCS(Single Byte Character Set) 문자 표현에 1Byte 사용 ASCII 코드 MBCS(Multi Byte Character Set) 한글은 2Byte, 영문은 1Byte 사용 WBCS(Wide Byte Character Set) 문자 표현에 2Byte 사용 UNICODE -> 과거 한글 등 다양한 문자의 표현을 위해 ASCII 코드(SBCS)에서 MBCS로 이동 -> 현재는 WBCS(UNICODE)로 옮겨가는 과정 -> WBCS는 문자 표현에 2Byte를 사용함에도 옮기는 기술의 발전에 따라 문자열의 크기가 부..

[Window System Programming] Chapter 01. 시스템 프로그래밍의 이해와 접근 / 컴퓨터 하드웨어의 구성 / CPU에 대한 이해

1-1 시스템 프로그래밍의 이해와 접근 / 컴퓨터 하드웨어의 구성 / CPU에 대한 이해 시스템 프로그래밍의 이해 / 하드웨어와 CPU의 이해 프로그램 실행 과정 / 하드웨어 구성의 재접근 시스템 프로그래밍의 이해 / 하드웨어와 CPU의 이해 System 하드웨어 + 운영체제로 구성 시스템 프로그래밍 운영체제의 기능을 활용하는 프로그래밍 모든 응용 소프트웨어 개발에 들어가는 요소 윈도우 시스템 프로그래밍 : Window OS를 활용한 프로그래밍 시스템의 주요 구성 요소 컴퓨터 구조(하드웨어) + 운영체제 구조로 구성 컴퓨터 구조 : CPU + 캐쉬 운영체제 구조 : 메인 메모리 + 하드 디스크 하드웨어 구성 CPU + 메인 메모리 + 입출력 버스 + 하드 디스크 CPU : 연산 처리 메인 메모리 : 처리..

[effective C++] Chapter 03 : 17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자

17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 new 객체와 스마트 포인터 이것만은 잊지 말자 ! new 객체와 스마트 포인터 처리 우선 순위를 알려주는 함수가 하나 있고, 동적으로 할당한 Widget 객체에 대해 어떤 우선 순위에 따라 처리를 적용하는 함수가 있다고 가정하자. 자원 관리는 동적 할당된 Widget 객체에 대해 shared_ptr을 사용하도록 만들어졌다고 하고 processWidget 함수를 호출한다. 하지만 위의 코드는 컴파일 되지 않는다. 이유는 shraed_ptr의 생성자는 explicit로 선언되어 있기 때문에 new Widget으로 Widget 형 포인터가 shared_ptr 형태로 바뀌는 암시적 변환이 불가능하기 때문이다. 위 함수에는..

Study/Effective C++ 2023.08.13

[effective C++] Chapter 03 : 16. new 및 delete를 사용할 때는 형태를 반드시 맞추자

16. new 및 delete를 사용할 때는 형태를 반드시 맞추자 단일 객체 / 배열 객체 메모리 해제 typedef 메모리 해제 이것만은 잊지 말자 ! 단일 객체 / 배열 객체의 메모리 해제 위 코드는 string 배열을 가리키는 stringArray 포인터 객체를 생성하고 메모리 해제까지 하는 코드이다. 하지만 위 코드는 프로그램을 미정의 동작으로 빠지게 만든다. 그 이유는 위 코드만으로 100번의 소멸자 호출이 이루어지지 못하기 때문이다. new 연산을 사용하면 메모리가 할당이 되고, 생성자가 호출이 된다. 반면, delete 연산을 사용하면 소멸자가 호출되고 메모리가 해제되는 과정을 거친다. 여기서 delete 연산이 적용되는 객체의 개수는 소멸자가 호출되는 횟수와 동일하다. 기본적으로 단일 객체..

Study/Effective C++ 2023.08.13

[effective C++] Chapter 03 : 15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자

15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 get() 함수 암시적 변환 함수 이것만은 잊지 말자 ! get() 함수 아래와 같이 스마트 포인터를 사용하여 함수 호출 결과를 담고, 어떤 동작을 하는 함수를 정의하여 그 인자로 스마트 포인터를 넘겼을 때의 결과를 보자. 위에서 daysHeld 함수는 Investment* 타입의 포인터를 원하는데 shared_ptr을 인자로 넘기고 있기 때문에 에러가 발생한다. 이를 해결하기 위해서 명시적 변환 혹은 암시적 변환이 필요한데, shared_ptr과 auto_ptr은 get()이라는 멤버 함수를 통해 명시적 변환을 수행할 수 있게 제공해주고 있다. get() 함수를 통해 우리는 스맡트 포인터 객체에 들어 있는 실제 포인터의 사본을..

Study/Effective C++ 2023.08.13