[2장] 스케쥴링

임정환·2023년 6월 9일
0

운영체제

목록 보기
7/8

여러 Process들은, 자신의 연산이 실행되기 위해서 CPU가 필요하다.
문제점은, CPU에 비해 프로세스가 많으므로 돌아가면서 프로세스를 CPU에 적재해서 실행해야한다느 점이다.

Scheduling

Context Switch

문맥 교환, CPU에서 연산중인 프로세스가 다른 프로세스로 바뀌는 것을 'context switch'라고 한다.
context switch를 하기 위해서는

  • '유저 모드'에서 '커널 모드'로의 전환
  • 현재 상태 저장
  • CPU에 실행될 다음 프로세스 선택

위의 예시외에도, 많은 동작들이 필요하며 자동적으로 오버헤드가 발생하게 된다.
이런 오버헤드를 최소화하기 위해, 운영체제는 CPU 스케쥴링을 지원한다.

Process Behavior


PPT 프로그램을 생각해보자. 만일 슬라이드 쇼를 펼치고 있다면, 연산은 일어나지 않을 것이다. 반면에, 마우스나 키보드를 움직이거나 입력하면 적은 cpu 타임에 비해 많은 인터럽트가 발생할 것이다. 위와 같은 상황을, 'I/O 바운드'라고 한다.

언제 프로세스 스케쥴링이 필요할까?

  • 새로운 프로세스가 생성될 때
  • 프로세스가 종료될 때
  • 프로세스가 block 되었을 때
  • I/O 인터럽트가 발생됬을 때
  • clock 인터럽트가 발생됬을 때

스케쥴링에는 두 가지 종류가 존재한다.

  • 선점형(Preemptive) : 중간,중간 프로세스들을 평가하여 더욱 적합한 프로세스가 존재한다면 CPU에서 프로세스를 block하고 적합한(효율적인) 프로세스를 투입한다.
  • 비선점형(Nonpreemptive) : 한번 실행되고 있는 Process가 스케쥴링이 필요한 상황이 생기기 전까지 계속 실행한다.

Starvation

만일 A,B,C 3 개의 프로세스가 순서대로 스케쥴러에 의해 스케쥴링 되었다고 생각해보자.
계속해서 C보다 높은 우선순위를 가진 프로세스가 투입될 경우 C는 영원히 CPU 스케쥴이 되지 않을 것이다.
이와 같은 상황을 기아상태(starvation)이라고 부른다. 스케쥴링 알고리즘은, 이 '기아상태'를 배제하여야한다.

스케쥴링의 3가지 환경

스케쥴링 알고리즘

FCFS / FIFO

First Come First Served , 즉 먼저 할당된 프로세스를 먼저 실행하는 알고리즘이다. Batch 시스템에서 쓰인다.

이 처럼, 특정 프로세스가 오래 걸릴 경우 상대적으로 짧은 프로세스들은 비효율적으로 선점된 프로세스가 끝나길 기다릴 수 밖에 없다.

SJF

Shoreted Job First , 가장 실행시간이 짧아보이는 프로세스 순으로 스케쥴링 한다. 이론상 좋아보이나, 문제점이 존재한다.

  • 프로세스의 CPU 타임을 측정하기 어렵다
  • 프로세스가 동시에 스케쥴러에게 주어지고, 스케쥴러가 할당하는 상황보다는 그때 그때 다르게 프로세스가 할당된다.

    AABBBB 가 스케쥴러에게 도착하여 짧은 CPU타임을 가진 순으로 스케쥴링을 했지만 , 프로세스 실행 중
    CDE가 도착하게 된다면 AABBBBCDE가 된다. 이렇게, 중간에 프로세스가 끼어들게 되면 최적의 스케쥴링을 보장할 수 없다.

SRTN

SJF의 선점형 모델이다. 최적의 결과를 보장할 수 있으나, 잦은 인터럽트의 발생으로 인해 큰 오버헤드를 가진다.

Round Robin

FIFO의 선점적인 형태이다.

  • 스케쥴링 레디 queue가 원형 queue 로서 작동한다.
  • 각 task에 quantum 이라고 불리는 최소 작업 시간을 보장해준다.
  • 기아상태가 발생하지 않는다.

Quantum을 얼마나 설정할 것인지 어려운 부분이 라운드 로빈에 존재한다.

Priority Scheduling (Multi Level Feedback Queue )

우선순위 스케쥴링. Task에 우선순위를 부여한다.

  • 기다린 시간 만큼 우선순위를 높여 준다(aging).
  • 'CPU를 많이 쓸수록' = 'I/O bound가 작다' = '한번 스케쥴되면 인터럽트 없이 계속 연산을 진행한다' 우선순위를 낮춰 준다.

위의 룰을 통해, 각 우선순위 큐를 설정해준다. 각 우선순위 큐 마다, 설정된 quantum이 존재한다.
같은 Priority 내에서는 Round Robin 으로 task를 스케쥴링한다.

마치며

이 외에도, 자잘한 스케쥴링 알고리즘이 존재하지만. 대표적인 알고리즘만 설명해봤다.
다음 3장부터는 메모리에 대해 알아보도록하자.

profile
CS 박제

0개의 댓글