본문 바로가기

Dev.Basic/운영체제

[OS] 5-1. CPU Scheduling I

Chapter 5-1. CPU Scheduling I

프로그램이 실행되면, 실행되면서 거치는 일련의 path가 존재한다.

CPU가 일을 수행하고, I/O 작업 요청에 대한 응답을 기다리는 일을 반복한다.

CPU가 일을 수행하는 시간을 CPU burst time 이라고 하고,

I/O 요청에 대한 응답을 기다리는 시간을 I/O burst time 이라고 한다.


CPU 스케줄링이란 무엇인가

CPU 스케줄링이란 CPU입장에서 또는 프로세스 입장에서

최고의 효율성을 보이며, 공평하게, CPU를 프로세스에게 분배하는 알고리즘, 방법을 의미한다.
스케줄링의 대상은 이미 Ready queue에 들어온 프로세스를 대상으로 진행된다.



CPU 스케줄링이 필요한 이유

프로그램마다 두 시간의 비율이 다르다.

I/O 작업이 빈번한 작업(I/O bound job)이 있는 반면,

그렇지 않은 작업도 있다.(CPU bound job)

이 두 가지가 함께 존재하기 때문에, 운영체제는 각 프로그램에게 CPU를 할당해주기 위한 스케줄링이 필요하다.

사용자의 요청과 직접적으로 연관이 있는 I/O bound job을 적절하게 처리하는 것이 주된 관심사가 된다.

사용자가 지나치게 오래 기다리지 않도록 스케줄링 해줘야 하기 때문이다.

CPU bound job이 너무 오랫동안 CPU를 잡고 놓지 않으면 효율이 떨어지기 때문이다.


즉 프로세스는 그 특성에 따라 두 가지로 나뉘게 된다.

I/O bound process

CPU bound process


CPU Scheduler / Dispatcher

이것은 하드웨어도 아니고, 특정한 소프트웨어를 지칭하는 것도 아니다.

운영체제 내부에서 이 역할을 하는 코드의 일부분이다.

CPU Scheduler는 Ready 상태의 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 결정한다.

Dispatcher는 CPU의 제어권을 스케줄러에 의해 선택된 프로세스에게 넘겨주는 역할을 한다.



구체적으로 어떠한 경우에 CPU Scheduling이 필요할까

강제적인 경우(preemptive)와 비강제적인 경우(nonpreemptive)로 나눠볼 수 있다.

<preemptive>

timer interrupt

할당 시간 만료로 CPU를 강제로 빼앗고 다른 프로세스에게 넘겨줘야 한다.

device controller 의 I/O 완료 interrupt

I/O 요청에 작업을 마쳤으므로 해당 프로세스를 ready queue에 대기시켜줘야 한다.

<nonpreemptive>

I/O interrupt

CPU가 어떠한 프로세스에 할당되어 있다가 I/O요청이 들어오면 그 프로세스에게 CPU를 넘겨줘야 한다.

Termiate

프로세스가 일을 모두 마치고 종료가 되면 CPU를 다른 프로세스에게 넘겨줘야 한다.



그렇다면 어떤 스케줄링이 좋은 것인가?

스케줄링을 판단하는 기준을 Scheduling Criteria or Performance Index or Performance Measure라고 한다.

시스템 입장에서의 성능 청도, 프로세스 입장에서의 성능척도 이렇게 두 가지로 분류할 수 있다.

직관적으로 이해하자면,

시스템 입장에서는 CPU가 가만히 있질 않고 최대한 많은 일을 하면 성능이 높은 것이고

프로세스 입장에서는 자신에게 얼마나 빨리 CPU를 할당받느냐가 주된 이슈가 된다.


<시스템 입장에서의 성능 척도>

CPU utilization (이용률)

전체 시간 중에서 CPU가 놀지 않고 일한 시간의 비율

Throughput (처리량)

주어진 시간동안 얼마의 작업을 처리했는가

<프로세스 입장에서의 성능척도>

Turnaround time (소요시간, 반환시간)

CPU를 할당받기 위해 Ready queue에서 대기한 시간부터 모든 프로세스 작업을 마치고 반환하기 까지 걸린 시간

Waiting time (대기 시간)

CPU를 할당받기 위해 Ready queue에서 대기한 시간의 총합

Response time (응답 시간)

Ready queue에 들어와서 첫 번째로 CPU를 할당받기까지 걸린 시간


위에서 설명한 대로 대기시간과 응답시간은 비슷해보이지만 차이가 있다.

대기 시간은 응답 시간을 포함하여 ready queue에 있던 시간들의 총 합을 의미하고

응답 시간은 CPU를 할당받아서 일을 한 번 할 때까지의 시간을 의미한다.

왜 굳이.

응답 시간을 분리해둔것인가

사용자의 입장에서는 뭔가 동작해야 마음이 놓인다.

이 부분을 정확하게 보여주는 시간이 바로 응답 시간인 것이다.



Chapter 5-1. 끝

이 포스팅은 이화여대 반효경 교수님 강의를 듣고 요약한 내용을 담고 있습니다.