[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 5-1) 스케줄링 기본 개념

극꼼 2023. 2. 1. 19:37
반응형


<CPU 스케줄링이란?>

CPU 스케줄링이 무엇인지 살펴보기에 앞서서 아래 두 가지 정의를 먼저 살펴보겠습니다. 

* maximize CPU utilization : CPU를 최대한 이용하는 것. 어느 프로세스라도 CPU이용을 하고 있어야 합니다.

* CPU - I/O Burst Cycle : 프로세스 실행은 CPU 실행입출력 대기로 구성됩니다. (burst는 계속되는 작업을 의미)

프로세스는 입출력 대기 시간 내내 할당받은 CPU를 가지고 놀고 있게 되는데요, 그래서 이를 좀 더 생산적으로 활용하고자 스케줄링이 생겼습니다. 스케줄러는 입출력 대기 시간 동안 CPU를 다른 프로세스에게 할당해주는 역할을 합니다. 

 


<CPU Burst 분포 그래프>

그래프를 살펴보면 짧은 CPU burst가 왼쪽에 많이 분포해있고, 긴 CPU burst가 오른쪽에 적게 분포해있는 것을 볼 수 있습니다.

* 짧은 CPU burst = (I/O bound job)CPU를 짧게 쓰고 중간에 I/O가 끼어드는 경우입니다.

* 긴 CPU burst = (CPU bound job)CPU를 오랫동안 쓰는 경우입니다. 계산 위주의 작업이 많습니다.

 

컴퓨터 안에는 I/O bound job, CPU bound job 이 섞여 있기 때문에 적절한 CPU 스케줄링이 필요합니다. 특히 I/O bound job이 문제가 되는데, I/O bound job은 사용자와 상호작용하는 job이기 때문에 CPU bound job이 CPU를 가지고 놓아주지 않으면 너무 오래 대기하게 되어 사용자가 답답함을 느낄 수 있기 때문입니다. 따라서 가능하면 I/O bound job에 CPU를 우선적으로 주는 것이 필요합니다.


<CPU 스케줄러>

: 메모리에 있는 프로세스 중 실행 준비(ready queue에 들어 있는)가 되어 있는 프로세스를 선택(단기 스케줄러)하고, 그 프로세스에 CPU를 할당하는 역할을 수행하는 커널 코드입니다.

 

* CPU 스케줄링이 필요한 4개지 경우의 프로세스 상태입니다.

1) 실행 상태에서 대기 상태로 전환 (Running -> Blocked) : CPU를 잡고 있던 프로세스가 I/O 작업 등을 이유로 해서 반납한 경우입니다.

2) 실행 상태에서 준비 완료 상태로 전환 (Running -> Ready) : 할당 시간이 만료되어 timer interrupt가 발생한 경우입니다.

3) 대기 상태에서 준비 완료 상태로 전환 (Blocked -> Ready) : I/O 완료 후 interrupt가 발생했거나, CPU를 바로 넘겨줘야 하는 상황(priority에 기반하여)이 생겼을 경우입니다.

4) 프로세스가 종료될 때 (Terminate) : CPU 사용이 마무리되어 반납한 경우입니다.

 

1,4번 상황 같은 경우, 스케줄링을 무조건 해야함. = 비선점형 스케줄링(협조적)

2,3번 상황은 실행하고 있는걸 유지할 수도 있고, 바꿀 수도 있음 = 선점형 스케줄링(경쟁적). 먼저 온 프로세스가 진행중에 다른 프로세스가 CPU를 탈취해가면 추후에 자료의 일관성을 보장해줄 수 없는 이슈가 생길 수 있음 -> 이를 방지하기 위한게 있는데 추후에 얘기하겠음.

 

<스케줄링 기준>

1. CPU 이용률 : CPU를 가능한 한 바쁘게 유지

2. 처리량 : 단위 시간 당 완료된 프로세스의 개수

3. 총 처리 시간 : 프로세스의 제출 시간과 완료 시간의 간격

4. 대기 시간 : 준비 완료 큐에서 대기하면서 보낸 시간의 합

5. 응답 시간 : 하나의 요구를 제출한 후 첫 번째 응답이 발생할 때까지의 시간(응답을 출력하는데 걸리는 시간은 포함하지 않음)


<Dispatcher>

: CPU 스케줄링 요소에 포함된, CPU 제어를 단기 프로세스가 선택한 프로세스에 전해주는 모듈입니다.

* Dispatcher 는 context switch를 해줍니다(사용자 모드로 전환). 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동시켜줍니다.

* Dispatch Latency : 하나의 프로세스를 중지하고 다른 프로세스를 실행시킬 때 소요되는 시간. 

반응형