CS

CPU 스케줄링 개요

jbilee 2024. 12. 29. 20:13

멀티프로그래밍 개념의 등장과 함께 다수의 프로세스를 메모리에 적재해 유동적으로 실행시킬 수 있게 되면서 운영체제는 CPU 자원이 낭비되지 않도록 효율적으로 분배하는 방법이 필요하게 됐다. 효율적인 CPU 사용을 위해 프로세스 또는 스레드에게 CPU를 할당하는 것을 CPU 스케줄링이라고 한다.

 

스케줄러

운영체제는 스케줄러라고 하는 커널의 모듈을 사용해 어떤 프로세스에게 자원을 할당할지 결정한다. 스케줄러는 크게 3가지로 나눌 수 있다:

 

· 장기 스케줄러 (Long-term scheduler)

  • 어떤 프로세스를 메모리에 올릴지(=준비큐에 삽입할지)를 결정한다
    ※ 준비 큐 = CPU를 이용하고자 하는 프로세스들의 대기줄
  • 메모리에 동시에 올라가있는 프로세스의 수를 조절한다
  • 초~분마다 호출되며 자주 호출되지 않아 속도가 느릴 수 있다
  • 작업 스케줄러라고도 부른다
  • 오늘날 시스템에서는 잘 사용하지 않는다 (현대 운영체제는 프로세스가 시작되면 장기 스케줄러 없이 메모리를 바로 할당해 준비큐에 넣는다)

· 중기 스케줄러 (Medium-term scheduler)

  • 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 문제를 해결하는 것이 주 역할
  • 장기 스케줄러처럼 메모리에 적재된 프로세스의 수를 관리한다
  • 프로그램이 저장되는 디스크 장치의 스왑 영역에 프로세스를 넣고(스왑 아웃) 빼는(스왑 인) 작업을 담당한다
    • 중지 상태(suspended/stopped)의 프로세스로부터 메모리를 통째로 회수해 스왑 아웃 시킨다

· 단기 스케줄러 (Short-term scheduler)

  • 스케줄링 알고리즘을 사용해 다음으로 실행할 프로세스를 결정한다 (프로세스 선택 외 다른 작업은 dispatcher가 수행한다)
  • 시분할 시스템에서 타이머 인터럽트가 발생하면 호출된다
  • ms 간격으로 빈번하게 호출되기 때문에 속도가 빨라야 한다
  • CPU 스케줄러라고도 부른다