# 스케줄링: 비례 배분[^sadey7645][^Gyu-BBB]

[^sadey7645]: [김진우](https://github.com/sadey7645)
[^Gyu-BBB]: [이규범](https://github.com/Gyu-BBB)

비례 배분(Proportional Share) 스케줄링은 기존의 스케줄링 알고리즘과는 다른 목적을 가지고 있습니다. 이전의 알고리즘들이 반환 시간(turnaround time)이나 응답 시간(response time)을 최적화하는 데 중점을 뒀다면, 비례 배분 스케줄링은 각 작업(job)이나 프로세스에게 CPU 시간의 일정 비율을 보장하는 것을 목표로 합니다.

비례 배분 스케줄링의 대표적인 예시로는 Waldspurger와 Weihl이 제안한 '추첨 스케줄링(Lottery Scheduling)'이 있습니다. 이 아이디어 자체는 상당히 오래되었는데, 그 기본 개념은 매우 간단합니다. 다음에 실행할 프로세스를 추첨을 통해 랜덤하게 선택하되, CPU 시간을 더 많이 할당받아야 할 프로세스에게는 추첨에 당첨될 기회를 더 많이 준다는 것이죠.

예를 들어, 두 개의 프로세스 A와 B가 시스템에 존재하고 A는 CPU 시간의 80%를, B는 20%를 받기로 했다고 가정해 봅시다. 추첨 스케줄링에서는 전체 추첨권(ticket) 100장 중 A에게 80장을, B에게 20장을 부여할 것입니다. 그리고 매 스케줄링 시점마다 이 추첨권 중 하나를 무작위로 뽑아, 뽑힌 추첨권을 가진 프로세스를 다음에 실행합니다. 이렇게 하면 장기적으로 봤을 때 A와 B가 각각 CPU 시간의 80%, 20%를 할당받을 수 있게 되는 거죠.

```{admonition} 핵심 질문: CPU를 정해진 비율로 나누는 방법은?
특정한 비율로 CPU 시간을 분배하도록 스케줄러를 어떻게 설계할 수 있을까요? 이를 위해 필요한 핵심 기술은 무엇이고, 그 기술은 얼마나 효과적일까요?
```

비례 배분 스케줄링의 핵심은 각 프로세스에게 할당된 '점유율(share)'을 어떻게 구현하느냐에 있습니다. 앞서 본 추첨 스케줄링은 각 프로세스의 점유율을 추첨권 수로 표현한 것인데, 실제 구현에서는 좀 더 다양한 방법이 사용될 수 있습니다. 예를 들어 각 프로세스에 우선순위 값을 부여하고, 그 값에 비례하는 시간 동안 CPU를 할당하는 방식 등이 있겠죠.

중요한 점은 비례 배분 스케줄링이 기존의 스케줄링 알고리즘과는 다른 관점에서 공정성(fairness)을 추구한다는 것입니다. 이는 응답 시간이나 반환 시간 같은 성능 지표와는 무관하게, 시스템 자원을 사용자나 관리자가 지정한 비율에 따라 엄격히 배분하는 데 주안점을 둡니다. 물론 실제 적용에 있어서는 여러 가지 trade-off가 존재하겠지만, 비례 배분은 스케줄링 문제에 대한 또 하나의 흥미로운 접근 방식임에는 틀림없어 보입니다.

## 기본 개념 : 추첨권이 당신의 몫을 나타낸다

비례 배분 스케줄링에서 가장 중요한 개념은 바로 '추첨권(ticket)'입니다. 추첨권은 각 프로세스가 시스템 자원, 특히 CPU 시간을 얼마나 할당받을 것인지를 결정하는 일종의 '화폐'와 같은 역할을 합니다.

### 개념 설명

시스템 내의 모든 프로세스는 일정 수의 추첨권을 받습니다. 이때 각 프로세스에 할당되는 추첨권의 수는 해당 프로세스의 상대적 중요도나 우선순위를 반영합니다.

프로세스의 중요도가 높을수록, 또는 더 많은 CPU 시간을 할당받아야 할수록 더 많은 추첨권을 받게 되는 거죠. 예를 들어 프로세스 A가 80장의 추첨권을, 프로세스 B가 20장의 추첨권을 받았다면, 이는 A가 B에 비해 4배 더 많은 CPU 시간을 할당받아야 함을 의미합니다.

스케줄러는 매 스케줄링 시점마다 전체 추첨권 중 하나를 무작위로 선택하고, 뽑힌 추첨권을 가진 프로세스에게 CPU를 할당합니다. 따라서 각 프로세스가 실제로 받는 CPU 시간의 양은 전체 추첨권 중 자신이 가진 추첨권의 비율에 비례하게 되는 것입니다.

```{admonition} 무작위성
비례 배분 스케줄링에서 사용되는 추첨권 기반의 무작위 선택 방식은 여러 가지 장점을 가지고 있습니다. 결정을 내려야 할 때, 이러한 무작위성은 강력하면서도 간단한 해법이 될 수 있습니다. 전통적인 결정 방식과 비교했을 때, 무작위 방식은 다음과 같은 세 가지 이점을 제공합니다.

1. 특수한 상황에 대한 적응력: 무작위 선택은 특이 케이스에 잘 대응합니다. 예를 들어, 가상 메모리 시스템에서 많이 사용되는 LRU(Least Recently Used) 페이지 교체 알고리즘은 반복되는 순차 접근 패턴에 대해 최악의 성능을 보이는 경우가 있습니다. 하지만 무작위로 페이지를 선택하면 이런 최악의 시나리오를 피할 수 있습니다.

2. 가벼운 구현: 무작위 추첨 방식은 관리해야 할 상태 정보가 매우 적기 때문에 구현이 간단합니다. 다른 전통적인 스케줄링 알고리즘들에 비해 알고리즘 자체의 복잡도가 낮은 편이죠.

3. 빠른 의사 결정: 난수 생성이 빠르게 이루어진다면, 무작위 추첨을 통한 의사 결정도 신속하게 내려질 수 있습니다. 이는 스케줄링 결정이 자주 필요한 상황에서 특히 유용합니다. 물론 실제 구현에서는 속도 향상을 위해 순수한 무작위성을 어느 정도 포기하고 의사 난수(pseudo-random number)를 사용하기도 합니다.

이처럼 무작위성은 비례 배분 스케줄링에 있어 단순한 해법이면서도 강력한 적응력과 효율성을 제공하는 핵심 요소라 할 수 있습니다. 특히 시스템의 동작을 예측하기 어려운 환경이나, 빠른 의사 결정이 필요한 상황에서 큰 힘을 발휘합니다.

물론 무작위 방식이 항상 최선의 선택을 보장하는 것은 아닙니다. 때로는 특정 프로세스에게 지나치게 불리한 결과를 초래할 수도 있죠. 하지만 장기적으로 볼 때, 무작위성은 각 프로세스에게 공정한 기회를 제공하고 특이 상황에 대한 대응력을 높여주는 효과적인 도구임에 틀림없습니다.
```

### 특징

- 공평성(Fairness): 비례 배분 스케줄링은 각 프로세스가 자신의 추첨권 비율만큼 공정하게 CPU 시간을 받을 수 있도록 보장합니다. 이는 특정 프로세스가 CPU를 독점하는 것을 방지하고, 모든 프로세스가 자신의 몫만큼은 확실히 받을 수 있도록 합니다.

- 유연성(Flexibility): 프로세스의 추첨권 수를 조정함으로써 우선순위를 쉽게 변경할 수 있습니다. 새로운 프로세스가 추가되더라도 추첨권을 적절히 배분하면 되므로 시스템 변화에 유연하게 대응할 수 있습니다. 또한 시스템의 요구사항이 바뀌었을 때 추첨권의 분배 비율을 조정함으로써 자원 할당을 쉽게 튜닝할 수 있습니다.

- 상대적 중요도의 표현: 각 프로세스에게 할당된 추첨권의 수는 해당 프로세스의 상대적인 중요도를 나타냅니다. 추첨권이 많을수록 더 자주 추첨에서 선택되므로, 결과적으로 더 많은 CPU 시간을 할당받게 됩니다. 이렇게 추첨권의 비율을 통해 프로세스 간의 상대적 우선순위를 간단하고 직관적으로 표현할 수 있습니다.

이처럼 추첨권의 개념을 도입함으로써 비례 배분 스케줄링은 사용자나 관리자가 지정한 비율에 따라 시스템 자원을 공정하고 유연하게 분배할 수 있게 됩니다. 물론 실제 구현에서는 추첨 과정을 어떻게 효율적으로 수행할 것인지, 프로세스의 동적인 생성과 종료를 어떻게 처리할 것인지 등 고려해야 할 사항이 많지만, 추첨권을 통한 자원 할당이라는 기본 아이디어 자체는 매우 흥미롭고 유용해 보입니다.

## 추첨 기법

추첨권을 다루는 다양한 기법 중 하나는 추첨권 화폐(ticket currency)의 개념입니다. 이 기법은 사용자가 자신의 화폐 가치로 추첨권을 할당하고 이를 자유롭게 변환할 수 있도록 허용합니다. 예를 들어, 사용자 A와 B가 각각 100장의 추첨권을 받았다고 가정하면, A는 자신의 화폐로 500장씩을 할당하고 B는 10장을 할당했다고 해봅시다. 시스템은 각 사용자가 할당한 추첨권의 가치를 전역 기준으로 변환하여 공평하게 추첨을 진행합니다.

또 다른 유용한 기법은 추첨권 양도(ticket transfer)입니다. 이를 통해 프로세스는 추첨권을 일시적으로 다른 프로세스에게 양도할 수 있습니다. 이는 클라이언트/서버 환경에서 특히 유용하며, 클라이언트 프로세스가 서버에게 작업을 요청할 때 서버의 성능을 최대화하기 위해 추첨권을 전달할 수 있습니다.

마지막으로, 추첨권 팽창(ticket inflation) 기법은 프로세스가 일시적으로 자신이 소유한 추첨권의 수를 조절할 수 있게 합니다. 이는 서로 신뢰하는 프로세스들 간의 상호 작용에서 유용하며, 어떤 프로세스가 더 많은 CPU 시간을 필요로 할 때 다른 프로세스들과 통신하지 않고도 자체적으로 추첨권의 가치를 조절할 수 있습니다.

## 구현

비례 배분 스케줄링을 실제로 구현하는 대표적인 방법으로 '티켓 기반 추첨(Ticket-Based Lottery)' 알고리즘이 있습니다. 이 알고리즘은 다음과 같은 단계로 동작합니다.

1. 티켓 할당: 각 프로세스의 상대적 중요도에 따라 일정 수의 '티켓(ticket)'을 부여합니다. 중요도가 높을수록 더 많은 티켓을 받게 됩니다.

2. 총 티켓 수 계산: 시스템 내 모든 프로세스가 보유한 티켓의 총합을 계산합니다. 이는 다음 단계에서 추첨 범위를 정하는 데 사용됩니다.

3. 무작위 추첨: 0부터 (총 티켓 수 - 1) 사이의 범위에서 무작위로 한 번호를 선택합니다. 이는 마치 모든 티켓을 모아 놓고 그 중 하나를 뽑는 것과 같습니다.

4. 당첨 프로세스 확인 및 CPU 할당: 추첨에서 선택된 번호가 어떤 프로세스의 티켓에 해당하는지 확인합니다. 해당 프로세스가 이번 추첨의 '당첨자'가 되어 정해진 시간 동안 CPU를 독점적으로 사용할 수 있는 권한을 얻습니다.

5. 주기적 반복: 3번과 4번 단계를 주기적으로 반복하여 CPU 시간을 지속해서 분배합니다. 이렇게 함으로써 장기적으로는 각 프로세스가 자신의 티켓 비율만큼 CPU 시간을 할당받을 수 있게 됩니다.

예를 들어 다음과 같은 프로세스들이 있다고 가정해 보겠습니다.

| 프로세스 | 티켓 수 | CPU 사용 시간 |
| -------- | ------- | ------------- |
| A        | 4       | 200ms         |
| B        | 2       | 100ms         |
| C        | 1       | 50ms          |

이 경우 전체 티켓 수는 4 + 2 + 1 = 7장입니다. 스케줄러는 0부터 6 사이의 숫자 중 하나를 무작위로 선택합니다.

- 0, 1, 2, 3 중 하나가 선택되면 프로세스 A가 200ms 동안 CPU를 독점합니다.
- 4, 5가 선택되면 프로세스 B가 100ms 동안 CPU를 독점합니다.
- 6이 선택되면 프로세스 C가 50ms 동안 CPU를 독점합니다.

이러한 과정을 계속 반복하면, 결과적으로 각 프로세스가 받는 CPU 시간의 비율이 해당 프로세스의 티켓 수 비율과 일치하게 됩니다.

티켓 기반 추첨 알고리즘은 비례 배분 스케줄링의 핵심 아이디어를 충실히 구현한 방식입니다. 프로세스의 중요도를 티켓이라는 간단한 숫자로 표현하고, 이를 기반으로 무작위 추첨을 수행함으로써 각 프로세스에게 공정하게 CPU를 분배할 수 있습니다.

물론 실제 구현에서는 효율성을 위해 순수한 무작위 선택보다는 좀 더 최적화된 알고리즘을 사용할 수 있습니다. 하지만 티켓과 추첨이라는 기본 개념은 비례 배분 스케줄링을 이해하고 구현하는 데 있어 매우 직관적이고 효과적인 도구가 되고 있습니다.

## 장단점

### 장점

- 유연성: 프로세스의 상대적 중요도를 티켓 수로 쉽게 표현할 수 있어, 중요도 변경이 용이합니다.
- 확장성: 새로운 프로세스가 추가되더라도 해당 프로세스에 적절한 수의 티켓을 부여하는 것만으로 간단히 대응할 수 있습니다.
- 장기적 공정성: 비례 배분 스케줄링은 장기적으로 볼 때 각 프로세스에게 티켓 수에 비례하는 공정한 CPU 시간 할당을 보장합니다.

### 단점

- 단기적 불공정성: 무작위 추첨 방식으로 인해 단기적으로는 CPU 시간 할당에 다소 불균형이 생길 수 있습니다.
- 오버헤드: 추첨 과정에서 무작위 번호를 생성하고 당첨 프로세스를 확인하는 데 어느 정도의 연산 비용이 소요됩니다.

## 예제

추첨 스케줄링의 동작 원리를 보다 쉽게 이해하기 위해, 두 개의 프로세스가 CPU를 공유하는 상황을 살펴보겠습니다. 각 프로세스는 동일한 수의 추첨권(예: 100장씩)을 가지고 있고, 수행해야 할 작업량도 같다고 가정합니다. 이상적으로는 두 프로세스가 거의 동시에 종료되는 것이 좋겠지만, 추첨 방식의 무작위성 때문에 한 프로세스가 다른 프로세스보다 일찍 끝날 가능성이 있습니다.

이런 불균형 정도를 측정하기 위해, 간단한 '불공정 지표(unfairness metric)'인 U를 정의해 보겠습니다. U는 먼저 종료된 프로세스의 완료 시간을 나중에 종료된 프로세스의 완료 시간으로 나눈 값입니다. 예를 들어 첫 번째 프로세스가 시간 10에 끝나고 두 번째 프로세스가 시간 20에 끝났다면, U = 10/20 = 0.5가 됩니다. 두 프로세스가 거의 동시에 종료될수록 U는 1에 가까워지겠죠. 완벽하게 공정한 스케줄러라면 U = 1을 달성할 것입니다.

![12_2](https://github.com/chu-aie/os-2024/assets/162019986/b333e6f0-64cd-4655-a761-994505bc55af)

위 그래프는 프로세스의 실행 시간에 따른 평균 불공정도를 보여줍니다. 프로세스 실행 시간을 1부터 1000까지 다양하게 변화시키면서 각 경우를 30번씩 시뮬레이션 해 보았습니다. 그래프에서 볼 수 있듯이, 프로세스의 실행 시간이 짧을수록 불공정도가 커지는 경향이 있습니다. 추첨 스케줄링이 의도한 결과에 근접하려면 프로세스들이 충분히 오랫동안 실행되어야 한다는 것을 알 수 있습니다.

이번에는 좀 더 복잡한 시나리오를 가정해 보겠습니다. 시스템 내에 A, B, C 세 개의 프로세스가 있고, 각각 다음과 같이 추첨권을 할당받았다고 합시다.

- 프로세스 A: 6장
- 프로세스 B: 3장
- 프로세스 C: 1장

전체 추첨권 수는 6 + 3 + 1 = 10장이 됩니다. 비례 배분 스케줄링은 다음과 같은 절차로 진행됩니다.

1. **추첨권 분배**: 시스템은 각 프로세스의 중요도에 비례하여 추첨권을 나눠줍니다. 중요할수록 더 많은 추첨권을 받게 되고, 따라서 CPU 시간을 할당받을 확률도 높아집니다.

2. **추첨**: 스케줄러는 1부터 10까지의 번호 중 하나를 무작위로 선택합니다.

   - 1~6이 나오면 프로세스 A가 선택됩니다.
   - 7~9가 나오면 프로세스 B가 선택됩니다.
   - 10이 나오면 프로세스 C가 선택됩니다.

3. **CPU 할당**: 추첨에서 뽑힌 프로세스는 정해진 시간 동안 CPU를 독점적으로 사용합니다. 이런 추첨과 할당의 과정을 계속 반복하여 시스템을 원활하게 운영합니다.

이렇게 추첨을 충분히 많이 반복하다 보면, 결과적으로 각 프로세스는 자신의 추첨권 비율만큼 CPU 시간을 할당받게 됩니다. 위의 예시에서는 프로세스 A가 전체 CPU 시간의 약 60%, 프로세스 B가 약 30%, 프로세스 C가 약 10%를 사용하게 되겠죠.

물론 매 추첨마다 정확히 이 비율이 나오는 것은 아닙니다. 하지만 장기적으로 보면 평균적인 CPU 점유율이 추첨권 비율과 일치하게 되는 것이 바로 비례 배분 스케줄링이 보장하는 공정성입니다. 다만 앞서 본 것처럼 프로세스의 실행 시간이 너무 짧으면 이런 공정성이 다소 흔들릴 수 있다는 점은 유의해야 할 것 같습니다.

## 추첨권 배분 방식

추첨 스케줄링에서 아직 다루지 않은 문제는 추첨권을 작업에게 어떻게 분배할지입니다. 작업들에게 몇 개의 추첨권을 주어야 하는지 결정하는 것은 시스템 동작에 큰 영향을 미치므로 상당히 복잡한 문제입니다. 한 가지 접근 방식은 사용자가 자신의 상황을 가장 잘 이해한다고 가정하는 것입니다. 각 사용자에게 추첨권을 할당한 후, 사용자가 자신이 실행하고자 하는 작업에 따라 추첨권을 분배할 수 있도록 하는 것입니다. 그러나 이 방법은 문제의 본질을 해결하지 않습니다. 어떤 작업을 수행해야 하는지 전혀 제시하지 않습니다. 주어진 작업 집합에 대한 "추첨권 할당 문제"는 여전히 해결되지 않은 채로 남아 있습니다.

## 왜 결정론적 방법을 사용하지 않는가?

추첨 스케줄링은 무작위성을 활용하여 스케줄러를 단순하면서도 어느 정도 공정하게 만들 수 있지만, 완벽한 비례 배분을 보장하기는 어렵습니다. 특히 프로세스의 실행 시간이 짧을 때는 이런 한계가 더욱 두드러지죠. 이런 문제를 해결하기 위해 Waldspurger는 '보폭 스케줄링(stride scheduling)'이라는 결정론적 공정 배분 스케줄러를 고안했습니다.

보폭 스케줄링에서는 각 프로세스마다 고유한 '보폭(stride)' 값을 할당합니다. 프로세스가 CPU를 사용할 때마다 'pass' 변수를 보폭만큼 증가시켜 CPU 사용량을 추적합니다. 스케줄러는 이 pass 값과 보폭을 기준으로 다음에 실행할 프로세스를 결정하게 됩니다.

아래는 Waldspurger가 제시한 보폭 스케줄링의 의사코드입니다.

![Waldspurger](https://github.com/chu-aie/os-2024/assets/162019986/7ffce4f0-e0eb-47bd-ac4c-b028717f8770)

```{admonition} 보폭 스케줄링의 동작 단계
1. 초기화: 각 프로세스에 초기 보폭을 할당합니다. 보폭은 해당 프로세스의 우선순위나 중요도를 나타내는 값이 됩니다.

2. 프로세스 선택: 실행 가능한 프로세스 중 가장 작은 pass 값을 가진 프로세스를 선택하여 CPU를 할당합니다.

3. Pass 값 업데이트: 선택된 프로세스는 CPU를 사용하는 동안 자신의 pass 값을 보폭만큼 증가시킵니다. 이를 통해 다른 프로세스들도 공정하게 CPU를 사용할 수 있게 됩니다.

4. 다른 프로세스 대기: CPU를 사용 중인 프로세스 외의 다른 프로세스들은 자신의 pass 값을 유지하거나 감소시킵니다. Pass 값을 감소시키면 더 빨리 CPU를 받을 수 있고, 유지하면 기존의 순서를 유지하게 됩니다.

5. 반복: CPU 사용이 끝나면 위 과정을 반복하여 다음 프로세스를 선택합니다.
```

![stride](https://github.com/chu-aie/os-2024/assets/162019986/02bae397-e96d-4240-a469-dc4674f0a849)

보폭 스케줄링은 이런 방식으로 CPU 사용 시간을 프로세스 간에 공정하게 분배하여, 모든 프로세스가 자신의 중요도에 비례하여 CPU를 사용할 수 있도록 합니다.

그런데도 많은 경우 추첨 스케줄링이 선호되는 이유는 무엇일까요? 그것은 추첨 스케줄링이 보폭 스케줄링에 비해 가지는 고유한 장점 때문입니다.

보폭 스케줄링은 새로운 작업이 도착할 때마다 해당 작업의 상태 정보를 고려하여 스케줄링을 수행합니다. 예를 들어 보폭 스케줄링에서 새 작업이 도착하면 해당 작업의 초기 pass 값을 신중히 결정해야 합니다. 만약 pass 값을 0으로 설정하면 이 작업이 CPU를 독점할 수도 있는 거죠.

반면 추첨 스케줄링에서는 각 작업의 추첨권 수만 관리하면 됩니다. 새 작업이 추가되면 해당 작업의 추첨권 수를 전체 추첨권 수에 반영하는 것으로 충분합니다. 즉, 새 작업을 시스템에 통합하는 과정이 매우 간단해지는 것입니다.

또한 추첨 스케줄링은 무작위성으로 인해 특정 패턴의 작업 부하에 대해 보폭 스케줄링보다 더 나은 성능을 보일 수 있습니다. 물론 정확한 비례 배분이 필요하다면 보폭 스케줄링이 더 적합하겠지만, 많은 실제 시스템에서는 근사적인 공정성으로도 충분한 경우가 많습니다.

결국 추첨 스케줄링은 구현이 간단하고 새 작업 추가가 용이하며, 무작위성이 주는 이점까지 누릴 수 있어서 여전히 매력적인 선택지로 남아 있는 것입니다. 물론 정확성과 공정성 측면에서는 보폭 스케줄링에 뒤질 수밖에 없지만, 그 단순함과 유연함은 실제 시스템을 설계할 때 큰 강점으로 작용할 수 있습니다.

## 요약

비례 배분 스케줄링은 시스템 내의 여러 프로세스나 작업들 사이에서 CPU 시간을 공정하게 나누어주는 방식 중 하나입니다. 이 방식에서는 각 프로세스의 상대적 중요도에 따라 일정 수의 '추첨권(ticket)'을 부여하는데, 이는 마치 추첨에 응모하는 것과 비슷합니다. 추첨권의 수가 많을수록 해당 프로세스가 CPU 시간을 얻을 확률이 높아지는 거죠.

스케줄러는 각 프로세스가 가진 추첨권의 수에 비례하여 CPU 시간을 할당합니다. 즉, 추첨권을 많이 가진 프로세스일수록 더 자주, 더 오랫동안 CPU를 사용할 수 있게 되는 것입니다. 이를 통해 프로세스의 상대적 중요도를 CPU 시간 할당에 공정하게 반영할 수 있습니다.

비례 배분 스케줄링의 주요 특징은 다음과 같습니다:

- 상대적 중요도의 반영: 각 프로세스에 할당된 추첨권의 수는 그 프로세스의 중요도를 나타냅니다. CPU 시간은 이 추첨권 수에 비례하여 분배되므로, 중요도가 높은 프로세스는 자연스럽게 더 많은 CPU 시간을 받게 됩니다.

- 유연한 우선순위 조정: 프로세스의 중요도는 추첨권 수를 조정하는 것만으로 쉽게 변경할 수 있습니다. 새로운 프로세스가 추가되거나 기존 프로세스의 우선순위를 바꿔야 할 때 매우 유용합니다.

- 장기적 공정성 보장: 충분히 긴 시간 동안 스케줄링을 수행하면, 각 프로세스는 자신의 추첨권 비율만큼의 CPU 시간을 받게 됩니다. 이는 시스템 자원이 프로세스 간에 공정하게 분배됨을 의미합니다.

하지만 비례 배분 스케줄링에도 몇 가지 단점이 있습니다. 우선 무작위 추첨 방식 때문에 단기적으로는 CPU 할당이 불균형해 보일 수 있습니다. 또한 추첨을 수행하고 당첨 프로세스를 확인하는 과정에서 어느 정도의 오버헤드가 발생할 수 있습니다.

그럼에도 불구하고 비례 배분 스케줄링은 프로세스의 상대적 중요도를 유연하게 반영하면서 시스템 자원을 효율적이고 공정하게 관리할 수 있는 강력한 방법입니다. 시스템의 요구사항과 우선순위가 다양한 환경에서 적응력을 발휘할 수 있기에, 여러 분야에서 폭넓게 활용되고 있습니다.

운영체제의 CPU 스케줄링 알고리즘으로서뿐만 아니라, 네트워크 대역폭 할당, 디스크 I/O 스케줄링 등 컴퓨터 시스템의 다양한 자원 관리 문제에 비례 배분 스케줄링의 아이디어를 적용할 수 있습니다. 그만큼 개념이 직관적이고 구현이 간단하면서도 효과적이라고 할 수 있겠죠.
