티스토리 뷰

728x90
라운드 로빈 스케줄링 알고리즘

라운드 로빈(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 시간을 공정하게 분배합니다. 간단하고 효율적이기 때문에 시분할 시스템에서 널리 사용됩니다. 타임 슬라이스의 크기를 조정하여 성능에 미치는 영향을 실험해보세요!

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함
250x250