본문 바로가기

운영체제/[ecourse] Windows Programming25

6-2-1. Semaphore 실습 배운 이론을 실습하는 과정 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; HANDLE hSemaphore = INVALID_HANDLE_VALUE; int totalCount = 0; UINT threadProc(void* p) { totalCount++; int count = totalCount; WaitForSingleObject(hSemaphore, INFINITE); printf("Start Routine %d!\n", count); Sleep(3000); printf("End Routine %d!\n", count); ReleaseSemaphore(hSemaphore,.. 2022. 9. 20.
6-2. 동기화 개념과 Critical Section Critical Section n개의 쓰레드가 공통적인 변수(정적 혹은 전역)를 조작할 때 이 조작하는 공간은 1개의 쓰레드만 지나가야 한다 라고 정해놓은 게 임계영역(Critical Section)이다. 여러 흐름이 일렬로 지나가는 것이므로 직렬화 (Serialize) 된다고도 얘기한다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; CRITICAL_SECTION cs; UINT __stdcall foo(void* p) { static int n = 0; EnterCriticalSection(&cs); //n = 100; //임계영역 (Critical Section) LeaveCritical.. 2022. 9. 20.
6-1. Thread Basic 쓰레드란? 프로세스 안에서 코드를 실행하는 실행 흐름 프로세스를 만들면 기본적으로 주 스레드 1개가 만들어짐 스레드도 관리 대상이므로 TKO (쓰레드 커널 오브젝트)가 만들어짐 ※ 프로세스에 대한 부연설명 - 프로세스 가상 주소공간에는 다양한 모듈(실행파일, DLL)이 올라와 있음 - 프로세스를 만들면 OS가 PKO (프로세스 커널 오브젝트)로 관리 - 프로세스는 가상 주소공간 + PKO로 구성됨 - 프로세스는 정적인 존재 쓰레드를 만들면? 스택과 TKO가 만들어짐 쓰레드는 동적인 존재 (왜냐하면 직접 코드를 실행하는 실행 흐름이므로) 쓰레드와 병렬 실행 쓰레드는 주 쓰레드 외에 추가로 더 만들 수 있다. CPU가 2개가 있을 땐 2개의 쓰레드를 동시에 실행 가능 CPU가 2개 있을 때 4개의 쓰레드를 .. 2022. 9. 20.
5-4. Stack Memory 스택이란? 지역 변수, 매개 변수를 주로 보관하는 메모리 스택의 특징 스레드 당 한 개의 스택 생성(프로세스는 생성 시 1개의 주스레드를 가짐) 스택은 아래로 자란다 (높은 주소에서 낮은 주소 방향으로 커짐) 스택의 동작 방식 스레드가 만들어지면 1M 가상 공간을 예약한다. 그리고 1개를 확정해 놓고 다음 페이지도 같이 확정하는데 다음 페이지는 확정 시 PAGE_GUARD 보안 옵션을 같이 걸어놓음 PAGE_GUARD는 최초 접근 시 예외를 발생시키는 옵션 (윈도우가 처리) 그래서 현재 페이지를 다 쓰고 다음 페이지에 접근하면 예외가 발생하고 그 시점에서 다시 다음 페이지를 PAGE_GUARD 옵션으로 할당한다. 1M는 총 256페이지를 일컫는데, 곧 0~255개의 페이지를 의미한다. 253번까지 확정하.. 2022. 9. 19.