"KOCW - 반효경 교수님의 운영체제" 를 듣고 정리한 내용입니다.
(사진 출처 - 티스토리)
여러 종류의 job (process)이 섞여있어 CPU 스케줄링이 필요하다. CPU와 I/O 장치 등 시스템 자원을 골고루 사용해야 한다.
프로세스의 특성 분류
- I/O bound process
- many short CPU bursts
- 주로 사람과 interaction하는 프로세스
- I/O 개입이 많아 CPU burst가 짧은 경우
- CPU bound process
- few very long CPU bursts
- 계산 위주의 프로세스
- ex) 10,000 by 10,000 행렬의 곱셈 연산
- I/O 개입이 적어 CPU burst가 긴 경우
CPU scheduler & Dispatcher
- CPU shceduler
- Ready 상태의 프로세스 중 CPU를 누구한테 줄 지 결정하는 것
- Dispatcher
- CPU를 누구한테 줄 지 결정했으면 해당 프로세스에게 넘기는 역할
- 이 과정을
context switch
라고 함
- CPU 스케줄링이 필요한 경우
- Running → Blocked (ex. I/O 요청하는 시스템콜)
- Running → Ready (ex. 할당 시간 만료로 인한 타이머 인터럽트)
- Blocked → Ready (ex. I/O 완료 후 인터럽트)
- Terminated
1, 4에서의 스케줄링은 강제로 빼앗지 않고 자진 반납하는 nonpreemptive
방식이고, 그 외의 나머지 스케줄링은 CPU를 강제로 빼앗는 preemptive
방식이다.
Scheduling Criteria
- 시스템 입장
- CPU utilization (이용률)
- 전체 시간 중에서 CPU가 놀지 않고 일한 시간의 비율
- keep the CPU as busy as possible
- Throughput (처리량)
- 주어진 시간 동안에 몇 개의 일을 처리했느냐
- number of processes that complete their execution per time until
- CPU utilization (이용률)
- 프로세스 입장 → 시간의 개념
- Turnaround time (소요시간, 반환시간)
- CPU를 쓰러 들어와서 다 쓰고 나갈 때까지 걸린 시간
- amount of time to execute a particular process
- Waiting time (대기 시간)
- CPU를 얻기까지 ready queue에 줄 서서 기다린 시간
- amount of time a process has been waiting in the ready queue
- Response time (응답 시간)
- ready queue에 들어와서 처음으로 CPU를 얻기까지 걸린 시간
- amount of time it takes from when a request was submitted until the first response is produced, not output
- Turnaround time (소요시간, 반환시간)
Scheduling Algorithms
FCFS (First-Come First-Served)
- 먼저 온 순서대로 처리하는 방식 (nonpreemptive)
- CPU를 오래 쓰는 프로세스가 먼저 와서 CPU를 할당 받으면 나머지 프로세스들은 전부 기다려야 하기 때문에 효율적이지 않음
(사진 출처 - UIC)
- 사진 아래처럼 어떤 프로세스가 먼저 실행되냐에 따라 전체 대기 시간에 상당한 영향을 미침
- 문제점
- Convoy effect
- 긴 프로세스 하나 때문에 짧은 프로세스 여러 개가 기다리는 현상
- Convoy effect
SJF (Shortest-Job-First)
- CPU burst가 가장 짧은 프로세스에게 CPU를 부여하는 방식
- minimum average waiting time 보장
- 두 가지 방식
- nonpreemptive
- 일단 CPU를 잡으면 더 짧은 프로세스가 들어와도 CPU burst가 완료될 때까지 CPU를 선점당하지 않음
- preemptive
SRTF
(Shortest-Remaining-Time-First)- CPU를 잡았다 하더라도 더 짧은 프로세스가 들어오면 CPU를 빼앗김
- nonpreemptive
- 문제점
- Starvation
- 짧은 프로세스들로 인해 긴 프로세스가 오랫동안 CPU를 잡지 못하는 현상
- CPU burst time을 미리 알 수 없음
- exponential average : 과거의 CPU 사용 시간을 통해 추정 (estimate)만 가능
- Starvation
Priority Scheduling
- 우선순위가 제일 높은 프로세스에게 CPU 할당 (smallest integer = highest priority)
- 두 가지 방식
- nonpreemptive
- 일단 CPU를 잡으면 더 높은 우선순위를 가진 프로세스가 들어와도 CPU burst가 완료될 때까지 CPU를 선점당하지 않음
- preemptive
- CPU를 잡았다 하더라도 더 높은 우선순위를 가진 프로세스가 들어오면 CPU를 빼앗김
- nonpreemptive
SJF
는 일종의 priority scheduling (priority = predicted next CPU burst time)- 문제점
- Starvation
- 우선순위가 낮은 프로세스는 오랫동안 CPU를 잡지 못하는 현상
- Starvation
- 해결
- Aging
- 아무리 우선순위가 낮은 프로세스라 하더라도 시간이 오래 지나면 우선순위를 높여주는 것
- Aging
Round Robin (RR)
- 각 프로세스는 동일한 크기의 할당 시간 (
time quantum
)을 가짐 - 할당 시간이 지나면 프로세스는 CPU를 빼앗기고 ready queue 맨 뒤에 가서 다시 줄을 섬 (preemptive)
- short response time
- 조금씩 CPU 줬다 뺏었다를 반복하기 때문에 CPU를 최초로 얻기까지 걸리는 시간이 짧음
- n개의 프로세스가 ready queue에 있고 할당 시간이 q time unit인 경우 어떤 프로세스도 (n-1) X q time unit 이상 기다리지 않음
- CPU 할당받으려고 기다리는 시간이 CPU burst time에 비례
- Performance
- q large → FCFS
- q small → context switch 오버헤드 증가
- 일반적으로 SJF보다 average turnaround time이 길지만 response time은 짧음
Multi-Level Queue
- ready queue를 우선순위에 따라 여러 개로 분할
- foreground (interactive)
- background (batch - no human interaction)
- 각 큐는 독립적인 스케줄링 알고리즘을 가짐
- foreground : Round Robin
- background : FCFS
- 큐에 대한 스케줄링 필요
- Fixed priority scheduling
- 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 scheduling
Multi-Level Feedback Queue
- 프로세스가 여러 개로 분할된 ready queue 내에서 다른 큐로 이동 가능
- MLFQ 방식으로
aging
구현 가능 - MLFQ를 정의하는 파라미터들
- queue의 수
- 각 큐의 스케줄링 알고리즘
- process를 상위 큐로 보내는 기준
- process를 하위 큐로 내쫓는 기준
- 프로세스가 CPU 서비스를 받으려할 때 들어갈 큐를 결정하는 기준
- 보통 처음 들어오는 프로세스는 우선순위 가장 높은 큐에 time quantum을 짧게 해서 배치
- 밑에 큐로 갈수록 RR의 할당 시간을 길게, 맨 아래 큐는 FCFS 방식 사용
(사진 출처 - UIC)
Real-time Scheduling
정해진 시간 안에 반드시 실행이 되어야 하는, 즉 deadline
이 있는 프로세스
- Hard real-time systems
- hard real-time task는 정해진 시간 안에 반드시 끝내도록 스케줄링해야 함
- Soft real-time computing (최근)
- soft real-time task는 일반 프로세스에 비해 높은 우선순위를 갖도록해야 함
- deadline을 꼭 보장하지는 못함
Thread Scheduling
- Local scheduling
- user level thread의 경우 운영체제는 스레드의 존재를 모르기 때문에 사용자 수준의 스레드 라이브러리에 의해 어떤 스레드를 스케줄할 지 결정
- OS가 아닌 사용자 프로세스가 직접 어느 스레드한테 CPU를 줄 것인가를 결정
- Global scheduling
- kernel level thread의 경우 일반 프로세스처럼 커널의 단기 스케줄러가 어떤 스레드를 스케줄할 지 결정
참고
'Computer Science > 🔒 Operating System' 카테고리의 다른 글
[운영체제/Operating System] 교착 상태 (Deadlock) (0) | 2021.04.04 |
---|---|
[운영체제/Operating System] 프로세스 동기화 (0) | 2021.04.04 |
[운영체제/OS] 프로세스 관련 system call (0) | 2021.04.02 |
[운영체제/OS] 프로세스 (0) | 2021.04.01 |
[운영체제/OS] 컴퓨터 시스템 구조와 프로그램 실행 (0) | 2021.03.31 |