작성일
20231129
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 의미합니다.
오래 기다린 프로세스의 우선순위를 높여서 기아 상태를 해결할 수 있습니다.
CPU 스케줄링은 레디 큐에 있는 프로세스들 중 어떤 프로세스에게 CPU를 할당할지 결정하는 것 입니다. 여러 프로세스들이 번갈아가며 수행되는 시분할 시스템에서 각 프로세스들의 CPU 수행시간은 다 다릅니다. 어떤 프로세스는 CPU를 잡고 있는 시간이 길고, 어떤 프로세스는 굉장히 짧을 수 있습니다. 이런 경우에, CPU 스케줄링을 통해 프로세스들에게 CPU를 적절히 할당 해줘서 빠른 사용자 응답 시간을 제공하고, CPU와 I/O 장치의 효율을 높여줄 수 있습니다.
준비 큐로 보낼지 말지 결정하는 스케줄러입니다. (현대에서는 프로세스가 시작되면 장기 스케줄러 없이 곧바로 프로세스에 메모리를 할당해 준비 큐에 넣습니다.)
FCFS는 먼저 레디 큐에 도착한 프로세스 순서대로 CPU를 할당 해주는 스케줄링 방식 입니다. 구현이 간단 하지만, 만약 CPU 사용 시간이 매우 긴 프로세스가 먼저 도착 한다면, 뒤이어 도착한 다수의 프로세스들이 긴 시간을 기다려야 한다는 단점이 있습니다.
SJF는 Shortest Job First 라는 뜻으로 CPU 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당 하는 방식 입니다. 이를 위해서는 프로세스들의 CPU 수행 시간을 예측 해야 합니다. 프로세스들의 CPU 수행시간은 이전에 수행되었던 프로세스의 실제 수행 시간과 예측했던 수행시간을 통해 예측할 수 있습니다.
SRTF 방식은 SJF의 선점 버전 입니다. 현재 CPU에서 실행 중인 프로세스의 남은 CPU 실행 시간보다 더 짧은 CPU 실행 시간을 가지는 프로세스가 도착할 경우 CPU를 빼앗아 할당 해줍니다. 하지만 CPU 실행 시간이 짧은 프로세스가 계속 도착한다면 CPU 실행 시간이 긴 프로세스는 영원히 CPU를 할당받지 못하는 Starvation이 발생할 수 있습니다.
Ready Queue에서 기다리는 프로세스들중 우선순위가 가장 높은 프로세스에세 CPU를 할당하는 방식입니다. 우선순위를 결정하는 방식에는 여러가지가 있을 수 있습니다. 예를들어 SJF 알고리즘 처럼 CPU 버스트 시간을 기준으로 잡을 수 있습니다. 우선순위 스케줄링의 문제점 중 하나는 기아 현상이 발생할 수 있다는 점입니다. 우선순위가 낮은 프로세스가 계속 CPU를 할당 받지 못할 수 있기 때문입니다.
라운드 로빈 방식에서는 각 프로세스가 CPU를 연속적으로 사용할 수 있는 시간이 타임 퀀텀으로 제한 됩니다. 예를들어 한 프로세스가 타임 퀀텀만큼 CPU를 사용했다면, 타이머 인터럽트가 발생하고 레디큐에 줄 서 있는 다른 프로세스에게 CPU를 할당합니다. 여러 프로세스들에게 빠른 시간안에 조금씩 CPU를 사용하게 해주는 방식 이기 때문에 사용자에 빠른 응답 시간을 제공해줄 수 있습니다.
멀티레벨 큐 스케줄링은 레디큐를 여러개로 나누어 관리하는 스케줄링 기법 입니다. 프로세스들이 CPU를 할당 받기 위해 여러 줄로 서서 기다리는 방식 입니다. 일반적으로 CPU 실행시간이 짧은 대화형 프로세스를 담기 위한 전위 큐와(라운드 로빈 방식 적용) CPU 실행시간이 긴 계산위주의 프로세스를 담기 위한 후위 큐로 분할되어 운영됩니다.(FCFS 방식 적용) 멀티 레벨 큐에서는 프로세스에 대한 스케줄링 뿐만 아니라 큐들에 대한 스케줄링도 해줘야 합니다. 큐에 우선순위를 부여하거나 큐에대해 타임 슬라이스 방식을 적용하는 방법이 있습니다.
멀티 레벨 피드백 큐는 CPU 할당을 기다리는 프로세스들을 여러 개의 레디큐에 줄 세우는 방식 입니다. 각 큐는 우선순위가 있습니다. 어떤 프로세스가 CPU 할당을 받고 작업을 끝내지 못하면 CPU 작업 시간이 긴 프로세스로 간주하여 점점 우선순위가 낮은 큐로 이동시킵니다. 우선순위가 낮은 레디큐에서 너무 오래 기다린 프로세스에 대해서는 다시 우선 순위가 높은 레디큐로 보내는 에이징 기법을 적용 합니다. 프로세스 CPU 작업 시간에 따라 적절한 큐에 배치하여 CPU 스케줄링을 효율적으로 하는 방법 입니다.
[BLOG]