운영체제의 프로세스의 상태
- New: 프로세스가 생성된 상태
- Ready: CPU에 실행되기 위해 기다리는 상태
- Running: CPU 스케줄러에 의해 실행되고 있는 상태
- Running 상태에 있는 프로세스는 주어진 Time-Slice시간을 사용하면 다시 Ready상태로 되돌아감
- Waiting: I/O 작업이나 이벤트를 기다릴 때 동안의 상태, 작업이 완료되면 다시 Ready상태로 되돌아감
- Terminated: 프로세스가 더 이상 사용되지 않을 때의 상태
CPU 스케줄러(Scheduler)
- 위 다이어그램에서 Running 상태가 끝나고 다른 프로세스를 선택하는 역할
- Ready Queue에서 다음에 실행될 프로세스를 선택
*Ready Queue: Ready상태에 있는 프로세스들을 모아놓은 Queue
CPU 디스패처(Dispatcher)
- CPU 스케줄러에 의해 선택된 프로세스를 CPU에 할당하는 역할
디스패처의 역할
- 현재 Running 상태에 있는 프로세스와 스케줄러를 통해 선택된 프로세스를 컨텍스트 스위칭(Context Switching)
- 컨텍스트 스위칭이 이루어지는 커널 모드(Kernel Mode)와 유저 모드(User Mode)의 전환
- 선택된 프로세스가 어디서 부터 실행될지 적절한 위치로 이동시키는 역할
스케줄러의 선점 방식
- 스케줄러의 선점 방식에는 Nonpreemptive Scheduling, preemptive Scheduling이 존재
Nonpreemptive Scheduling
- 직역하면 비선점 스케줄링
- 프로세스가 자발적으로 Running상태를 벗어나고 다른 프로세스에게 점유권을 양보할 때를 말함
- 프로세스가 Running 상태에서 Terminated, Ready, Waiting 상태로 옮겨가는 것은
운영체제의 강제적인 개입 없이 진행될 수 있기 때문에 비선점 스케줄링이라고 불림
- 프로세스가 Running 상태에서 Terminated, Ready, Waiting 상태로 옮겨가는 것은
- 장점: 프로그램들의 자체적으로 협력적으로 일어날 수 있기 때문에 Cooperative(협력적)
- 단점: 느린 응답성
Preemptive Scheduling
- 직역하면 선점 스케줄링
- 기본적으로 Nonpreemptive Scheudling의 역할을 포함하고 강제적으로 운영체제가 개입하는 상황이 추가됨
- Running 되고 있는 프로세스가 CPU의 Time-Slice시간을 모두 사용했다면,
운영체제가 개입하여 Ready Queue에 해당 프로세스를 Ready 상태로 변경해야함 - 우선순위에 따라서 Running되는 프로세스를 강제적으로 Ready 상태로 바꾸는 스케줄러의 개입
- Running 되고 있는 프로세스가 CPU의 Time-Slice시간을 모두 사용했다면,
- 장점: 적극적, 강제적, 빠른 응답성
- 단점: 데이터 일관성 이슈
스케줄링 알고리즘
FCFS(First-Come, First-Served)
- 먼저 도착한 순서대로 처리
- 기존 Queue와 동일한 방식
SJF(Shortest-Job-First)
- 프로세스의 다음 CPU Burst가 가장 짧은 프로세스부터 차례로 실행
SRTF(Shortest-Remaining-Time-First)
- 남은 CPU Burst가 가장 짧은 프로세스부터 실행
- SJF를 실행하는 동안 더 짧은 새로운 프로세스가 들어올 것을 대비한 알고리즘
Priority
- 우선순위가 높은 프로세스부터 실행
RR(Round-Robin)
- 멀티 태스킹 방식으로 가장 유사한 방식
- Time-Slice로 나누어진 CPU 시간을 번갈아가면서 실행
Multilevel Queue
- 비슷한 방식의 프로세스들을 그룹화해서 그룹마다 큐를 두는 방식