<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 : 하나의 프로세스를 중지하고 다른 프로세스를 실행시킬 때 소요되는 시간.
'[Computer Science] > [운영체제(OS)]' 카테고리의 다른 글
[운영체제(OS)] 6-1) 프로세스 동기화 - 임계구역(Critical-Section) (0) | 2023.02.07 |
---|---|
[운영체제(OS)] 5-2) 스케줄링 알고리즘 (0) | 2023.02.02 |
[운영체제(OS)] 4-3) 스레드와 관련된 문제들 (Threading Issues) (0) | 2023.01.27 |
[운영체제(OS)] 4-2) 스레드 라이브러리, 암묵적 스레딩 (0) | 2023.01.17 |
[운영체제(OS)] 4-1) 단일 스레드와 멀티 스레드 (0) | 2023.01.16 |