프로세스(Process)란 실행 중에 있는 프로그램을 의미한다. 하드디스크에 존재하는 특정 프로그램에 대해서 실행을 요청한 경우, 이 프로그램의 바이너리 코드들이 메모리에 적재되어 명령어를 실행하게 되는데 이를 프로세스라 한다.
프로세스 구성요소
- 메모리 구조 : 프로그램의 실행으로 생성되는 프로세스에 대해 제공되는 메모리 공간은 다음과 같이 나뉜다.
。Data 영역 : 전역변수나 static 변수의 할당을 위한 영역
。Stack 영역 : 지역변수 할당과 함수 호출 시 전달되는 인자값들의 저장을 위한 영역
。Heap 영역 : 동적 할당(malloc, calloc, new에 의한 할당)을 위한 영역
。Code 영역 : 실행파일을 구성하는 명령어들이 올라가는 메모리 영역
- Register Set : 프로세스를 구성하는 요소로 더불어 생각해봐야 하는 것은 CPU 내에 존재하는 레지스터들이다. 프로그램 실행을 위해서는 레지스터들이 절대적으로 필요하다.
프로세스의 스케줄링과 상태 변화
기본적으로 CPU는 한 순간에 하나의 프로그램만 실행 가능하다. 하나의 CPU가 여러 개의 프로세스를 번갈아 가면서 실행한다. 다행히도 CPU는 아주 빠르기 때문에 하나의 CPU가 여러 프로세스를 고속으로 번갈아 가며 실행시킬 경우, 프로그램 사용자들은 CPU가 동시에 여러 개의 프로그램을 실행시킨다고 느끼게 된다.
- 프로세스의 스케줄링(Scheduling) : 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일을 스케줄링이라고 하며, 이때 사용되는 알고리즘을 가리켜 스케줄링 알고리즘(Scheduling Algorithm)이라 한다. 또한 스케줄링 알고리즘을 적용해서 실제로 프로세스를 관리하는 운영체제 요소(모듈)를 가리켜 스케줄러(Scheduler)라 한다.
실행해야 할 프로세스가 여럿 존재한다면 멀티 프로세스는 모든 프로세스를 일단 실행시킨 후 운영체제의 스케줄러에 의해 실행 시간 및 실행권한을 부여받는다. 일반적으로 프로그램은 많은 시간을 I/O에 할애하기 때문이다. 프로세스가 I/O를 수행하는 동안에는 CPU를 사용하지 않으므로 이 시간에 다른 프로세스를 활성화 시킨다.
이를 수행하는 CPU의 속도는 인간이 인지하는 속도보다 빠르기 때문에 사용자는 여러 개의 프로세스를 동시에 실행하는 것과 같은 효과를 누릴 수 있다.
프로세스의 상태 변화
S(Start) : 프로그램의 실행으로 인한 프로세스의 실행단계를 말한다. CPU의 실행권한을 가지며 프로세스에 존재하는 명령어를 처리한다. 프로세스는 생성과 동시에 Ready 상태로 들어가며 CPU의 실행권한을 얻기위해 작업큐에서 대기하게 된다. 이는 스케줄러에 의해 처리되며 스케줄링 알고리즘에 의해 실행권한을 획득한 프로세스는 Running 상태가 되며 실행권한을 빼앗긴 프로세스는 Ready 상태로 들어간다.
Runnimg -> Blocked : 실행 중에 있는 프로세스가 실행을 맘추는 상태(Blocked)로 들어간다. I/O 에 관련된 작업을 처리할 경우에 스케줄러는 Blocked 상태로 프로세스를 내리고 Ready 상태인 프로세스 중 하나를 실행시킨다.
Blocked -> Ready : Blocked 상태는 스케줄러에 의해서 선택될 수 없다. 스케줄러에 의한 관리대상에 해당하지 않기 때문이다. 따라서 Blocked 에 있는 프로세스는 다시 실행되기 위해 일단 Ready 상태로 들어가야만 한다.
Blocked -> E(Exit) : 프로세스를 종료시킬 경우 Blocked 상태를 거쳐 E(Exit)상태로 간다.
컨텍스트 스위칭(Context Switching)
CPU 내에 존재하는 레지스터들은 현재 실행 중에 있는 프로세스 관련 데이터들로 채워져있다. 스케줄러에 의해 실행중인 프로세스가 변경되면 CPU 내의 존재하는 레지스터들은 해당 프로세스의 데이터를 담아야 한다. 이런 일련의 데이터 변환 작업을 컨텍스트 스위칭이라고 한다.
실행되는 프로세스의 변경과정에서 발생하는 컨텍스트 스위칭은 레지스터 갯수가 많을수록, 프로세스별로 관리되어야 할 데이터 종류가 많을수록 시스템에 많은 부담을 준다.
'Programming > Windows System' 카테고리의 다른 글
[Windows System] 프로세스간 통신(IPC) 기법_메일슬롯(MailSlot) 방식 (0) | 2011.01.22 |
---|---|
[Windows System] 커널 오브젝트(Kernel Objects)_0x01 (0) | 2011.01.22 |
[Windows System] 프로세스 생성함수_CreateProcess() (0) | 2011.01.22 |
[Windows System] 64비트 기반 프로그래밍 (0) | 2011.01.22 |
[Windows System] 문자셋 (Character Sets) (0) | 2011.01.22 |