개요
프로그램은 정적인 것으로 디스크에 존재한다. 프로세스는 현재 프로그램의 running instance를 말한다. 프로세스는 한 머신에 여러개가 동시에 존재할 수도 있다. 또한 프로세스는 스케쥴링의 대상이기도 하다. 프로세스는 프로그램에 더하여 추가적인 머신에서 돌리기 위한 정보또한 필요한다. 즉 프로그램은 static이고 프로세스는 dynamic하다는 차이가 존재한다. 커널은 프로세스관리를 위하여 PCB와 같은 자료구조를 유지한다. 프로세스는 create, destory, context, 그리고 state transition을 가지고 커널에 의해 처리된다.
Abstraction of machine
Context
Context에는 system context(kernel data structure), user context(stack, heap,...) 그리고 H/W context(registers)와 같은 것들이 포함된다.
Context chaning에서 Memory I/O state, Process creation, Sharing Overhead는 높은 overhead를 가진다. 스레드와는 다르게 높은 수준의 protection을 제공하기 때문이다.
PCB
프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다. 작업 제어 블록(Task Control Block, 줄여서 TCB) 또는 작업 구조라고도 한다. "PCB는 운영 체제가 프로세스를 표현한 것이다. PCB에서 자세히 참조.
프로세스 State
커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있으며 커널은 이것들을 이용하여 프로세스의 상태를 관리한다.
- 생성(create) : 프로세스가 생성되는 중이다.
- 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
- 준비(ready) : 프로세스가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기다리고 있다. 일반적으로 준비 상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받는다.
- 대기(waiting) : 보류(block)라고 부르기도 한다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
- 종료(terminated) : 프로세스의 실행이 종료되었다.
Context Switch
하나의 프로그램이 실행되면 그 프로그램에 대응되는 프로세스가 생성되어 준비 리스트의 끝에 들어간다. 준비 리스트 상의 다른 프로세스들이 CPU를 할당받아 준비 리스트를 떠나면, 그 프로세스는 점차 준비 리스트의 앞으로 나가게 되고 언젠가 CPU를 사용할 수 있게 된다.
- 디스패치(dispatch)
- 준비 리스트의 맨 앞에 있던 프로세스가 CPU를 점유하게 되는 것, 즉 준비 상태에서 실행 상태로 바뀌는 것을 디스패치라고 하며 다음과 같이 표시한다.
dispatch (processname) : ready → running
- 보류(block)
- 실행 상태의 프로세스가 허가된 시간을 다 쓰기 전에 입출력 동작을 필요로 하는 경우 프로세스는 CPU를 스스로 반납하고 보류 상태로 넘어 간다. 이것을 보류라고 하며 다음과 같이 표시한다.
block (processname) : running → blocked
- 깨움(wakeup)
- 입출력 작업 종료 등 기다리던 사건이 일어났을 때 보류 상태에서 준비 상태로 넘어가는 과정을 깨움이라고 하며 다음과 같이 표시한다.
wakeup (processname) : blocked → ready
- 시간제한(timeout)
- 운영체제는 프로세스가 프로세서를 계속 독점해서 사용하지 못하게 하기 위해 clock interrupt를 두어서 프로세스가 일정 시간동안만 (시분할 시스템의 time slice) 프로세서를 점유할 수 있게 한다
timeout(processname) : running -> ready