Search
💾

[OS] CPU Scheduling 1(2)

참고 강의
contents

CPU Scheduling

CPU bound job에게 CPU를 뺏겨서 사람과 interaction하는 I/O bound job이 CPU를 받기 위해 지나치게 오래 기다리지 않도록 하는 방향으로 CPU Scheduling이 이루어져야 한다.   효율적인 스케줄링

nonpreemptive(비선점형)

자진 반납할 때까지 CPU를 보장해주는 방식

preemptive(선점형)

강제로 CPU를 빼앗을 수 있는 방식(현재의 스케줄링 방식)

Scheduling Criteria

Performance Index(= Performance Measure, 성능, 척도)

어떤 알고리즘이 더 좋은 지 평가할 수 있는 방법
시스템 입장에서의 성능
: CPU 하나로 최대한 일을 많이 시키면 좋은 것
CPU utilization(이용률)
: 전체 시간 중에 CPU가 놀지 않고 이용 당한 시간 비율
CPU는 가능한 바쁘게 일을 시켜라!
CPU가 바쁜 것이 곧 시스템이 CPU를 잘 사용한 것
Throughput(처리량)
: 주어진 시간동안 몇개의 작업을 처리했는가
주어진 CPU를 가지고 주어진 시간에 일을 더 많이 처리하면 좋은 것
프로그램 입장에서의 성능
: 프로세스가 CPU를 빨리 얻어서 빨리 끝나면 좋은 것
Turnaround time(소요시간, 반환시간)
: CPU를 쓰기 위해 들어와서 다 쓰고 나갈 때까지 걸리는 시간(CPU burst 끝나고 나갈때까지 걸린 시간)
CPU를 얻어서 순수하게 Running한 시간 + Waiting time = Turnaround time(들어와서 나갈 때까지 걸린 총 시간)
특정 프로세스를 실행하는 총 시간
→ 프로세스가 시작돼서 종료될 때까지의 시간
이 프로세스가 CPU를 쓰기 위해 들어와서 CPU를 쓰고 I/O를 하러 나갈 때까지 걸리는 시간
Waiting time(대기 시간)
: CPU를 쓰기 위해 Ready Queue에 줄서서 기다리는 시간
Response time(응답 시간)
: Ready Queue에 들어와서 처음으로 CPU를 얻을 때까지 걸리는 시간
Time Sharing 환경에서는 처음으로 CPU를 얻는 시간이 사용자 응답과 관련해서 굉장히 중요한 시간의 개념
Waiting time과 Response time의 차이
선점형 스케줄링의 경우에는 CPU를 강제를 빼앗길 수 있다. 따라서 한 번의 CPU burst동안에도 CPU를 얻었다 뺏겼다를 반복한다. 줄서서 기다리는 시간들이 여러 차례 발생하게 된다.
  기다린 시간들을 다 합친 개념이 Waiting time
Ready Queue에 들어와서 최초의 CPU를 얻을 때까지의 시간을 Response time
System마다 중요하게 생각하는 성능이 다르다!
공평성(Fairness)
성능 지표가 상충되는 경우

Scheduling Algorithm

FCFS(First-Come First-Served)

먼저 온 순서대로 처리
FIFO(First in First out) 스케줄링
비선점형 스케줄링 방식
효율적인 방식은 아니다.
ex. CPU 사용 시간이 긴 프로세스가 먼저 들어오게 된다면 Interactive한 job들이 도착하더라도 기다려야 한다.
  Interactive job의 응답시간이 대단히 길어지기 때문에 좋은 스케줄링 방식 아니다.
  평균 Waiting time이 늘어난다. 평균 Response time이 길어진다.
Convoy effect
긴 프로세스때문에 짧은 프로세스들이 지나치게 오래 기다려야 하는 현상
Queue에서 오래 기다리는 현상을 의미하는 말
 FCFS 스케줄링은 너무 단순하고 단점이 있어서 바로 실제 System의 스케줄링 기술로 쓰기에는 힘듦.
FCFS의 장점
1.
Ready 상태 프로세스들의 개수와 크기를 짐작할 수 있다.
2.
각각의 프로세스들이 언제쯤이면 실행될 수 있는지 예측 가능하다.
3.
도착 순서만이 실행 순서를 결정짓다는다는 관점에서 공평하다고 말할 수 있다.
다른 스케줄링 기법의 보조 장치로써 역할을 할 수 있다.
ex) 우선순위가 동일할 경우, FCFS 스케줄링 방식으로 프로세스 처리하기

SJF(Shortest-Job-First)

짧은 실행시간(CPU burst가 짧은) 가진 프로세스에게 먼저 순서를 주자
Queue가 전체적으로 짧아지게 된다.
Average Waiting time이 가장 짧아지게 된다.
nonpreemptive한 경우
SPN(Shortest Process Next) 스케줄링
일단 CPU를 잡으면 이번 CPU Burst가 완료될 때까지 CPU를 선점당하지 않음
example
preemptive한 경우
SRT(Shortest Remaining Time) 스케줄링
Ready Queue에서 완료까지 남은 CPU 요구량이 가장 짧은 것을 먼저 실행시켜주는 방식
CPU를 줬다고 하더라도 더 짧은 프로세스가 도착하면 CPU를 빼앗고 그 프로세스에게 CPU를 넘겨준다.
해당 방식보다 더 짧은 시간의 Average Waiting time은 나올 수 없다.(minimum)
example
  Average Time를 최소화하는 것은 preemptive한 버전이다.
  스케줄링을 언제 진행할지에 대한 부분에서 차이가 있다.
SFJ의 문제점
1.
Starvation
: CPU 사용 시간이 짧은 Job를 먼저 실행하도록 한다. 그러면 사용 시간이 긴 Job은 실행할 수가 없어진다.
Long Process Starvation
무한 대기 현상
2.
CPU 사용 시간을 미리 알 수 없다.(예측 가능성이 떨어진다)
각 프로세스의 크기를 실행 전에는 정확히 알 수 없음에도 불구하고 그 크기를 가지고 스케줄을 해야 한다.
알 수는 없지만 과거에 CPU를 사용했던 흔적(CPU burst time)을 통해서 사용 시간을 추정은 할 수 있다.
  exponential averaging(지수 평균)
: 비슷한 환경에서 반복적으로 실행되어지는 프로세스들에 대해서 적용할 만 하다.
tn
n번째 실제 CPU 사용 시간
τn+1
n+1번째 CPU 사용 시간의 예측치
τn+1 = atn + (1-a)τn (a, 0 < a < 1)
예측 시간은 n번째 실제 CPU사용 시간과 n번째 예측했던 CPU 사용 시간을 일정 비율씩 곱해서 더한 값이다.
예측한 값을 토대로 가장 burst time이 적은 프로세스에게 CPU를 주게 된다.
SPN를 수정해서 평균 응답 시간을 줄일 순 없을까?
SRT에서의 잦은 문맥교환을 줄이는 방법

Priority Scheduling

우선 순위가 가장 높은 프로세스에게 CPU를 주겠다.
nonpreemptive한 경우
일단 CPU를 잡으면 이번 CPU Burst가 완료될 때까지 CPU를 선점당하지 않음
preemptive한 경우
우선순위가 더 높은 프로세스가 들어온다면 해당 프로세스가 CPU를 빼앗을 수 있다.
  프로세스마다 해당 프로세스를 나타나는 우선순위가 정수값으로 나타나게 된다.
  우선 순위가 가장 높은 프로세스를 정수 중 제일 작은 정수로 나타낸다.
SJF 스케줄링도 Priority Scheduling의 일종이다.
  priority = predicted next CPU burst time
Priority Scheduling의 문제점
1.
Starvation
: 우선 순위가 낮은 프로세스는 영원히 CPU를 받지 못할 수도 있다.
  Aging를 도입
: 우선 순위가 낮은 프로세스라도 너무 오래기다린다면 우선순위를 높혀주자. 언젠가는 CPU를 얻게 되니깐 Starvation를 막게 된다.
HRRN 스케줄링

Round Robin(RR)

CPU를 줄 때 동일한 시간의 할당시간을 세팅해서 주고 해당 시간이 끝나면 CPU를 뺏고 Ready Queue에 올린다.
현대에 사용하는 CPU 스케줄링은 라운드 로빈에 기반하고 있다.
응답 시간이 빠르다 → 줬다 뺏었다 하게 된다.(선점형 방식)
CPU를 짧게 사용하는 프로세스가 얼른 쓰고 나갈 수 있게 해주는 것이 Round Robin 스케줄링 방식의 중요한 장점이다.
n개의 프로세스가 있고 각각 할당받은 시간이 q라고 한다면, 내가 적어도 1/n라는 시간으로 CPU를 얻을 기회가 생긴다.
  (n-1)q time unit 이상 기다리지 않는다. → 응답 시간이 빠르다.
  대기 시간이 본인이 CPU를 사용하는 시간과 비례하게 된다.
if, 할당 시간을 크게 잡으면 : FCFS
if, 할당 시간을 잘게 잡으면 : context switch Overhead
  적당한 크기의 time quantum를 주는 것이 바람직(10-100ms, system이 발전하면서 값이 얼마든지 변경될 수 있다.)
  SJF보다 average turnaround time이 길지만 response time은 더 짧다.
→ 시간을 할당하다보니 프로세스가 모두 동일한 시간에 끝나게 된다. 따라서 average turnaround time은 길어지지만 response time은 짧아진다.
추가