티스토리 뷰
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 시간을 공정하게 분배합니다. 간단하고 효율적이기 때문에 시분할 시스템에서 널리 사용됩니다. 타임 슬라이스의 크기를 조정하여 성능에 미치는 영향을 실험해보세요!
728x90
    
    
  
					댓글
						
					
					
					
				
			반응형
    
    
    
  
										공지사항
										
								
							
							
							
								최근에 올라온 글
								
							
							
								
									최근에 달린 댓글
									
							
							
								- Total
- Today
- Yesterday
									링크
									
							
							
								
									TAG
									
							
							
							- C++
- 서귀포블루버블
- 블루버블다이브팀
- Build
- Linux
- 블루버블다이빙팀
- 리눅스
- 제주도
- RSA
- C
- 스쿠버다이빙
- ReFS
- 디자인패턴
- 암호화
- PowerShell
- 서귀포
- 울릉도
- 블루버블
- 다이빙
- OpenSource
- Thread
- Windows
- 성산블루버블
- 패턴
- 현포다이브
- DLL
- 양파다이브
- C#
- ip
- 윈도우
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
									글 보관함
									
							
					