메모리의 프로세스들 중에서 어떤 것에 먼저 CPU를 할당해야 하는가?
CPU의 사용을 극대화하고, 시간 공유를 위해서 빠르게 프로세스를 CPU로 switch한다.
🥤 Process Scheduler
- 사용 가능한 프로세스 중에서 어떤 것을 CPU에서 실행할 것인지 선택한다.
- 메모리에 저장된 모든 프로세스는 하드디스크에 똑같은 원본이 있어야 한다.
🌱 프로세스들의 scheduling queues
- Job queue : 시스템의 모든 프로세스들
- Ready queue : 메인 메모리에 존재하는 실행 대기중인 모든 프로세스들
🍃 메모리속에 CPU를 기다리는 프로세스들
- Device queues : I/O장치를 기다리는 프로세스들
- 프로세스는 다양한 큐들 사이에서 옮겨다닌다.
- queue의 header는 PCB를 가리킨다.
- running은 queue가 없다.
Schedulers
🍊Long-term scheduler
- 다른 이름으로 job scheduler
- 하드디스크의 어떤 프로그램을 ready queue에 넣을지 선택한다.
- 자주 호출되지 않는다. 따라서 느리다. (second, minute)
- degree of multiprogramming을 제어해야 한다.
degree of multiprogramming : 메인 메모리의 프로세스들의 수
🥖 Long-term scheduler가 아래의 둘을 적절히 혼합되도록 프로세스를 가져와야 한다.
I/O bound Process : I/O 사용시간 > CPU 이용 연산 시간,
CPU bursts가 짧다.
CPU bound Process : I/O 사용시간 < CPU 이용 연산 시간,
긴 CPU bursts가 거의 없다.
🍘 Short-term scheduler
- 다른 이름으로 CPU scheduler
- 메모리 사이에 어떤 프로세스를 CPU에서 실행할 것인지 선택한다. (CPU를 할당한다)
- 시스템에서 유일한 스케쥴러가 될 수도 있다.
- 자주 실행되기 때문에 빨라야 한다. (ms)
🌺 Medium-term scheduler
- degree of multiple programming를 줄여야 하는 경우에 사용한다.
- 메인 메모리에 프로세스가 너무나 많기 때문에 경쟁이 심화되고, 하드디스크로 swap out한다.
- CPU 스케쥴러가 빈번하게 사용되면 메모리의 빈 공간이 적어지고, 새로운 프로세스가 들어오지 못하게 된다.
그렇게 되면 기존 프로세스의 추가 메모리 할당이 되지 않고 이는 전체 시스템의 성능 저하 로 이어지게 된다.
- 누구를 swap out할지 결정한다.
- swapping : 메모리에서 프로세스를 제거한다.
그리고 그 프로세스를 디스크에 저장하고 추후에 디스크에서 다시 가져와 계속해서 실행한다.
Context Switch
- CPU가 다른 프로세스로 switch할 때 시스템은 이전 프로세스의 상태를 저장하고(PCB) context switch를 통해 새 프로세스에 대해 저장된 상태(PCB)를 불러와야 한다.
- 즉, PCB의 내용을 교환한다.
CPU의 레지스터값, 메모리 관리정보, 프로세스 상태 정보 등
- 이때 context switch는 overhead이다. 즉, 짧을수록, 될 수 있으면 빠른 것이 좋다.
🥔 switch 하는 동안에는 시스템이 사용자의 일을 수행하지 않는다.
- OS와 PCB가 복잡할수록 context switch는 더 오래 걸린다.
- 걸리는 시간은 하드웨어의 도움에 달려있다.
몇몇 하드웨어는 CPU당 여러개의 registers set을 제공한다.
이를 통해서 한번에 여러 contexts를 불러온다.
- 소프트웨어는 되도록 빠르도록 assembly language로 구현된다.