장기 스케줄러
는 HDD 상의 프로그램을 커널에 등록(or 레디 큐 등록)할 때의 스케줄러입니다.단기 스케줄러
는 레디 큐의 프로세스를 CPU에 할당하여 실행 상태로 만들 때의 스케줄러입니다.중기 스케줄러
는 메모리에 적재된 프로세스 수를 관리하는 스케줄러입니다.현대 OS에서는 대부분 장기 스케줄러를 두지 않습니다. 훨씬 적은 양의 메모리를 활용했던 과거에는 프로세스에 효율적으로 메모리를 할당하기 위해 장기 스케줄러의 역할이 필요했지만, 비교적 많은 양의 메모리를 활용하는 현대에는 프로세스가 시작되면 장기 스케줄러 없이 바로 프로세스에 메모리를 할당하여 장기 스케쥴러의 작업 없이 레디 큐에 넣어주게 됩니다.
프로세스의 상태는 메모리 할당 상태에 따라 크게
Active(Swapped-in)
상태와Suspended(Swapped-out)
상태로 나뉠 수 있습니다.
Ready
: 메모리를 할당받은 프로세스는 레디 큐에서 프로세서(CPU) 할당을 대기합니다.Running
: CPU 스케줄링(단기 스케줄링)에 의해 CPU를 할당받은 프로세스는 Running 상태가 되어 작업을 수행합니다. 작업 수행 중 스케줄링에 의해 CPU를 선점(preemption) 당해 Ready 상태가 되거나 I/O 인터럽트 등으로 block이 되어 Asleep 상태로 상태가 전이될 수 있습니다.Asleep
: 인터럽트 등으로 프로세서 외 다른 자원을 기다리는 상태입니다. 해당 자원을 할당받으면 Running 상태가 아닌 다시 Ready 상태가 되어 CPU 할당을 대기합니다.Suspended Ready
, Suspended Block
: 메모리를 할당 받지 못하거나 빼앗긴 상태입니다. 빼앗기게 된 경우 Memory image를 Swap device에 보관(Swap-Out)했다가 자원을 다시 할당받을 때 해당 Memory image를 통해 상태를 복구(Swap-In)하게 됩니다.Asleep(Block)
상태는 작업 실행이 불가능한 상태로, 자원 할당을 대기 하는 등 사전 정의 된 다른 작업이 완료될 때까지 작업 수행이 중지되는 상태입니다. 따라서 Asleep(Block) 상태는 preemptive 및 non-preemptive 스케줄링 모두에서 존재할 수 없습니다.
티스토리 - [운영체제] 프로세스 스케줄러(단기,중기,장기)
유튜브 - [개발자 면접질문] 운영체제 - 프로세스 스케줄러
유튜브 - [OS] Lecture 3. Process Management (1/2) / 운영체제 강의
티스토리 - [OS] CPU Scheduler