프로세스는 크게 계산 작업과 입출력 작업을 실행하는데, 입출력 작업을 진행하는 동안 대기하므로 그 시간에 계산 위주의 프로세스들을 처리하며 진행된다. 이 과정이 스케줄러에 의한 스케줄링 작업이라 볼 수 있다. 즉 CPU의 활용률을 높이기 위해 ready 상태의 프로세스들 중에서 하나를 선택하는 것이다. 스케줄러는 일반적으로 커널 내에 함수로서 구현되어 있다.
스케줄러는 실행되는 주기의 길이에 따라 단기, 중기, 장기 스케줄러로 구분할 수 있다. 단기 스케줄러는 일반적인 CPU 스케줄러로서 5ms-100ms 주기로 빈번하게 호출되어 신속히 이루어진다. 이 경우 스케줄링은 현재의 running 프로세스가 다른 상태로 변할 때나 임의의 프로세스가 ready로 변할 때 실행된다. 중기 스케줄러는 메모리 용량이 부족할 때 가상메모리 공간에 프로세스의 영역을 확보하는 스와핑을 해주면서 실행된다. 이 스케줄러는 수백 밀리 초 이상의 주기로 실행된다. 장기 스케줄러는 아직 생성되지 않은 프로세스를 생성할 때 프로세스 유형에 따라 적절한 비율을 유지하면서 실행되고 수십 초 내지 수 분 단위로 실행되는 주기가 아주 길다.
현재 어떤 프로세스를 실행하고 있을 때 스케줄링을 통해 문맥교환을 할 것인지에 따라 비선점형과 선점형으로 스케줄링을 나누어볼 수 있다. 비선점형 스케줄링은 현재 프로세스가 종료할 때, 스스로 양보할 때, 필요한 작업을 위해 시스템 콜 함수를 호출했을 때와 같이 자발적으로 요청한 경우에 한해서만 스케줄링을 실행해 주는 것을 의미한다. 즉, 실행 중인 프로세스가 계속 실행할 필요가 있으면 다른 프로세스로 문맥교환을 하지 않는 것이다. 이에 반해 선점형 스케줄링은 적절한 스케줄링 작업을 실행해 필요에 따라 다른 프로세스로 문맥교환을 해주는 것을 의미한다. 선점형은 프로세스 중 우선순위 높은 것을 우선하고 비선점형은 실행 중인 프로세스가 완료된 후 우선순위 높은 것을 채택한다.
스케줄링을 어떻게 하는지에 따른 정책들은 다음과 같다. 레디 큐에 들어온 순서대로 실행되는 FCFS는 현재 프로세스가 종료되거나 대기 상태로 전환되었을 때 1개를 다시 선택하는 방식을 취한다. SJF는 실행할 계산 작업 단위가 가장 짧은 프로세스를 먼저 실행한다. SRTF는 SJF에서 더 나아가 레디 큐에 새로운 프로세스가 추가되는 시점에 지금 실행하던 것의 남은 실행시간과 레디 큐의 것들의 실행시간을 비교하여 가장 작은 값을 갖는 것을 선택한다. 라운드로빈은 레디 큐의 프로세스들을 일정한 할당시간 단위로 돌아가며 실행한다. 우선순위 스케줄링은 각 프로세스마다 부여된 우선순위 중 가장 높은 프로세스를 선택하는 것을 말한다.
'OS' 카테고리의 다른 글
| 운영체제의 이해 8장: 저장장치 입출력 및 스케줄링 (2023.05.16) (0) | 2026.03.13 |
|---|---|
| 운영체제의 이해 7장: 파일 관리 (2023.05.10) (0) | 2026.03.13 |
| 운영체제의 이해 3장: 프로세스 관리 (2023.03.31) (0) | 2026.03.13 |
| 운영체제의 이해 2장: 컴퓨터 구조와 어셈블리 언어 (2023.03.23) (0) | 2026.03.13 |
| 운영체제의 이해 1장: 운영체제의 이해를 위한 기초 (2023.03.15) (0) | 2026.03.13 |