[운영체제/OS] CPU 스케쥴링 - (1)

kindof

·

2021. 6. 14. 20:35

1. 들어가면서

CPU 스케줄링은 어떤 프로세스를 어느 시간동안 실행시킬 것인가를 결정하는 과정이라고 생각할 수 있습니다.

 

스케줄링을 공부하기 이전에 두 가지 용어를 우선 정의하면 좋을 것 같은데요.

  • Nonpreemptive scheduling : 이미 할당된 자원을 다른 프로세스가 빼앗을 수 없는 방식
  • Preemptive scheduling : Time slice가 소진되었거나 I/O Interrupt, system call 등이 발생하면 현 실행 프로세스로부터 강제로 CPU를 회수하여 프로세스를 스위칭하는 방식  

이 두 가지 용어는 앞으로 정말 많이 나올 예정이니, 헷갈리지 않게 잘 알아두면 좋을 것 같습니다.

 

 

헌편, 예전에 프로세스의 다섯 가지 상태에 대해서 글을 썼을 때 참고한 그림이 있었습니다.

Process Status

위 그림에서 (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와 프로세스 입장에서 효율을 따지게 됩니다.

  1. The selection function(which) : 어떤 프로세스를 지금 스케줄링할까?
  2. The Decision mode(when) : 언제/어떤 방식으로 프로세스를 바꿀까? - Nonpreemptive? Preemptive?

CPU 스케줄링에 대해 본격적으로 이야기하기 전에 몇 가지 알아야 할 개념이 조금 더 있는데요. 이 내용들을 알아야 뒤에 내용이 이해가 되니, 한 번 꼭 이해해주세요.

 

* CPU-Bound와 I/O-Bound

프로세스는 기본적으로 명령어(Instruction)을 수행하다가 I/O를 기다렸다가 반복합니다.

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을 하는 방법에는 무엇이 있는지 알아보겠습니다.

 

08. CPU 스케쥴링(2)

0. 들어가면서 지난 글에서 CPU scheduling이 필요한 시점에 대해서 공부하고 몇 가지 개념에 대해 배웠다. 대표적으로 Preemptive, NonPreemptive 개념에 대해서 배웠고, 스케줄링은 어떤 기준으로 되어야

studyandwrite.tistory.com