CS/Operating System

스케줄러

olsohee 2024. 4. 2. 17:10

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

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

  • 시작 프로세스 중 어떤 프로세스에게 메모리를 할당하고 준비 큐에 삽입할 것인지를 결정한다.
  • 장기 스케줄러는 메모리에 동시에 올라가 있는 프로세스의 수를 조절하는 역할을 한다. (degree of multiprogramming을 제어)
  • 그러나 시분할 시스템에서는 일반적으로 장기 스케줄러가 없다. 과거에는 적은 양의 메모리를 많은 프로세스들에게 할당하면 프로세스당 메모리 보유량이 지나치게 적어져 시스템 효율이 매우 떨어졌기 때문에 장기 스케줄러가 이를 조절했다. 이에 비해 현대의 시분할 시스템용 운영체제에서는 프로세스가 시작 상태가 되면 장기 스케줄러 없이 곧바로 그 프로세스에게 메모리를 할당해 준비 큐에 넣어준다. 

중기 스케줄러

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

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

  • 준비 상태의 프로세스 중에서 어떤 프로세스에게 CPU를 할당하며 실행 상태로 만들 것인지를 결정한다.
  • 시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케줄러가 호출되고, 준비 큐의 프로세스 중 어떤 프로세스에게 CPU를 할당할지를 결정한다. 
  • 장기 스케줄러는 비교적 가끔 호출되기 때문에 상대적으로 속도가 느린 것이 허용되는 반면, 단기 스케줄러는 매우 빈번하게 호출되기 때문에 수행 속도가 빨라야 한다. 

Reference

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