CPU Scheduling

preemptive resource: 한 프로세스가 점유한 상태에서 다른 프로세스에게 양보할 수 있는 자원이다. cpu나 main memory(swap) 등등이 있다.
non-preemptive resource: 한번 점유하게 되면 다른 프로세스가 뺏을 수 없다. 프린터가 하나의 예이다.
process scheduling: 어느 프로세스에게 얼마나 cpu를 줄 것인가를 정한다.
batch monitor의 job: 한번 수행되면 끝날 때까지 수행돼야한다.
CPU burst size가 크면 cpu intensive한 연산이고 작으면 I/O interactive(터치 스크린과 같이)하다.

ready -> running: dispatch한다고 말한다. scheduling이라고 하지 않는다.
running -> ready: HW interrupt로 os scheduler가 개입하여 강제로 cpu를 뺏는다. preemptive.
running -> waiting: 스스로 cpu yield 함수를 호출한다. non-preemptive.
running -> terminate: non-preemptive.
waiting -> ready: preemptive.
ready로 가면 preemptive인가보다.

aging: task가 cpu를 기다리는 시간에 비례하여 우선순위를 점차적으로 높이는 방법이다.
throughput: 단위 시간 내에 끝내는 process 수이다.
turnaround time: process가 수행되는 데 걸리는 시간이다.
waiting time: ready큐에서 대기하는 시간이다.
response time: 처음 request가 왔을 때부터 첫 response까지의(output이 아니라) 시간이다.

FIFO: cpu burst 단위이다. monopoly가 발생할 수 있기 때문에 maximum limit을 걸 수 있다.
SJF(Shrotest Job First): 가장 optimal하지만 task의 남은 cpu burst size를 예측할 수 없기에 이상적인 스케쥴링이다.
preemptive SJF: process 수행 중이라도 더 작은 프로세스가 들어오면 preempt한다. Shortest Running Time First(SRTF).
Round Robin: 기본적으로 FIFO이지만 time-out(time slice, time quantum)이 있어서 일정 시간이 지나면 강제로 종료당하고 FIFO의 가장 뒤로 간다. Time slice가 무한대이면 FIFO와 같아진다.

Adaptive Scheduling: work load에 따라 time slice를 바꾼다.
CPU bound process: 대부분의 시간을 cpu에 할당한다. throughput이 중요하고 긴 cpu burst를 갖는다.
I/O bound process: 대부분의 시간을 I/O에 할당한다. response time이 중요하고 짧은 cpu burst를 갖는다. 1ms run하고 I/O를 10ms 기다리는 식이다.

multi-level feedback queue(MLFQ)(exponential queue): 큐가 우선순위에 따라 여러 레벨로 있다. 높은 우선순위는 작은 TS를 갖는다. I/O bound process가 높은 우선순위이다.

Priority-based scheduling: starvation이 발생할 수 있다.
Fair Share Scheduling(Bandwidth Scheduling, Proportional Share Scheduling): 대기 중인 프로세스들에게 정해진 비율에 따라 cpu의 bandwidth를 분배한다.



댓글

이 블로그의 인기 게시물

논문 정리 - MapReduce: Simplified Data Processing on Large Clusters

논문 정리 - The Google File System

kazoo: Using zookeeper api with python