CPU를 잘 사용하기 위해 프로세스를 배정하는 방법으로 오버헤드와 기아현상을 낮추고, 사용률을 높여야한다.
선점/비선점 스케쥴링
선점 스케줄링
OS가 CPU의 사용권을 선점할 수 있는 경우, 강제 회수하는 경우(처리시간 예측 어려움)
- Priority Scheduling
- 정적/동적으로 우선순위를 부여하여 우선순위가 높은 순서대로 처리
- 우선순위가 낮은 프로세스가 무한정 대기하는 Starvation이 생길 수 있음
- Aging 방법으로 Starvation 문제 해결 가능
- Round Robin
- FCFS에 의해 프로세스들이 보내지면 각 프로세스는 동일한 시간의 Time Quantum(실행의 최소 단위 시간)만큼 CPU를 할당받음
- 할당 시간이 크면 FCFS와 같게 되고, 작으면 Context Switching이 잦아져서 오버헤드 증가
- Multilevel-Queue (다단계 큐)
- 작업을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 기법
- 우선순위가 낮은 큐들이 실행 못하는 것을 방지하고자 각 큐마다 다른 Time Quantum을 설정해주는 방식 사용
- 우선순위가 높은 큐는 작은 Time Quantum 할당, 우선순위가 낮은 큐는 큰 Time Quantum 할당
- Multilevel-Feedback-Queue (다단계 피드백 큐)
- 다단계 큐에서 자신의 Time Quantum을 다 채운 프로세스는 밑으로 내려가고 자신의 Time Quantum을 다 채우지 못한 프로세스는 원래 큐 그대로 유지한다.
- 짧은 작업에 유리하고 입출력 위주 작업에 우선권을 준다.
- 처리시간이 짧은 프로세스를 먼저 처리하기 때문에 Turnaround 평균 시간을 줄여준다.

비선점 스케줄링
비선점 : 프로세스 종료 또는 I/O 등의 이벤트가 있을 때까지 실행 보장(처리시간 예측 용이함)
- FCFS (First Come First Served)
- 큐에 도착한 순서대로 CPU 할당
- 실행시간이 짧은 작업이 뒤쪽에 할당되면 평균 대기 시간이 증가함
- SJF (Shortest Job First)
- 수행시간이 가장 짧다고 판단되는 작업을 먼저 수행
- FCFS보다 평균 대기 시간 감소, 짧은 작업에 유리
- HRN (Highest Response-ratio Next)
- 우선순위를 계산하여 점유 불평등을 보완한 방법 (SJF의 단점 보완)
- 우선순위 = (대기시간 + 실행시간) / (실행시간)
CPU 스케줄링 척도
- Response Time
- 작업이 처음 실행되기까지 걸린 시간
- Turnaround Time
- 실행시간과 대기시간을 모두 합한 시간으로 작업이 완료될 때까지 걸린 시간
프로세스의 상태

프로세스의 상태는 실행(Running), 준비(Ready), 봉쇄(Blocked || Waiting || Sleep) 세 가지로 분류됩니다.
- new : 프로세스 생성 상태
- ready : 프로세스 할당 대기 상태
- running : 프로세스의 명령어를 실행 중인 상태
- waiting : 프로세스가 어떠한 이벤트가 일어나는 것을 기다리는 상태
- terminated : 프로세스가 종료된 상태
- Admitted [생성 → 준비] : 준비 큐가 비어있을 때 작업 스케줄러에 의해 실행
- Dispatch [준비 → 실행] : 스케줄러에 의해 준비 큐 맨 앞에 있는 프로세스에게 CPU를 할당
- Blocked [실행 → 대기] : CPU를 할당받은 프로세스가 입출력 작업 등으로 인해 명령을 실행할 수 없는 상태
- Wake up [대기 → 준비] : Block 상태의 프로세스가 입출력 작업이 끝나면 대기 상태에서 준비 상태가 됨
- Interrupt [실행 → 준비] : Timer run out, CPU를 점유 중인 프로세스가 할당된 시간을 모두 사용하여 타임아웃 되거나, CPU 스케줄링 정책에 따라 우선순위가 높은 프로세스로 CPU 디스패치된 상태
- Exit [실행 → 종료] : 프로세스가 CPU를 할당받아 작업을 모두 수행한 상태
'Computer Science > Operating System' 카테고리의 다른 글
| 메모리 (Memory) (0) | 2023.08.30 |
|---|---|
| IPC(Inter Process Communication) (0) | 2023.08.26 |
| PCB와 Context Switching (0) | 2023.08.18 |
| 페이징과 세그먼테이션 (0) | 2023.08.12 |
| 페이지 교체 알고리즘 (0) | 2023.08.06 |