CPU 스케줄링은 시스템의 성능과 효율성을 최적화하기 위해 여러 프로세스 또는 스레드에 CPU 사용 시간을 어떻게 할당할지 결정하는 과정이다. 이 과정에서 스케줄링 알고리즘을 사용하여 작업의 실행 순서를 결정한다.
FIFO(FCFS)는 먼저 도착한 프로세스를 먼저 처리한다. 프로세스가 준비 큐에 도착한 순서대로 CPU를 할당받는다.
프로세스 ID | 도착 시간 | 실행 시간 |
P1 | 0 | 4 |
P2 | 1 | 3 |
P3 | 2 | 2 |
- P1은 시간 0에 도착하여 바로 실행을 시작하고, 4시간 동안 실행된다. (0-4)
- P2는 시간 1에 도착하지만, P1이 실행 중이므로 대기해야 하며, P1이 완료된 시간 4에 실행을 시작하여 3시간 동안 실행된다. (4-7)
- P3는 시간 2에 도착하지만, P1과 P2의 실행을 대기해야 하며, P2가 완료된 시간 7에 실행을 시작하여 2시간 동안 실행된다. (7-9)
SJF(Shortest Job First)는 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당한다. SJF는 비선점형과 선점형(SRTF) 두 가지 변형이 있다.
프로세스 ID | 도착 시간 | 실행 시간 |
P1 | 0 | 6 |
P2 | 1 | 5 |
P3 | 2 | 4 |
- 시간 0에 P1이 도착하고, 다른 프로세스가 없으므로 P1이 실행을 시작한다.
- 시간 1에 P2가 도착하지만, P1이 실행 중이므로 P2는 대기해야 한다.
- 시간 2에 P3가 도착하지만, P1이 여전히 실행 중이므로 P3도 대기한다.
- 시간 6에 P1의 실행이 완료되며, 이 시점에서 대기 중인 P2와 P3 중에서 실행 시간이 가장 짧은 P3(실행 시간 4)이 다음으로 실행된다.
- 시간 10에 P3의 실행이 완료되고, 마지막으로 P2(실행 시간 5)가 실행된다.
RR(Round Robin)은 프로세스에게 동일한 크기의 시간 할당량(타임 슬라이스)을 순차적으로 할당한다. 타임 슬라이스가 지나면 프로세스는 준비 큐의 끝으로 이동하고, CPU는 다음 프로세스에게 할당된다.
프로세스ID | 도착 시간 | 실행 시간 |
P1 | 0 | 6 |
P2 | 2 | 2 |
P3 | 4 | 4 |
위 표에서 타임 슬라이스가 2일 때,
- 시간 0~2: P1이 먼저 시작하여 처음 2초 동안 실행된다.
- 시간 2~4: P1의 타임 슬라이스가 끝나고 P2가 도착했으므로, P2가 다음 2초 동안 실행된다.
- 시간 4~6: P2가 종료되고, P3가 도착했으므로 P3가 다음 2초 동안 실행된다.
- 시간 6~8: P1이 다시 실행되어 남은 2초 동안 실행된다.(총 실행 시간 6초 중 4초가 남았으므로 2초만 실행)
- 시간 8~10: P3가 다시 실행되어 다음 2초 동안 실행된다.(남은 시간 2초)
- 시간 10~12: P3의 남은 2초가 실행되어 종료된다.
우선순위 스케줄링(Priority Scheduling)은 각 프로세스에 우선순위를 할당하고, 가장 높은 우선순위를 가진 프로세스에게 먼저 CPU를 할당한다. 이 알고리즘도 비선점형과 선점형이 있다.
프로세스 ID | 도착 시간 | 실행 시간 | 우선순위 |
P1 | 0 | 6 | 3 |
P2 | 2 | 2 | 1 |
P3 | 4 | 4 | 2 |
- 시간 0~2: P1이 가장 먼저 도착하므로 실행을 시작한다. 우선순위는 3이다.
- 시간 2~4: P2가 도착한다. P2의 우선순위는 1로, 가장 높다. 따라서, P1의 실행이 중단되고 P2가 실행을 시작한다. P2는 실행 시간이 2초이므로 이 기간 동안 완료된다.
- 시간 4~6: P2의 실행이 완료된 후, P1이 중단되었던 지점부터 실행을 재개한다. 그러나 바로 P3가 도착한다. P3의 우선순위는 2로, 실행 중인 P1보다 높다. 따라서, P1의 실행이 다시 중단되고 P3가 실행을 시작한다.
- 시간 4~8: P3은 실행 시간이 4초이므로, 이 기간 동안 실행되어 완료된다.
- 시간 8~14: P3의 실행이 완료된 후, 중단되었던 P1이 남은 실행 시간을 가지고 실행을 재개한다. P1은 남은 4초 동안 실행되어 완료된다.
다단계 큐(Multilevel Queue)스케줄링은 준비 큐를 여러 개의 별도 큐로 분할하고, 각 큐는 자신만의 스케줄링 알고리즘을 가진다. 프로세스는 그들의 특성(예: 우선순위, 프로세스 타입 등)에 따라 적절한 큐에 배치된다.
프로세스 ID | 도착 시간 | 실행 시간 | 큐 |
P1 | 0 | 6 | Q2 |
P2 | 2 | 2 | Q1 |
P3 | 4 | 4 | Q2 |
두 개의 큐 (Q1>Q2)일 때,
- 시간 0~2: P1이 Q2에 있으며, 시스템에 다른 프로세스가 없기 때문에 P1이 실행을 시작한다.
- 시간 2~4: P2가 도착하고 Q1에 배치된다. Q1이 Q2보다 우선순위가 높기 때문에, P1의 실행이 중단되고 P2가 실행을 시작한다.
- 시간 4~6: P2의 실행이 완료된다. P1의 남은 실행 시간은 4초이다. 이때 P3가 도착하지만, P1이 먼저 도착했으므로 P1이 계속해서 실행된다.
- 시간 6~10: P1의 실행이 완료된다. 이제 P3가 실행을 시작한다.
- 시간 10~14: P3의 실행이 완료된다.
다단계 피드백 큐(Multilevel Feedback Queue)스케줄링은 다단계 큐 스케줄링을 확장한 형태로, 프로세스가 다른 큐로 이동할 수 있게 한다. 이는 프로세스의 실행 행위에 따라 동적으로 우선순위를 조정할 수 있게 한다.
프로세스 ID | 도착 시간 | 실행 시간 | 큐 |
P1 | 0 | 6 | Q1 |
P2 | 2 | 2 | Q1 |
P3 | 4 | 4 | Q1 |
두 개의 큐(Q1>Q2), 타임 슬라이스 2일때,
- 시간 0~2: P1이 처음 2초 동안 실행된다.
- 시간 2~4: P1의 타임 슬라이스가 종료되고, P2가 도착했으므로 P2가 다음 2초 동안 실행된다. 이 시점에서 P2는 완료된다.
- 시간 4~6: P2가 완료되고, P3가 도착했으므로 P3가 다음 2초 동안 실행된다.
- 시간 6~8: P3의 첫 번째 타임 슬라이스가 종료되고, P1이 다시 실행을 시작한다. P1은 두 번째 타임 슬라이스인 2초 동안 실행된다.
- 시간 8~10: P1의 두 번째 타임 슬라이스가 종료되고, P3가 다시 실행을 시작한다. P3는 나머지 2초 동안 실행되어 완료된다.
- 시간 10~12: P1이 마지막 2초 동안 실행되어 완료된다.
4BSD(4th Berkeley Software Distribution)는 유닉스 운영 체제의 한 버전으로, 버클리 캘리포니아 대학교에서 개발되었다. 이 운영 체제는 많은 혁신적인 기능을 도입하여 유닉스 기반 시스템의 발전에 큰 영향을 미쳤다. 4BSD 스케줄러는 특히 시분할 시스템에 적합한 CPU 스케줄링 알고리즘을 제공하며, 시스템의 반응 시간과 사용자와의 상호 작용에 초점을 맞춘다. 이 스케줄러는 프로세스의 우선순위를 동적으로 조정하여, 인터랙티브한 작업과 배경 작업 사이의 균형을 잘 맞출 수 있다.
nice는 유닉스 및 유닉스 계열 운영 체제에서 프로세스의 스케줄링 우선순위를 조정하기 위해 사용되는 명령어이다. 프로세스에 'nice 값'을 할당함으로써, 시스템은 해당 프로세스의 우선순위를 조정한다. nice 값이 낮을수록 프로세스는 더 높은 우선순위를 갖게 되어 CPU 시간을 더 많이 받는다. 반대로, nice 값이 높을수록 프로세스의 우선순위는 낮아지고, CPU 시간을 더 적게 할당받게 된다. 이를 통해 시스템 관리자나 사용자는 중요도가 낮은 작업에 더 낮은 우선순위를 지정하여 중요한 작업이 더 많은 시스템 자원을 사용할 수 있도록 할 수 있다.
'CS > 운영체제' 카테고리의 다른 글
하이퍼바이저, 애뮬레이션, QEMU (0) | 2024.03.26 |
---|---|
Pint OS_Project 1 구현 (1) | 2024.03.26 |
Context Switching, Semaphore와 Mutex (2) | 2024.03.25 |
32bit and 64bit, RAX, CPU vs GPU (1) | 2024.03.24 |
ECF, 시스템 콜과 인터럽트 그리고 시그널 (0) | 2024.03.22 |