[운영체제] 11-1 CPU 스케줄링 개요
이 글을 혼자 공부하는 컴퓨터구조 + 운영체제 (한빛미디어) 책을 읽고 혼자 공부한 내용입니다.
잘못 이해한 부분이 있을 수 있고, 문제가 있는 부분 댓글로 알려주시면 수정하겠습니다.
모든 프로세스는 CPU를 필요로 하고 모든 프로세스는 먼저 CPU를 사용하고 싶어함
이러한 프로세스들에게 공정하고 합리적으로 CPU를 자원을 할당하기 위해
운영체제는 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 기다리게 할지를 결정함
-> 이렇게 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것을 CPU 스케줄링이라고 함
프로세스 우선순위
우선순위가 높은 프로세스란 빨리 처리해야하는 프로세스를 의미
우선순위가 높은 프로세스에는 대표적으로 입출력 작업이 많은 프로세스가 속함
운영체제는 각 프로세스의 PCB에 우선순위를 명시,
PCB에 적힌 우선순위를 기준으로 먼저 처리할 프로세스를 결정
자연스레 우선순위가 높은 프로세스는 더 빨리, 더 자주 실행됨
스케줄링 큐
PCB에 우선순위가 적혀 있다고 하여도, CPU를 사용할 다음 프로세스를 찾기 위해 운영체제가 일일이 모든 프로세스의 PCB를 뒤적거리는 것은 비효율적
그래서 운영체제는 프로세스들에게 '줄을 서서 기다릴 것'을 요구 -> 이 줄이 스케줄링 큐
(큐는 자료구조에서 FIFO 이지만, 스케줄링에서는 반드시 FIFO일 필요는 없음)
준비 큐 : CPU를 이용하고 싶은 프로세스들이 서는 줄
대기 큐 : 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄을 의미
준비 상태에 있는 프로세스들의 PCB는 준비 큐의 마지막에 삽입되어 CPU를 사용할 차례를 기다림
우선순위가 낮은 프로세스들이 먼저 큐에 삽입되어 줄을 섰다고 할지라도 우선순위가 높은 프로세스가 먼저 처리될 수 있음
대기 상태에 있는 프로세스도 마찬가지. 같은 장치를 요구한 프로세스들은 같은 대기 큐에서 기다림
입출력이 완료되어 완료 인터럽트가 발생하면 운영체제는 대기 큐에서 작업이 완료된 PCB를 찾고,
이 PCB를 준비 상태로 변경한 뒤 대기 큐에서 제거. 해당 PCB는 준비 큐로 이동함
선점형과 비선점형 스케줄링
CPU를 잘 사용하고 있다가, 갑자기 다른 프로세스가 급하다고 지금 CPU를 사용하고 싶다고 한다면?
1. 지금 CPU를 사용 중인 프로세스부터 CPU 자원을 빼앗아 다른 프로세스에 할당
2. CPU를 사용 중인 프로세스의 작업이 끝날 때까지 다른 급한 프로세스를 기다리게 한다
1을 선점형 스케줄링, 2를 비선점형 스케줄링이라고 함
선점형 스케줄링
- 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식을 의미
- 어느 하나의 프로세스가 자원 사용을 독점할 수 없는 스케줄링 방식
- 프로세스마다 정해진 시간만큼 CPU 사용, 타이머 인터럽트가 발생하면 CPU 자원을 빼앗아 다음 프로세스 할당하는 방식
- 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골구로 자원을 배분할 수 있음
- 문맥 교환 과정에서 오버헤드 발생할 수 있음
비선점형 스케줄링
- 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식을 의미
- 하나의 프로세스가 자원 사용을 독점할 수 있는 스케줄링 방식
- 다른 프로세스들은 그 프로세스의 사용이 모두 끝날 때까지 기다려야함
- 문맥 교환에서 발생하는 오버헤드는 선점형 스케줄링보다 적음
- 모든 프로세스가 골구로 자원을 사용할 수 없다는 단점