티스토리 뷰
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
링크
TAG
- C#.NET
- 블루버블다이브팀
- Windows
- 현포다이브
- 윈도우
- 블루버블다이빙팀
- 제주도
- 서귀포블루버블
- Linux
- 성산블루버블
- 외돌개
- CMake
- ip
- C
- 스쿠버 다이빙
- 블루버블
- 서귀포
- 암호화
- C++
- 스쿠버다이빙
- 울릉도
- 패턴
- Build
- C#
- OpenSource
- DLL
- script
- PowerShell
- C# 고급 기술
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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