처리기 스케쥴링의 유형
- 스케쥴링의 정의 : 어떤 목적을 위해 시스템 자원을 프로세스에게 할당하는 것
- 목적 : 응답시간 낮추기, 처리량 향상, 효율성 증대
- 자원 : 시스템, 실 메모리, 처리기, I/O 장치
- 스케쥴링은 3단계로 나눌 수 있음
- 장기 스케쥴링 : 프로세스에게 실행될 수 있는 자격을 부여할지 여부 결정
- 중기 스케쥴링 : 프로세스 이미지를 주기억장치에 적재할 것인지를 결정
- 단기 스케쥴링 : 처리기에 의해 실행될 다음의 프로세스를 결정
- 스케쥴링과 프로세스 상태 전이의 관계
장기 스케쥴링
- 새로운 프로세스의 시스템 진입 허용 여부를 결정
- 다중 프로그래밍의 정도를 제어하는 역할
- 장기 스케쥴러가 실행되는 시점
- 일괄처리 작업의 진입 : 생성⇒준비/보류
- 대화형 작업의 로그인 : 생성⇒준비
- 장기 스케쥴러의 결정 사항
- 새로운 프로세스의 진입 허용 시점
- 시스템 내의 부하에 따라 결정
- 진입을 허용할 다음 프로세스 선택 방법
- FCFS, 우선순위 기반, I/O 중심 프로세스 우대, 여유 자원 사용 예정 프로세스 우대
- 새로운 프로세스의 진입 허용 시점
중기 스케쥴링
- 스와핑 (Swapping) 기능의 일부
- 다중 프로그래밍 정도를 제어하기 위해 프로세스 이미지 전체를 가상 메모리(또는 스왑 공간)로 Swap Out/In 함
- 중기 스케쥴러의 실행 시점
- 과도한 페이지 폴트로 인해 쓰레싱 현상이 발생할 때
- 처리기 이용률이 매우 낮을 때
단기 스케쥴링
- 주목적은 시스템의 전체 성능을 높이기 위해 처리기 시간을 효율적으로 프로세스에게 할당하는 것
- 단기 스케쥴러 실행 시점
- 클럭(타이머) 인터럽트 발생
- I/O 인터럽트 발생
- OS System Call (커널 내 Preemption Point 또는 사용자 모드로 복귀하기 전)
- 신호 (Signal, 예: 세마포어)
*인터럽트 서비스 루틴에 스케쥴러 코드가 있다. 다른 프로세스의 사용을 막기 위해 세마포어를 쓴다.
단기 스케쥴링 알고리즘
- 우선순위 기반 스케쥴링 정책
- 우선순위를 고려하지 않은 스케쥴링 정책
- 선입선처리 (FCFS: First-Come First-Served) 정책
- 라운드로빈 (Round-Robin) 정책
- SPN (Shortest Process Time) 정책
- HRRN (Highest Response Ratio Next) 정책
- Feedback 정책
단기 스케쥴링 평가 기준
기준 1: 사용자 중심 관점 Vs. 시스템 중심 관점
- 사용자 중심 관점
- 개별 사용자 또는 개별 프로세스 입장에서 스케쥴러를 평가
- 대화형 시스템에서 응답시간
- 일괄처리 시스템에서 반환시간
- 시스템 중심 성능 관점
- 스케쥴러가 처리기를 얼마나 효율적으로 활용했는가가 가장 중요한 척도
- 처리량 (단위 시간당 수행되는 Task의 수)
- 모든 시스템에서 중시해야할 관점 : 사용자 중심 관점
- 시스템 유형별로 중시해야할 관점이 다를 수 있음
- 단일 사용자 시스템 ⇒ 시스템 중심 관점이 상대적으로 덜 중요
기준 2: 성능 중심 관점 Vs. 성능 외적 관점
- 성능 중심 관점
- 대부분 정량적인 척도 ⇒ 측정이 용이함
- 사용자 : 반환시간, 완료기한
- 시스템 : 처리기 이용률
- 성능 외적 관점
- 대부분 정상적인 척도 ⇒ 측정이 어려움
- 사용자 : 예측 가능성
- 시스템 : 공정성, 균형있는 자원 사용
우선순위 기반 스케쥴링
⇒ 우선순위가 높은 프로세스 먼저 실행
- 같은 우선순위 큐 내에서는 어떤 정책을 쓸 것인가?
- 라운드 로빈 정책
- 순수 우선순위 기반 스케쥴링 방식의 문제점
- 낮은 우선순위의 프로세스는 기아의 가능성이 존재
⇒ 해결책 : 프로세스가 시스템 내에 머무른 시간(Age)이나 과거 실행 경력 등을 감안하여 우선순위를 조정해줌
다양한 스케쥴링 정책
- 스케쥴링 정책의 원리를 비교하기 위한 알고리즘
- 선택함수 : 다음 번 실행을 위해 준비 큐에서 대기 중인 프로세스 중 하나를 선택하는 알고리즘
- 결정모드 : 선택함수가 호출되는 시점을 결정하는 알고리즘
선택함수
- 함수 인자
- w = 대기한 시간과 실행한 시간을 모두 합쳐 시스템에 들어온 후 지금까지 경과한 시간
- e = 지금까지 실행하는데에만 걸린 시간
- s = 프로세스가 요구한 총 서비스 시간
- 선택함수의 예
- max[w] : 시스템에 진입한 후 가장 오랜 시간을 보낸 프로세스를 선택함 ⇒ FCFS
결정모드
- 비선점 모드
- 프로세스가 일단 실행 상태에 진입하면 종료되거나 자발적으로 CPU를 놓을 때까지는 CPU를 빼앗기지 않음 ⇒ 아무도 안건드림
- 선점 모드 (Preemptive)
- 현재 실행중인 프로세스라 할지라도 OS에 의해 인터럽트가 걸려 비자발적으로 준비 큐로 이동될 수 있음 ⇒ 강제
- 비선점 모드보다 문맥(Context) 교환 횟수가 많아짐
- 한 프로세스가 처리기 시간을 독점하는 것을 방지할 수 있음
FCFS (First-come, First-served)
= FIFO (First-In, First-Out)
선택함수 : max[w]
- 준비 큐에서 대기 중이던 프로세스 중 가장 오랫동안 기다렸던 프로세스가 다음 번 실행 프로세스로 선정됨
결정모드 : 비선점형
- 실행중인 프로세스가 종료하거나 자발적으로 처리기를 양도할 때
- 일괄처리 시스템에 적합
스케쥴링 분석
- FCFS는 짧은 프로세스보다 긴 프로세스에 유리 ⇒ 비선점 모드로 동작하기 때문
- 정규화된 반환 시간(Tr/Ts) : 어떤 프로세스가 시스템에 진입한 후 대기하느라 실행이 지연된 시간의 비율 ⇒ 이 값의 크기와 스케쥴링 서비스의 질은 반비례함 = 낮아야 좋다.
- 반환 시간(Tr) : 프로세스가 시스템에 진입한 후 대기시간과 실행시간의 합 ⇒ 시스템에 머문 총 시간
- Tr = 대기 시간 + 서비스 시간
- 스케쥴링이 진행됨에 따라 I/O 프로세스보다 처리기 중심(계산 중심) 프로세스를 우대하는 경향이 나타난다. ⇒ 처리기 및 I/O 장치의 이용률이 저하됨 (Convoy Effect)
FCFS 정책 하에서 평균 대기 시간은 최소가 아님
- 짧은 프로세스가 긴 프로세스 직후에 도착했을 때 발생
- FCFS 정책 하에서 프로세스 서비스 시간이 크게 변할 경우 평균 대기 시간도 상당히 변할 수 있다.
Process | 서비스 시간 |
P1 | 24 (제일 김) |
P2 | 3 |
P3 | 3 |
1. 평균 대기 시간 = (0+24+27) /3 = 17
2. 평균 대기 시간 = (0+3+6)/3 = 3
라운드-로빈 (Round-Robin)
- FCFS에서 짧은 프로세스가 피해보는 현상을 완화하는 방법 ⇒ 시간 할당량 기법 (Time Slicing)
선택함수 : 일정한 시간 할당량 종료
- 타이머를 이용하여 시간을 측정하고 있다가 어떤 긴 프로세스가 일정 시간 이상을 넘어가는 순간 실행을 강제로 선점시킴 ⇒ 뒤로 보낸다.
결정모드 : 선점형
⇒ 먼저온 프로세스 먼저 But. 시간 제한
라운드-로빈 스케쥴링 기법 동작 방식
- 할당된 시간량이 다 소모되면, 클럭 인터럽트가 발생하여 클럭 인터럽트 서비스 루틴 실행
- 클럭 인터럽트 서비스 루틴은 현재 실행 중이던 프로세스를 준비 큐로 이동시킴
- 시간 할당량 설정 및 선택된 프로세스 실행
스케쥴링 분석
- 타임슬롯 사이즈 : q = 1
시간 할당량의 길이가 라운드-로빈 성능에 미치는 영향
- 시간 할당량이 너무 짧은 경우 : 문맥 교환 횟수 증가
- 시간 할당량이 너무 긴 경우 : FCFS와 비슷해짐
선점 시간 할당량의 크기가 스케쥴링에 미치는 영향
- 시간 할당량이 사용자와의 일반적인 대화 시간보다 긴 경우
*시간 할당량보다 일찍 끝남 ⇒ 문맥 교환 횟수 증가 = 오버헤드 증가
- 시간 할당량이 사용자와의 일반적인 대화 시간보다 짧은 경우
시간 할당량의 권장 크기
- 프로세스가 사용자와 최소한 한 번 이상 대화하기에 충분한 크기
- 프로세스 내의 어떤 한 함수정도는 실행을 마칠 수 있는 충분한 크기
프로세스의 특징은 고려하지 않는 대신 매우 공평
⇒ 시분할이나 트랜잭션 처리 시스템에 효과적
I/O 중심 프로세스보다 CPU 중심 프로세스를 우대
⇒ 계산 중심 우대
- 처리기 중심 프로세스는 시간 할당량을 전부 소비한 후 선점, 준비 큐 대기 ⇒ 처리기 과다 사용
- I/O 중심 프로세스는 처리기를 잠깐 사용한 후 I/O 요구, 블록, 준비 큐 대기
- I/O 중심 프로세스 성능 저하, I/O 장치의 사용률 저하, 프로세스간 응답시간의 편차 증가
⇒ 가상 라운드 로빈(VRR) 스케쥴링 방식으로 극복 가능
가상 라운드-로빈 (VRR) 스케쥴링 방식
*보조 큐가 준비 큐보다 우선순위가 높음
- 도착한 프로세스는 준비 큐 진입
- 실행 중이던 프로세스의 할당 시간이 끝나면 다시 준비 큐로 가서 대기
- I/O 요구 프로세스의 경우 I/O가 완료될 때까지 I/O 큐에서 대기
- I/O 완료 시 보조 큐로 이동
- 다음 번 프로세스를 선점할 때, 보조 큐에 있던 프로세스를 먼저 처리기에 실행
⇒ 단, 저번 실행 때 못하고 남은 시간 만큼만 실행하고 준비 큐 뒤로 가서 대기
SPN (Shortest Process Next)
⇒ 처리기(CPU) 관점의 Next, SPN = SJF
- SJF (Shortest Job First)라고도 한다. ⇒ Queue 관점의 First
- FCFS가 긴 프로세스를 우대하는 편향성 완화
선택함수 : min[s]
- 종료시까지 남아 있는 실행 시간이 가장 짧은 프로세스를 다음 실행할 프로세스로 선택
- 실행 시간이 짧은 프로세스가 (비록 늦게 도착 했더라도) 긴 프로세스들 보다 먼저 스케쥴링될 수 있다.
결정모드 : 비선점형
스케쥴링 분석
- 비선점 방식이기 때문에 시분할 시스템이나 트랜잭션 시스템에서는 바람직하지 못한 스케쥴링 정책
- 짧은 프로세스가 지속적으로 시스템에 진입한다면 이들보다 상대적으로 긴 프로세스가 기아 상태에 빠질 수 있음
- 사용자가 작업을 제출할 때, 프로세스 서비스 시간을 지정하는 일괄처리 시스템의 장기 스케쥴링에 사용 가능
SRT (Shortest Remaining Time)
⇒ SPN의 선점형 정책
선택함수 : min[s-e]
- 예상되는 남아있는 실행 시간이 가장 짧은 프로세스보다 다음 실행될 프로세스로 선택됨
결정함수 : 선점형
- 새로 도착한 프로세스의 예상되는 남아있는 실행 시간이 현재 실행중인 프로세스의 것보다 짧다면 늦게 도착했더라도 현재 실행중인 프로세스를 중단하고 곧장 선택됨
스케쥴링 분석
- SPN보다 반환 시간 측면에서 우수
- 매 스케쥴링때 마다 프로세스들의 남아 있는 실행 시간을 평가해야 하는 부담 ⇒ Overhead
- 서비스 시간이 긴 프로세스가 기아 상태에 빠질 가능성
HRRN (Highest Response Ratio Next)
선택함수 : max[R=(w+s)/s]
- w : 처리기를 기다리며 대기한 시간 (Process Age)
- s : 예상되는 서비스 시간
- 준비 큐에 있는 프로세스 중 응답비율(R, 정규화된 반환시간)이 가장 큰 프로세스를 다음 번 프로세스로 선택
결정모드 : 비선점형
스케쥴링 분석
- 동일한 대기 시간(w)에 대해 서비스 시간(s)이 짧은 프로세스의 R값이 상대적으로 크기 때문에 짧은 프로세스를 우대하는 면이 있다.
- 동일한 서비스 시간(s)에 대해 대기 시간(w)이 큰 프로세스의 R값이 상대적으로 커짐
- 시스템에 오래 머문 긴 프로세스도 오래 머물면 머물 수록 R값이 커지기 때문에 홀대 받지는 않음
Feedback
- 프로세스의 예상되는 서비스 시간(s)을 알 수 없다면? ⇒ SPN, SRT, HRRN 스케쥴링 정책을 사용불가
- 짧은 프로세스에 대한 선호도를 높일 수 있는 방법
- 오랫동안 실행하고 있는 프로세스에게 단계적으로 불이익을 주는 것
- 남아 있는 실행 시간이 아닌 지금까지 실행한 시간에 관심을 두면 유사한 효과를 얻을 수 있음
- 다단계 피드백 큐 스케쥴링(Multi-Level Feedback Queue)라고도 한다.
선택함수
- 시스템에 진입하면 처음에는 우선순위가 가장 높은 준비 큐로 들어가 FCFS로 선택됨
- 실행 중 중단점(선점형, 강제 중단)을 만날 때마다 프로세스는 한 단계 낮은 우선순위의 준비 큐로 강등되어 진입
- 가장 낮은 우선순위 준비 큐에서는 라운드로빈 방식으로 스케쥴링됨
- 프로세스는 자신이 저장되어 있는 준비 큐보다 우선순위가 높은 준비 큐가 비었을 때 실행 선택됨
결정모드 : 선점형
피드백 스케쥴링
⇒ 새로 도착한 프로세스일수록, 짧은 프로세스일수록, 오래된 프로세스나 긴 프로세스보다 우대받는 정책
⇒ 상위 큐가 안비면 하위 큐에 대기하는 프로세스는 기아
스케쥴링 분석 (q=1)
스케쥴링 분석 (q=2^i, i는 index번호)
⇒ 프로세스 선점 시점을 RQ_i에 대해 2^i를 할당
Q0 = 2^0 = 1
Q1 = 2^1 = 2
Q2 = 2^2 =4
…
Qn = 2^n
⇒ 큐의 우선순위가 낮아질수록 할당 시간을 많이 주면 완료할 가능성이 높아짐, 기아를 줄일 수 있다.
- 실행 시간이 긴 프로세스는 기아 상태에 빠질 수 있다.
⇒ 해결책 : 대기 시간이 일정 시간 이상이 되면 우선순위가 더 높은 큐로 올려줌
공정-공유 스케쥴링 FSS(Fair-Share)
- 공정 공유란?
- 공정함을 나누어 갖는다는 뜻
- 공정성이란 할당된 가중치만큼 자원 사용
- 사용자 환경
- 시분할 시스템에서 부서별 사용자 그룹, 각 사용자는 단일 프로세스에 의해 표현될 때, 같은 부서 사용자가 실행시킨 프로세스들을 하나의 프로세스 집합으로 간주
- 스케쥴링은 각 부서에 비슷한 서비스를 제공한다고 가정
- 로그인해있는 사용자가 많은 부서의 프로세스는 차별을 당함
- FSS의 목적은 사용자(사용자 그룹)에게 처리기 자원 중에 이 사용자가 사용할 수 있는 지분을 나타내는 가중치를 할당하여 처리기 사용률을 지분에 맞게 통제하는것.
- 프로세스 그룹의 실행 이력을 유지하여 나중에 각 그룹별 지분 할당을 위해 사용함
- 스케쥴링은 우선순위에 기반하여 진행됨
- 프로세스별 우선순위
- 최근 처리기 사용시간
- 프로세스가 속한 그룹이 최근에 소비한 처리기 시간
- 세 개의 프로세스와 두 개의 그룹에 대한 예
- 각 그룹의 가중치 = 0.5
- 프로세스의 기본 우선순위 = 60
- 프로세스는 1초당 60번 인터럽트되고, 이 때 실행중인 프로세스의 CPU 사용량과 속한 GCPU 사용량은 증가함
- 우선순위는 초당 한 번씩 다시 계산됨