| FCFS (First-Come-First-Service) | ready queue 에 도착 시간을 기준으로 먼저 도착한 프로세스를 먼저 처리한다. Non-preemptive scheduling (비선점) | | --- | --- | | RR (Round-Robin) | ready queue 에 도착 시간을 기준으로 먼저 도착한 프로세스를 먼저 처리하지만, 자원 사용 제한 시간 (time quantum) 이 있다. 프로세스는 할당된 시간이 지나면 자원을 반납한다. (Timer-runout) Preemptive scheduling (선점) | | SPN (Shortest-Process-Next) | 실행시간 (burst time) 을 기준으로 burst time 이 가장 작은 프로세스를 먼저 처리한다. Non-preemptive scheduling (비선점) | | SRTN (Shortest Remaining Time Next) | SPN 의 변형이며, 잔여 실행 시간이 더 적은 프로세스가 ready 상태가 되면 선점된다. Preemptive-scheduling (선점) | | HRRN (High-Response-Ratio-Next) | SPN 에 Aging concepts을 합친 SPN 의 변형이다. Aging concepts 란 프로세스의 대기 시간 (WT) 을 고려하여 기회를 제공하는 것이다. Response ratio 가 높은 프로세스가 우선이다. Response ratio = WT+BT/BT Non-preemptive scheduling (비선점) |
이제 6개 알고리즘의 공통된 입출력 및 로직을 서술하겠다. 6개 알고리즘 모두 기본적으로 아래와 같은 로직으로 구성돼 있다.
<aside> 💡 스케줄링 알고리즘 공통 로직
선점 알고리즘인 RR (Round Robin)이나 SRTN (Shortest Remaining Time Next)의 경우 선점 로직이 추가되며 알고리즘의 큰 틀은 변하지 않는다. 각 알고리즘들의 입력과 출력도 거의 동일하다. 프로세스 개수, 프로세서(코어) 정보, Arrival Time 그리고 남은 작업량을 입력으로 받는다. 여기에 RR 알고리즘은 Time quantum을 추가로 입력 받는다. 아래는 FCFS 스케줄링 알고리즘을 예시로 함수가 필요로 하는 매개변수를 나타내었다.
def FCFS(inputInfo: tuple, arrivalTime: list, workLoad: list):
...
inputInfo는 프로세스 수를 나타내는 process와 프로세서 코어 정보가 담긴 리스트 processor가 튜플로 저장되어 있다. arrivalTime과 workLoad는 각각 도착시간과 프로세스를 처리하는 데 남은 작업량으로 프로세스 개수만큼 리스트로 주어진다.
알고리즘의 출력은 모두 동일한데, 각 프로세스의 WT(Waiting Time)과 TT(Turnaround Time), NTT(Normalized Turnaround Time) 그리고 소비전력이다. 그리고 result 변수에는 AT, BT, WT, 소비전력, 완료된 프로세스, 작업량, Ready queue의 정보가 1초 단위로 담겨있다. 위의 출력을 바탕으로 FCFS 스케줄링 알고리즘의 반환값을 구현한 코드이다.