728x90
CPU Scheduling Goals
CPU scheduler must decide:
- 프로세스 실행 시간
- 프로세스들이 실행될 순서
User-oriented schdeuling policy goals
: 유저관점에서 스케쥴링의 평가(기준)
- 평균 반응시간 (프로세스 실행시키고 첫번째반응이 일어날 때까지 걸리는 시간)을 최소화한다. 반면 interactive한 유저가 적절한 응답을 받는 수를 최대화한다.
- trunaround time(프로세스 시작 ~ 종료까지, execution time + waiting time) 최소화함
- 평균 응답 시간의 편차 최소화
- 예측가능성은 중요함 ..
- 프로세스는 어떤 시스템에 load 되었는지 상관없이 항상 (대략적으로) 같은 시간동안 실행되어야한다.
System-oriented schdeuling policy goals
: 시스템관점에서의 스케쥴링의 평가
- Throughput(단위시간동안 해치우는 일의 양)이 최대
- 프로세스 활용률(CPU 사용시간 백분율) 극대화 - 최대한 많이 활용되도록
Q. CPU활용도 → 프로세스 많이 실행할수록 값이 올라가나요 ?
A. ㅇㅇ 참고로 스케쥴러가 중간중간 돌아가는 시간은 빼야한다 (유저 프로세서가동작할 때 필요한 걸 CPU 활용도라고 함 )
Other system-oriented scheduling policy goal
: 정서적인 것들
- Fairness : OS나 user로부터 가이드가 없는 경우 프로세스는 동일하게 취급되어야하며 어떤 프로세스도 (서비스가 무한히 거부되는)기아상태에 빠지면 안됨 ~~ !
- Balance resources → 한쪽에 부하되는 리소스를 쓰지 않음 !! : 시스템의 모든 리소스(CPU, 메모리, 디스크, I/O)를 사용 중으로 유지
- 부하가 높은 리소스를 충분히 사용하지 않는 프로세스를 선호
** 스케쥴링의 종류와 평가 (위에서 배운걸로 하나씩 배우고 평가해보자 )
이건 시험준비 자료에서 본건데.. 같이 보면 좋을 것 같아서 넣어두었다 !
FCFS (Non-preemptive: run till done !)
- Non-preemptive (비선정)
- Response time - 프로세스 실행 시간에 큰 차이가 있다면 느리다
- long → short 순서면 short엄청 기다려야함
- CPU bound 프로세스 → I/O bound 프로세스 순서면 ‘convoy effect’ 발생 ** convoy effect : CPU 사용시간이 긴 프로세스에 의해 사용시간이 짧은 프로세스들이 오래 기다리는 현상 → 엄마 CPU보다 새끼 CPU에게 먼저 일 시키기 !!
- Throughput - not emphasized
- Fairness - 짧은 프로세스와 I/O bound 프로세스는 패널티가 있음
- Starvation - 스택 순서대로 건너뛰지 않으니 일어나지 않음
- Overhead - minimal(스케쥴러가 머리 안씀~~ )
📄 ** Preemptive vs Non-Preemptive scheduling
Non-preemptive scheduling - 스케줄러는 이때만 실행 !
1. 프로세스가 러닝에서 블락상태로 전이될 때(이때 CPU는 빈 상태)
2. 프로세스가 종료되었을 때
Preemptive schedular - 스케쥴러는 거의 언제나 실행 !
이럴때도 실행됨
- 프로세스가 생성될 때
- 블락된 프로세스가 레디상태가 될 때
- 타이머 인터럽트가 발생했을 때
오버헤드는 증가하지만, 긴 프로세스가 CPU를 독점하지 못하게 한다!
system call(ex. 파일읽기)을 처리하는 동안 or inconsistent 상태에서 OS 커널을 선점해서는 안됨 !
❎ 사용자 프로세스 간에 공유된 데이터를 inconsistent 상태로 유지할 수 있음 !
**커널은 세마포 처리를 안한다 . (CPU 하나일때 )
Round-Robin
뺑뺑이 돌리겠다! , FCFS 성질 남아있음
- Policy
- fixed time slice(타임 퀀텀)을 정의함
- 레디 큐의 첫번째에서 프로세스를 정한다
- 최대한 한 타임슬라이스동안 돌려주고, 그 사이 프로세스가 완수되지 않으면 레디 큐의 마지막으로 넣어줌
- 타임 슬라이스가 끝나기 전, 프로세스가 끝나거나 블락된다면, 레디큐의 첫번째 프로세스를 고르고 최대한 한 타임슬라이스 돌려 … (반복)
- 이걸 구현하기를 주기적인 interval타이머
- Implementing using :
- 주기적인 간격으로 인터럽트하는 Hardware timer
- FIFO 레디 큐 (tail에 넣고, head에서 빼고)
Round-Robin Example
Ex1 → 거꾸로 돌리면 Ex 2
평가 ㄱㄱ
Round-Robin Evaluation
- Preemtive(타임퀀텀주고 짤라)
- Responsetime - 짧은 프로세스에게 유리함
- Long 프로세스는 다른 시간 슬라이스를 위해 n*q 타임유닛을 기다려야할수도 ..
- n = 다른 프로세스의 수 & q = 타임 슬라이스의 길이
- Long 프로세스는 다른 시간 슬라이스를 위해 n*q 타임유닛을 기다려야할수도 ..
- Throughput - time slice에 달려있음
- (타임 퀀텀) 넘 작아 : context switches가 너무 많아 = os overhead가 너무 커
- 넘 커 : FCFS랑 비슷해
- Fairness : I/O bound 프로세스(full time slice를 사용하지 않는)에 패널티
- Starvation - not possible : 번갈아가며 돌려서 없음
- Overhead - 낮아
Shortest-Job-First(SJF)
- Policy :
- 다음번 CPU burst가 가장 작은 프로세스를 선택하고 이 프로세스를 non-preemptive하게 실행시킨다 ( termination되거나 blocking될 때 까지)
- 동점인 경우, FCFS을 사용하여 동점 해제
- Difficulty : 다음번 CPU burst의 길이를 결정하는 것이 어려움 ..
- Approximation : 과거 프로세스의 수행과 예측에 기반하여 런타임 수행시간 (length)의 길이를 예측
SJF Example
- average waiting time
SJF Evaluation
- Non-preemptive
- Response time - 짧은 프로세스에게는 좋음
- 긴 프로세스는 많은 짧은 프로세스가 끝날 때까지 기다려야한다
- Provably optimal - 주어진 프로세스 set에서평균 대기시간을 최소화함
- Throughput - high
- Fairness - 긴 프로세스에게 패널티있음
- Starvation - 긴 프로세스에 있을 수 있음
- Overhead - 높음(CPU burst time을 측정하고 기록함)
[참고 및 출처]
한국항공대학교 「컴퓨터 운영체제」 강의 자료
'[지식창고] > 운영체제' 카테고리의 다른 글
[운영체제/OS] L18. CPU Scheduling (2) (0) | 2023.05.12 |
---|---|
[운영체제/OS] 2. OS의 역사 (1) | 2023.04.12 |
[운영체제/OS] 1. OS란 ? (0) | 2023.04.05 |
[운영체제/OS] OS를 위한 컴퓨터구조 기초 2. 컴퓨터 시스템 핵심 요소 (0) | 2023.03.23 |
[운영체제/OS] OS를 위한 컴퓨터구조 기초1. 컴퓨터 시스템 기본 구조 (0) | 2023.03.22 |