분류 전체보기
XII : 쓰레드의 생성과 소멸
XII : 쓰레드의 생성과 소멸 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) Windows에서의 쓰레드 생성과 소멸 CreateThread Windows에서 사용할 수 있는 가장 기본적인 쓰레드 생성 함수는 CreateThread이다. HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpTA, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); LPSECURITY_ATTRIBUTES lpTA : 프로세스를 생성하는 CreateProcess와 마찬가지로, 이 또한 핸들의 상속 여부를..
XI : 쓰레드의 이해
XI : 쓰레드의 이해 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 쓰레드란 무엇인가 오래 전에는 프로그램 내 실행 흐름을 다양화하기 위해서, 하나의 프로그램에서 둘 이상의 프로세스를 생성하는 일은 아주 빈번하였다. 하지만 이런 식으로 추가적으로 프로세스를 생성하는 작업은 상당히 부담스럽다. 빈번한 컨텍스트 스위칭을 유발시키기 때문이다. 저장하고 복원하는 컨텍스트 정보의 개수를 줄일 수 있다면, 컨텍스트 스위칭의 부담을 덜 수 있을 것이다. 프로세스는 완전히 독립된 둘 이상의 프로그램 실행을 위해 사용되고, 쓰레드는 하나의 프로그램 내에서 둘 이상의 프로그램 흐름을 만들어 내기 위해서 디자인되었다. 쓰레드들 사이에는 공유하는 요소들이 많기 때문에 컨텍스트 스위칭 부담이 비교적..
X : 컴퓨터 구조에 대한 세 번째 이야기
X : 컴퓨터 구조에 대한 세 번째 이야기 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 절차적 함수 호출 지원 CPU 모델 함수 호출 또한 CPU의 도움을 받아야만 가능한 일이다. 함수 호출은 소프트웨어 종속적인 기능으로 생각할 수 있지만 사실은 하드웨어 종속적인 부분이 상당수 존재한다. 함수 호출 과정에서 할당되는 메모리 블록을 스택 프레임이라고 한다. 함수 호출이 완료되면 기존에 선언된 지역변수에 접근이 불가능하다. 이는 할당되었던 메모리가 반환되었음을 의미하는 것이다. 지역변수를 위한 메모리 공간을 스택이라 이름붙인 이유는 메모리의 구조적 특성 때문이다. 가장 먼저 할당되면, 가장 나중에 반환된다. 계속해서 스택에 데이터를 쌓거나 반환하기 위해서는 현재 어느 위치까지 데..
IX : 스케줄링 알고리즘과 우선순위
IX : 스케줄링 알고리즘과 우선순위 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 프로세스의 스케줄링 우리가 접하는 대부분의 운영체제는 멀티 프로세스 기반 운영체제이다. 하나의 프로그램이 실행되기 위해서는 하나의 CPU 코어가 필요한데, 프로세스 수만큼 CPU 코어가 존재할 수 있다면 가장 이상적일 것이다. 하지만 우리의 CPU 코어는 제한되어 있고, 웬만한 범용 OS에서 백그라운드 프로세스 개수만 해도 수십개가 넘어간다. 따라서 스케줄러라는 기능이 등장하게 된다. 실행 중인 모든 프로세스들에게 골고루 CPU 코어를 할당해주는 것이다. RTOS RTOS와 일반 OS의 차이는 응답성에 있다. RTOS는 응답성이 Windows와 같은 일반 OS보다 좋다. 단, 이는 결코 RTOS..
VIII : 프로세스간 통신 (IPC) 2
VIII : 프로세스간 통신 (IPC) 2 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 핸들 테이블과 오브젝트 핸들의 상속 유능한 윈도우 프로그래머는 프로세스 핸들 테이블이 어떻게 관리되는지를 이해하고 있어야 한다는 Jeffrey Richter의 말이 있듯이, 핸들 테이블에 대한 이해는 IPC 를 알기 위한 필수 요소이다. 핸들은 그저 단순한 정수값인데, 이를 가지고 커널 모드에 있는 커널 오브젝트에 접근할 수 있는 이유는 무엇일까? 이는 프로세스 핸들 테이블이 있기 때문이다. 핸들 테이블은 핸들 정보를 저장하고 있는 테이블로서, 프로세스별로 독립적이다. CreateProcess() 함수를 호출하면 새로운 자식 프로세스가 생성된다. 이 때 BOOL bInheritHandles..
VII : 프로세스간 통신 (IPC) 1
VII : 프로세스간 통신 (IPC) 1 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 프로세스간 통신 (IPC) 의 의미 만일 서로 통신하고자 하는 프로세스가 서로 만날 수 있는 여건, 즉 공유 메모리 등이 존재한다면 프로세스간 통신은 매우 쉬워진다. 하지만, 이러한 여건이 되지 않는다면 보조 수단이 필요하다. 프로세스들은 모두 가상 메모리 시스템 내에서 자신만의 메모리 주소 체계를 가지므로, 서로의 메모리에 쉽게 접근할 수 없다. 이는 프로세스간 메모리 침범을 막아 안정성을 높이기 위함이다. 메일슬롯 방식의 IPC 메일슬롯은 파이프와 더불어 대표적인 IPC 기법이다. 메일슬롯은 편지를 넣을 수 있는 가느다란 우체통의 입구를 의미한다. 즉, 메일슬롯의 기본 원리는 데이터를 주..
VI : 커널 오브젝트와 오브젝트 핸들
VI : 커널 오브젝트와 오브젝트 핸들 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 커널 오브젝트에 대한 이해 커널이란 컴퓨터를 운영하는 데 있어서 중심이 되는 운영체제 핵심 부분을 뜻한다. 커널이라는 용어와 운영체제라는 용어는 같은 의미로 쓰이기도 한다. 커널 오브젝트는 커널 메모리 영역에서 관리되는 중요한 정보를 담아둔 데이터 블록을 의미한다. 운영체제가 프로세스를 관리하기 위해서는 프로세스에 관련된 몇몇 정보를 저장할 수 있어야 하고, 참조 및 변경도 가능해야 한다. 따라서 이러한 내부적인 구조체를 생성하고 관리에 필요한 데이터로 초기화하여 커널메모리에서 관리하는데, 이것이 커널 오브젝트이다. 프로세스가 생성될 때에만 커널 오브젝트가 생기는 것이 아닌, 스레드를 생성할 ..
V : 프로세스의 생성과 소멸
V : 프로세스의 생성과 소멸 뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;) 프로세스의 이해 오늘날의 운영체제는 멀티프로세스 운영체제로서, 프로세스가 여러개 존재할 수 있는 운영체제이다. 프로세스란 실행 중 상태에 있는 프로그램을 의미하며, 프로그램을 실행하는 순간 메모리의 할당이 이루어지고, 이 메모리 공간으로 프로그램의 바이너리 코드가 올라가게 된다. 이 순간 이 메모리와 프로그램의 인스턴스에 대한 정보를 가지는 집합을 프로세스라고 한다. 메모리 공간은 여러 영역으로 나뉠 수 있다. Data 영역 : 전역변수나 static 변수의 할당을 위해 존재하는 영역 Stack 영역 : 지역변수 할당이나 함수 간 호출에 따른 계층 및 파라미터 저장 영역 Heap 영역 : 동적 할당을 ..