개인 공부/윈도우즈 시스템 프로그래밍

05: 프로세스 생성과 소멸

chaeD2 2022. 5. 30. 18:56

1. 프로세스의 이해

프로세스란 메인 메모리로 이동하여 실행 중에 있는 프로그램이다.

프로세스는 Data/Stack/Heap/Code영역으로 이루어진 메모리 구조와 Register Set으로 구성되어 있다. 메모리 구조는 프로세스 개수만큼 생성된다. Register는 현재 실행 중인 프로그램을 위한 데이터들로 채워지며, CPU 내에 존재한다.

우리가 사용하는 Windows를 멀티 프로세스 운영체제라고 한다.

 

 

2.1 프로세스의 스케줄링

하나의 CPU가 여러 개의 프로세스를 번갈아 가며 실행한다. 프로세스의 CPU 할당 순서와 방법을 결정짓는 일을 스케줄링이라고 하며, 스케줄링 알고리즘을 통해 수행된다.

운영체제는 스케줄러를 통해 A 프로세스가 I/O 일을 할 동안 다른 프로세스가 실행되도록 스케줄링 한다. 결국 실행되어야 할 다수의 프로세스가 존재한다면 CPU에게 쉴 틈이 주어지지 않는 셈이다.

 

2.2 프로세스의 상태 변화

Ready, Running, Blocked - 프로세스가 생성되어 소멸되기까지의 상태 변화.

Ready 상태에 있는 프로세스는 CPU에 의해 실행되기를 희망하는 상태이다. 스케줄러에 의해 관리되며, 선택된 프로세스는 CPU에 의해 실행된다.

프로세스들은 우선순위가 있다. 실행 중이어도 우선순위가 높은 프로세스가 새로 생성되면 잠시 Ready 상태가 되며, 우선순위가 높은 프로세스의 종료 또는 양보를 기다린다.

Ready 상태는 스케줄러에 선택되면 바로 실행이 가능한 상태이고, Blocked 상태는 스케줄러에 의해 선택될 수 없는 상태이다.

i/o에 상당 시간을 소모하므로 둘 이상의 프로세스 실행을 통해 CPU의 활용도를 높여 성능 향상을 가져온다.

 

 

3. 컨텍스트 스위칭

실행 중인 프로세스의 변경 과정에서 발생되는 컨텍스트 스위칭은 시스템에 많은 부하를 준다. 현재 실행 중인 프로세스의 데이터가 담겨 있는 레지스터의 저장 및 복원이 빈번하게 일어나므로.

프로세스 A가 Running 상태에서 Ready 상태로 갈 때, 프로세스 A 관련 레지스터 정보는 메모리에 저장되고, Ready에서 Running이 된 프로세스 B의 관련 레지스터 정보는 CPU의 레지스터에 복원되는 것.

 

 

4. 프로세스의 생성

프로그램 실행 중에 또 하나의 프로세스 생성이 가능하다. Windows가 제공하는 CreateProcess 함수를 통해 프로세스 생성이 가능하다.

https://docs.microsoft.com/ko-kr/windows/win32/procthread/creating-processes

 

프로세스 만들기 - Win32 apps

CreateProcess 함수는 만들기 프로세스와 독립적으로 실행되는 새 프로세스를 만듭니다. 그러나 간단히 하기 위해 관계를 부모-자식 관계라고 합니다.

docs.microsoft.com

자식-부모 프로세스 관계가 형성된다.