어떤 기준으로 프로세스를 평가하고, 스케줄링 순서를 정해줄까?
I/O Bound Process : cpu 사용보다는 입출력을 많이 하는 프로세스
CPU Bound Process (=Compute-bound) : cpu를 많이 사용하고, 연산을 많이 하는 프로세스
하나의 시스템에 여러 프로세스들이 섞여 들어올 때, I/O 바운드를 먼저 할지 CPU 바운드 프로세스를 먼저 할지 결정하는 것
무조건은 아니지만, 일반적으론 I/O Bound Process를 먼저 스케줄링한다. ready que에 I/O 바운드와 CPU 바운드 프로세스가 있을 때, CPU 바운드를 먼저 할당하게 되면 그 프로세스가 자신의 Time Quantum을 다 써야 I/O 프로세스가 들어간다. 만약 I/O 프로세스가 먼저 들어가게 되면, I/O 바운드는 CPU를 많이 안 쓰니까 자기 Time Quantum을 다 쓰지 않고 I/O를 하고 Sleep 상태가 된다. 그 때 CPU 바운드 프로세스가 CPU에 올라와서 실행 가능하다. 즉, I/O 바운드 프로세스는 I/O 디바이스를 활용하고 Compute바운드 프로세스는 CPU를 사용하기 때문에 병렬료 사용되는 상황이 된다. 즉 일반적으로는 I/O 바운드 프로세스를 먼저 사용하는 것이 선호된다.
Batch Process(=Background Process) : 명령을 입력한 사용자가 기다리지 않는 것
Interactive Process(=Foreground Process) : 명령을 입력한 사용자가 기다리고 있는 것
당연히 Interactive Process가 우선순위를 가지게 된다.
Real Time System에서 자주 사용되는 스케줄링 기준
Deadline : 프로세스는 특정 시간까지 output을 내야 하는 '데드라인'을 가진 경우가 있다.
Real Time Process : deadline을 가진 프로세스를 real time process라고 한다.
Hard Real Time : deadline을 반드시 키져야 하는 경우는 hard real time process
Soft Real Time : deadline을 반드시 키지지는 못하더라도 가급적 빨리해야 하는 프로세스
None Real Time : deadline이 없는 프로세스
=> Hard Real Time과 Soft Real Time을 'Real Time Task'라고 한다.
그 application의 도메인이 무엇인지, 얼마나 중요한지
학교에서 컴퓨터 시스템이 학생들의 실습으로 사용되면서 동시에 성적 처리용으로 사용되고 있다. 이 경우에는 일반적으로 성적을 처리하는 것이 더 중요하다.
컴퓨터 시스템에 중요도를 반영하기는 쉽지 않지만 프로세스의 중요도를 기준으로 스케줄링할 수 있다.
프로세스의 burst time을 기준으로 할 수도 있다. 서비스타임이 1초인 프로세스와 100초인 프로세스 중 1초인 프로세스를 먼저 스케줄링한다.
프로세스의 우선순위를 정해서 우선순위별로 스케줄링을 할 수도 있다.
스케줄링은 기본적으로 3단계로 이뤄진다.
= Job Scheduling = admission Scheduling = high-level Scheduling
(1) 여러 App(Job)들 중에 어떠한 것을 선택해서 프로세스를 생성할지(커널에 등록할지) 결정
(2) 컴퓨터 시스템 내부에 이미 너무 많은 프로세스가 있어서 오버로드되어 있는 경우, 바깥에 있는 앱이 더 이상 들어오지 않도록 막는 역할을 한다. 즉 생성된 프로세스의 개수 (=멀티프로그래밍 degree)가 너무 높으면 시스템의 성능이 하락하는 현상이 발생하기 때문에, 이미 degree가 높다면 long term scheduler가 차단을 하는 역할을 한다.
(3) i/o 바운드와 compute 바운드 프로세스를 적절히 섞어서 선택한다. cpu 바운드 프로세스만 많으면 cpu만 사용하고 i/o만 많으면 cpu가 놀게 되기 때문에 좋지 않아서, 적절하게 섞어서 cpu도 활용이 잘 되고 i/o도 활용이 잘 되도록 프로세스를 선택하게 된다.
(4) 대부분의 time-sharing system에서 (interactive system)에서는 job이나 command가 submission 되면 즉시 커널에 등록되고 프로세스로 탄생이 된다. 즉 long term scheduling을 거의 하지 않는다는 것이다.
생성된 프로세스들 중 어떤 것에게 메모리를 할당 할지 결정
swapping 작업을 담당한다. 즉 어떤 것을 swap-in 시키고, 어떤 것을 swap-out 시킬지 결정한다.
= Process Scheduling, low-level Scheduling
(1) Ready Que에 있는 프로세스 중 어떤 것에게 cpu를 할당할지 결정
현재 CPU를 사용중이던 프로세스가 CPU를 나가면(인터럽트가 생기거나 프로세스가 시스템 콜을 할 경우 등) 그 때 스케줄링을 하게 된다.
(2) 스케줄링의 주기는 일반적으로 굉장히 자주 발생한다. 따라서 스케줄링을 잘 하는 것도 중요하지만, 스케줄링 선택을 빨리 해야 한다.
ex) 프로세스가 할당받고 cpu를 사용하는 시간이 평균 100ms인데 스케줄링 결정에 10ms가 소요된다면, 좋지 않다. CPU가 10/(100+10) = 9% 정도는 스케줄링 선택에만 사용되는 것이기 때문이다.
CPU에 프로세스 A가 실행중인데, A가 스스로 CPU에서 나오지 않고 계속 사용중일 때 Time Quantum이 지나서 혹은 더 높은 우선순위로 인해서 다른 프로세스를 cpu에 할당시키는 것을 '선점형 스케줄링'이라고 한다.
Time Quantum이라는 개념이 있다면 '선점형 스케줄링' 기법이다.
Time Sharing 시스템이나 Real Time System의 경우에 사용된다.
선점형 스케줄링 기법은 context switching이 자주 발생하기 때문에, context switching 때마다 커널이 개입하게 되어 커널의 개입 overhead가 커진다.
그렇지만 선점형 스케줄링이 더 flexible하고 adaptable 하기 때문에 자주 사용된다.
프로세스가 생성될 때 우선순위가 결정되고, 프로세스가 실행하는 동안 우선순위가 바뀌지 않음
외부에서 주어지는 경우가 많다.
프로세스가 생성될 때 초기 우선순위가 배정되고, 프로세스 실행 동안 계속 상태에 따라서 우선순위가 변함.
커널에서 내부적으로 결정되는 경우가 많다.
더욱 더 시스템 환경에 adaptive하고 flexible하기 때문에 더 많이 사용된다.
프로세스가 처음 탄생하면 그 프로세스가 cpu를 사용하는 구간과 I/O를 쓰는 구간이 번갈아 발생한다. CPU 실행이 진행되는 구간이 CPU burst이고, I/O 가 실행되는 구간이 I/O Burst이다.