04 프로세스 스케줄링
다중 프로그래밍\(_{multiprogramming}\)
- 컴퓨터 시스템에서 여러 개의 프로세스들을 동시에 운영하여 자원의 이용률을 향상시키는 기법
- CPU가 쉬는 시간을 갖지 않도록 하는 것
- 자원 관리
- 시간 분할\(_{time \ sharing}\) 기법
- 하나의 자원을 여러 프로세스들이 번갈아 사용하는 기법
- 대표적인 예 : 프로세서
- 프로세스 스케줄링\(_{process \ scheduling}\) 기법
- 프로세스들에게 프로세서 자원을 할당해 주는 일
- 자원을 할당하는 순서를 결정
- 공간 분할\(_{space \ sharing}\) 기법
- 하나의 자원을 분할하여 동시에 같이 사용하는 기법
- 대표적인 예 : 주기억장치
- 시간 분할\(_{time \ sharing}\) 기법
CPU - I/O 버스트 사이클
- 프로세스 실행은 CPU 실행과 입출력(I/O) 대기의 순환으로 구성
- 프로세스 실행은 CPU 버스트로 시작하여 CPU 버스트로 종료
- 프로세스의 종류
- I/O-bound process
- 대부분의 시간을 연산보다는 입출력을 하는 데 소비
- 많은 짧은 CPU 버스트를 가짐
- CPU-bound process
- 대부분의 시간을 연산하는데 소비
- 매우 긴 CPU 버스트를 가짐
- I/O-bound process
- 좌측은 CPU와 I/O 버스트 교대를, 우측은 CPU 버스트 시간 히스토그램이다.
- 긴 CPU 버스트는 발생하지 않는다는걸 알 수 있음
- 주로 I/O 버스트의 빈도가 많다는걸 알 수 있음
프로세스 스케줄링
- 멀티프로그래밍의 목적
- CPU 활용성 극대화를 위해 항상 어떤 프로세스가 실행되도록 유지
- 따라서 CPU에서 실행되는 프로세스를 자주 교환
- 프로세스 스케줄러\(_{Process \ scheduler}\)
- CPU에서 실행 가능한 프로세스를 선택
- 프로세서에서 동작할 수 있는 프로세스는 단 한 개 싱글 CPU에 해당하는 내용 (멀티 CPU는 X)
- 나머지 프로세스들은 대기
- 스케줄링 발생 시기
- 실행 상태 → 대기 상태 (입출력 요구, wait)
- 실행 상태 → 준비 상태 (인터럽트)
- 대기 상태 → 준비 상태 (입출력 완료)
- 프로세스 종료 시
- 1, 4의 경우에서만 스케줄링이 일어나는 시스템: 비선점적\(_{nonpremptive}\)
- 스케줄된 프로세스는 프로세스 종료나 대기 상태로 변하면서 CPU를 놓칠 때까지 CPU를 계속 사용
- 이외의 경우: 선점적\(_{preemptive}\) 스케줄링
- 우선 순위가 더 높은 프로세스가 도착할 때 실행중인 프로세스의 실행을 멈추고 CPU 사용을 넘겨준다.
디스패처\(_{Dispatcher}\)
- CPU의 제어를 프로세스(단기 스케줄러가 선택한)에게 넘겨주는 역할
- 문맥 교환 수행
- 사용자 모드로 변환
- 프로그램 카운터의 주소로 이동\(_{jump}\)
- Dispatch Latency
- 디스패처가 어떤 프로세스를 멈추고 다른 프로세서를 실행시키는 데 걸리는 시간
스케줄링\(_{Schedulers}\)
- 스케줄링의 종류
- 수행 단계(프로세스의 실행 시점 기준 프로세스의 상태)에 따라 분류
- 장기, 중기, 단기 스케줄링으로 구분
- 각 단계마다 서로 다른 스케줄링 정책 이용 → 시스템 효율성 증대
- 단기 스케줄러\(_{Short-term \ Scheduling}\) (실행상태로 진입)
- 스케줄링 알고리즘
- CPU에 프로세스를 얼마나 할당할지 시간을 정하는 단위 = \(_{Milliseconds}\)
- 준비 상태의 프로세스들에 대해 프로세서 할당 순서 결정
- 프로세스(단기) 스케줄링을 발생시키는 사건
- 인터럽트가 발생:
- 입출력 인터럽트\(_{I/O \ interrupt}\)
- 클럭 인터럽트\(_{Clock \ Interrupt}\)
- 실행중인 프로세스에 의해 시스템 콜이 발생
- 인터럽트가 발생:
- 스케줄링 알고리즘
- 중기 스케줄러\(_{Medium-term \ Scheduling}\) (활성상태로 진입)
- 메모리 공간을 확보하거나 또는 프로세스의 혼합을 개선하기 위해서 디스크로 교체
- Swap-in or swap-out
- 교체된 프로세스를 다시 메모리로 적재
- 장기 (작업) 스케줄러\(_{Long-term \ Scheduling}\) (프로세스 등록)
- 프로세스를 준비 상태로 만든다.
- 프로세스를 준비 상태로 만들 때 사용되는 시간 단위 = \(_{seconds, \ minutes}\)
- 시스템에 입력되는 작업이나 명령 중 커널에 등록(프로세스) 순서 결정
- 다중 프로그래밍의 정도
- 임의의 시간에 시스템에 존재할 수 있는 프로세스의 전체 수를 결정
- 입출력과 계산 작업의 혼합
- 자원 활용의 균형
- 프로세스를 준비 상태로 만든다.
스케줄링 알고리즘의 기준
- CPU 이용률\(_{Utilization}\)
- CPU의 지속적 활용 정도
- 작업 처리율\(_{Throughput}\)
- 단위 시간당 완료된 프로세스의 수
- 반환/총처리 시간\(_{Turnaround \ Time}\)
- 한 프로세스가 실행되는 시간
- 기계에 진입한 시간과 완료한 시간의 차이
- 대기 시간\(_{Waiting \ Time}\)
- 준비 큐에서 대기하는 시간
- 응답 시간\(_{Response \ Time}\)
- 요청을 제출하고부터 첫 번째 응답이 나올 때까지의 시간
- 스케줄링 알고리즘 최적화 기준
- 최대 CPU 이용률, 최대 처리량
- CPU를 오래 사용하고, 단위 시간당 처리하는 작업의 수가 많을수록 좋음
- 최소 반환 시간, 최소 대기 시간, 최소 응답 시간
- 프로세스가 작업 완료 후 종료까지의 시간이 짧고, 준비 상태에서 CPU를 기다리는 시간이 짧으며, 사용자가 작업을 요청한 후 시스템의 응답까지의 시간이 짧을수록 좋다.
- 최대 CPU 이용률, 최대 처리량
스케줄링 기법
- 스케줄링 기법에 영향을 주는 정책
- 선점/비선점 정책
- 우선순위
- 선점/비선점 정책
- 비선점 스케줄링\(_{Nonpreemptive \ Scheduling}\)
- 프로세스가 할당 받은 자원을 스스로 반납할 때까지 사용 (작업 완료 또는 반납)
- no preemption, 대표적 예: FIFO
- 장점
- 프로세스의 종료 시간에 대해 비교적 정확한 예측 가능
- 단점
- 일시적으로 우선순위가 지켜지지 않을 수 있음
- 평균 응답 시간 길어질 수도 있음
- 선점 스케줄링\(_{Preemptive \ Scheduling}\)
- 운영체제가 자원을 할당 받은 프로세서의 자원을 선점하여 다른 프로세스에 할당
- 대화형의 시분할 시스템, 실시간 시스템 등에 적합
- 문맥 교환을 위한 오버헤드 증가
- 비선점 스케줄링\(_{Nonpreemptive \ Scheduling}\)
- 우선 순위
- 프로세스의 중요도를 숫자로 표현
- 분류
- 정적 우선 순위\(_{Static \ Priority}\)
- 프로세스 생성 당시에 부여되고, 실행 중 불변
- 구현 단순, 적은 오버헤드
- 시스템 환경의 변화에 적절한 대응 곤란
- 동적 우선 순위\(_{Dynamic \ Priority}\)
- 프로세스 생성 당시에 초기 우선순위 부여
- 시스템과 프로세스의 상태 변화에 따라 우선순위 변경
- 구현 복잡, 우선순위의 수시 계산으로 오버헤드 큼
- 환경 변화에 유연한 대응 가능
- 정적 우선 순위\(_{Static \ Priority}\)
스케줄링 알고리즘
- FIFO\(_{First-In \ First-Out}\) 스케줄링
- 특징
- 비선점 스케줄링
- FCFS\(_{First \ Come \ First \ Served}\)
- 준비 상태에 먼저 도착한 프로세스에게 먼저 프로세서 할당
- 자원의 효율성 높음
- 일괄 처리 시스템 등에 적합
- 대화형 시스템에 부적합
- 단점
- 프로세서를 장시간 독점하는 경우 다른 프로세스들이 장시간 대기함
- 평균 응답 시간이 길어질 수 있음
-
FIFO 스케줄링 예시
- 종료 시간, 응답 시간, 평균 응답 시간?
- 특징
- 우선순위 스케줄링
- 우선순위 스케줄링 알고리즘
- 우선순위가 각 프로세스에 주어지고 CPU를 최고 우선순위를 가진 프로세스에 할당
- 우선순위가 같은 프로세스들은 FCFS 스케줄링
- 우선순위: 내부 요인과 외부 요인
- 내부 (실행 시간, 메모리 사용 공간, 사용 파일의 수)
- 외부 (요금, 사용 부서 등)
- 무한 정지\(_{Indefinite \ Blocking}\) 상태, 기아 상태
- 낮은 우선순위 작업들이 CPU를 사용하지 못하는 경우
- 해결 방법: 시스템에 대기하는 시간이 증가함에 따라 우선순위를 높인다 ⇒ 에이징\(_{aging}\) 이라고 불림
- 낮은 우선순위 작업들이 CPU를 사용하지 못하는 경우
-
예시
- 평균 대기 시간 = \(\frac6{5} = 8.2\)
- 우선순위 스케줄링 알고리즘
RR\(_{Round-Robin}\) 스케줄링
- 선점 스케줄링
- 준비 상태에 먼저 도착한 프로세스에게 먼저 프로세서 할당 (FIFO)
- 각 프로세스들에게 시간 할당량\(_{Time \ Quantum}\) 지정 (10~100msec)
- 시간 할당량을 소모한 프로세스는 프로세서를 반납하고 준비 상태로 전이
- 한 프로세스에 대한 프로세서 독점 방지
- 프로세서 선점에 따른 문맥 교환 오버헤드 증가
- 대화형 시스템, 시분할 시스템에 적합
- 시간 할당량의 결정이 시스템 성능에 영향을 끼침
SPN\(_{Shortest-Process-\ Next}\) 스케줄링
- SPF\(_{Shortest \ Process \ First}\) scheduling
- SJF\(_{Shortest \ Job \ First}\) scheduling
- 총 실행 시간이 가장 짧은 프로세스부터 스케줄링 하는 기법
- 비선점 스케줄링
- 장점
- 평균 대기 시간, 평균 응답시간 최소화
- 시스템 내의 대기 프로세스 수를 최소화
- 많은 프로세스들에게 빠른 응답 시간 제공
- 준비 큐의 크기 감소, 저장 공간 오버헤드 줄임
- 단점
- 무기한 연기\(_{Indefinite \ Postponement}\) 현상 발생 가능
- 실행 시간이 긴 프로세스들의 무한 대기 가능
- 에이징 기법으로 해결 가능 (HRRN 방법)
- 프로세스 생성시 총 실행 시간에 대한 정확한 계산 불가능
- 각 프로세스의 실행 시간에 대한 추정 필요
- 무기한 연기\(_{Indefinite \ Postponement}\) 현상 발생 가능
SRTN\(_{Shortest-Remaining-Time-Next}\) 스케줄링
- SPN 스케줄링의 선점형 변형
- 준비 상태의 프로세스들 중에서 서비스 시간이 가장 적게 남은 프로세스에게 먼저 프로세서 할당
- 선점 스케줄링
- 프로세스 실행 중 남은 실행 시간이 더 적은 프로세스가 준비 상태에 들어올 경우 선점됨
- 단점
- 프로세스 생성시 총 실행 시간 추정 작업 필요 (SPN과 동일)
- 잔여 실행 시간에 대한 계속적인 계산 오버헤드 증가
- 실행 시간이 긴 프로세스들의 평균 응답 시간 길어짐
- 실행시간이 짧은 프로세스가 많은 경우 잦은 선점으로 문맥 교환 오버헤드 증대
HRRN\(_{High \ Response \ Ratio \ Next}\) 스케줄링
- 실행 시간이 긴/짧은 프로세스들간의 불평등(SPN) 심화 방지 기법
- 비선점 스케줄링
- 응답률이 가장 높은 프로세스에게 우선권을 주는 방식
= 대기시간이 긴 프로세스는 응답률이 높다.
-
응답률: 서비스 시간에 대한 대기 시간 비율
\[응답률(우선순위) = \frac{대기시간 + 서비스 시간}{서비스 시간}\] - 특정 프로세스의 장시간 대기 방지
- 준비상태에서 기다리는 시간이 길어질수록 우선 순위 향상됨
- SPN 스케줄링 기법의 효과 얻음
- 총 실행 시간이 짧은 프로세스가 긴 프로세스 보다 우선 스케줄링
- 단점
- 응답률 계산을 위해 프로세스의 총 실행시간 추정 오버헤드 발생
-
다단계 피드백 큐\(_{MFQ}\)
- Multi-level feedback queue scheduling
- 프로세스들에 대한 사전 정보(실행시간)가 없는 경우
- SPN, SRTN, HRRN을 사용할 수 없는 경우
- 선점 정책, 동적 우선순위 스케줄링
- 준비 상태의 큐를 여러 개 두어 스케줄링
- 각각의 큐는 서로 다른 스케줄링 방법 사용
- 프로세스들에 대한 사전 정보(실행시간)가 없는 경우
- MFQ 스케줄링 기법의 기본 목적
- 짧은 실행 시간을 요구하는 프로세스 선호
- 입출력 위주의 프로세스 선호 (짧은 프로세서 시간 사용)
- 신속한 프로세스의 성격 분석으로 적응적으로 스케줄링
- MFQ를 위한 기본 개념
- 피드백\(_{Feedback}\)
-
프로세스의 실행 예상 시간을 모름
→ 현재까지 프로세서를 사용한 시간을 근거로 스케줄링
-
- 다단계 피드백 큐\(_{multi-level \ feedback \ queue}\)
- 다수의 준비 큐
- 준비 상태로 들어오는 프로세스들이 이전의 디스패치 시기와는 다른 준비 큐로 진입할 수 있게 하는 경우
-
큐잉 모델\(_{Queuing \ model}\)
- 피드백\(_{Feedback}\)
- MFQ 스케줄링 기법
- dynamic priority 사용
- preemptive scheduling (프로세스 시간할당량 소모 후 선점됨)
- I/O-bound process들을 선호 (우선순위 유지)
- 연산 위주의 process는 시간할당량 소모 후 우선순위 낮아짐
- 실행 시간이 짧은 프로세스들 선호 (총 실행시간이 짧은 프로세스는 조기 종료, 긴 경우는 우선순위가 낮아짐, SPN의 효과)
- 장점
- 매우 적응성 있는 기법임 (사전 정보를 사용하지 않고 실행 중의 프로세스 특성을 사용)
- 프로세스들에 대한 사전 정보 없이도 SPN, SRTN, HRRN 등의 효과 보임

- 그림 해석
- n+1개의 큐
- 우선순위: RQ0 > RQ1…
- 새로운 프로세스
- 최고 큐에서 대기(높은 우선순위)
- 낮은 큐에 실행되는 프로세스 존재해도 선점
- 시간할당량을 모두 소비
- 짧은 프로세스와 입출력 중심 프로세스에게 높은 우선순위 할당
- 실행 시간이 긴 프로세스는 짧은 프로세스나 입출력 중심 프로세스의 종료 후에 실행
- 시간할당량 미 소비
- 같은 큐로 진입(입출력 등 프로세서반납)
- 각 큐는 서로 다른 스케줄링 방식
- 가장 낮은 수준의 큐: RR
- 나머지 수준의 큐: FIFO
- n+1개의 큐
- MFQ 스케줄링 기법의 변형
- MFQ 스케줄링 기법의 문제점
- 시스템 부하 증가 시
- 우선 순위가 낮아진 프로세스의 무기한연기 현상 발생 가능
- 시스템 부하 증가 시
- MFQ 스케줄링 기법의 문제점
-
다단계 피드백 큐의 예
3개의 큐(0 ~ 2): Q0 – 규정 시간량 = 8 milliseconds Q1 – 규정 시간량 = 16 milliseconds Q2 – FCFS
스케줄링 새로운 작업은 큐 Q0에 입력 시간량 8을 할당 받아 실행 만약 실행이 끝나지 않으면, 그 작업은 Q1의 끝으로 전달 Q1 에서 16을 할당 받아 실행 여기서도 끝나지 않으며 Q2로 전달 Q2 에 있는 작업들은 Q0 와 Q1 이 비어있는 경우에 FCFS 방식으로 실행
유닉스 운영체제의 스케줄링 기법
- Unix OS의 프로세스 스케줄링
- 우선순위 기반 스케줄링 사용
- 우선순위 조정
- 프로세스 테이블
- 커널은 시스템에 존재하는 모든 프로세스에 대한 정보를 저장
- 프로세스의 우선순위
- 프로세서 시간할당량이 크면 → 우선순위 낮춤 (공평성)
- 커널 우선순위\(_{kernel \ priority}\): high
- 커널 모드에 있는 프로세스가 배정받는 우선순위
- 사용자 우선순위\(_{user \ priority}\): low
- 사용자 모드에 있는 프로세스가 배정받는 우선순위
- 클럭 핸들러\(_{clock \ handler}\)
- 주기적으로 인터럽트 발생, 모든 프로세스들의 우선순위 조정함
- 프로세스 테이블
- 커널 모드가 사용자 모드보다 권한이 더 높음 ⇒ 우선순위가 높음
- 인터럽트를 허용하지 않는 프로세스가 허용하는 프로세스보다 우선순위가 더 높음
유닉스 운영체제의 스케줄링 기법
- 스케줄링 기법 개요
- 우선순위가 높은 프로세스부터 디스패치하는 정책 사용
- 프로세스의 우선순위
- 프로세서 사용량에 따라 주기적으로 변함
- Unix OS의 스케줄링 기법은 MFQ 기반임
- 스케줄링 기법
- 우선 순위 조정 과정 (클럭 틱 발생 → 클럭 핸들러가 주기적으로 계산)
-
Decay 연산
\[CPUCount = \frac{CPUCount}2\] -
우선순위 조정
\[Priority = \frac{CPUCount}2 + basePriority + niceValue\]basePriority
: 미리 정해진 값, 초기 우선 순위niceValue
: 자신의 우선순위를 낮출 때 더하는 값
-
- 우선 순위 조정 과정 (클럭 틱 발생 → 클럭 핸들러가 주기적으로 계산)
-
스케줄링 예시
- 1초가 지날때마다 시간 할당량을 다 사용해서 Decay연산과 우선순위를 조정한다.
- 때문에 시간이 지날때마다 우선순위는 증가하고 CPUCount는 줄어든다.
- P1이 처음 실행하고 그 다음 클럭에는 우선순위가 P2에 밀려서 P2가 먼저 실행된다.
- 이후에는 P2가 우선순위가 내려가 P3가 실행된다.
- 위 순서가 반복된다.
댓글남기기