운영체제 - 04
Updated:
강의
http://www.kocw.net/home/search/kemView.do?kemId=1226304
운영체제 - CPU 스케줄링
1. CPU 스케줄링의 이유
- 여러 종류의 job(=process)가 섞여 있기 때문에 CPU 스케줄링이 필요
- CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용
2. 프로세스의 특성 분류
2.1 I/O bound process
- CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 프로세스
- many short CPU bursts
- 사람과 관계가 많은 프로세스 (ex: 키보드)
2.2 CPU bound process
-
계산 위주의 프로세스
-
few very long CPU bursts
3. CPU 스케줄러 & Dispatcher
- 스케줄러란 운영체제에 있는 한 기능(코드) 부분을 말한다.
3.1 CPU 스케줄러
- Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다.
3.2 Dispatcher
- CPU 제어권을 CPU 스케줄러에 의해 선택된 프로세스에게 권한 준다.
- 이 과정을 context switch(문맥 교환)이라고 한다.
3.3 프로세스 상태 변화
- Running 에서 Blocked(wait, sleep) (ex: I/O 요청하는 시스템 콜)
- Running에서 Ready (ex : time slicing으로 타이머 인터럽트)
- Blocked에서 Ready (ex : I/O 완료 후 인터럽트)
- Terminate
3.4 스케줄러 종류 나누는 기준
- 프로세스 상태 변화에서 1,4 스케줄링은 nonpreemptive (강제로 빼앗지 않고 자진 반납)
-
나머진 preemptive
- 1의 경우 자기가 필요해서 운영체제에게 시스템 콜을 한 것이다.
- 4또한 자기가 할일이 끝나서 프로세스를 종료하는 것
- 그러나 2,3의 경우 자기가 필요한게 아니라 자신에게 할당된 시간이 끝나거나 1에서 block된 프로세스가 I/O가 끝나서 OS가 상태를 바꿔주는 것이다. 따라서 스스로 원한 것이 아닌 외부에서 상태에 영향을 주는 것이기 때문
3.4 스케쥴링 criteria (성능 척도)
- Performance Index, Performance measure 라고도 부름
3.4.1 CPU utilization (이용률)
3.4.2 Throughput (처리량)
3.4.3 Turnaround time(소요시간, 반환시간)
- CPU 사용시간, Ready Queue 대기시간 다 합친것
3.4.4 Waiting time(대기 시간)
- Ready Queue에서 대기한 모든 시간을 합친 것 (응답시간을 모두 합친 것)
3.4.5 Response time(응답 시간)
- 최초로(처음으로) Ready Queue에 들어와서 대기한 시간
3.5 스케줄링 종류
3.5.1 FCFS (First come First served)
- 오는 대로 순서대로 CPU 할당
- 굉장히 비효율적 (Convoy effect : 긴 프로세스 뒤에 짧은 것들이 와서 오래 기다리게 되는 효과)
3.5.2 SJF (Shortest-Job-First)
-
가장 CPU 사용(CPU burst time)이 적은 process에서 먼저 CPU 할당
-
두 가지 방식
-
nonpreemptive : 일단 CPU를 잡으면 끝날 때까지 사용
-
preemptive : 남은 CPU 사용시간보다 사용 중에 더 짧은 burst time 프로세스가 오면 빼앗음
(SRTF: Shortest remaining time first 라고 부름)
-
-
최소 대기 시간을 보장 (preemptive 방식이 경우 가장 최적(optimal)화 됨. 즉, 극단적 효율적)
- 그러나 형평성(starvation)에 어긋남. CPU 사용률이 높은 프로세스는 받을 수가 없음
- 또한 CPU burst time는 사실 알 수 가 없음
- 예측만이 가능한데 어떻게 알 수 있냐면 이전에 사용했던 흔적을 통해서 추정. (exponential averaging)
3.5.3 Priority Scheduling
-
Priority = 다음 CPU burst 시간을 예측
-
각 프로세스에 우선순위를 주는 것
- preemptive : 우선 순위가 높으니 빼앗자. non : 일단 할당 받았으니 그냥 써
- SJF는 일종의 priority 스케줄링
- starvation가 문제
- starvation 해결책 : 기다리는 시간만큼 우선순위를 높여줌
3.5.4 Round Robin (RR)
- 각 프로세스마다 할당(time quantum)을 가짐
- 할당 시간을 다 쓰면 다시 대기 큐에 간다.
- 대기 큐(시간)가 크면 FCFS랑 같아지고
- 대기 큐(시간)가 작으면 context switch(문맥교환) 오버헤드가 커진다.
-
그래서 적절한 할당시간을 줘야 한다.
- 일반적으로 SJF보다는 효율성(평균 대기 시간)은 떨어짐. 그러나 응답 시간은 좋음
3.5.5 Multilevel Queue
- Ready Queue를 여러 개로 분할, 각 큐는 독립적인 스케줄링 알고리즘을 가짐
- 각 큐에 대해서 우선 순위가 있다. 아래 큐일 수록 우선순위가 떨어짐
- foreground : interactive –RR
- background : batch - no human interaction –FCFS
- 각 큐에 대한 스케쥴링을 주는 기준(방법)
- Fixed priority 스케줄링
- serve all from foreground then from background
- starvation 가능성
- Time slice
- 각 큐에 CPU time을 적당한 비율로 할당
- ex ) 80% to foreground in RR, 20% to background in FCFS
- Fixed priority 스케줄링
- 프로세스가 어느 큐에 들어가면 그 큐에 계속 머물러야 한다.
3.5.6 Multilevel Feedback Queue
- 프로세스가 다른 큐로 이동이 가능
- Multilevel Queue도 starvation 가능성이 있음. 그래서 aging 우선순위로 해결 가능
- 큐의 이동 기준
- 큐의 수
- 각 큐의 스케줄링 알고리즘
- 프로세를 상위, 하위로 보내는 기준
- 프로세스가 CPU 서비스를 받으려 할 때 들어갈 큐를 결정하는 기준
3.5.7 Multiple-Processor 스케줄링
- CPU가 여러 개인 경우 스케줄링은 더욱 복잡해짐
3.5.7.1 Homogeneous processor인 경우
- 큐에 한줄로 세워서 각 프로세서가 알아서 꺼내감
- 반드시 특정 프로세서에서 수행되어야 하는 프로세스가 있는 경우 문제가 복잡해짐
3.5.7.2 Load sharing
- 일부 프로세서(processor)에 job(프로세스:process)이 몰리지 않도록 부하를 공유하는 메커니즘 필요
-
한쪽 프로세서에 오래 걸리는 프로세스가 몰리면 비효율적이 될 수 있음
- 별개의 큐를 두는 방법 vs 공동 큐를 사용하는 방법
3.5.7.3 Symmetric Multiprocessing(SMP)
- 각 프로세서가 각자 알아서 스케줄링 결정
3.5.7.4 Asymmetric multiprocessing
- 하나의 프로세서가 시스템 데이터의 접근과 공유를 책임지고 나머지 프로세서는 거기에 따름
3.5.8 Real - Time 스케줄링
- Real time 운영체제에서 사용하는 것. deadline이 있음
- 현 강의에서는 그닥 중요하지 않음
- 데드라인이 워낙 중요하기 때문에 그때 그때 정하는게 아니라 아싸리 좋은 CPU를 좋은거 씀
3.5.8.1 Hard real time systems
- 정해진 시간에 반드시 끝나야 함
3.5.8.2 Soft real time systems
- ex) 동영상
3.5.9 쓰레드 스케줄링
- 스레드: 프로세스의 작업의 한 단위
3.5.9.1 local 스케줄링
- 유저 레벨 스레드의 경우 사용자 수준의 스레드 라이브러리에 의해 어떤 스레드를 스케줄할지 결정
Global 스케줄링
- 커널 레벨 스레드의 경우 일반 프로세스와 마찬 가지로 커널의 단기 스케줄러가 어떤 스레드를 스케줄할지 결정
3.6 알고리즘 평가
3.6.1 Queueing models
- 확률 분포로 주어지는 도착 평균과 서비스 평균등을 통해 각종 성능 인덱스 값을 계산
- 예전 방식. 이론적
3.6.2 Implementatio(구현) & Measurement(성능 측정)
- 실제 시스템에 알고리즘을 구현하여 실제 작업에 대해서 성능을 측정 비교
3.6.3 Simulation (모의 실현)
-
알고리즘을 모의 프로그램으로 작성 후 trace(프로그램이 요청하는 값)를 입력으로 하여 결과 비교
-
trace의 신빙성 있게 만들어야 의미가 있다.