운영체제 5장 - 프로세서 스케줄링
5.4 Thread 스케줄링
- 운영체제는 Kernel-level Thread들을 스케줄링
- user-level 스케줄링은 thread library에 의해 수행
- 스케줄링 경쟁 범위(contention scope)
- 프로세스 경쟁범위(Process-contention scope : PCS)
- user-level 스레드를 가용 LWP 상에 스케줄링
- 같은 process의 thread간에 스케줄링 경쟁
- many-to-one 또는 many-to-many 간에 스케줄링 경쟁
- 시스템 경쟁 범위(System-contention scope :SCS)
- 커널이 kernel-level 스레드 들을 CPU 스케줄링
- system의 모든 thread간에 스케줄링 경쟁
- one-to-one 맵핑 모델에서 삭용
- 프로세스 경쟁범위(Process-contention scope : PCS)
- Pthread 스케줄링 정책 : thread 생성 시에 지정 허용
PTHREAD_SCOPE_PROCESS
,PTHREAD_SCOPE_SYSTEM
5.5 다중 프로세서 스케줄링
- 여러개의 CPU가 있는 경우에는 CPU 스케줄링이 더 복잡해짐
- 여기서는 모든 프로세서가 동일한(homogeneous) 시스템을 가정
- 다중 프로세서 스케줄링 접근 방법
- 비대칭(Asymmetric) 다중 처리
- 한 프로세서가 스케줄링, 입출력처리, 시스템 활동을 처리(운영체제 커널 수행)
- 나머지 프로세서들은 user code만 수행
- 자료 공유 필요성을 배제하므로 간단한 설계
- 대칭(Symmetric) 다중 처리
- 각 프로세서는 독자적으로 스케줄링(self-scheduling)
- ready queue는 공동큐, 분리큐 방식
- 현대 OS는 프로세서마다 분리된 자신의 큐를 사용하는 분리 큐 방식을 사용함
- 비대칭(Asymmetric) 다중 처리
- 프로세서 친화성(Affinity)
- 프로세스가 현재 실행중인 프로세서에서 다른 프로세서로의 이주(migration)를 피하고, 다음 스케줄링에서도 현재 프로세서에서 계속 실행을 시도하는 것
- 프로세서를 이동하면 캐시 무효화와 채우기를 해야하므로 비용이 증가한다
- 프로세서 친화성 형태
- 연성 친화성(soft affinity) : 프로세서 지정하지 않음. 이주 가능
- 강성 친화성(hard affinity) : 프로세서(집합)를 지정
- 시스템의 형태(특히 주 메모리 구조)가 프로세서 친화성에 영향을 줌
- 부하 균등화(Load Balancing)
- 모든 프로세서들간에 부하가 고르게 배분하려는 시도
- 공통큐는 부하 균등화 방식이 불필요함
- 분리큐를 가지는 시스템의 부하 균등화 방식
- push migration
- 특정 task가 주기적으로 각 프로세서의 부하를 검사
- 과부하 프로세서가 발견되면 process들을 idle 또는 less-busy 프로세서로 이주
- pull migration
- idle processor가 busy process에서 대기중인 프로세스를 자신에게로 이주시킴
- 두 방식은 배타적 방식이 아니므로, 함께 사요할 수 있음
- push migration
- 부하 균등화는 프로세서 친화도의 장점과 상충됨
- 멀티스레드 프로세서
- 하나의 물리적 프로세서에 다수의 논리적 프로세서를 제공하는 프로세서
- 연산장치를 공유함
- 논리적 프로세서는 별도의 레지스터 집합을 가져, 빠른 context switching 가능
- 메모리 접근 동안 연산장치를 다른 논리 프로세서가 이용함
- 하나의 물리적 프로세서에 다수의 논리적 프로세서를 제공하는 프로세서
- 멀티코어 프로세서
- 같은 칩에 다수의 프로세서를 보유한 프로세서
- 멀티 코어 프로세서의 스케줄링
- 운영체제 : thread에게 논리 프로세서를 스케줄링
- CPU 하드웨어 : hardware thread에게 core를 스케줄링
5.6 실시간 스케줄링
5.7 운영체제 사례
Linux 스케줄링
- kernel version 2.5 이전에는 표준 UNIX 스케줄링 알고리즘의 변형을 사용
- kernel version 2.5/2.6 :
- 상수시간에 실행.
- Epoch 기반 스케줄링
- 모든 runnable tasks는 per-CPU runqueue 자료구조로 관리
- interactive process의 응답시간이 느림
- 2.6.23+
- Completely Fair Scheduler(CFS) : 완전 공평 스케줄러
- 각 task는 특정 우선순위를 가진다
- 스케줄러는 가장 높은 클래스에서 가장 우선순위가 높은 task 선택
- 고정된 양의 time quantum 대신, 우선순위 값에 따라 CPU 시간의 비율을 결정
- CFS 스케줄러는 task 별로 가상실행시간으 로간리
- Completely Fair Scheduler(CFS) : 완전 공평 스케줄러
Windows 스케줄링
- a priorty-based, preemptive 스케줄링
- real-time, high, above normal, normal, below normal, idle priorty 등의 우선순위를 가짐
- time quantum이 만료되면 우선순위가 낮아짐
- wait이 해제되면 우선순위르 ㄹ높여준다
- foreground 프로세스가 background 프로세스보다 더 높은 우선순위를 가진다
Solaris 스케줄링
- 우선순위 기반 스케줄링
- 6개의 스케줄링 클래스
- time sharing, interactive, realtime, system, fiar share, fiexed priory
- 각 클래스마다 다른 우선순위, 다른 스케줄링 알고리즘 존재
5.8 스케줄링 알고리즘 평가
- 평가 방법
- 결정론적(Deterministic) 모델 : 특정한 미리 정의된 부하 사용
- Queueing 모델 : 부하르 ㄹ확률 분포로 기술. Queueing network의 수학적 분석
- 시뮬레이션 : 시스템 모델을 프로그래밍하는 작업 포함
- 구현 : 실제 부하를 사용
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.