학습 목표
1. 프로세스 스케줄링의 개요와 정책을 이해한다.
2. 스케줄링 성능평가 기준을 이해한다.
3. 다양한 스케줄링 기법을 이해한다.
3.1 프로세스 스케줄링
- 스케줄링 : 여러 가지 작업의 처리순서를 결정하는 것을 의미
- 프로세스 스케줄링 : 주어진 프로세스가 여러 개인 경우, 어떤 순서대로 처리할지를 운영체제가 결정하는 것
3.1.1 스케줄링 단계
1) 상위 단계 스케줄링 = 장기 스케줄링
- 시스템에 들어와 작업 큐에서 선택하여 프로세스를 생성한 후 프로세스 준비 큐에 전달하는 역할
- 선택 기준 : 입출력 중심 작업과 연산 중심 작업을 균형 있게 선택하도록 작업순서를 결정
- 선택 기준 이유 : 시스템 자원을 효율적으로 이용하기위해
- 예시 : 많은 입출력 작업을 연속적으로 선택하면 입출력장치는 바쁘고 CPU는 대기에 많은 시간 허비
많은 연산 작업을 선택하면 CPU는 바쁘고 입출력장지는 사용하지 않아서 시스템 자원 사용이 비효율적.
2) 하위단계 스케줄링 = 단기 스케줄링
- 작업 큐에 있는 프로세스를 선택하여 사용 가능한 CPU를 할당하는 역할이다.
-스케줄링의 수행 주체는 디스패처이다.
-이 스케줄링은 빈번하게 발생하므로 디스패처는 메모리에 늘 상주해야 한다.
3) 중간단계 스케줄링 = 중기 스케줄링
-프로세스를 일시적으로 메모리에서 제거하여 중지시키거나 중지된 프로세스를 다시 활성화 시키는 역할
-시스템의 단기적인 부하를 조절한다.
3.1.2 스케줄링의 목표
1) 공정성
- 모든 프로세스가 적정 수준에서 CPU 작업을 할 수 있게 하는 것
2) 균형성
- 시스템의 자원들이 충분히 활용될 수 있게 하는 것
운영체제 유형별 스케줄링 목표
1)일괄처리 운영체제
- 처리량 극대화
- 반환시간 최소화
- CPU 활용 극대화
2) 시분할 스케줄링
- 빠른 응답시간
- 과다한 대기시간 방지
3) 실시간 운영체제
- 처리기한 맞추기
3.1.3 스케줄링 정책
1) 선점 스케줄링 정책(PREEMPTIVE SCHEDULING POLICY)
- 실행 중인 프로세스에 인터럽트를 걸고 다른 프로세스에 CPU를 할당할 수 있는 방식
- 높은 우선순위를 먼저 처리해야 하는 경우 유용하다.
- 단점
: 오버헤드가 발생한다.
: CPU의 모든 레지스터와 기타 운영체제에 따라 요구되는 프로세스의 상태를 문맥(context)이라고 하는데, 프로세스가 종료되지 않은 상태에서 선점 방식에 따라 CPU가 다른 프로세스에 할당되려면 문맥 교환이 필요하다.
: 문맥 교환이랑 CPU가 현재 실행하고 있는 프로세스의 문맥을 프로세스 제어 블록에 저장하고, 다른 프로세스의 프로세스 제어 블록으로부터 문맥을 복원하는 작업이다.
: 문맥 교환에도 시간과 자원이 사용되기 때문에 고려할 필요가 있다.
2) 비선점 스케줄링 정책(NONPREEMPTIVE SCHEDULING POLICY)
- 실행 중인 프로세스를 바로 준비상태로 전이시킬 수 없는 방식.
- CPU를 할당받아 실행이 시작된 프로세스는 대기상태나 종료상태로 전이될 때까지 계속 실행상태에 있는다.
- 강제적인 문맥 교환이 없어 오버헤드가 없다.
- 대신 시간이 오래걸린다. 따라서 실행시간이 짧은 프로세스가 오래 기다리게 되는 경우가 발생한다.
3.1.4 스케줄링의 평가 기준
1) 평균대기시간
- 각 프로세스가 수행이 완료될 때까지 준비 큐에서 기다리는 시간의 합의 평균값
2) 평균반환시간
- 각 프로세스가 생성된 시점(준비 큐에 들어온 시점)부터 수행이 완료된 시점까지의 소요시간의 평균값
3.2 스케줄링 알고리즘
3.2.1 FCFS 스케줄링(First-Come First-Served)
- 비선점 방식 중 가장 간단하다.
- 프로세스는 준비 큐에 도착한 순서에 따라 디스패치되며, 일단 CPU를 차지하면 수행이 완료된 후 다음이 수행된다.
- 따라서 시분할 운영체제나 실시간 운영체제에는 적합하지 않다.
- 예시
: 프로세스 A, B, C, D -> CPU 사이클 3, 2, 4, 1 이면
A의 대기시간은 0, 반환시간은 3,
B의 대기시간은 3, 반환시간은 5
C의 대기시간은 5, 반환시간은 9
D의 대기시간은 9, 반환시간은 10
평균대기시간은 (0+3+5+9) / 4 = 4.25
평균반환시가은 (3+5+9+10) / 4 = 6.75
- FCFS 스케줄링은 프로세스들의 도착순서에 따라 평균반환시간이 크게 변하는 단점도 있다.
FCFS 스케줄링 알고리즘에서 도착시간과 실행시간으로 계산하기
프로세스 | A | B | C | D |
도착시간 | 0 | 1 | 3 | 5 |
CPU 사이클 | 3 | 2 | 4 | 1 |
위와 같은 도착시간과 실행시간이 있을 때
A는 시각 0에 도착하여 3에 종료했으므로 반환시간은 3이고 대기시간은 0이다.
B는 시각 1에 도착하여 A가 끝나는 시각인 3에 디스패치되었으므로 대기시간은 3 - 1 = 2이고 1에 도착해서 5에 끝났으므로 반환시간은 4이다.
C의 대기시간은 2이고 반환시간은 6이다.
D의 대기시간은 4이고 반환시간은 5이다.
따라서 평균대기시간은 (0+2+2+4) / 4 = 2이고 평균반환시간은 4.5이다.
3.2.2 SJF 스케줄링(Shortest Job First)
- 준비 큐에서 기다리는 프로세스 중 실행시간이 가장 짧다고 예상되는 것을 먼저 실행하는 비선점 방식 알고리즘이다.
- 실행예정시간을 사용자의 추정치에 의존해서 실제와 다를 수 있다.
- 비선점이기에 FCFS처럼 시분할이나 실시간 운영체제에는 적합하지 않다.
3.2.3 SRT 스케줄링(Shortest Remaining Time)
- SJF의 선점 방식 버전
- 준비 큐에서 기다리는 프로세스 중 남은 실행시간이 가장 짧다고 예상되는 것을 먼저 디스패치하는 알고리즘이다.
- 만약 준비 큐에 새로 들어온 프로세스의 예상실행시간이 실행 중인 것의 남은 시간보다 짧다면, 새로 들어온 프로세스가 즉시 디스패치된다.
- SJF 스케줄링보다 평균대기시간이나 평균반환시간에서 효율적이다.
- 하지만 선점을 위한 문맥 교환때문에 오버헤드가 더 크다.
'TIL' 카테고리의 다른 글
[React] helpers와 utils 디렉터리는 어떻게 구분할까? (0) | 2023.11.16 |
---|---|
[React] useContext로 로그인 상태 관리하기 (0) | 2023.11.08 |
vi 에디터 사용법 정리 (0) | 2022.08.06 |
swap 설치를 통해 ec2 메모리 할당하기 (0) | 2022.08.04 |
HTTP 프로토콜은 뭘까? (0) | 2022.05.02 |