mojo's Blog

Scheduling 본문

학교에서 들은거 정리/운영체제

Scheduling

_mojo_ 2021. 9. 16. 01:29
Scheduling Metrics

 

 

시작에 앞서 4가지 가정이 있다고 하자.

 

1. Each job runs for the same amount of time.

ex) process p1, p2, p3, p4 가 동일하게 10초씩 돈다고 가정

 

2. All jobs arrive at the same time.

ex ) CPU 입장에서 동시에 실행해서 도착한 상황이라고 가정

 

3. All jobs only use the CPU (they perform no I/O)

 

4. The run-time of each job is known.

 

 

Performance metric : Turnaround time

 

=> The time at which the job completes minus the time at which the job arrived in the system.

 

Time(turnaround) = Time(completion) - Time(arrival)

 

Another metric is fairness

 

=> Performance and fairness are often at odds in scheduling.

 

모든 process가 균등하게 CPU 제어를 받을 권한이 있어야 한다.

 

즉 fairness, 하나라도 할당받지 못하면 안된다. 

 

 

 

FIFO

 

First Come, First Served (FCFS)

 

=> Very simple and easy to implement

 

예를 들어서 3 개의 Process A, B, C 가 있다고 가정하자. (각각 10초씩 걸린다고 가정)

 

A 가 먼저 CPU 를 점유할 때, B, C는 A가 끝날때까지 기다려야 한다.

 

A 가 딱 10초를 썻을 경우 B, C 중에 B 가 선택되면 B 가 10초를 쓰고 C 는 20초나 기다려야 한다.

 

즉 이러한 경우는 다음과 같다.

 

 

Average turnaround time = (10 + 20 + 30) / 3 = 20 sec

 

fairness 관점으로 바라보자.

 

Turnaround time(A) = 10  <= 평균 시간보다 빠르므로 이득

Turnaround time(B) = 20  <= 평균과 같음 

Turnaround time(C) = 30  <= 평균 시간보다 느리므로 손해

 

여기서 C는 평균 시간보다 느리므로 fairness 가 존재하지 않음.

 

 

 

"왜 FIFO 구조는 좋지 않을까?" 라는 의문을 던져보기 위해 위에서 세웠던 가정 중 1을 relax 하려고 한다.

 

Let's relax assumption 1 

=> Each job no longer runs for the same amount of time.

 

예를 들어서 3 개의 Process A, B, C 에서 A는 100, B는 10, C는 10이 걸린다고 하자.

 

이때 A를 long job, B를 short job 이라고 할 수 있겠다.

 

근데 A, B, C 순서로 Process 가 도착할 경우 long job이 먼저 실행되므로 short job은 long job이 끝날때까지 기다려야 한다.

 

즉, 이러한 경우는 다음과 같다.

 

 

Average turnaround time = (100 + 110 + 120) / 3 = 110 sec

 

 

Convoy effect

 

Suppose there is one CPU intensive process in the ready queue, and several other

processes with relatively less burst times but are Input/Output (I/O) bound.

(여기서 I/O bound 는 CPU 를 조금 점유한다고 봐도 될듯함)

 

다음과 같은 가정속에서 process 10개, p1, p2, ..., p10 이 존재한다고 하자.

 

long job p1 : CPU intensive (cpu(99%), I/O(1%)) 이 경우 굉장히 오래 실행됨.

short job p2~10 : I/O intensive (cpu(5%), I/O(95%)) 이 경우 굉장히 적게 실행됨.

 

FIFO 구조로 p1 => p2 => ... => p10 순서로 process가 도착했다고 가정하자.

 

p1 이 먼저 Running state 이므로 p2~10 는 Ready state 이다.

 

p1 이 CPU를 점유가 끝나기 전까지 p2~10 는 실행하지 못하는 상태고 p1 이 I/O 하기 전까지

 

CPU 는 busy 한 상태이며 Disk 는 Idle 한 상태이다.

 

그리고 CPU 점유가 끝나면 I/O 상태로 변하면서 p1 는 Blocked state 로 변경된다.

 

그러면 다음 순서로 p2가 넘어오는데 CPU 를 굉장히 조금 쓰기 때문에 바로 Blocked state 가 된다.

 

그렇다면 p1, p2 는 blocked state이며 그다음 순서로 p3 이 넘어오는데 이러한 과정이 반복된다.

 

즉, p1~10 이 Blocked 상태로 아까와 반대 상황으로 CPU 가 idle 상태이며 Disk 는 Busy 상태가 된다.

 

이러한 상태를 Convoy Effect 라고 한다.

 

 

 

따라서 CPU, I/O Device 가 모두 Busy 상태인 경우가 가장 이상적인 상태이다.

 

하지만, Convoy Effect 가 발생하면 하나의 디바이스만 Busy 하고 다른 디바이스가 Idle 한 상태가 발생한다.

 

Passing the Tractor

 

Problem with Previous Scheduler

=> FIFO : Turnaround time can suffer when short jobs must wait for long jobs.

 

Tractor 는 FIFO 구조이기 때문에 어떤 process가 긴 시간동안 CPU 점유를 한다면

나머지 job 들을 기다려야 한다.

 

그래서 나온 Scheduler 는 2개가 존재한다.

 

New Scheduler 

 

1. SJF (Shortest Job First)

2. Choose job with smallest run_time

 

 

Shortest Job First (SJF)

 

Run the shortest job first, then the next shortest and so on 

=> Non-preemptive(선제적인) scheduler

 

예를 들어서 B(10) => C(10) => A(100) 순서로 process 가 동시에 도착했다고 하자.

 

 

이 경우에는 Average turnaround time = (10 + 20 + 120) / 3 = 50 sec 이다.

 

근데 이렇게 구할 수 있는 방법은 각 process 들의 실행시간을 알아야하는데 모른다는게 문제다.

 

즉, 이렇게 모든 process 들의 실행시간을 안다면 효율적으로 돌릴 수 있다.

 

 

SJF with Late Arrivals from B and C

 

이제 2번째 가정을 relax 하도록 해보자.

 

Let's relax assumption 2 : Jobs can arive at any time.

 

즉, 동일한 시간에 Process가 도착하는게 아니라 랜덤한 시간에 도착한다고 한다.

 

A 가 0 sec에 도착하고 run 하는데 100 이 걸린다고 하고

B, C 는 10 sec 에 도착하고 run 하는데 10 이 걸린다고 하자.

 

 

이 경우에는 Average turnaround time = (100 + (110 - 10) + (120 - 10)) / 3 = 103.33 sec 이다.

 

도착시간이 모두 같은 경우 110 sec 인데 약간의 delay 가 있는 경우 103.33 sec 으로 줄어든 모습이다.

 

 

Shortest Time-to-Completion First (STCF)

 

Add preemption to SJF

 

=> Also knows as Preemptive Shortest Job First (PSJF)

 

A new job enters the system

 

- Determine of the remaining jobs and new job

- Schedule the job which has the lest time left

 

 

예를 들어서 process B, C가 ready Queue 에 들어오는 순간 run 시간을 비교한다.

 

A 를 preemtion 으로 돌리고 B, C를 돌리고 다시 A 를 돌린다. (B, C 는 10 sec run 하므로)

 

Average turnaround time = (120 + (20 - 10) + (30 - 10)) / 3 = 50 sec 이다.

 

 

New scheduling metric : Response time

 

The time from when the job arrives to the first time it is scheduled.

 

Time(response) = Time(firstrun) - Time(arrival)

 

STCF and related disciplines are not particularly good for response time.

 

 

Round Robins Scheduling

 

Time slicing Scheduling

 

- Run a job for a time slice and then switch to the next job in the run queue until the

   jobs are finished. => Time slice is sometimes called a scheduling quantum.

   (여기서 scheduling quantum = time quantum = 약 10ms)

 

- It repeatedly does so until the jobs are finished.

 

- The length of a time slice must be a multiple of the timer-interrupt period.

 

 

 

 

The shorter time slice  VS  The longer time slice

 

The shorter time slice

 

- Better response time

- The cost of context switching will dominate overall performance.

 

The longer time slice

 

- Amortize the cost of switching

- Worse response time

 

Incorporating I/O

 

이제 3번째 가정을 제거해보도록 한다.

 

Let's relax assumption 3 : All programs perform I/O

 

- A and B need 50ms of CPU time each.

 

- A runs for 10ms and then issues an I/O request (I/Os each take 10ms)

 

- B simply uses the CPU for 50ms and performs no I/O

 

- The scheduler runs A first, then B after

 

 

위 경우와 아래 경우중에 위 경우는 빈 공간을 사용하지 않아 굉장히 비효율적으로 보인다.

 

그래서 I/O 하는 동안에 CPU가 점유하지 않는 동안에 다른 Process를 Scheduling 하도록 해야 한다.

 

즉, CPU utilization 을 좀 더 maximize 할 수 있다.

 

그래서 job 이 I/O request 를 하면 job 이 blocked 되고 Scheduler가 다른 job 을

CPU 점유를 하도록 하게 한다.

 

 

When the I/O completes

 

- An interrupt is raised.

- The OS moves the process from blocked back to the ready state.

 

 

'학교에서 들은거 정리 > 운영체제' 카테고리의 다른 글

Memory API, Segmentation  (0) 2021.10.07
Address Translation  (0) 2021.10.01
Memory Virtualization  (0) 2021.09.30
Multiprocessor Scheduling (Advanced)  (0) 2021.09.24
The Multi-Level Feedback Queue  (0) 2021.09.17
Comments