본문 바로가기

CS/Operating System

스케줄러

스케줄러란 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드를 의미한다. 즉, 스케줄러는 CPU가 어떤 프로세스를 실행할지 결정하는 역할을 한다.

스케줄러의 종류

장기 스케줄러(작업 스케줄러)

  • 역할: 시작 프로세스 중 어떤 프로세스에게 메모리를 할당하고 준비 큐에 삽입할 것인지를 결정한다. 즉, 새로운 프로세스가 실행되기 전에 동작한다. 즉, 장기 스케줄러는 메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 역할을 한다. (degree of multiprogramming을 제어)
  • 주기: 상대적으로 덜 빈번하게 작동한다. 주로 새로운 프로세스를 실행하려 할 때 작동한다.

중기 스케줄러

  • 시스템의 메모리 부담을 줄이기 위해 메모리에 있는 프로세스를 일시적으로 하드디스크로 내보내거나(스왑 아웃), 하드디스크에 있던 프로세스를 다시 메모리로 불러오는(스왑 인) 작업을 관리한다. 즉, 중기 스케줄러는 일단 모든 프로세스에게 메모리를 할당하고, 메모리가 부족하면 일부 프로세스에게 메모리를 통째로 뺏고 디스크로 스왑 아웃시킨다(degree of multiprogramming을 제어). 즉, 장기 스케줄러는 프로세스에게 메모리를 주는 문제인데 반면, 중기 스케줄러는 메모리를 뺏는 문제이다. 
  • 중기 스케줄러가 일부 프로세스를 메모리에서 디스크로 스왑 아웃시키는 프로세스는 다음과 같다.
    1. 봉쇄 상태의 프로세스: 봉쇄 상태에 있는 프로세스가 가장 먼저 스왑 아웃된다. 봉쇄 상태인 프로세스는 당장 CPU를 획득할 가능성이 없기 때문에 메모리를 보유하는 것이 의미가 없기 때문이다.
    2. 준비 큐로 이동하는 프로세스: 봉쇄 상태인 프로세스를 모두 스왑 아웃시킨 후에도 메모리 공간이 부족하면, 타이머 인터럽트가 발생해 준비 큐로 이동하는 프로세스를 추가적으로 스왑 아웃시킨다. 준비 큐에 너무 많은 프로세스들이 존재하면 한정된 메모리 공간을 나눠쓰기 위해 개별 프로세스에 배정되는 메모리 양이 지나치게 적어진다.그런데 지금 막 준비 큐로 이동하는 프로세스는 다음에 CPU를 할당받기까지 비교적 오랜 시간이 소요된다. 따라서 이들로부터 메모리를 회수해 당장 실행되는 프로세스에게 메모리를 추가적으로 부여한다.
  • 필요할 때마다 작동하며, 메모리 부족으로 스왑 인/아웃이 자주 발샐할 경우 중기 스케줄러도 빈번하게 작동한다.

단기 스케줄러(CPU 스케줄러)

  • 준비 상태의 프로세스 중에서 어떤 프로세스에게 CPU를 할당하며 실행 상태로 만들 것인지를 결정한다. 즉, 준비 큐에 있는 프로세스들 중에서 CPU를 할당할 프로세스를 선택하고, 문맥 교환을 수행하여 CPU를 넘긴다.
  • 따라서 매우 짧은 주기로 작동하기(빈번하게 호출되기) 때문에 수행 속도가 빨라야 한다. 
  • 프로세스들이 CPU를 공평하고 효율적으로 사용할 수 있게 해주는 것이 주요 목적이다.

현대 OS에서의 스케줄러

현대 운영 체제에서는 단기 스케줄러중기 스케줄러만 자주 사용된다. 현대의 시분할 시스템에서는 일반적으로 장기 스케줄러가 없다. 과거에는 적은 양의 메모리를 많은 프로세스들에게 할당하면 프로세스당 메모리 보유량이 지나치게 적어져 시스템 효율이 매우 떨어졌기 때문에 장기 스케줄러가 이를 조절했다. 이에 비해 현대의 시분할 시스템용 운영체제에서는 프로세스가 시작 상태가 되면 장기 스케줄러 없이 곧바로 그 프로세스에게 메모리를 할당해 준비 큐에 넣어준다. 


Reference

  • 이화여자대학교출판문화원, 운영체제와 정보기술의 원리, 반효경