모든 이야기

라운드 로빈은 시간 할당량을 왜 신중하게 골라야 할까

라운드 로빈은 실행 가능한 작업에 차례대로 짧은 CPU 시간을 주는 스케줄링 방식이다. 준비 큐의 첫 작업을 실행하고, 시간 할당량을 다 쓰면 아직 끝나지 않은 작업을 큐 뒤로 보낸다. 긴 작업 하나가 CPU를 계속 붙들지 못하게 하므로 여러 사용자의 입력과 짧은 요청을 함께 다루는 상황에서 직관적인 출발점이 된다.

세 작업이 10ms씩 CPU를 사용하고 미완료 작업은 준비 큐 뒤로 돌아가는 순환 그림

시간 할당량은 빠른 차례 제공과 전환 비용 사이의 균형을 정한다.

한 번의 차례가 끝나는 조건

작업은 할당량을 소진하기 전에 종료하거나 입출력을 기다릴 수 있다. 이때 남은 시간을 채우려고 CPU를 낭비하지 않고 다른 준비 작업을 실행한다. 기다리는 작업은 준비 큐 밖에 있다가 필요한 사건이 끝나면 다시 실행 가능한 상태로 돌아온다. 라운드 로빈은 언제나 모든 작업에 같은 실행 시간을 강제로 채우는 정책이 아니다.

설명용으로 A·B·C가 시각 0에 도착하고 각각 25ms, 15ms, 10ms의 CPU 계산을 필요로 한다고 하자. 할당량이 10ms이고 전환 비용이 없다면 A는 010, B는 1020, C는 2030에 실행돼 C가 끝난다. A는 3040, B는 4045에 끝나며, A는 4550에 끝난다. 총 계산량은 그대로지만 완료 순서와 첫 차례의 시각이 달라진다.

빠른 첫 반응과 빠른 완료는 다르다

위 예제에서 첫 CPU 배정은 A가 즉시, B가 10ms 후, C가 20ms 후 받는다. 이를 첫 응답을 생산할 수 있는 출발 시점으로 해석할 수 있다. 하지만 모든 작업이 완료되기까지의 시간은 별개다. 작은 작업에 더 빨리 차례를 줘도 긴 작업이 자주 끊기면 평균 완료 시간이 최단 작업 우선 방식보다 나쁠 수 있다.

라운드 로빈의 핵심 조절값은 시간 할당량이다. OSTEP의 CPU 스케줄링 설명은 짧은 할당량이 응답에 유리하지만 문맥 교환 부담을 키운다고 설명한다. 할당량이 아주 길어 모든 작업이 한 차례에 끝나면 도착 순서대로 완료하는 정책에 가까워진다.

짧게 끊는 데도 가격이 있다

작업 사이의 전환에는 상태 저장·복원과 스케줄러 실행이 필요하다. 전환 뒤 캐시와 주소 변환 정보의 재사용성도 달라질 수 있다. 단순 모델에서 할당량이 q, 전환 비용이 c라면 계산에 쓰는 비율은 대략 q/(q+c)로 생각할 수 있다. 실제로는 종료·대기·코어 이동 등이 섞여 이 식이 시스템 전체 성능을 정확히 예측하지는 않는다.

공정성도 조건을 붙여야 한다. 동일 우선순위의 준비된 작업이 정해진 큐에서 차례를 돌면 CPU 사용 기회를 균등하게 주기 쉽다. 그러나 기다리는 작업, 다른 우선순위 큐, 코어별 배치가 있으면 단순한 평등 모델이 달라진다. 큐에 준비 작업이 늘어날수록 다음 차례까지 기다리는 시간도 길어진다.

실제 운영체제는 라운드 로빈을 다른 정책의 일부로 사용하기도 한다. 같은 우선순위 안에서는 순환하고, 우선순위 사이에서는 별도 규칙을 적용하는 식이다. 이 알고리즘을 분석할 때는 도착 시각, 대기 발생, 준비 큐 규칙, 전환 비용을 적어야 한다. 시간 할당량 하나가 반응성·효율·완료 시간을 동시에 바꾼다는 사실이 라운드 로빈의 가장 중요한 교훈이다.

참고 자료

라운드 로빈은 시간 할당량을 왜 신중하게 골라야 할까 · ariser