Scheduling

kul·2022년 1월 15일
0

OS

목록 보기
2/3

scheduling

cpu virtualization을 수행하기 위해 time sharing이 필요하고 즉 여러 process가 각각 cpu를 가지고 있는 듯한 효과를 보이기 위해서는 cpu를 이용하는 시간을 나누어서 사용해야한다. 이 때 os가 여러 process들 중 cpu time을 나눠줄 process를 선택하는 것

proc.c의 scheduler()에서 수행되며 process 정보들을 가지고 있는 ptable.proc배열을 돌면서 실행할 process를 선택한다.

main()의 mpmain()을 호출하고 mpmain()에서 scheduler()를 호출하여 process 실행이 시작된다.

scheduling algorithm

scheduling algorithm을 설계하기 전 5가지 가정
1. Each job runs for the same amount of time
2. All jobs arrive aht the same time
3. Once started, each job runs to completion
4. All jobs only use the CPU
5. The run-time of each job is known

-FIFO

  • 문제점 : 100s의 process A 뒤에 10s process B를 수행할 때 average turnaround time이 늘어남
  • job length를 고려하지 않아 문제가 발생
  • 1번 가정이 깨졌을 경우 문제 발생

job length를 고려한 scheduling algorithm -> SJF
-SJF

  • non-preemtive

  • 가장 job length가 작은 process 선택

  • 2번 가정이 깨졌을 경우 문제 발생

  • job length가 긴 process를 먼저 수행할 경우 짧은 job length를 가진 process가 나중에 수행됨 (non preemptive)-> average turnaround time 증가

preemptive : 수행 중인 process를 멈추고 다른 process를 수행, scheduler가 context switch를 수행 <--> non-preemptive

-STCF(shortest time to completion)

  • preemption + SJF
  • Response time에 좋지 않음
  • turnaround time에 좋음
  • 4번째 가정이 깨졌을 경우에 적당함

-RR

  • 각각의 job들을 time slice마다 실행
  • response time에 좋음

-MLFQ

  • 과거에 process의 수행 정보를 가지고 앞으로 얼마나 더 수행할 지 예측
  • priority of A > priority of B -> A를 실행
  • priority of A == priority of B -> A와 B를 RR로 실행
  • 새로 생성된 job은 highest priority를 가짐
  • time allotment를 다 사용시 priority가 줄어듬
  • 문제점
    -starvation
    -scheduler 조작
  • priority boost를 이용하여 문제 해결

0개의 댓글