본 자료는 인하대학교 정진만 교수님의 Operating System 강의 자료를 참고하여 제작되었습니다.
Process
Process는 코드 실행 단위이다.
디스크에서는 Data, Code가 저장되고, 메모리에서는 Stack, Data, Code가 저장된다.
Process Control Block (PCB)
Process를 설명하는 자료구조이다.
- Process ID(PID): process identifier
- Parent Process ID(PPID): 해당 process를 만든 부모의 ID
- Process State: 현재 process 상태 (e.g.,
READY,RUNNING,BLOCKED) - Memory Pointer: process가 저장되어 있는 메모리 주소
- Execution Context: 모든 process register가 저장되어 있는 임시 저장소
Execution Context
필요한 이유
- Multi-process를 수행하기 위해 필요함.
- 하드웨어에서의 실행 상태를 저장함.
저장하는 것
Process Switch를 대비하기 위해, 모든 register 정보를 저장한다.PC,SP,PSW, etc.
Process List
PCB의 집합
보통 상태별로 나눠서 저장한다.
red-black tree로 저장하고 linked list로 관리한다.
- Current Process
- Ready Queue
- Blocked Queue
Process Image
Process Image는 process가 실행할 때 메모리에 올라와 있는 전체 모습이다.
비슷하게 docker image라 생각하면 될 듯하다.
보통 저장하는 것
- User Data
- User Program
- Stack
- Process Control Block
Status Changes
Mode Switch
- Timer Interrupt, System Call(I/O request), or Exception
Process Switch
작동하는 대표 경우
- 현재 프로세스가 종료
- 현재 프로세스를 대기
- 타임 슬라이드 다 씀
- 더 우선순위가 높은 프로세스 등장
작동 과정
- Save all the execution context
- Run another process
- 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을 설명하려고 만든 더 현실적인 모델이다.