Search
💾

[OS] CPU Scheduling 1(1)

참고 강의
contents

CPU and I/O Bursts in Program Execution

프로그램들은 이런 Path를 통해서 실행이 됨
Process
State
CPU burst
load store add store read from file → I/O 오래 걸리는 작업
I/O brust
wait for I/O
Ready Queue
Ready State
CPU burst
store increment index write to file
I/O brust
wait for I/O
Ready Queue
Ready State
CPU burst
load store add store read from file
...
...
CPU burst
: CPU만 연속적으로 쓰면서 instruction를 실행하는 단계
I/O burst
: I/O만 사용하는 단계
  프로그램이 실행된다는 것은 CPU burst와 I/O burst를 반복적으로 수행하는 것
프로그램의 종류에 따라서 두 가지가 빈번할 수도, 하나만 진득하게 나올 수도 있다.
두 가지가 빈번한 프로그램 : 사용자가 많이 끼어드는 프로그램, Interactive Job
CPU burst가 짧아지고 I/O burst가 많아진다.
하나만 진득하게 프로그램 : 중간에 사람의 Interaction이 들어오지 않는 프로그램, CPU를 사용해서 오랫동안 계산을 해야하는 프로그램

CPU-burst Time의 분포

I/O bound job : CPU를 아주 짧게 쓰고 중간에 I/O가 끼어드는 작업
many short CPU bursts
CPU bound job : CPU만 아주 오랫동안 사용하는 작업, Computing bound job
few very long CPU bursts
  컴퓨터 내부에는 여러 종류의 process가 섞여있기 때문에 CPU 스케줄링이 필요하다.
  CPU의 시간은 CPU bound job이 많이 사용하고 CPU를 사용하는 빈도는 I/O bound job이 많다.
CPU bound job은 한 번 잡은 CPU를 잘 놓지 않는다. 이로 인해 I/O bound job를 사용하는 사용자가 CPU가 job으로 부여되지 않아서 답답함을 느낀다. 이런 문제점을 해소하기 위해서는 CPU 스케줄링을 통해서 I/O bound job에게 적절한 response를 제공해줘야 한다. * 공평함보다는 효율성이 우선 * Interactive한 job이 너무 오래 기다리게 하면 안됨
CPU 스케줄링의 주요 이슈
누굴 우선해서 줄 것인가? 얼만큼의 시간을 주고 CPU를 뺏어야 하는가?
CPU 스케줄링의 주요 목적
CPU를 할당받을 프로세스를 잘 골라 실행시켜줌으로써 전체적으로 시스템의 성능을 높이자는 것이 스케줄링의 목적
Process, Job?

CPU Scheduler & Dispatcher

CPU Scheduler
: Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다.
Dispatcher
: CPU를 어떤 프로세스에게 줄 지 결정했으면 그 프로세스에게 CPU를 넘겨주는 역할을 하는 운영체제 커널 코드
CPU를 넘겨주기 위해서 넘겨주기 전에 실행하던 프로세스의 context를 저장해야 함. → 문맥 교환
Q. CPU Scheduler는 어떻게 생겼나요?
A. 운영체제 안에서 CPU Scheduling를 하는 코드를 CPU Scheduler라고 이르는 것, Dispatcher도 동일. 운영체제에서 특정 기능을 하는 것들을 이런 식으로 부르는 것이다.
Q. CPU 스케줄링은 언제 필요한가?
1.
Running → Blocked : I/O 요청이 들어와서 I/O를 하러간 경우
자진해서 CPU를 내어놓는 경우
2.
Running → Ready : CPU를 계속 사용하고 싶은데 Timer Interrupt 때문에 다시 Ready Queue로 돌아간 경우
3.
Blocked → Ready : I/O 완료 후에 Device Controller가 Interrupt를 걸어서 상태를 Ready로 변경된 경우
I/O가 끝나고나서 바로 Running으로 가지 않는다. 하지만 넘겨야 하는 경우 존재
우선순위에 기반한 스케줄링의 경우
4.
Terminate : 프로세스가 종료되어서 할 일이 없다보니 다른 프로세스에게 CPU를 넘겨줘야 하는 경우
  1, 4는 CPU를 가지고 있어도 더이상 instruction를 실행하지 못해서 자진 반납하는 경우이다.
= nonpreemptive
  2, 3은 CPU를 계속 사용하고 싶은데 번갈아 사용해야해서 강제로 CPU를 빼앗긴다.
= preemptive

How does iOS 10 schedule its CPU

At a high level, there are real time threads (which run until they block) and time share threads, which have a base priority. The time share thread with the highest priority runs on the CPU but, as it runs, its priority decays. Eventually that priority drops below that of some other time share thread, and the CPU switches threads.