1.2스케줄링
스케줄링(scheduling)이란 운영체제가 여러 프로세스의 CPU 할당 순서를 결정하는 것입니다. 이 일을 하는 프로그램을 스케줄러라고 합니다.
스케줄링은 CPU를 언제 할당하는지에 따라 선점형 스케줄링(preemptive scheduling)과 비선점형 스케줄링(non-preemptive scheduling)으로 나눌 수 있습니다.
선점형 스케줄링에서는 어떤 프로세스가 실행 중에 있어도 스케줄러가 강제로 실행을 중지하고 다른 프로세스에 CPU를 할당할 수 있습니다. 이에 반해 비선점형 스케줄링에서는 실행 중인 프로세스가 종료되거나 I/O 작업에 들어가거나 명시적으로 CPU를 반환하기 전까지 계속해서 실행됩니다. 우선순위가 높은 프로세스가 생성되어도 실행 중인 프로세스가 자발적으로 CPU를 양보하기 전까지는 실행될 수 없습니다. 윈도를 포함한 최근 운영체제는 멀티태스킹을 위해 선점형 스케줄링을 합니다.
스케줄링 알고리즘의 종류는 매우 다양한데 그중에서 네 가지만 알아보겠습니다.
1| 우선순위(Priority) 알고리즘 프로세스에 우선순위를 매겨 우선순위가 높은 프로세스를 먼저 실행합니다. 어떤 프로세스가 CPU를 할당받고 실행되는 도중에 우선순위가 높은 프로세스가 생성되면 스케줄러는 실행 중인 프로세스를 실행 가능 상태로 만들고 우선순위가 높은 프로세스를 실행합니다. 계속해서 우선순위가 높은 프로세스가 생성되면 우선순위가 낮은 프로세스는 계속 CPU를 할당받지 못하는 현상이 발생하는데 이를 기아 상태(starvation)라고 합니다. 이를 해결하기 위해 우선순위가 낮은 프로세스가 일정 시간 CPU를 할당받지 못하면 우선순위를 높여 실행될 수 있도록 만드는데 이러한 방법을 에이징(aging)이라고 합니다.