[운영체제/OS] CPU 스케쥴링 - (1)
kindof
·2021. 6. 14. 20:35
1. 들어가면서
CPU 스케줄링은 어떤 프로세스를 어느 시간동안 실행시킬 것인가를 결정하는 과정이라고 생각할 수 있습니다.
스케줄링을 공부하기 이전에 두 가지 용어를 우선 정의하면 좋을 것 같은데요.
- Nonpreemptive scheduling : 이미 할당된 자원을 다른 프로세스가 빼앗을 수 없는 방식
- Preemptive scheduling : Time slice가 소진되었거나 I/O Interrupt, system call 등이 발생하면 현 실행 프로세스로부터 강제로 CPU를 회수하여 프로세스를 스위칭하는 방식
이 두 가지 용어는 앞으로 정말 많이 나올 예정이니, 헷갈리지 않게 잘 알아두면 좋을 것 같습니다.
헌편, 예전에 프로세스의 다섯 가지 상태에 대해서 글을 썼을 때 참고한 그림이 있었습니다.
위 그림에서 (1), (4)에 의해서만 프로세스가 스위칭되는 것을 NonPreemptive라고 생각하면 되고 (1)~(4)에 의해 프로세스가 스위칭될 수 있는 것을 Preemptive라고 생각하시면 됩니다.
2. CPU 스케줄링의 기준과 몇 가지 개념에 대해
CPU 스케줄링이 지금까지 연구되는 이유는 시스템과 유저 관점에서의 교착 상태때문인데요. 무슨 말이냐면, 유저 입장에서는 요청된 작업을 빨리 처리해주는 게 좋은 것이고, 시스템 입장에서는 CPU를 최대한 많이 바쁘게 돌리는 것이 중요할 겁니다.
그런데 이 두 가지 요구를 동시에 만족시키는 것이 어렵기 때문에 CPU 스케줄링을 상황에 따라 다르게 설계할 수밖에 없는 것이죠.
그렇다면 CPU 입장과 프로세스 입장에서는 각각 어떤 기준이 있는지 살펴보겠습니다.
- CPU Oriented(System)
- Utilization: CPU를 최대한 바쁘게 하는 것
- Throughput: 주어진 시간안에 최대한 많은 프로세스를 완료시키는 것
- Process oriented(User)
- Turnaround time: 특정 프로세스를 수행하는데 걸리는 총 시간
- Waiting time: Ready queue에서 프로세스가 실행되기를 기다리는 시간
그리고 스케줄링 정책은 다음 두 가지 관점에서 정의되어 CPU와 프로세스 입장에서 효율을 따지게 됩니다.
- The selection function(which) : 어떤 프로세스를 지금 스케줄링할까?
- The Decision mode(when) : 언제/어떤 방식으로 프로세스를 바꿀까? - Nonpreemptive? Preemptive?
CPU 스케줄링에 대해 본격적으로 이야기하기 전에 몇 가지 알아야 할 개념이 조금 더 있는데요. 이 내용들을 알아야 뒤에 내용이 이해가 되니, 한 번 꼭 이해해주세요.
* CPU-Bound와 I/O-Bound
프로세스는 기본적으로 명령어(Instruction)을 수행하다가 I/O를 기다렸다가 반복합니다.
각 싸이클은 CPU를 사용하는 Burst time과 그 뒤에 I/O Burst time이 존재합니다.
Burst time이란 어떤 프로세스의 CPU burst time이 10초라고 하면, 이 프로세스의 어떤 작업이 완료되기 위해 CPU가 10초동안 이 프로세스를 작업해줘야 한다는 뜻입니다. 그 다음에 I/O burst가 왔다는 것은 10초동안 이 작업을 하고, I/O Interface로부터 작업이 필요한 시간이 존재한다는 것이죠.
이 때, CPU-Bound process는 말그대로 CPU에서 처리해야 하는 일이 많은 프로세스를 의미하고 I/O-Bound process는 I/O 작업에서 필요한 시간이 많은 프로세스를 의미합니다.
이 내용을 지금 설명하는 이유는, 어떤 작업이 CPU를 쓰는 시간이 많은지 VS I/O 작업을 처리해야 하는 데 많은 시간이 쓰이는지에 따라 스케줄링을 할 때 다르게 고려되기 때문입니다.
* Priority
Priority란 말 그대로 우선순위란 뜻입니다. 만약 스케줄링을 우선순위의 관점에서 하게 된다면 우선순위가 높은 프로세스가 먼저 할당이 되는 식이죠.
하지만 우선순위만을 기반으로 하게 되면 Starvation problem이 생길 수 있는데, 우선순위가 낮은 프로세스는 배고파 죽을 때까지 할당을 받지 못한다는 것입니다.
그래서 우선순위만으로 CPU 스케줄링을 하면 안되겠죠?
자, 그러면 다음 포스팅에서 CPU Scheduling을 하는 방법에는 무엇이 있는지 알아보겠습니다.
'CS > OS' 카테고리의 다른 글
[운영체제/OS] CPU 스케쥴링 - (3) (0) | 2021.06.14 |
---|---|
[운영체제/OS] CPU 스케쥴링 - (2) (0) | 2021.06.14 |
[운영체제/OS] 멀티쓰레드 구현해보기 (0) | 2021.06.14 |
[운영체제/OS] 프로세스 모델의 한계과 멀티쓰레드의 필요성 (0) | 2021.06.14 |
[운영체제/OS] OS 자체는 어떻게 구현할까? (0) | 2021.06.14 |