이제 여러 프로세스를 동시에 실행할 때 CPU 에서 어떤 프로세스를 우선적으로 실행할 지에 대해서 정하는 스케쥴링에 대해서 알아보자.

CPU

CPU burst & I/O burst

프로세스는 크게 두 가지로 나뉠 수 있다. 프로세싱 중에 CPU 의 사용, 연산이 많은 CPU-bound process와 I/O 의 사용이 많아 사용자와 상호작용이 많은 I/O-bound process 가 있다.

기본적으로 I/O-bound process 는 I/O 처리를 기다리는 시간이 길다. 따라서 CPU 입장에서는 기다리는 시간에 다른 프로세스를 처리하는 것이 더 효율적이라고 할 수 있다.

image

Dispatcher

여러 프로세스 중 하나를 골라 CPU 에 실제 올리는 작업을 Dispatch 라 한다. 실행 중인 프로세스를 바꾸는 작업이기 때문에 Context Switch 라 하기도 한다.

image

Preemptive

  • Preemptive
    • 스케쥴러가 하던 일에 인터럽트를 걸고 다른 일을 하도록 강제할 수 있다
  • Non-Preemptive
    • 어떤 일을 수행하는 중에는 다른 일을 하도록 강제할 수 없고 해당 일이 끝날 때까지 기다려야한다

Scheduling Criteria

스케쥴링 시 고민해야할 기준이다.

  • CPU utilization : CPU의 효율이다. 당연히 100%가 되도록 노력해야하며 할 일이 존재하는 동안에는 CPU가 쉬어서는 안된다.
  • Throughput : 단위 시간 당 처리 양이다. 최대화해야한다.
  • Turnaround time : 실행부터 끝나는 시간이다. 최소화해야한다.
  • Waiting time : 프로세스가 Ready 상태에서 기다리는 시간이다. 최소화해야한다.
  • Response time : 사용자가 작업을 요청하고 눈으로 확인하는 데까지 걸리는 시간이다. progress bar 같은 개념이다. 최소화해야한다.

Scheduling

스케쥴링의 목표는 모든 프로세스가 fair 하게 실행되는 것이며 시스템의 모든 장치들을 효율적으로 사용하는 것이다.

동시에 한 프로세스가 ready 상태에서 계속해서 기다리는 Starvation 을 주의해야한다.

FCFS, First Come First Served

  • 먼저 도착한 프로세스가 먼저 실행된다
  • 모든 프로세스는 순서대로 실행되기 때문에 Starvation 이 없다
  • 어느 프로세스 던 가장 공평하게 실행된다
  • 프로세스가 중간에 멈추지 않기 때문에 non-preemptive 이다
  • 문제는 프로세스의 도착 순서에 따라 Waiting time 이 길어진다. (Convoy effect)

image

SJF, Shortest job First

  • average waiting time 최소화하기 위한 방법이다
  • job 의 길이가 가장 짧은 프로세스부터 실행한다
  • non-preemptive

image

SRTF, Shortest Remaining Time First

  • SJF 의 preemptive 한 버전이다.
  • 프로세스가 도착할 때마다 남은 job의 길이가 가장 짧은 프로세스를 찾아 먼저 실행한다
  • 실행되고 있는 프로세스보다 더 짧은 길이의 job 을 가진 프로세스가 도착하면 실행 중인 프로세스를 중단시킨다
  • 짧은 프로세스만 계속해서 도착한다면 길이가 긴 프로세스는 Starvation 에 걸릴 수 있다

image

Priority

  • 프로세스의 우선순위에 따라 처리하는 방법이다
    • SJF 도 짧은 길이가 우선순위를 결정한다고 볼 수 있다
  • SRTF 와 마찬가지로 우선순위가 높은 프로세스만 들어오면 우선순우가 낮은 프로세스는 Starvation 에 걸릴 수 있다
    • 해결 방법으로 Aging이 있다. 어느 프로세스가 실행 순서가 밀릴 수록 우선순위를 높이는 방법이다

image

RR, Round Robin

  • 타임 퀀텀을 주고 돌아가면서 프로세스를 스케쥴링하는 방법
  • Waiting time 을 줄일 수 있다.
  • 지금 현존하는 운영체제가 사용하는 방법이 Priority + Round Robin 이다
    • 모든 프로세스는 우선순위를 가지고 같은 우선순위 큐에서는 RR로 진행한다
  • 타임 퀀텀이 줄어들 수록 공평하지만 프로세스간 Context Switching 이 빈번해져 오버헤드가 커진다

image

Multi-Level Queue

  • Queue 를 여러 개 두고 각 Queue 마다 다른 알고리즘을 가져가는 것
  • 각 프로세스의 성질에 따라 즉각적 상호작용이 필요하면 RR로 Waiting time을 줄이고 Batch 이면 즉각적인 확인이 필요없으므로 FCFS 로 설정하는 방법
  • 하지만 어떤 프로세스가 어떤 큐에 들어갈 것인지 파악하고 우선순위를 정하기 어렵다

image

Multi-Level Feedback Queue

  • 가장 먼저 프로세스에게 8이라는 타임 퀀텀을 준다
  • 8 수행 후 프로세스의 job 이 남아있으면 다음에는 16이라는 타임퀀텀을 준다
  • 16 수행 후 프로세스의 job 이 남아있으면 FCFS 로 처리한다
  • Interative 한 프로세스는 높은 우선순위를 가질 수 있다

image

Real-Time Scheduling

Static

  • 우선순위가 프로세스별로 고정되어 바뀌지 않는다
  • Rate-Monotonic algorithm : Rate = 실행 주기. 기본적으로 자주 실행되면 우선순위가 높고 가끔 실행되면 우선순위가 낮다.

image

Dynamic

  • 우선순위가 바뀐다
  • EDF (Earliest Deadline First) : 데드라인이 가장 가까운 프로세스가 높은 우선순위를 가진다.
    • 계속해서 데드라인을 확인해야하므로 스케쥴링 오버헤드가 너무 커서 실제로는 사용하지 않는다.

image

업데이트:

댓글남기기