Last update: @1/7/2023
•
CPU 스케줄링(CPU scheduling)
: 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것
◦
프로세스 우선순위
▪
프로세스의 구분
•
입출력 집중 프로세스(I/O bound process)
: 비디오 재생이나 디스크 백업 작업을 담당하는 프로세스와 같이 입출력 작업(I/O burst, 입출력 버스트)이 많은 프로세스
◦
실행 상태보다는 입출력을 위한 대기 상태에 더 많이 머무르게 됨
•
CPU 집중 프로세스(CPU bound process)
: 복잡한 수학 연산, 컴파일, 그래픽 처리 작업을 담당하는 프로세스와 같이 CPU 작업(CPU burst, CPU 버스트)이 많은 프로세스
◦
대기 상태보다는 실행 상태에 더 많이 머무르게 됨
▪
입출력 집중 프로세스를 먼저 처리하여 대기상태에 두면서 입출력장치를 끊임없이 작동시키고, 그동안 CPU 집중 프로세스를 처리하는 쪽이 효율적임
▪
운영체제는 각 프로세스의 PCB에 우선순위를 명시하여 처리함
▪
macOS 등의 유닉스 체계 운영체제는 ps -el 명령어를 통해 우선순위 확인이 가능함
◦
스케줄링 큐(scheduling queue)
▪
운영체제가 매번 일일이 모든 PCB를 검사하여 먼저 자원을 이용할 프로세스를 결정하는
일은 매우 번거로울뿐더러 오랜 시간이 걸리는 일임
▪
CPU는 메모리로 적재되고자 하는 새로 생성되는 프로세스, CPU를 이용하고 싶은 프로세스, 특정 입출력장치를 이용하고 싶은 프로세스 등을 큐에 삽입함
•
스케줄링에서 이야기하는 큐는 반드시 선입선출 방식일 필요는 없음
▪
종류
•
준비 큐(ready queue)
: CPU를 이용하고 싶은 프로세스들이 서는 줄을 의미
•
대기 큐(waiting queue)
: 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄을 의미. 각 입출력장치별로 대기 큐가 별도로 존재함
▪
선점형 스케줄링과 비선점형 스케줄링
•
선점형 스케줄링(preemptive scheduling)
: 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식
◦
다시 말해 어느 하나의 프로세스가 자원 사용을 독점할 수 없는 스케줄링 방식
◦
지금까지 필자가 설명한 스케줄링 방식이 선점형 스케줄링의 일종임
▪
프로세스마다 정해진 시간만큼 CPU를 사용하고, 정해진 시간을 모두 소비하여 타이머 인터럽트가 발생하면 운영체제가 해당 프로세스로부터 CPU 자원을 빼앗아 다음 프로세스에 할당하는 방식은 선점형 스케줄링의 일종으로 볼 수 있음
◦
현재 대부분의 운영체제가 차용하는 스케줄링 방식
◦
장점
: 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골고루 자원을 배분할 수 있음
◦
단점
: 문맥 교환 과정에서 오버헤드가 발생할 수 있음
•
비선점형 스케줄링(non-preemptive scheduling)
: 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식
◦
다시 말해 비선점형 스케줄링은 하나의 프로세스가 자원 사용을 독점할 수 있는 스케줄링 방식
◦
만약 비선점형 스케줄링 방식으로 자원을 이용하는 프로세스가 있다면 다른 프로세스들은 그 프로세스의 사용이 모두 끝날 때까지 기다려야 함
◦
장점
: 문맥 교환에서 발생하는 오버헤드는 선점형 스케줄링보다 적음
◦
단점
: 모든 프로세스가 골고루 자원을 사용할 수 없음