간단히 말해서 프로세스는 실행중인 프로그램이다.

OS는 여러 프로세스의 동작을 제어한다. (Time sharing)

아주잠깐동안 process1을 실행시켰다가 바로 process2를 조금 실행, 이를 반복하는 방식이다.

어느 프로세스를 어떤 순서로 실행시킬 지는 OS의 scheduling policy에 의해 결정된다.

 

OS는 프로세스를 관리 하기 위해 다음과 같은 API를 제공한다.

1. 생성 (Create)

2. 제거 (Destory)

3. 대기 (Wait)

4. 각종 제어 (Miscellaneous Control)

5. 상태 (Status)

 

OS는 프로그램 실행을 위해 프로세스의 코드와 정적 데이터를 메모리에 탑재(load) 한다. 이 때 페이징 (paging)과 스와핑(swapping) 등의 기술이 사용된다.

OS는 프로세스를 위한 일정량의 메모리를 run-time stack용도로 할당해준다. heap을 위한 메모리 영역도 할당해준다.

 

프로세스의 상태(state)에는 크게 다음의 세가지로 나눌 수 있다.

1. 실행 (Running)

2. 준비 (Ready)

3. 대기 (Blocked)

 

각 state는 다음과 같이 전이된다.

 

Blocked state는 주로 프로세스가 입출력을 할 때나 패킷을 받아올 때 설정되는 state이다.

Ready state는 프로세스가 실행될 준비를 마친 상태이다.

Running state는 프로세스가 OS에 의해 실행되고 있는 상태이다.

 

OS는 여러 프로세스의 state를 잘 조정하여 이들을 실행시킨다.

 

OS도 일종의 프로그램이기에 여러 프로세스를 관리하는 process list와 같은 자료구조를 가진다.

 

 

여기에서 보면 proc_state 중에 Sleeping, Runnable, Running 외에도 세개가 더 있는 것을 볼 수 있다.

초기(initial) 상태를 가지는 시스템도 있다.

프로세스는 종료되었지만 메모리에 남아있는 final state도 존재한다.

UNIX 기반 시스템에서는 이를 zombie state라 부른다.

이 상태는 프로세스가 성공적으로 실행되었는지 확인하는데 유용하다.

'Operating Systems: Three Easy Pieces' 카테고리의 다른 글

07 CPU Scheduling (1)  (1) 2018.10.16
06 Direct Execution  (0) 2018.10.15
[Operating Systems: Three Easy Pieces] 책소개  (0) 2018.10.15
05 Process API  (1) 2018.10.03
02 Introduction  (0) 2018.09.29

+ Recent posts