CPU 스케줄링 개요
모든 프로세스는 CPU를 필요로 하고 모든 프로세스는 먼저 CPU를 사용하고 싶어 합니다. 운영체제는 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는데 이를 CPU 스케줄링이라고 합니다.
프로세스 우선순위
우선순위가 높은 프로세스란 빨리 처리해야 하는 프로세스들을 의미합니다. 우선순위가 높은 프로세스에는 대표적으로 입출력 작업이 많은 프로세스가 있습니다. 그 이유는 대부분의 프로세스들은 CPU와 입출력장치를 모두 사용하며 실행됩니다. 달리 말하면 프로세스는 실행 상태와 대기 상태를 반복하며 실행됩니다.

여기서 프로세스 종류마다 입출력장치를 이용하는 시간과 CPU를 이용하는 시간의 양에는 차이가 있습니다. 입출력 작업이 많은 프로세스를 입출력 집중 프로세스라고 하고, CPU 작업이 많은 프로세스를 CPU 집중 프로세스라고 합니다.
상황에 맞게, 그리고 프로세스의 중요도에 맞게 프로세스가 CPU를 이용할 수 있도록 하기 위해 운영체제는 프로세스마다 우선순위를 PCB에 부여합니다.
스케줄링 큐
PCB에 우선순위가 적혀 있다고는 하지만, 이를 찾기위해 PCB를 뒤적거리는 것은 비효율적입니다. 때문에 운영체제는 CPU를 사용하고 싶은 프로세스를 스케줄링 큐로 구현하고 관리합니다.

운영체제가 관리하는 줄, 즉 큐에는 다양한 종류가 있습니다. 대표적으로 준비 큐와 대기 큐가 있습니다. 준비 큐는 CPU를 이용하고 싶은 프로세스들이 서는 줄을 의미하고, 대기 큐는 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄을 의미합니다.
선점형과 비선점형 스케줄링
선점형 스케줄링은 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식을 의미합니다.

반면 비선점형 스케줄링이란 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식을 의미합니다.

선점형 스케줄링은 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골고루 자원을 배분할 수 있다는 장점이 있지만, 그만큼 문맥 교환 과정에서 오버헤드가 발생할 수 있습니다. 반면 비선점형 스케줄링은 발생하는 오버헤드가 선점형 스케줄링보다 적지만 당장 자원을 사용해야 하는 상황에서도 무작정 기다려, 골고루 자원을 사용할 수 없다는 단점이 있습니다.
CPU 스케줄링 알고리즘의 종류
선입 선처리 스케줄링
선입 선처리 스케줄링은 FCFS 스케줄링이라고도 불립니다. 이는 단순히 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식입니다.
공정해 보일 수 있지만 오래 사용하는 프로세스가 먼저 도착하면 다른 프로세스의 사용시간이 얼마나 적든 기다릴 수 밖에 없습니다. 이로인해 프로세스가 대기하는 시간이 길어지는 호위 효과가 발생하기도 합니다.

최단 작업 우선 스케줄링
호위 효과를 방지하는 방법 중 간단한 것은 CPU 사용 시간이 긴 프로세스는 나중에 실행하고 짧은 프로세스를 먼저 실행하는 방법입니다. 이러한 스케줄링 방식을 최단 작업 우선 스케줄링 혹은 SJF 스케줄링이라고 합니다.

라운드 로빈 스케줄링
라운드 로빈 스케줄링은 선입 선처리 스케줄링에 타임 슬라이스라는 개념을 더한 방식입니다. 타임 슬라이스란 각 프로세스가 CPU를 사용할 수 있는 시간을 의미합니다. 즉, 정해진 타임 슬라이스만큼의 시간 동안만 돌아가며 CPU를 이용하는 방식으로 타임 슬라이스의 크기가 매우 중요합니다.

만약 타임 슬라이스가 지나치게 크면 선입 선처리 스케줄링과 다를 바 없어 호위 효과가 생길 여지가 있고, 지나치게 작으면 문맥 교환에 발생하는 비용이 커 프로세스 전환하는데 불필요한 에너지가 많이 사용될 여지가 있기 때문입니다.
최소 잔여 시간 우선 스케줄링
최소 잔여 시간 우선 스케줄링 혹은 SRT 스케줄링은 최단 작업 우선 알고리즘과 라운드 로빈 알고리즘을 합친 스케줄링 방식입니다. 즉, 짧은 실행시간을 가진 프로세스를 먼저 선택하고 이를 타임 슬라이스 만큼 나눠 실행하는 방식입니다.
우선순위 스케줄링
우선순위 스케줄링은 프로세스들에 우선순위를 부여하고 가장 높은 우선순위를 가진 프로세스부터 실행하는 알고리즘입니다. 다만 근복적인 문제로 우선순위가 높은 프로세스가 계속해서 들어온다면 낮은 프로세스는 계속해서 뒤로 밀려나는 기아 현상이 있습니다.

이를 방지하기 위한 대표적인 기법으로 에이징이 있으며, 이는 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식입니다.

다단계 큐 스케줄링
다단계 큐 스케줄링은 우선순위 스케줄링의 발전된 형태로 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식입니다. 우선순위가 가장 높은 큐에 있는 프로세스들을 먼저 처리하고 우선순위가 가장 높은 큐가 비어 있으면 그다음 우선순위 큐에 있는 프로세스들을 처리하는 방식입니다.

이렇게 큐를 여러 개 두면 프로세스 유형별로 우선순위를 구분할 수 있고, 큐마다 다른 스케줄링 알고리즘을 사용할 수 있습니다. 또한 큐별로 타임 슬라이스를 여러 개 지정할 수도 있습니다.
다단계 피드백 큐 스케줄링
위 다단계 큐 스케줄링에서는 프로세스들이 큐 사이를 이동할 수 없습니다. 그렇기에 기아 현상이 발생할 수 있는 여지가 있습니다. 이를 보완하여 다단계 피드백 큐 스케줄링에서는 프로세스들이 큐 사이를 이동할 수 있게하는 에이징 기법을 적용하여 기아 현상을 예방합니다.

즉, 다단계 피드백 큐 스케줄링 알고리즘은 어떤 프로세스의 CPU 이용 시간이 길면 낮은 우선순위 큐로 이동시키고, 어떤 프로세스가 낮은 우선순위 큐에서 너무 오래 기다린다면 높은 우선순위 큐로 이동시킬 수 있는 알고리즘입니다.
'시리즈 > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 (0) | 2025.02.17 |
---|---|
[운영체제] 교착 상태 (DeadLock) (0) | 2025.02.13 |
[운영체제] 프로세스 동기화 (0) | 2025.02.10 |
[운영체제] 프로세스와 스레드 (0) | 2025.02.08 |
[운영체제] 운영체제 시작하기 (0) | 2025.02.04 |