개발/코더 탈출
[용어 공부] 라운드 로빈 스케줄링 알고리즘
-=HaeJuK=-
2024. 12. 2. 15:08
반응형
라운드 로빈(Round Robin) 스케줄링 알고리즘
라운드 로빈(RR)은 운영 체제에서 가장 간단하고 널리 사용되는 스케줄링 알고리즘 중 하나입니다. 이 알고리즘은 선점형(preemptive) 방식으로, 타임 슬라이스(time quantum)라고 불리는 고정된 시간 단위에 따라 프로세스가 CPU 시간을 공정하게 나누어 사용하도록 합니다.
작동 방식
- 모든 프로세스가 원형 큐(circular queue)에 추가됩니다.
- 스케줄러는 각 프로세스에 고정된 타임 슬라이스를 순서대로 할당합니다.
- 프로세스가 주어진 시간 내에 완료되지 않으면, 실행이 중단되고 큐의 뒤로 이동합니다.
- 모든 프로세스가 완료될 때까지 이 과정을 반복합니다.
주요 특징
- 공정하며 구현이 간단합니다.
- 시분할(time-sharing) 시스템에 적합합니다.
- 성능은 타임 슬라이스의 선택에 따라 크게 좌우됩니다.
C++ 구현
아래는 라운드 로빈 스케줄링 알고리즘을 간단히 구현한 C++ 예제입니다:
#include <iostream>
#include <queue>
using namespace std;
struct Process {
int id; // 프로세스 ID
int burstTime; // 실행 시간
int remainingTime; // 남은 실행 시간
};
// 라운드 로빈 스케줄링 함수
void roundRobinScheduling(queue<Process>& processes, int timeQuantum) {
cout << "라운드 로빈 스케줄링 시작:" << endl;
while (!processes.empty()) {
Process current = processes.front();
processes.pop();
// 프로세스 실행 시뮬레이션
if (current.remainingTime <= timeQuantum) {
cout << "프로세스 " << current.id << " 완료." << endl;
} else {
current.remainingTime -= timeQuantum;
cout << "프로세스 " << current.id << " " << timeQuantum << " 단위 실행." << endl;
processes.push(current); // 큐의 뒤로 이동
}
}
}
int main() {
int timeQuantum = 3; // 타임 슬라이스 설정
queue<Process> processes;
// 프로세스 큐에 추가
processes.push({1, 8, 8});
processes.push({2, 4, 4});
processes.push({3, 9, 9});
// 라운드 로빈 스케줄링 실행
roundRobinScheduling(processes, timeQuantum);
return 0;
}
출력
위 프로그램의 실행 결과는 다음과 같습니다:
프로세스 1 3 단위 실행. 프로세스 2 3 단위 실행. 프로세스 3 3 단위 실행. 프로세스 1 3 단위 실행. 프로세스 3 3 단위 실행. 프로세스 1 완료. 프로세스 2 완료. 프로세스 3 완료.
결론
라운드 로빈 스케줄링 알고리즘은 프로세스 간 CPU 시간을 공정하게 분배합니다. 간단하고 효율적이기 때문에 시분할 시스템에서 널리 사용됩니다. 타임 슬라이스의 크기를 조정하여 성능에 미치는 영향을 실험해보세요!
728x90