CPU 스케줄링 알고리즘: 두 판 사이의 차이

기술노트
(CS 용어 정리 - CPU 스케줄링 알고리즘 추가)
 
(Gemini 벌크 업로더로 자동 업로드)
 
1번째 줄: 1번째 줄:
== CPU 스케줄링 알고리즘 ==
== CPU 스케줄링 알고리즘 ==


CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다.
'''CPU 스케줄링'''은 여러 프로세스가 CPU를 사용하려고 할 때, 어떤 프로세스에게 언제, 어떻게 CPU를 할당할지 결정하는 운영체제의 핵심 정책입니다. 스케줄링의 목표는 CPU 이용률과 처리량을 높이고, 총처리 시간, 대기 시간, 응답 시간을 최소화하여 시스템의 전반적인 성능과 공정성을 보장하는 것입니다.


* 프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다.
*   '''선점형(Preemptive) vs 비선점형(Non-preemptive)'''
* 이 알고리즘은 CPU 소유권을 줄 것인지 결정한다.
> * '''비선점형''' : 한 프로세스가 CPU를 할당받으면, 그 작업이 끝날 때까지 다른 프로세스가 CPU를 빼앗을 수 없습니다.
* CPU 이용률은 높게, 주어진 시간에 많은 일을 하게, 준비 큐(ready queue)에 있는 프로세스는 적게, 응답 시간은 짧게 설정하는 것을 목표로 한다.
> * '''선점형''' : 한 프로세스가 CPU를 사용하고 있더라도, 우선순위가 더 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있습니다.


<br>
----


=== 비선점형 방식 ===
=== ⚙️ 주요 CPU 스케줄링 알고리즘 ===


`비선점형 방식(non-preemptive)` 은 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않는다. 따라서 컨텍스트 스위칭으로 인한 부하가 적다.
* '''FCFS (First-Come, First-Served)'''
> * '방식': 준비 큐에 먼저 도착한 프로세스부터 순서대로 CPU를 할당합니다. (비선점형)
> * '단점': 실행 시간이 긴 프로세스가 먼저 도착하면, 뒤따르는 짧은 프로세스들이 오래 기다려야 하는 '호위 효과(Convoy Effect)'가 발생하여 평균 대기 시간이 길어집니다.


==== FCFS ====
* '''SJF (Shortest Job First)'''
> * '방식': 실행 시간이 가장 짧을 것으로 예상되는 프로세스에게 먼저 CPU를 할당합니다. (비선점형, 선점형(SRTF) 모두 가능)
> * '장점': 평균 대기 시간을 최소화하는 최적의 알고리즘입니다.
> * '단점': 실행 시간이 긴 프로세스는 계속해서 새로운 짧은 프로세스들에게 밀려 무한정 기다릴 수 있는 '기아 현상(Starvation)'이 발생할 수 있습니다. 또한, 실제 실행 시간을 미리 정확히 예측하기 어렵습니다.


FCFS(First Come, First Served)는 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘이다. 길게 수행되는 프로세스 때문에 ‘준비 큐에서 오래 기다리는 형상(convoy effect)’이 발생하는 단점이 있다.
* '''라운드 로빈 (Round Robin, RR)'''
> * '방식': 각 프로세스에 동일한 크기의 '시간 할당량(Time Quantum)'을 부여하고, 할당된 시간 안에 작업을 마치지 못하면 준비 큐의 맨 뒤로 가서 다음 차례를 기다립니다. (선점형)
> * '장점': 모든 프로세스가 공평하게 CPU 시간을 보장받아 응답 시간이 빠르므로, 대화형 시스템에 적합합니다.
> * '단점': 시간 할당량이 너무 크면 FCFS처럼 동작하고, 너무 작으면 잦은 컨텍스트 스위칭으로 오버헤드가 커집니다.


==== SJF ====
* '''우선순위 스케줄링 (Priority Scheduling)'''
> * '방식': 각 프로세스에 부여된 우선순위에 따라 CPU를 할당합니다. (비선점형, 선점형 모두 가능)
> * '단점': '기아 현상'이 발생할 수 있습니다. 이를 해결하기 위해 '노화(Aging)' 기법(오래 기다린 프로세스의 우선순위를 점차 높여줌)을 함께 사용합니다.


SJF(Shortest Job First)는 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘이다.
----


* 긴 시간을 가진 프로세스가 실행되지 않는 현상(starvation)이 일어나며 평균 대기 시간이 가장 짧다.
=== 💡 개발자 핵심 Point ===
* 하지만 실제로는 실행 시간을 알 수 없기 때문에 과거의 실행했던 시간을 토대로 추측해서 사용한다.


==== 우선순위 ====
* 현대 운영체제는 단일 알고리즘만 사용하기보다, 여러 스케줄링 알고리즘을 결합한 '''다단계 큐 스케줄링(Multi-level Queue Scheduling)'''이나 '''다단계 피드백 스케줄링(Multi-level Feedback Queue Scheduling)'''을 사용합니다.
 
* '''다단계 피드백 큐'''는 프로세스를 여러 큐에 나누어 배치하고, 각 큐마다 다른 스케줄링 알고리즘(e.g., 상위 큐는 RR, 하위 큐는 FCFS)을 적용합니다. 또한, 프로세스가 사이를 이동할 수 있어, CPU 사용 패턴에 따라 동적으로 우선순위를 조정하고 기아 현상을 해결할 수 있습니다.
기존 SJF 스케줄링의 경우 긴 시간을 가진 프로세스가 실행되지 않는 현상이 있다. 이는 오래된 작업일수록 ‘우선순위를 높이는 방법(aging)’을 통해 단점을 보완하 알고리즘을 말한다.
* CPU 스케줄링은 운영체제의 핵심 기능으로, 시스템의 전반적인 성능과 사용자 경험에 직접적인 영향을 미칩니다.
 
<br>
 
=== 선점형 방식 ===
 
`선점형 방식(preemptive)` 은 현대 운영체제가 쓰는 방식으로 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식을 말한다.
 
==== 라운드 로빈 ====
 
라운드 로빈(RR, Round Robin)은 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐(ready queue)의 뒤로 가는 알고리즘이다.
 
* 할당 시간이 너무 크면 FCFS가 되고 짧으면 컨텍스트 스위칭이 잦아져서 오버헤드, 즉 비용이 커진다.
* 일반적으로 전체 작업 시간은 길어지지만 평균 응답 시간은 짧아진다는 특징이 있다.
* 이 알고리즘은 로드밸런서에서 트래픽 분산 알고리즘으로도 사용한다.
 
==== SRF ====
 
SJF는 중간에 실행 시간이 더 짧은 작업이 들어와도 기존 짧은 작업을 모두 수행하고 그 다음 짧은 작업을 이어나가는데, SRF는 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘이다.
 
==== 다단계 큐 ====
 
다단계 큐는 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것을 말한다. 큐 간의 프로세스 이동이 안 되므로 스케줄링 부담이 적지만 유연성이 떨어지는 특성이 있다.

2025년 9월 11일 (목) 16:50 기준 최신판

CPU 스케줄링 알고리즘

CPU 스케줄링은 여러 프로세스가 CPU를 사용하려고 할 때, 어떤 프로세스에게 언제, 어떻게 CPU를 할당할지 결정하는 운영체제의 핵심 정책입니다. 스케줄링의 목표는 CPU 이용률과 처리량을 높이고, 총처리 시간, 대기 시간, 응답 시간을 최소화하여 시스템의 전반적인 성능과 공정성을 보장하는 것입니다.

  • 선점형(Preemptive) vs 비선점형(Non-preemptive)

> * 비선점형 : 한 프로세스가 CPU를 할당받으면, 그 작업이 끝날 때까지 다른 프로세스가 CPU를 빼앗을 수 없습니다. > * 선점형 : 한 프로세스가 CPU를 사용하고 있더라도, 우선순위가 더 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있습니다.


⚙️ 주요 CPU 스케줄링 알고리즘

  • FCFS (First-Come, First-Served)

> * '방식': 준비 큐에 먼저 도착한 프로세스부터 순서대로 CPU를 할당합니다. (비선점형) > * '단점': 실행 시간이 긴 프로세스가 먼저 도착하면, 뒤따르는 짧은 프로세스들이 오래 기다려야 하는 '호위 효과(Convoy Effect)'가 발생하여 평균 대기 시간이 길어집니다.

  • SJF (Shortest Job First)

> * '방식': 실행 시간이 가장 짧을 것으로 예상되는 프로세스에게 먼저 CPU를 할당합니다. (비선점형, 선점형(SRTF) 모두 가능) > * '장점': 평균 대기 시간을 최소화하는 최적의 알고리즘입니다. > * '단점': 실행 시간이 긴 프로세스는 계속해서 새로운 짧은 프로세스들에게 밀려 무한정 기다릴 수 있는 '기아 현상(Starvation)'이 발생할 수 있습니다. 또한, 실제 실행 시간을 미리 정확히 예측하기 어렵습니다.

  • 라운드 로빈 (Round Robin, RR)

> * '방식': 각 프로세스에 동일한 크기의 '시간 할당량(Time Quantum)'을 부여하고, 할당된 시간 안에 작업을 마치지 못하면 준비 큐의 맨 뒤로 가서 다음 차례를 기다립니다. (선점형) > * '장점': 모든 프로세스가 공평하게 CPU 시간을 보장받아 응답 시간이 빠르므로, 대화형 시스템에 적합합니다. > * '단점': 시간 할당량이 너무 크면 FCFS처럼 동작하고, 너무 작으면 잦은 컨텍스트 스위칭으로 오버헤드가 커집니다.

  • 우선순위 스케줄링 (Priority Scheduling)

> * '방식': 각 프로세스에 부여된 우선순위에 따라 CPU를 할당합니다. (비선점형, 선점형 모두 가능) > * '단점': '기아 현상'이 발생할 수 있습니다. 이를 해결하기 위해 '노화(Aging)' 기법(오래 기다린 프로세스의 우선순위를 점차 높여줌)을 함께 사용합니다.


💡 개발자 핵심 Point

  • 현대 운영체제는 단일 알고리즘만 사용하기보다, 여러 스케줄링 알고리즘을 결합한 다단계 큐 스케줄링(Multi-level Queue Scheduling)이나 다단계 피드백 큐 스케줄링(Multi-level Feedback Queue Scheduling)을 사용합니다.
  • 다단계 피드백 큐는 프로세스를 여러 큐에 나누어 배치하고, 각 큐마다 다른 스케줄링 알고리즘(e.g., 상위 큐는 RR, 하위 큐는 FCFS)을 적용합니다. 또한, 프로세스가 큐 사이를 이동할 수 있어, CPU 사용 패턴에 따라 동적으로 우선순위를 조정하고 기아 현상을 해결할 수 있습니다.
  • CPU 스케줄링은 운영체제의 핵심 기능으로, 시스템의 전반적인 성능과 사용자 경험에 직접적인 영향을 미칩니다.