본 정리는 운영체제(Operating System: Concepts) 9th edition과 22학년도 1학기 건국대학교 운영체제 수업을 바탕으로 하고 있습니다.
스케줄러
앞서 프로세스는 중단되고 속개되는 상태가 지속적으로 반복된다고 하였다.
즉, 실행되는 상태에서 중단되어 다른 프로세스가 CPU를 선점하게 될 경우 다음 실행시킬 프로세스의 선정이 필요하다. 이때, 컴퓨터가 가진 자원은 한정되어 있고, 여러 프로세스가 효율적으로 사용하기 위해서는 스케줄러(Scheduler)가 존재한다.
스케줄러는 다음 실행 시간에 실행할 수 있는 프로세스들 중 하나를 선택해주는 역할을 해준다.
스케줄러에는 3가지 종류(장기, 중기, 단기 스케줄러)가 있다.
장기 스케줄러 (Long-term scheduler) / 작업 스케줄러 (Job scheduler)
어느 프로그램을 하드 디스크로부터 메모리로 적재할지를 결정하는 스케줄러
일괄처리(batch) 큐를 별도로 유지하는 경우에 필요하다.
일괄처리 시스템에서는 즉시 실행될 수 있는 프로세스의 양이 정해져 있다.
만약 그 제한보다 많은 프로세스들이 제출되었을 경우에는 우선 해당 프로세스들을 대용량 메모리에 저장한다.
이 풀에서 프로세스들을 선택하여 메모리로 적재하게 되는데, 이 작업을 장기 스케줄러가 하는 것이다.
즉, 장기 스케줄러는 다중 프로그램의 정도(= 메모리에 있는 프로세스들의 수)를 제어한다.
장기 스케줄러는 입출력 중심 프로세스와 CPU 중심 프로세스를 적절하게 혼합하여서 스케줄링하는 것이 중요하다.
1. 모든 프로세스들이 입출력 중심일 경우 : 입출력을 받을 때는 항상 대키 큐에 들어가 있기 때문에 준비 완료 큐는 항 상 비게 되어 단기 스케줄러는 할 일이 없게 된다.
2. 모든 프로세스들이 CPU 중심일 경우 : 입출력 대기 큐는 항상 비게 되어 장치들이 사용되지 않을 것이다.
* 입출력 중심 프로세스 (I/O Bound) : 연산보다 입출력 실행에 더 많은 시간을 소요하는 프로세스
* CPU 중심 프로세스 (CPU Bound) : 연산에 시간을 더 소요하고 입출력 요청을 드물게 발생시키는 프로세스
단기 스케줄러 (Short-term scheduler) / CPU 스케줄러 (CPU scheduler)
메모리 내에서 준비 상태에 있는 프로세스들 중 하나를 선택하여 CPU를 할당하는 스케줄러
일반적으로 스케줄러라고 하면 단기 스케줄러를 말한다. 가장 중요하다!
중기 스케줄러 (medium-term scheduler)
가상 메모리 체제에서는 너무 많은 프로세스가 메모리에 적재되면
하드 디스크 입출력이 과다해져 시스템이 거의 멈추는 현상이 발생한다. - 스레싱(Thrashing)
이를 방지하기 위해서 중기 스케줄러는 스와핑(Swapping)을 한다.
1. 메모리에 있는 일부 프로세스들을 디스크로 내보냄 (swap-out)
2. 메모리에 여유가 생기면 다시 프로세스를 메모리에 적재하여 중단되었던 지점에서부터 실행을 재개 (swap-in)
CPU 스케줄링 (CPU Scheduling)
다중 프로그래밍은 CPU가 실행 중인 프로그램을 항상 가지게 하여 CPU 이용률 최대화하기 위한 것이다.
즉, 실행되던 상태의 프로세스가 중단되어 준비상태 혹은 대기상태에 들어가게 된다면, CPU는 계속 이용되어야하기 때문에 준비상태에 있는 프로세스들 중 하나가 CPU 스케줄러에 의해 선택되어 실행된다.
이를 CPU 스케줄링이라한다.
CPU 스케줄링이 일어나는 경우
CPU 스케줄링은 다음의 네 가지 상황 하에서 발생할 수 있다.
1. 실행 상태의 프로세스가 대기 상태로 전환되었을 경우
(1) 입출력 요청
(2) 사건 대기 (wait() 시스템 호출 → 자식 프로세스가 종료되기를 기다려야 함)
2. 실행 상태의 프로세스가 준비 상태로 전환되었을 경우
(1) 인터럽트의 발생
(2) 시분할 시스템에서 타임 슬라이스의 소진
3. 대기 상태의 프로세스가 준비 상태로 전환되었을 경우
(1) 입출력의 종료
(2) 사건의 접수 완료
4. 실행 상태의 프로세스가 종료되었을 경우
위 4가지 상황은 모두 어떤 이유에 의해 실행 중이던 프로세스가 준비큐 혹은 대기큐에 들어가거나 종료된 경우에 CPU를 계속 일 시키기 위하여 일어난다.
참고: https://developbear.tistory.com/100
디스패처 (Dispatcher)
디스패처는 CPU의 제어를 단기 스케줄러가 선택한 프로세스에게 주는 모듈이다.
이는 다음의 역할들을 수행한다.
1. 문맥 교환
2. 사용자 모드로 전환
3. 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동(jump)
문맥 교환이 일어날 때 하나의 프로세스를 정지하고 다른 프로세스의 수행을 시작하는 데까지는 시간이 소요되는데,
이 시간을 디스패치 지연(dispatch latency) 시간이라고 부른다.
CPU burst time
CPU burst time이란 CPU 할당 후 입출력을 요구할 때까지의 시간을 말한다.
CPU burst time을 측정해보았을 때 평균적으로 아래의 표와 같이 초지수형(hyperexponential) 분포를 보인다고 한다.
즉, CPU를 계속 이용하고 있는 프로세스보단 입출력을 대게 많이 요구한다는 것이다.
입출력 중심 프로세스(I/O Bound Process)일 경우 그래프는 왼쪽으로 치우쳐져 그려질 것이며,
전형적으로 짧은 CPU burst를 많이 가질 것이다.
반대로, CPU 중심 프로세스(CPU Bound Process)일 경우 그래프는 오른쪽으로 치우쳐져 그려질 것이며,
다수의 긴 CPU burst를 가질 수 있다.
스케줄러는 이러한 프로세스의 특징을 잘 고려하여 스케줄링하여야한다.
CPU 성능 평가
CPU 성능을 평가하는 지표는 다음과 같다.
기준 | 설명 |
CPU 사용율(CPU utilization) | CPU 활용 정도를 나타내는 비율 |
처리율(throughput) | 단위 시간당 완료되는 프로세스의 수 |
반환 시간(turnaround time) | 프로세스가 생성되어 작업을 마치고 종료될 때까지 의 걸리는 시간 |
대기 시간(waiting time) | 프로세스가 생성되어 작업을 마치고 종료될 때까지 큐에서 기다리는 시간 |
반응 시간(response time) | 대화형 시스템에서 임의 요구(예: 키보드 입력)에 대하여 시스템이 반응을 시작하는 데까지 걸리는 시간 |
스케줄링 알고리즘을 비교하는 데에 사용되는 특성에 따라 최선의 알고리즘을 결정하는 것에 큰 차이가 발생한다.
만약 효율성을 추구할 경우
CPU 사용률과 처리율은 최대화,
반환 시간, 대기 시간, 반응 시간은 최소화하는 것이 바람직하다.
만약 공평성을 추구할 경우
각 기준에 있어서 최적의 평균값과 이들 간의 편차의 최소화를 함께 고려하여 스케줄러를 선정하여야 한다.
대화형 시스템의 경우
반응 시간의 편차가 적은 스케줄러를 선정하는 것이 좋다.
즉, 시스템의 용도에 따라 선정 기준이 달라질 수 있고, 기준 간에 trade-off가 있을 수 있다.
'CS > 운영체제' 카테고리의 다른 글
[Chapter 5. CPU 스케줄링] 동적 우선순위와 선점 스케줄링 (라운드 로빈, 다단계 큐, 다단계 피드백 큐) (0) | 2022.08.24 |
---|---|
[Chapter 5. CPU 스케줄링] 비선점 스케줄링 FCFS,SJF,우선순위 (0) | 2022.08.23 |
[Chapter 4. 스레드] 스레드와 관련한 문제들 (0) | 2022.08.21 |
[Chapter 4. 스레드] 암묵적 스레딩과 사용 방법 (1) | 2022.08.20 |
[Chapter 4. 스레드] 스레드와 TCB, 다중 스레드 모델 (0) | 2022.08.19 |