-
운영체제 - 9(CPU스케줄링2, 쓰레드/다중 프로세서 스케줄링)OS 2019. 7. 4. 14:37
스케줄링 알고리즘
1. Multilevel Queue Scheduling
(Queue를 여러개 두어 우선순위 스케줄링)
- 서로 다른 유형별로 구분하여 분리처리
- 유형에 맞는 스케줄링 알고리즘을 각각 따로 적용
Ex) 대화형 프로세스 - 일괄처리/Round-robin(실시간으로 즉각즉각 스케줄링이 되어야 하기때문에)
* 문제점
- 프로세스를 초기에 어떠한 Queue에 넣으면 계속 거기 있어야 하고 우선순위가 높은/낮은 Queue로 옮겨줄 수 없어 신축성 있는 스케줄링이 어렵다. - 우선순위가 밀려 기아 상태로 들어설 가능성이 있다.
2. HRN(Highest Response-Rate Next) 스케줄링
- 비선점 스케줄링 기법으로 가변적 우선순위를 두어 때에따라 우선순위가 변하게함
많이 기다렸다면 Or 서비스 받을시간이 적다면
우선순위가 높다
3. 알고리즘의 평가
- 최적의 스케줄링 알고리즘을 선택하는것은 중요
- 알고리즘 선택기준 : 프로세서 이용률, 응답시간, 처리율 등(평균 반환시간 / 평균 대기시간)
** 평균 대기시간 : FCFS > RR > 비선점SJF => 대기시간이 짧을수록 좋으므로 비선점 SJF가 좋은 알고리즘
*** SJF 스케줄링 알고리즘의 문제점 : 현실성 X(프로세스를 실행하기도 전에 작업시간이 얼마나 걸릴지 예측 불가)
쓰레드 스케줄링
1. 단일/다중 CPU에서 멀티쓰레드 처리개념
**쓰레드를 쓰는 이유 : 병행성을 높여 성능을 높이기 위해
=> 이 쓰레드를 처리하는 것은 CPU, 따라서 단일 CPU에서 멀티쓰레드 처리는 쉽지않다
2. 3가지 모델
1) Many to One Model
: N개의 User-thread가 1개의 Kernel thread 공유
=> User thread는 Kernel thread를 공유하므로 효율적이나 Kernel이 하나이므로 multi 효과가 없음
2) One to One Model
: 1:1로 대응하여 User thread와 Kernel thread가 N개씩 같은 수를 가짐
=> 병행성 효과는 좋으나 User가 Kernel thread를 과다하게 생성하는 문제 발생 - 과한 Resource 사용 문
3) Many to Many Model
(Many to One Model + One to One Model)
: User thread가 Kernel thread를 무작정 만드는 것이 아니라 Kernel에 갯수제한을 두어 만듬 - Multiplexing
다중 프로세서 스케줄링
- CPU가 여러개인 경우 어떻게 스케줄링해줄 것이냐
=> 여태까지는 1개의 CPU(프로세서)
1. 부하공유(Load Sharing) 스케줄링
- CPU당 스케줄링 이벤트가 발생
- 스케줄러는 어떤 CPU에서든지 실행될 수 있으며 Single Shared Queue를 공유함
2. 전용 프로세서 할당 스케줄링
- CPU 각각 자신만의 큐를 가짐
- Per-CPU Ready Queue
3. 갱(Gang) 스케줄링
- 한 프로세스에 속한 여러 쓰레드들을 동시에 스케줄링
- 쓰레드간 문맥교환 횟수를 줄일 수 있어 효율적
4. 동적 스케줄링(Load Balancing)
- CPU 간 준비 큐의 크기가 같도록 관리 => 부하 균등
* 균등을 위한 2가지 기능(지속적인 모니터링)
1) Push Migration
: 커널은 주기적으로 Queue Size를 점검하여 크기가 작은 Q로 쓰레드를 이동시킴
2) Pull Migration
: Queue가 Empty 상태가 되면 다른 Queue의 쓰레드를 가져옴
* 프로세스 연관성 문제
프로세스가 다른 Queue에 Migration 되면, 이전 CPU 내의 캐시에 저장해 놓은 데이터를 사용할 수 없음
** 문제점 해결을 위한 2가지 방안
1) Soft Affinity
: Migration을 그냥 그대로 일부 허용
2) Hard Affinity
: Migration을 강력하게 불허
프로세스 스케줄링 사례
1. Window
1) 쓰레드 단위로 스케줄링
2) 선점방식 알고리즘 채택
3) Multilevel Feedback Queue + Priority 스케줄링 선택(실제로 작업관리자에서 우선순위 변경가능)
2. Linux
1) Linux Kernel 이전/이후로 대폭 변화함
2) 이전 : Priority 스케줄링만 사용 => 단순 명료하나 Overhead 발생문제
3) 이후 : Multilevel Queue + Priority 스케줄링 알고리즘 사용
- 3개 클래스로 분류하여 클래스마다 다른 스케줄링 방법 적용
'OS' 카테고리의 다른 글
운영체제 - 10(가상메모리) (0) 2019.07.11 운영체제 - 8(CPU 스케줄링) (0) 2019.07.03 운영체제 - 7(교착상태) (0) 2019.07.02 운영체제 - 6(모니터, IPC) (0) 2019.06.28 운영체제 - 5(++ 병행프로세스/상호배제 해결법) (0) 2019.06.27