이 게시글은 operating system concepts 책을 기반으로 들은 강의 내용을 정리한 것입니다.


CPU scheduling 이란?

기본적으로 cpu는 한 번에 한가지의 일 밖에 하지 못한다. (싱글코어 가정)

하지만 우리가 실제로 컴퓨터를 사용할 때는 음악을 틀어 놓고 코딩을하면서 프로그램을 실행시켜 마치 여러가지일을 동시에 처리하는 것처럼 보인다.

이는 cpu 가 매우 빠르게 짧은 시간동안 여러가지 일을 돌아가면서 처리하여 마치 우리가 보기에는 동시에 처리하는 것처럼 보이게 한다.

이를 concurrent 하게 처리한다고 한다. (concurrent vs parallel 차이 찾아보기)

기본적으로 process (program이 실행되는 기본적인 단위)가 실행될 때에는 running, waiting, ready 상태를 번갈아 가며 실행하게 된다.

running이 실제로 cpu에서 실행되고 있는 프로세스의 상태이고 waiting은 다른 I/O 장치를 기다리는 상태, ready는 당장 실행될 수 있는 상태이다.

running인 프로세스는 단 하나뿐이고 ready인 상태인 프로세스는 여러 개이다.

여기서 ready 상태인 프로세스 중 어떤 것을 dispatch하여 running 상태로 cpu를 실행시켜야 할까?

이 문제가 운영체제에서 해야하는 CPU scheduling 이다.


Scheduling algorithm

기본적으로 스케쥴링 알고리즘을 선택할 때 고려해야할 사항이 여러가지 있다.

최대한 cpu를 많이 사용해야하고, 특정 프로세스가 독점하지 않고 골고루 cpu를 사용해야하며 빠르고 효율적으로 처리해야한다.

시스템마다 목표로 하는 바가 조금씩 다르기 때문에 자세한 것은 추가로 찾으면 좋을 것 같다.