운영체제는 프로세스 제어 블록(PCB)을 이용해서 프로세스들을 관리한다.
PCB는 메모리에 존재하며 상태에 따라 Ready 큐 또는 Event 큐(대기큐)에서 관리된다.
이번 포스트에서는 프로세스 큐와 Swap에 대해 알아본다.
Multiple Blocked Queues
각 큐(Queue)에는 PCB가 들어가 있으며, 큐는 Linked List로 구현
즉, PCB에 Linked List를 구현하기 위한 포인터 멤버(Next
,Prev
)가 존재
Ready Queue
Ready
상태에 있는 프로세스만 모아둔 큐
- Scheduler가 Ready 큐에서 최우선순위 프로세스를 선택
- 선택된 프로세스를 Dispatch해서 processor(CPU)가 실행
Blocked(Wating or Event) Queue
- 대기큐
Blocked
상태에 있는 프로세스만 모아둔 큐
- 각각의
Device driver
에 존재하는 큐키보드
,디스크
,네트워크
,타이머
,세마포어
등에 대기큐가 존재I/O 함수
등을 호출하면 Blocked 상태가 되며 PCB를 해당 장치의 대기큐로 이동시킴- 데이터가 들어오면
Device driver내의 함수
는 대기큐에서 해당 PCB 찾고 대기큐에서 제거 후Ready Queue
에 넘겨줌 -> 이때 해당 프로세스의 상태를 Ready 상태로 변경
Swap out
Swap in
✍️ 프로세서(CPU)는 입출력보다 빠르다.
- 메모리에 있는 모든 process가 I/O를 대기하며 CPU는 idle 상태가 될 수 있음
✍️ 더 많은 메모리 확보를 위해
Swap
이 필요하다.
- 장시간 대기상태의 프로세스를 디스크의 별도의 swap 영역으로 빼냄
- 메모리에는 다른 프로세스를 넣어 실행함
swap out
된 프로세스는 Blocked -> Suspend 상태로 변경swap in
된 프로세스는 Suspend -> Ready 상태로 변경