Process Scheduling
scheduler라는 것은 main memory 안에 존재하는 여러 process들 사이에서 다음 CPU를 할당받을 process를 선택하는 OS code를 말한다.
process scheduler는 다음 CPU에서의 실행을 위해 사용 가능한 process를 선택한다. 이때 여러 개의 process queue가 존재하는데 대표적으로 다음과 같은 queue가 존재한다.
- job queue: system에서의 모든 process의 set이 존재한다.
- Ready queue: CPU를 할당받고자 기다리는 process들이 있다.
- Device queue: I/O device를 위해 기다리는 process들이 있다.
process들은 다양한 queue에서의 이주가 가능하도록 설계된다.
Representation of Process Scheduling
scheduling 과정을 diagram으로 나타내면
Schedulers
scheduler는 크게 3가지로 구분할 수 있다.
1. short-term scheduler
지금까지 언급한 CPU scheduler를 의미한다. main memory에 있는 process들 중에서 누구에게 CPU를 할당할 것인가를 결정하는 scheduler이다. 굉장히 빈번하게 발생하기 때문에 빠른 속도가 중요하다.
2. medium-term scheduler
main memory 안에 들어가는 프로그램이다. process의 수를 조절하는 역할을 해 주는 것이 mid-term scheduler이다.
mid-term scheduler는 process가 너무 많아지면 swapper를 통해 스와핑을 한다. 너무 많은 process가 main memory 안에 존재하게 되면 각 process가 활용할 수 있는 memory 공간이 굉장히 적어지게 된다. 그렇게 되면 process가 상대적으로 커서 일부분만 main memory에 올라가게 된다.
그래서 process가 main memory에서 차지할 수 있는 공간을 넓혀주어야 하는데, 그러기 위해 swapper는 기존 main memory 안에 있는 process 중에서 사용될 가능성이 낮은 것을 memory 밖으로 swap out을 시켜주게 된다.
만일 너무 많은 process가 main memory 안에 존재한다면 그만큼 CPU 경쟁이 심해질 것이다. 그렇게 되면 각 process에게 할당된 CPU quantum은 짧아질 수밖에 없다. 혹은 굉장히 빈번한 CPU switching이 일어나게 된다. 그래서 이러한 CPU contention이 증가하는 것을 막기 위해 적절한 수의 process만 main memory 안에 있도록 해주는 역할을 mid-term scheduler가 하게 된다.
3. long-term scheduler
job scheduler를 의미한다. 즉, compiler에 의해 source language로 구성된 code를 machine language code로 바꿔줘서 I/O device에 저장하게 되는데, 이것을 memory에 선택하여 전달을 해주어야 한다.
그래서 누구를 main memory 안에 있는 ready queue에 저장할 것인가를 결정하는 scheduler이다.
short-term scheduler에 비해 덜 빈번히 일어나고 또 속도도 그만큼 느리다.
그래서 long-term scheduler의 경우에는 multi-programming 정도.. 몇 개의 program을 main memory 안에다가 저장할 것인가, 즉 main memory 안에 몇 개의 process, 몇 개의 program을 저장할 것인가를 결정한다.
process의 경우에도 크게 두 가지 process로 구분된다.
1. I/O-bound process
이 process의 대부분의 시간을 I/O를 수행하는 데에 소비하는 process
2. CPU-bound process
이 process의 대부분의 시간을 CPU, computation에 소비하는 process
그런데 process 전체 시간 중에 어느 정도가 I/O가 되어야 I/O-bound process라고 하는 것인가?
이것에 대해 정해진 값은 없다. 전체적으로 봤을 때 I/O를 굉장히 빈번하게 수행하고 연산은 거의 없다면 I/O-bound.
반면 I/O는 거의 없고 대부분 CPU를 가지고 연산을 수행하는 데 많은 사용이 일어난다면 CPU-bound.
그래서 long-term scheduler인 경우, main memory 안에 process를 저장할 때, 즉 main memory 안에 ready queue에 맨 처음 저장이 되게 되는데, 적당한 수의 I/O-bound와 적당한 수의 CPU-bound를 적절히 혼합해서 저장을 해 주어야 한다.
그렇지 않고 만약 I/O-bound job만 너무 많고 CPU-bound job은 너무 적다면?
I/O-bound job의 특징은 CPU를 거의 사용하지 않는 것이다. 대신 조금 CPU를 사용하고 I/O를 많이 사용한다. (CPU-bound는 그 반대)
그렇기 때문에 CPU를 여러번 쓰긴 쓰겠지만 사용하는 시간이 굉장히 작아진다. (작게 띄엄띄엄)
만약 long-term scheduler가 이러한 특징을 갖는 I/O-bound process만 굉장히 많이 main memory 안에 저장을 했다면 CPU의 많은 시간이 idle하게 된다. 많은 시간이 낭비되는 것이다.
반대의 경우에는 대부분 CPU만 사용하고 I/O는 거의 사용하지 않게 되는데, I/O device의 많은 부분이 idle하게 남아있는 경우가 발생한다. I/O device의 활용도가 굉장히 낮아지는 것이다.
'운영체제' 카테고리의 다른 글
(IPC) Interprocess Communication이 필요한 이유 (0) | 2022.08.05 |
---|---|
CPU Scheduling이 필요한 경우와 고려해야할 것들 (0) | 2022.07.29 |
Semaphores (0) | 2022.07.21 |
Mutex Locks (0) | 2022.07.21 |