[OS] Process Scheduling

Process Scheduling

다중 프로그램의 목적인 CPU 이용을 최대화하기 위함과 시분할 목적인 각 프로그램이 실행되는 동안 사용자가 상호작용을 할 수 있도록 프로세스 사이에서 CPU를 빈번하게 교체하는 것을 달성하기 위해 스케쥴링을 사용한다.

Scheduling Queue

주 메모리에 존재하면서 Ready 상태에서 Running을 기다리는 프로세스들은 Ready Queue에 위치하게 된다. 일반적으로 링크드 리스트로 구현이 되는데 첫번째와 마지막 PCB를 가리키는 포인터를 포함한다.그 외에도 I/O를 대기하는 Device Queue와 같은 큐도 존재한다.

Scheduler

스케줄러는 크게 단기와 장기로 분류된다. 이 둘의 차이는 실행 빈도이다.

  • 단기 스케쥴러 : 실행준비가 완료되어 있는 프로세스들 중에서 선택하며 이들 중 하나에게 CPU를 할당한다.
  • 장기 스케쥴러 : 풀에서 프로세스들을 선택하여 실행하기 위해 메모리로 적재한다.

시분할 시스템과 같은 일부 운영체제들은 추가적으로 중기 스케쥴러를 도입한다. 중기스케줄러의 핵심 아이디어는 메모리에서 프로세스들을 제거하여, 즉 CPU를 위한 경쟁에서 제거하여 다중 프로그래밍의 정도를 완화하는것이 바람직할 때도 있다라는 아이디어를 기반으로 한다. 차후에 다시 프로세스를 메모리로 불러와 중단 지점부터 실행을 재개한다. 이러한 기법을 Swapping이라 하며 프로세스는 중기 스케줄러에 의해 스왑되어 나가고 후에 다시 스왑되어 들어온다. Swapping은 프로세스 혼합 상태를 개선하기 위해 혹은 메모리 요구 변화가 가용 메모리를 초과하여 메모리를 비우기 위해 필요하다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/21/OS/process-scheduling/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.