사전지식
- CPU Burst Time & I/O Burst
- Scheduling Queue
CPU Burst Time & I/O Burst Time
프로세스는 CPU Burst 와 I/O Burst가 왔다갔다 바뀌면서 프로그램을 실행
- CPU Burst : CPU 명령을 실행하는하는 것
- I/O Burst : I/O 요청한 다음 기다리는 시간
CPU Burst Time = 10초라고 하면, 이 프로세스가 특정 작업이 완료되기 위해서는 CPU가 10초동안 이 프로세스를 작업해줘야 된다는 의미
Scheduling Queue
- Job Queue
- 시스템 안의 모든 프로세스들로 구성
- 프로세스가 시스템에 들어오면 job queue에 놓여짐
- Ready Queue
- 프로세스 상태가 Ready 상태인 프로세스가 들어가는 큐, 보통 연결리스트로 구성
CPU 스케쥴링이란 ?
필요한 이유
즉, 누구한테 주고, 얼마나 쓰게 할 것인가 ? 를 효율적으로 해결하기 위해 프로세스 스케쥴링이 필요
비선점 VS 선점
- 비선점(Non-Preemtive) : CPU를 받았으면, 본인 작업이 끝날 때까지 보장받는 방식
- 선점(Preemtive) : CPU를 받아도, Timer Interrupt 등으로, 강제로 CPU를 빼앗길 수 있는 방식
CPU 성능 척도
시스템 입장
- Utilization(이용료) : 전체시간 중, CPU가 놀지 않고 일한 시간
- Throughput(처리량) : 주어진 시간 내, CPU가 몇 개의 작업을 처리했는가 ?
프로그램 입장(사용자 입장)
-
Turnaround-Time(소요시간,반환시간) : 프로세스가 CPU를 쓸려고 들어와서, CPU를 다쓰고 I/O 처리하러 나가기까지 총 시간, 즉 CPU Burst 시간
-
Waiting-Time(대기시간) : Ready Queue에서 기다리는 시간
-
Response-Time(응답시간) : Ready Queue에 들어와서, 처음 CPU를 할당 받는 시간
선점방식의 경우
- 대기시간은 프로세스마다 잠깐 사용했다 기다렸다 반복하보면 총 대기시간은 바뀔 수 있음
- 응답시간의 경우는, 그것과 상관없이 맨 처음 CPU를 할당 받는 시간임
프로세서(CPU) 1개
FCFS ( First-Come-First-Served )
= 먼저 온 놈, 먼저 서비스
if ) CPU Burst 가 짧은 프로세스가 먼저 들어온다면 ?
Convey Effect
CPU Burst 가 긴 프로세스가 앞에서 서비스를 받아, 전체적인 Wait 시간이 커지는 현상
SJF ( Shortest Job First )
= CPU Burst 가 가장작은 순으로, 먼저 서비스
Non-Preemtive SJF
Preemtive SJF
장점
- SJF Optimal : 주어진 프로세스들에 대해 Minimum Average Waiting Time 을 보장( 선점 방식의 경우 )
단점
-
Starvation (기아현상)
- CPU Burst 가 비교적 큰 프로세스는 계속되는 짧은 CPU Burst를 가진 프로세가 들어오면, 영원히 CPU 할당을 못 받을 수 있다.
-
CPU 사용시간을 미리 알 수 없음
- 실제 시스템에서는 여러 분기가 있을 수 있어서, Burst 시간이 짧다고, 실제로 언제, 그 프로세스가 끝날지 모른다. (추정은 가능)
RR( Round-Robin )
= 각 프로세스는 동일한 크기, 할당 시간(Time Quantum, 일반적으로 20~50 msec)을 가짐
- 선점(Preemtive)
- Quantum-Time이 다 되면, 프로세스는 선점당하고, Ready Queue에 맨 뒤에 가서 줄은 선다.
장점
- 응답시간(Response-Time)이 빠름
- EX) n개의 프로세스가 Ready Queue에 있고, q-Time unit인 경우, 최대 (n-1) * q-Time 단위로 CPU를 할당 받을 것임
- q-Large = FCFS
- q-Small = Context-Switching 오버헤드 빈번
- 즉, 적당히 q-Time을 설정할 것
- 앞선 SJF 방식보단, Average-Turnaround-Time이나 Waiting-Time은 길어질 수 있으나, Response-Time은 효과적으로 더 짧아짐
Prioirty Scheduling
= 프로세스들을 그룹화 해서 우선순위 클래스를 형성, 우선순위 클래스마다 우선순위를 할당해서 각 클래스 내에서 RR을 사용
HRN(Highest Response-ratio Next) Scheduling
- 기아현상을 보완하기 위해 등장한 스케쥴링
- 각 작업의 우선순위로 서비스 해줌
- 비선점
- 우선순위측정 : waiting-Time / service-Time
에이징(Aging) 기법
= 아무리, 우선순위가 낮은 프로세스여도, 시간이 지날수록 우선순위를 높여주자.
MuliLevel Queue
= 여러 개의 Ready Queue로 분할(=여러 줄로 CPU를 기다림)
- System Process : 시스템 관련 프로세스
- Interactive Process : 사용자와 인터렉션 프로세스
- Batch Process : CPU만 많이 잡아먹는 프로세스
- Student Process
Foreground Queue
= 사용자와 인터렉티브(Interactive)한 작업 프로세스
Background Queue
= 배치(Batch) 작업 프로세스
- FCFS 방식 추구
- Context-Switching 최소화 목적
MultiLevel-Feedback-Queue
MFQ 를 정의하는 파라미터들
- Queue의 수
- 각 Queue의 알고리즘
- Process를 상위 큐로 보내는 기준
- Process를 하위 큐롤 보내는 기준
- Process가 CPU 서비스를 받으려 할 때, 들어갈 큐를 결정하는 기준
보통, 처음 들어오는 큐를 우선순위를 높게함
- 우선순위를 높게해서, RR 방식으로 q-Time을 가장 짧게 => 점점 크게 => 제일 아래 FCFS로 설정
- 상위 큐가 끝나면, 다음 하위 큐가 실행되도록 설정
프로세서(CPU) 여러 개
Mutiple-Processor Scheduling
= CPU가 여러 개인 경우, 스케쥴링은 더욱 복잡해짐
Real-Time Scheduling
= Dead-line이 보장 되어야 함, 미리 스케쥴링할 필요가 있음
- Hard Real-Time : 정해진 시간 안에 반드시 끝내도록 스케쥴링
- Soft Real-Time : 어느 정도의 데드라인이 넘는 것은 허용하는 스케쥴링
Thread Scheduling
Local Scheduling
- User-Level-Thread의 경우, 프로세스에 의해, 어떤 Thread에게 스케쥴할지 결정
- OS(커널)은 프로세스 내부의, 스레드 존재는 모름, 그래서 각 프로세스가 내부 스레드 스케쥴링
Global Scheduling
- Kernel-Level-Thread의 경우, 일반 프로세스와 같이, 커널(OS)이 프로세스 스케쥴링하듯이, 프로세스 내부의 Thread들을 스케쥴링
중요한 차이점 : 성능
- User-Level-Thread Switching은 주의 깊은 사용이 필요
- Kernel-Level-Thread Switching은 완전한 Context Switching이 필요
참고자료
- https://jhnyang.tistory.com/25 (CPU Burst & I/O Burst)
- OS 수업자료