컴퓨터공학/운영체제

CPU scheduling 헷갈리기 쉬운 부분

황태건 2023. 11. 16. 16:11

교재 내용에서 아리까리한 부분만 따로 정리함

burst & bound

burst는 해당 종류의 작업만 실행하는 구간이라고 생각하면 됨. CPU burst는 CPU에서 연산만 수행하는 구간, I/O burst는 입출력을 수행하는 구간. bound는 프로세스가 CPU/IO 중 어느 쪽에 시간을 더 많이 쓰는가 구분하는 것. 긴 CPU 작업을 처리해야 하는 프로세스는 CPU bound 프로세스가 된다. I/O bound 프로세스는 CPU 작업은 소소하고 I/O 처리에 많은 시간을 할애한다.

 

"CPU 때문에 오래 걸리는" 프로세스가 CPU bound라고 생각해도 된다.

 

선점(preemtive)/비선점(non-preemptive)

선점형, 비선점형 스케쥴링은 현재 CPU가 어떤 프로세스를 실행 중이고 ready queue에 프로세스가 들어왔을 때, 스케쥴링(= 다음 프로세스 선택해 CPU 넘겨주기)이 가능한 지에 따라 나뉜다. 실행하는 도중에도 CPU를 넘길 수 있으면 선점형, 아니면 비선점형이다.

 

- ready queue에 프로세스가 들어오는 경우는 1. 새 프로세스가 생성됐을 경우, 2. waiting 프로세스의 이벤트 처리 완료, 3. 현재 실행중인 프로세스에의 인터럽트 3가지이다.

 

인터럽트 부분이 헷갈릴 수도 있는데, 비선점형 스케쥴링에서는 실행 중인 프로세스에 인터럽트를 걸어도 다른 프로세스로 스위칭하지 않고 인터럽트를 처리한 뒤 현재 프로세스 실행을 재개한다. 즉, 비선점형 스케쥴링은 무조건 프로세스가 종료되거나 또는 I/O같은 이벤트가 발생하기 전까지는 계속 CPU를 점유하도록 보장한다.

 

스케쥴링 평가 기준

- 산출량(throughput)만 "시간 당 ...하는 프로세스 개수"로 계산하고, 나머지 turnaround time, waiting time, response time은 "프로세스 당 ...하는 시간"으로 계산한다.

 

- waiting time은 프로세스가 ready queue에 있던 시간의 총합이다.

 

- turnaround time은 프로세스가 ready queue에 도착한 뒤 최종 완료될 때 까지의 시간이다. 교재의 단순한 모형에서는 waiting time + cpu burst로 생각해도 되겠다.

 

스케쥴링 알고리즘

convoy effect : 어느 인강에서는 똥차 효과라고 했는데 이해가 쏙 된다. 고속도로에서 똥차 뒤에 있는 스포츠카는 달리고 싶어도 달릴 수 없다는 내용이다.

 

exponential averaging : SJF에서 ready queue에 있는 프로세스들의 실제 CPU 점유 시간(burst)을 알 방법은 없다. 따라서 각 프로세스마다 가장 마지막으로 CPU를 점유했을 때의 실제 CPU burst와 가장 마지막의 CPU burst 예측값을 이용해 다음번에 CPU를 얼마나 점유할 지 예측해야 한다. 두 값의 중요도를 어떻게 설정할 지는 a와 1-a를 이용한 지수 평균으로 정한다.

 

aging : 노인 공경이라고 생각하면 좋을 듯. ready queue에 오래 있던 프로세스는 우선순위를 높여준다.

 

Gantt chart : 선점형 스케쥴링을 사용하는 알고리즘에서는 CPU를 뺏기는 원래의 프로세스가 ready queue의 맨 끝으로 이동한다는 점을 기억하자. 실제로 문제를 계산하고 차트를 그릴 때 ready queue를 고려하지 않고 스케쥴링 원리만 생각하면서 풀면 틀릴 확률이 높다.

 

예를 들어 아래 프로세스들에 대해 Round Robin (quantum = 10) 스케쥴링을 적용하면

얼핏 보면 'RR 알고리즘은 순서대로 한번씩 할당하는 방식이니까 P1 - P2 - P3 - P1 - P2겠지?' 라고 생각할 수 있는데, 실제 실행 순서는 P1 - P2 - P1 - P3 - P2가 된다. 새 프로세스는 도착하면 ready queue의 끝으로 가고, 현재 프로세스는 quantum 시간이 지나면 ready queue의 끝으로 간다는 사실을 염두에 두고 ready queue의 상태를 생각하면서 계산해보자.

 

multilevel feedback queue : 교재에서는 한 번 CPU를 할당했을 때 완료되지 못한 프로세스는 다음 단계의 큐로 강등시키는 방법을 사용한다. 그러나 여러 방법 여러 설계가 가능하니 'multilevel queue와 다르게 큐 사이의 이동이 가능하다'라는 점만 알아두자.