프로세스 스케줄링이란 무엇일까??
각 process는 자기 자신의 address space를 갖고 있다.
만약 시스템이 여러 프로세스를 갖는다면
위와 같을 것이다.
multiple process들이 여러개의 프로세서에서 돌아간다면 프로세서가 프로세스 하나씩 맡아서 실행시키면 된다.
하지만, 프로세서가 하나라면 어떻게 여러 프로세스들을 실행 시킬 수가 있을까??
OS가 바로 이런점을 해결 해준다.
OS가 virtualization을 통해서 각각의 프로세스가 address space를 가지고 있도록 만들어준다.
요약해서 말하자면, OS가 scheduling을 통해서 process마다 돌아가면서 CPU를 사용할 수 있도록 스케줄을 짜준다.
하지만, process를 교체하는 과정이 느리면 우리가 사용할때 불편할 것이다.
동시에 모든 process를 사용하는 것처럼 느끼려면 프로세스들을 빠르게 스위치 시키는 것이 중요하다.
process scheduler
는 cpu에서 다음 실행을 위해 준비된 프로세스들 중 선택하는 역할을 한다.
우리가 알아볼 내용은 다음과 같다.
- 프로세스들이 스위치 되는 방법
- 스케줄링을 위해 사용 가능한 프로세스를 찾고 관리하는 방법
- 실행을 위한 다음 프로세스를 선택하는 방법
scheduler는 single processor에서도 병렬처리 없이 concurrency(동시성)을 갖게 해준다.
OS는 hardware의 timer를 사용해서 illusion을 만든다.
Mechanism
Policy
무엇을 해야 하는지?
리소스를 할당하고 관리하는 것을 어떻게 할지 결정
CPU time도 resource
e.g)다음 실행할 process들이 무엇인가??
CPU가 다른 process로 스위치할때, 시스템은 현재 프로세스의 상태를 저장해야하고, 다음 프로세스의 상태를 load해야 한다.
프로세스의 Context는 PCB(process control box)안에 나와 있다.
context-switch time은 overhead이다.
*overhead: 처리하는 데 걸리는 시간,메모리
시스템은 스위치 하는중에는 유용하게 작업을 하지 않는다.
OS와 PCB가 복잡할수록 context switch는 더 길어진다.
context-switch 시간은 hardware 지원에 따라 달려있다.
몇몇 하드웨어(SUN UltraSPARC) CPU하나당 레지스터들의 집합 여러개를 제공한다.
-> CPU에서 multiple context들을 유지할 수 있다.
ready queue: 실행되기를 기다리는 process들
device queue: 위에 그림의 disk가 이에 해당하고, interrupt가 발생했을때, 실행되는 queue
처음에 process가 들어오면 ready queue에 놓인다. process가 scheduler에게 선택되어 CPU에서 실행되다보면 interrupt가 발생할 수 있다.
I/O interrupt나, time slice expired(tick, quantum등을 다 썼을경우), fork,wait interrupt등이 그 예이다.
interrupt가 발생하면 그에 해당하는 interrupt queue에 추가되고 waiting 상태로 기다린다. interrupt handler routine이 끝나면, 다시 ready queue로 돌아가고 우선순위에 따라 ready queue에서 process가 실행된다.
만약에 interrupt가 발생하던중 다시 interrupt가 발생하면 , interrupt queue에 순서대로 추가된다.