[ CS / OS ] Scheduler

황승환·2022년 2월 9일
0

CS

목록 보기
29/60

Scheduler

Process Scheduling

프로세스 스케줄링이란 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업을 의미한다. 대기 시간은 최소화하고 최대한 공평하게 처리하는 것을 목적으로 한다.

프로세스의 상태

스케줄러를 살펴보기 전에 프로세스의 상태를 간단하게 알아보았다.

  • new: 새로 생성된 프로세스의 상태
  • ready: 프로세스가 CPU를 사용하지는 않지만 언제든지 사용할 수 있는 상태로 CPU 할당을 대기하는 상태
  • running: 프로세스가 CPU를 차지하여 명령어들을 실행하는 상태
  • waiting: 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리는 상태
  • terminated: 프로세스의 실행이 종료된 상태

Queue의 종류

프로세스를 스케줄링하기 위한 Queue에는 세가지 종류가 존재한다.

  • Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue: 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합
  • Device Queue: Device I/O 작업을 기다리는 프로세스의 집합

Scheduler의 종류


각각의 Queue에 프로세스들을 넣고 빼주는 스케줄러에도 3가지 종류가 존재한다.

  • 장기 스케줄러 (Long-term Scheduler / Job Scheduler)
  • 단기 스케줄러 (Short-term Scheduler / CPU Scheduler)
  • 중기 스케줄러 (Medium-term Scheduler / Swapper)

장기 스케줄러 (Long-term Scheduler / Job Scheduler)

메모리는 한정되어 있는데 많은 프로세스들이 한번에 메모리에 올라올 경우, 대용량 메모리(일반적으로 디스크)에 임시로 저장한다. 이 pool에 저장되어 있는 프로세스 중 어떤 프로세스에 메모리를 할당하여 Ready Queue로 보낼지 결정한다.

  • 메모리와 디스크 사이의 스케줄링 담당
  • 프로세스에 메모리(각종 리소스)를 할당
  • Degree of Multiprogramming 제어 (실행중인 프로세스의 수 제어)
  • 프로세스의 상태
    - new -> ready

메모리에 프로그램이 너무 많이 올라가거나 너무 적게 올라가는 것은 성능이 좋지 않은 것이다. time sharing system에서는 장기 스케줄러가 존재하지 않고, 곧바로 메모리로 올라가 ready 상태가 된다.

단기 스케줄러 (Short-term Scheduler / CPU Scheduler)

  • CPU와 메모리 사이의 스케줄링 담당
  • Ready Queue 에 존재하는 프로세스 중 어떤 프로세스를 running 시킬지 결정
  • 프로세스에 CPU를 할당(scheduler dispatch)
  • 프로세스의 상태
    - ready -> running -> waiting -> ready

중기 스케줄러 (Medium-term Scheduler / Swapper)

  • 여유 공간을 마련하기 위해 메모리 상의 프로세스를 통째로 디스크 내림(Swapping)
  • 프로세스에게서 메모리를 deallocate
  • Degree of Mulitprogramming 제어 (실행중인 프로세스의 수 제어)
  • 현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러
  • 프로세스의 상태
    - ready - suspended
    • suspended(stopped):
      외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 디스크로 내려간 상태를 의미한다. 프로세스 전부 디스크로 swap out된다. blocked 상태는 다른 I/O 작업을 기다리는 상태이기 때문에 스스로 ready state로 돌아갈 수는 있지만 이 상태는 외부적인 이유로 suspending 되었기 때문에 스스로 돌아갈 수 없다.
profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글