본문 바로가기
OS(운영체제)

CPU 스케줄링(CPU Scheduling)

by 걸어가는 신사 2021. 12. 9.

언제 어떤 프로세스에 CPU를 할당할지 결정하는 작업이다.

다중 프로그래밍의 목적은 CPU 이용률을 최대화하기 위해 항상 실행 중인 프로세스를 가지게 하는 데 있다.

즉, 운영체제는 CPU를 process로부터 회수해 다른 process에게 할당한다. 이러한 방법으로 메모리에 적재된 여러 개의 process들 중 선택하여 CPU가 항상 작업함으로써 CPU 이용률을 증진시킨다.

 

1. CPU-I/O 버스트 사이클 (CPU-I/O Burst Cycle)

  • CPU 실행(CPU burst)I/O 대기(I/O burst)의 사이클로 구성된다.
  • 프로세스 실행은 CPU burst, 뒤이어 I/O burst 발생 이과정을 반복한다.
  • process들에게 얼마나 균등하게 CPU를 분배할 것인가는 컴퓨터 시스템에서 가장 중요한 관점중 하나이다.

 

2. CPU 스케줄러 (CPU Scheduler)

  • 다중 프로그래밍 운영체제에서 ready queue에 있는 process들 중에 하나를 선택하기 위해서는 결정이 필요한데, 이것이 CPU 스케줄링이다. 선택 절차는 CPU 스케줄러(short-term scheduler)에 의해 수행된다.
  • 즉 , CPU 스케줄러는 실행 준비가 되어 있는 메모리 내의 프로세스 중에서 선택하여, 이들 중 하나에게 CPU를 할당한다.

* Ready Queue

  • 실행 준비가 되어 있는 프로세스는 Ready Queue 자료구조에 들어 있다.
  • 준비 큐에 있는 모든 프로세스는 CPU에서 실행될 기회를 기다리며 대기하고 있다.
  • 준비 큐는 반드시 선입선출(FIFO) 방식의 큐가 아니어도 되는 것에 유의해야 한다. 
  • 큐에 있는 레코드들은 일반적으로 프로세스들의 프로세스 제어 블록(PCB)들이다.

 

3. CPU 스케줄링 결정 상황 4가지

(1) 한 프로세스가 실행 상태에서 대기 상태로 전환될 때 

  • ex) I/O 요청이나 자식 프로세스가 종료되기를 기다리기 위해 wait()을 호출할 때

(2) 프로세스가 실행 상태에서 준비 완료 상태로 전환될 때 

  • ex) interrupt 발생 시

(3) 프로세스가 대기 상태에서 준비 완료 상태로 전환될 때

  • ex) I/O 종료 시

(4) 프로세스 종료할 때

 

4. 비선점(Preemptive) VS 선점(Nonpreemptive) 스케줄링

(1) 비선점 스케줄링

  • 일단 CPU가 하나의 프로세스에 할당되면, 그 프로세스가 CPU를 놓을 때까지 계속 CPU를 점유
  • 종료되거나 대기 상태로 전환 (스케줄링 결정 상황 1,4번)

 

(2) 선점 스케줄링

  • 현재 수행되고 있는 프로세스는 언제든지 다른 프로세스로 교환 가능
    • 이유 : interrupt가 언제든지 발생할 수 있다.
  • 프로세스 간에 데이터 공유 시, 일관성 유지에 따른 관련 비용 발생
  • 운영체제의 커널 설계에 영향을 준다.
    • 유닉스의 경우, 문맥 교환(Context Switching)이 일어나기 전에 시스템 호출의 완료 혹은 입출력 봉쇄(block)가 일어나기를 기다린다.
    • 중요한 코드의 시작 부분에서는 interrupt를 비활성화(disable)시키고, 끝 부분에는 활성화(enable) 시킴으로써 중요한 커널 코드 보호

 

5. Dispatcher (디스패처)

(1) dispatcher

CPU 코어의 제어를 CPU 스케줄러(short-term scheduler)가 선택한 프로세스에 주는 모듈

(2) dispatcher가 하는 일

  • 한 프로세스에서 다른 프로세스로 문맥을 교환하는 일 (Context Switching)
  • 사용자 모드로 전환하는 일
  • 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동(Jump)하는 일

(3) dispatch latency(디스패치 지연)

디스패처가 실행중인 프로세스를 정지하고 다른 프로세스의 수행을 시작하는 데까지 소요되는 시간
  • Context Switching의 오버헤드이다.

반응형

댓글