본 자료는 인하대학교 정진만 교수님의 Operating System 강의 자료를 참고하여 제작되었습니다.
Process
Process는 코드 실행 단위이다.
디스크에서는 Data, Code가 저장되고, 메모리에서는 Stack, Data, Code가 저장된다.
Process Control Block(PCB)
Process를 설명하는 자료구조이다.
| 항목 | 의미 |
|---|---|
| Process ID(PID) | process identifier이다. |
| Parent Process ID(PPID) | 해당 process를 만든 부모 process의 ID이다. |
| Process State | 현재 process 상태를 저장한다. 예: READY, RUNNING, BLOCKED |
| Memory Pointer | process가 저장되어 있는 메모리 주소를 저장한다. |
| Execution Context | process switch를 위해 모든 process register 값을 저장한다. |
Execution Context
Multi-process를 수행하기 위해 필요하다.
하드웨어에서의 실행 상태를 저장하며, Process Switch를 대비해 PC, SP, PSW 등 register 정보를 저장한다.
Process List
PCB의 집합
보통 상태별로 나눠서 저장한다.
red-black tree로 저장하고 linked list로 관리한다.
- Current Process: 현재 CPU에서 실행 중인 process이다.
- Ready Queue: CPU만 받으면 실행 가능한 process 목록이다.
- Blocked Queue: I/O나 이벤트 완료를 기다리는 process 목록이다.
Process Image
Process Image는 process가 실행할 때 메모리에 올라와 있는 전체 모습이다.
비슷하게 docker image라 생각하면 될 듯하다.
| 구성 요소 | 의미 |
|---|---|
| User Data | process가 사용하는 데이터 영역이다. |
| User Program | 실행할 프로그램 코드 영역이다. |
| Stack | 함수 호출, 지역 변수, return address 등을 저장한다. |
| Process Control Block | process 제어 정보를 저장한다. |
상태 변화
Mode Switch
- Timer Interrupt
- System Call(I/O request)
- Exception
Process Switch
작동하는 대표 경우는 다음과 같다.
- 현재 프로세스가 종료된다.
- 현재 프로세스가 대기 상태로 이동한다.
- time slice를 모두 사용한다.
- 더 높은 우선순위의 프로세스가 등장한다.
작동 과정은 다음과 같다.
- execution context를 저장한다. (
Save all) - 다른 process를 실행한다.
- 저장된 context를 복구한다. (
Restore all)
Two-State Process Model
Not running, Running 두 상태만 존재
+--- Dispatch ---+
| |
+--------------+-----v---+
Enter-->| Not running | Running |--> Exit
+---^----------+---------+
| |
+---- Pause -----+
Five-State Process Model
New, Ready, Running, Blocked, Exit 상태가 존재
Admit
+------------------+
| v
+------+ +---------+
Enter -->| New | ------> | Ready |
+------+ +----+----+
|
| Dispatch
v
+-----+-----+
| Running |
+--+-----+--+
| |
Time slice over | | I/O, wait, sleep
or preemption | v
| +--+------+
+--| Blocked |
+--+------+
|
| Event complete
v
Ready
Running -------------------------------> Exit
terminate
상태 의미:
| 상태 | 의미 |
|---|---|
| New | 프로세스가 생성되었지만 아직 메모리에 완전히 올라오지 않은 상태이다. |
| Ready | CPU만 받으면 바로 실행 가능한 상태이다. |
| Running | 현재 CPU를 사용 중인 상태이다. |
| Blocked | I/O, 입력, sleep 같은 이벤트가 끝나길 기다리는 상태이다. |
| Exit 또는 Terminated | 실행이 종료된 상태이다. |
주요 전이:
| 전이 | 의미 |
|---|---|
| New -> Ready | OS가 프로세스를 메모리에 올린다. |
| Ready -> Running | dispatcher가 CPU를 할당한다. |
| Running -> Ready | time quantum이 끝나거나 더 높은 우선순위 프로세스가 등장한다. |
| Running -> Blocked | I/O 요청 등으로 기다려야 한다. |
| Blocked -> Ready | 기다리던 이벤트가 완료된다. |
| Running -> Exit | 프로세스가 종료된다. |
Seven-State Process Model
메모리가 부족할 때 프로세스를 디스크로 내보내는(swap out) 상황까지 고려한 모델이다.
추가 상태는 Ready Suspended, Blocked Suspended이다.
+------------------+
| Admit |
v
+------+
| New |
+--+---+
|
v
+----+----+
| Ready |<-------------------+
+----+----+ |
| Dispatch |
v |
+----+----+ |
| Running | |
+--+---+--+ |
| | |
time slice over | | I/O request |
or preempt | v |
| +----+-----+ |
+>| Blocked |-------------+
+----+-----+ Event done
|
| swap out
v
+---------+----------+
| Blocked Suspended |
+---------+----------+
|
Event done | swap in before ready
v
+---------+----------+
| Ready Suspended |
+---------+----------+
|
| swap in
v
Ready
Running -------------------------------> Exit
좀 더 보기 쉽게 swap 경로만 따로 쓰면:
Ready <--> Ready Suspended
Blocked <--> Blocked Suspended
의미:
- Ready Suspended: 실행 준비는 됐지만 메모리에서 쫓겨나 디스크에 있다.
- Blocked Suspended: 기다리는 중인데 메모리에서도 빠져나가 있다.
예를 들어:
A: Blocked (디스크 읽기 기다림)
메모리 부족
→ A를 디스크로 swap out
→ Blocked Suspended
나중에 디스크 읽기 완료
→ Ready Suspended
메모리에 다시 올라오면
→ Ready
→ Running
five-state와 seven-state의 핵심 차이는 다음과 같다.
| 모델 | 핵심 가정 |
|---|---|
| Five-state | 프로세스는 항상 메모리에 있다고 가정한다. |
| Seven-state | 메모리가 부족하면 프로세스를 디스크로 내릴 수 있다고 가정한다. |
즉 seven-state는 virtual memory나 swapping을 설명하려고 만든 더 현실적인 모델이다.