CPU Scheduler
- 역할: 스케줄러는 준비 상태(ready state)에 있는 여러 프로세스 중에서 다음에 CPU를 할당받을 프로세스를 선택하는 역할을 한다. 스케줄러는 CPU 자원을 어떤 프로세스에게, 언제 할당할지를 결정하는 정책을 구현한다. 이 과정에서 스케줄러는 프로세스의 우선순위, 프로세스의 도착 시간, CPU 사용 시간 등 다양한 요소를 고려하여 선택한다.
- 작동 방식: CPU 스케줄러는 레디 큐(Ready Queue)에서 실행 가능한 프로세스 중 하나를 선택하여 실행을 결정한다. 스케줄링 알고리즘에 따라 선택 기준이 달라질 수 있다.
Ready Queue
레디 큐는 실행 준비가 된 프로세스들이 대기하고 있는 큐를 말한다. 프로세스가 생성되거나 입출력 작업을 마친 후, 실행을 위해 이 큐에 추가된다.
Dispatcher
- 역할: CPU 스케줄러에 의해 선택된 프로세스에게 실제로 CPU를 할당하는 작업을 수행한다.
- 기능:
- 컨텍스트 스위칭: 현재 실행 중인 프로세스의 상태를 저장하고, 새로 선택된 프로세스의 상태를 복구하여 CPU 실행을 이어나갈 수 있도록 한다.
- 모드 전환: 시스템이 커널 모드에서 유저 모드로 전환하여, 프로세스가 사용자 모드에서 작업을 수행할 수 있도록 한다.
- 프로세스 시작 위치 지정: 새롭게 선택된 프로세스가 이전에 중단된 지점부터 작업을 재개할 수 있도록 적절한 위치로 이동시킨다.
스케줄링의 선점 방식
비선점 스케줄링 (Nonpreemptive Scheduling)
- 정의: 한 번 CPU를 할당받은 프로세스는 작업이 끝날 때까지 CPU를 계속 사용할 수 있는 스케줄링 방식이다. 이 방식에서는 다른 프로세스가 CPU를 중간에 빼앗을 수 없다.
- 특징:
- 프로세스가 자발적으로 종료하거나, 입출력 작업을 위해 대기 상태로 전환될 때까지 CPU를 점유한다.
- 문맥 전환(Context Switching)이 발생하지 않기 때문에 오버헤드가 적다.
- 응답 시간이 예측 가능하지만, 긴 작업을 가진 프로세스가 CPU를 독점할 수 있어 다른 프로세스들이 오래 대기하게 되는 단점이 있다.
- 신사적, 협력적(cooperative) 방식으로 CPU를 공유한다.
- 느린 응답성을 보일 수 있다.
- 알고리즘:
- FCFS (First-Come, First-Served): 먼저 도착한 프로세스가 먼저 CPU를 할당받는다.
- SJF (Shortest Job First): CPU 버스트가 가장 짧은 프로세스가 먼저 CPU를 할당받는다.
선점 스케줄링 (Preemptive Scheduling)
- 정의: 현재 CPU를 사용 중인 프로세스가 다른 프로세스에 의해 CPU를 강제로 빼앗길 수 있는 스케줄링 방식이다. 스케줄러는 특정 조건이 만족되면 실행 중인 프로세스를 중단하고 다른 프로세스에 CPU를 할당한다.
- 특징:
- CPU를 보다 효율적으로 사용할 수 있으며, 긴급한 작업을 빠르게 처리할 수 있다.
- 문맥 전환이 자주 발생할 수 있어 오버헤드가 증가할 수 있다.
- 시스템의 응답성이 향상되어 대화형 시스템에 적합하다.
- 적극적이고 강제적인 방식으로 CPU를 관리한다.
- 알고리즘:
- Round Robin (RR): 각 프로세스가 동일한 시간 단위(TIME QUANTUM) 동안 CPU를 사용하며, 시간이 지나면 다음 프로세스로 전환된다.
- Priority Scheduling: 우선순위가 높은 프로세스가 우선적으로 CPU를 할당받으며, 우선순위가 더 높은 프로세스가 도착하면 현재 실행 중인 프로세스를 중단하고 CPU를 할당한다.
- SRTF (Shortest Remaining Time First): 남은 CPU 버스트가 가장 짧은 프로세스가 우선적으로 CPU를 할당받으며, 새로운 프로세스가 도착했을 때 남은 시간이 더 짧다면 현재 프로세스를 중단하고 새로운 프로세스를 실행한다.
728x90
'CS' 카테고리의 다른 글
[CS] 스레드의 종류 (0) | 2024.08.12 |
---|---|
[CS] 운영 체제의 모드와 시스템 콜 (1) | 2024.08.11 |
[CS] 프로세스/스레드 상태 변화 (0) | 2024.08.11 |
[CS] Deadlock (0) | 2024.08.11 |
[CS] 동기화 (0) | 2024.08.09 |