RR ROUND ROBIN

2024. 2. 14. 15:13정보처리,전산/운영체제

반응형

라운드 로빈(Round Robin) 스케줄링 알고리즘은 CPU를 여러 프로세스에 분배하여 각 프로세스가 일정 시간 동안 CPU를 사용하고 넘어가는 방식으로 동작한다.


def round_robin(processes, quantum):
    n = len(processes)
    remaining_burst_time = [0] * n
    for i in range(n):
        remaining_burst_time[i] = processes[i][1]

    time = 0
    total_waiting_time = 0
    total_turnaround_time = 0
    while True:
        done = True
        for i in range(n):
            if remaining_burst_time[i] > 0:
                done = False
                if remaining_burst_time[i] > quantum:
                    time += quantum
                    remaining_burst_time[i] -= quantum
                else:
                    time += remaining_burst_time[i]
                    total_waiting_time += time - processes[i][1]
                    remaining_burst_time[i] = 0

        if done:
            break

    print("Average waiting time:", total_waiting_time / n)


# 사용법 예시
# 각 프로세스는 (프로세스 번호, 실행 시간)의 튜플로 표현된다.
processes = [(1, 10), (2, 5), (3, 8), (4, 2)]
quantum = 2
round_robin(processes, quantum)


 `processes` 리스트는 프로세스를 나타내며, 각 프로세스는 프로세스 번호와 실행 시간의 튜플로 표현된다

 `quantum` 변수는 한 번에 각 프로세스가 실행할 수 있는 최대 시간을 나타낸다.

 

각 프로세스의 평균 대기 시간을 계산하고 출력한다.

 

1. `def round_robin(processes, quantum):`
   - 두개의 인자를 가지는 round_robin 함수를 정의 : processes(프로세스 목록)와 quantum(시간)

2. `n = len(processes)`
   - 프로세스 목록의 길이를 구하여 변수 n에 저장

3. `remaining_burst_time = [0] * n`
   - remaining_burst_time이라는 길이가 n인 리스트를 생성하고, 모든 요소를 0으로 초기화한다.

이 리스트는 각 프로세스의 남은 실행 시간을 나타낸다.

4. `for i in range(n):

             remaining_burst_time[i] = processes[i][1]`
   - 각 프로세스의 남은 실행 시간을 해당 프로세스의 실행 시간으로 초기화함.

processes 리스트의 각 요소는 (프로세스 번호, 실행 시간)의 형태를 가지고 있다.

 


time = 0

현재 시간을 0으로 초기화

 

total_waiting_time = 0

총 대기 시간을 0으로 초기화

 

total_turnaround_time = 0

턴어라운드 타임을 0으로 초기화


5. `done = True`
   - 모든 프로세스가 완료되었는지 여부를 나타냄

 

6. `if remaining_burst_time[i] > 0:`
    - 만약 현재 프로세스의 남은 실행 시간이 0보다 크다면 실행


 `if remaining_burst_time[i] > quantum:`

현재 실행 중인 프로세스의 남은 실행 시간이 quantum보다 큰지 확인함

 즉, 현재 프로세스가 quantum 보다 긴 시간 동안 실행될 수 있는지 여부를 확인하는 조건문이다.

 `time += quantum`:

현재 실행 중인 프로세스가 quantum 만큼 CPU를 사용하게 되므로, 시간을 quantum 만큼 증가시킴

이는 현재 실행 중인 프로세스의 실행 시간을 추적하는 것이다.

. `remaining_burst_time[i] -= quantum`:

 현재 실행 중인 프로세스가 quantum 만큼 CPU를 사용했으므로, 해당 프로세스의 남은 실행 시간에서 quantum 만큼을 뻄.

이를 통해 현재 프로세스가 CPU를 사용한 시간을 추적하고, 남은 실행 시간을 업데이트함.

즉, 현재 실행 중인 프로세스의 남은 실행 시간이 quantum 보다 길 경우에는 프로세스가 quantum 만큼 CPU를 사용하고

, 남은 실행 시간을 업데이트하는 과정을 나타낸다. 만약 현재 실행 중인 프로세스의 남은 실행 시간이 quantum 보다 짧다면, quantum 보다 짧은 시간만큼만 CPU를 사용하고, 남은 실행 시간을 0으로 설정하여 해당 프로세스가 완료되었음을 나타낸다.

 

 

5. `print("Average waiting time:", total_waiting_time / n)`
    - 평균 대기 시간을 계산하여 출력

평균 대기 시간은 총 대기 시간을 프로세스의 수로 나눈 값이다.

반응형

'정보처리,전산 > 운영체제' 카테고리의 다른 글

PROCESS  (0) 2024.08.16
복구시간목표(RTO)와 복구시점목표(RPO)  (0) 2024.07.26
펌웨어(Firmware)  (0) 2024.06.26
Cache  (0) 2024.04.29
SAN Storage Area Network  (0) 2024.01.21