컴퓨터 시스템의 모든 자원을 효율적으로 사용하기 위한 프로세스 관리 정책
하나의 프로세스가 끝나고 다음으로 수행할 프로세스를 선택할 때, 어떤 프로세스를 선택할지에 대한 기준이 되는 알고리즘을 CPU 스케줄링 알고리즘 이라 함
스케줄링의 성능을 비교하는 지표들
CPU 스케줄링의 기본적인 목표 중 하나는 프로세스들의 기다리는 시간을 줄여, 가능한 한 신속하게 처리될 수 있도록 하는 것이다. 그 외에도 CPU 스케줄링의 목표 및 기준이 되는 지표들이 있다!
Turnaround Time (반환 시간)
프로세스의 처음 시작 시간 부터 모든 작업을 끝내고 종료할 때 까지 걸린 시간
(CPU, waiting, I/O 등 모든 시간을 포함)
Waiting Time (대기 시간)
CPU를 점유하기 위해 대기 열 (ready queue)에서 기다린 시간
(다른 큐에서 기다린 시간은 제외)
Response Time (응답 시간)
일반적으로 대화형 시스템에서 입력에 대한 반응 시간
CPU Utilization (CPU 이용률)
총 경과 시간 대비 프로세스에 CPU가 이용되는 시간의 비율
Throughout (처리율)
단위 시간당 처리하는 작업의 수
구체적인 CPU 스케줄링 알고리즘을 알아보기 전 선점, 비선점의 개념을 잡고 가자!
💡선점
현재 CPU 시간을 할당 받아서 특정 프로세스가 실행 중일지라도, 필요에 의해 다른 프로세스가 CPU 시간을 강제적으로 빼앗을 수 있음
💡비선점
현재 어떠한 프로세스가 CPU 시간을 할당받아 실행 되고 있다면 다른 프로세스는 현재 프로세스가 완료될 때 까지 CPU 시간을 할당 받을 수 없음
case 1과 같은 경우를 Convoy Effect라 함!
💡 Convoy Effect
CPU 시간을 오래 사용하는 프로세스가 먼저 수행되는 동안, 나머지 프로세스들은 그 만큼 오래 기다리는 것
평균 대기 시간은 SJF 알고리즘이 가장 짧은 것이 이미 수학적으로 증명되어 있다.
하지만 사실은 비현실적인 알고리즘인데, 실제 컴퓨터 환경에서는 프로세스의 CPU 점유 시간을 알 수 없기 때문이다.
프로세스 실행 중에는 여러가지 변수가 존재하기 때문에 프로세스의 CPU 점유 시간을 알기 위해서는 실제로 실행하는 방법 뿐이다. 실제로 측정한 시간을 이용해 알고리즘을 이용할 수도 있지만 이는 오버헤드가 매우 크다!
💡 우선순위를 정하는 방법
- Internal (내부적 요소)
time limit, memory requirement, I/O to CPU burst (I/O 작업을 길고, CPU 작업은 짧은 프로세스 우선) 등- External (외부적 요소)
amount of funds being paid, political factors 등
💡 Starvation, 기아 현상
CPU의 점유를 오랫동안 하지 못하는 현상
Priority 스케줄링 방식에서 우선순위가 매우 낮은 프로세스가 ready queue에서 대기할 경우 오랫동안 기다려도 CPU를 점유하지 못할 가능성이 큼
-> 기아 현상을 해결하는 방법 중 하나는 Aging!
💡 Aging, 에이징
프로세스가 ready queue에서 대기 중 일정 시간이 지나면 우선 순위를 일정량 높여주는 방법
💡 프로세스 그룹
- System Process : 운영체제 커널 수준의 프로세스
- Interactive Process : 유저 수준의 대화형 프로세스
- Batch Process : 대화형 프로세스의 반대, 일정량을 한번에 처리하는 프로세스 (ex, 컴파일러)
- Student Process
- Interactive Editing Process
ex) system process는 커널 수준에서 중요한 작업이므로 우선 순위 높음, batch process 는 운영 체제의 개입이 매우 적으므로 우선 순위가 가장 낮다고 볼 수 있음
대부분의 상용 운영체제는 여러개의 큐를 사용, 각 큐마다 다른 스케줄링 방식을 사용한다. 프로세스의 성격에 맞는 스케줄링 방식을 사용하여 최대한 효율적으로 CPU를 운영한다.
💡 SRTF, Shortest Remaining Time First
- SJF 알고리즘의 선점 방식
- 새로운 프로세스가 들어오면, 각 task들의 남은 수행 시간을 비교하여 가장 짧은 프로세스에게 CPU를 할당
- 단점
- 프로세스 생성 시 총 실행 시간 추정에 대한 작업이 필요함
- 잦은 선점이 발생하여 context switching 에 따른 오버헤드 발생 -> 프로세스들의 응답 시간 길어짐
- 현실적으로 구현하여 사용하기가 어렵다