운영체제의 CPU 스케쥴러
는 READY 상태의 프로세스 중 어떤 프로세스
에게
CPU를 할당할지 결정한다.
Dispatcher는 CPU 제어권을 CPU 스케쥴러에 의해 선택된 프로세스에게 넘긴다
.
이를 Context Switching
이라고한다.
고수준 스케쥴링
, 작업 스케쥴링
이라고도 함.승인할지
, 거부할지
결정함.장기 스케쥴러가 없다
!중기 스케쥴링
은 이미 활성화
된 프로세스를 관리한다.중지 여부를 결정
해 활성화된 프로세스 수를 조절한다.메모리에서 디스크로 쫓아내는 역할
도 맡는다.(Swap out)degree of multiprogramming
을 조절한다.보류상태(stopped, suspended)
가 된다.단기 스케쥴링
이라고 한다.CPU를 할당할 지(Running)
, 어떤 프로세스를 대기 상태(Wait)
로 보낼지 결정한다.모든 프로세스가 적당히, 공평하게, 효율적으로 자원을 할당받도록 한다.
공평성
효율성
안정성
확장성
반응 시간 보장
무한 연기 방지
어떤 프로세스가 CPU를 할당받을 때, 이를 운영체제가 강제로 회수할 수 있는지에 따라
선점형과 비선점형으로 나뉜다.
운영체제가 필요하다고 판단되면 실행 상태의 프로세스 작업을 중단
시키고 새로운 작업 시작한다.
보통 TIMEOUT 상황, I/O interrupt, System Call등 발생시 CPU 강제 회수 절차
에 돌입한다.
이 과정에 의해 발생하는 Context Switching
으로 인한 오버헤드가 발생한다.
그러나 하나의 프로세스가 독점시, 멀티 태스킹을 못하므로 대부분 저수준 스케쥴러는 선점형 스케쥴러를 사용한다.
어떤 프로세스가 실행 상태에 들어가면 그 프로세스가 끝나거나 CPU를 자진 반납하는 경우가 아니라면 해당 프로세스가 CPU 점유한다.
Context Switching
으로 인한 오버헤드도 없고, 스케쥴러가 할 일이 적어 효율적일수 있으나,
전체 시스템 처리율
이 떨어진다.
프로세스는 커널 프로세스와 일반 프로세스로 나뉘는 데, 커널 프로세스의 우선순위가 높다.
일반 프로세스끼리도 우선순위가 나뉜다.
워드 프로그램과 영상 프로그램이 동시 실행되었을 때, 우선순위가 같다면 영상이 끊기는 현상이 발생한다.
프로세스에는 여러 상태가 존재한다.
실행 상태(Running)일때와 대기 상태(Ready)일때 실제 작업이 발생한다.
실행 상태
는 CPU를 사용하는 상태이고,대기 상태
는 입출력 작업이 완료되기를 기다리는 작업이 이루어진다.프로세스가 CPU를 사용하여 연산하는 구간을 CPU Burst
,
입출력 요청을 수행하고 완료되기를 기다리는 구간을 I/O Burst
라고한다.
CPU Bound 프로세스
I/O Bound 프로세스
스케쥴링 관점에서는 I/O Bound 프로세스를 우선적으로 실행 상태로 옮기는 것이 더 효율적이다.
I/O Bound 프로세스는 CPU를 잠깐만 사용하고 즉시 I/O 요청으로 대기 상태로 전환되므로
CPU를 다른 프로세스에게 빠르게 넘길 수 있다.
전면 프로세스
는 GUI를 사용하는 OS에서 화면 제일 앞에 놓인 프로세스를 의미한다.
전면 프로세스는 현재 입출력을 사용
하는 프로세스이며 사용자와 상호작용이 가능
하다.
후면 프로세스는 사용자와 상호작용 없는
프로세스다. 예시) 압축 프로그램 등
전면 프로세스는 사용자의 요구를 즉각 처리한다.
반면에 후면 프로세스는 상호작용이 없다.
-> 따라서 전면 프로세스의 우선순위가 높다.
시스템 입장에서의 성능 척도는 CPU를 쉬지않고 계속 실행하는 걸 뜻한다.
CPU Utilization
(CPU 이용률)
전체 시간 중 CPU가 일한 시간의 비율
Throughput
(처리량)
단위 시간당 처리량. 즉, 단위 시간당 프로세스를 몇개 완료했는 지 뜻한다.
사용자 입장에서는 자신이 요청한 작업이 최대한 빨리 처리되는 것을 뜻한다.
Waiting Time
(대기 시간)
프로세스가 Ready Queue에서 기다린 시간
Response Time
(응답 시간)
프로세스가 최초로 CPU를 얻기까지 걸린 시간
Turnaround Time
(소요 시간, 반환 시간)
프로세스가 처음 도착해서 끝나기까지 걸린 시간
먼저 온 프로세스
를 먼저 처리
해주는 방식.
비선점형
이다.
도착한 프로세스 순서에 따라 average-waiting time이 크게 달라진다.
먼저 온 프로세스의 cpu 할당이 오래걸리는 경우, 그 뒤 프로세스들이 다 기다려야한다.
FCFS 알고리즘을 개선한 방식
CPU를 가장 짧게 쓰는 프로세스
에게 CPU를 먼저 할당한다.
waiting time
측면에서는 최적의 방법이다.
-> minimum average wating time
보장한다!
비선점형, 선점형 둘 다 가능하다.
* 비선점형 동작 방식
은 프로세스가 CPU 할당받으면 CPU burst 완료될 때까지 CPU 소유한다.
선점형 동작 방식
은 실행중인 프로세스의 남은 burst 타임보다단점
* Starvation
CPU burst 시간이 긴 프로세스는 영원히 CPU 를 못 가지는 경우가 생긴다.
정확히 계산할 수 없다
.프로세스에 우선순위 값
을 설정해 스케쥴링하는 방식
SJF 방식도 CPU burst 시간에 우선순위를 매긴 방식이다!
-> 따라서 SJF스케쥴링도 우선순위 스케줄링에 포함된다
SJF처럼 비선점형, 선점형 모두 구현이 가능하다.
SJF처럼 starvation 문제가 생길 수 있다.
->aging
이라는 기법으로 해결한다. 프로세스가 기다리는 시간이 늘어날 수록 우선순위를 높이는 방식이다.
각 프료세스에 동일한 크기의 시간(time slice)
할당해줌
할당 시간이 지나면 프로세스의 CPU 제어 강제로 뺏고
Ready Queue 에 넣어준다.
이 방식은 n개의 프로세스가 ready Queue에 있고, time slice가 t일 때,
모든 프로세스는 (n-1)*t
이상 기다리지 않게한다.
Time Slice가 너무 커진다면 FCFS 알고리즘
이 되어버리고,
너무 짧다면 context switching이 빈번히 일어나
오버헤드가 커진다.
Time Slice
를 I/O Bound 프로세스의 CPU Burst 시간 정도로 잡게된다면 합리적이다.
보통 10ms~ 100ms 사이이다.
RR은 SJF보다 turnaround time(프로세스 끝날때까지 걸리는 시간)은 길지만,
Response time이 짧다. 따라서 interactive한 상황이면 장점이다!
Ready Queue를 여러 개로 분할해 작업한다.
우선순위가 높은 큐
에는 System 프로세스나 interactive 프로세스들을 삽입하고,
CPU Bound 프로세스의 경우 후순위 큐
에 삽입한다.
각 큐마다 독립적인 스케쥴링 알고리즘
을 적용해 효율성을 높인다.
Interactive 프로세스
들이 많은 큐에는 RR 알고리즘
을 적용하고,
Batch 프로세스
들이 있는 큐에는 FCFS 알고리즘
을 사용하는 식으로
각 프로세스의 성격에 맞게 처리한다.
각 큐들에 대한 스케쥴링이 필요하다!
-> 가장 우선순위 높은 큐부터 비워나가는 방식과 각 큐마다 CPU시간을 적절한 비율로 할당하는 경우가 존재한다.
-> 전자
의 경우 우선순위 높은 프로세스부터 빠르게 처리 가능하지만,
Starvation 생길 위험이 있어 후자
를 통해 보완하는 식이다.
여러 큐로 나눈 점에서 Multilevel Queue
와 동일하다.
다른 점은 프로세스가 다른 큐로 이동
이 가능하다.
우선순위 낮은 큐에 있는 프로세스가 다른 큐로 이동가능하다는 점이 일종의 Aging 기법
이다.
프로세스가 다른 큐로 이동하는 기준은 다양하다.