OS : CPU Scheduling & Context Switch (microC/ OS-2)

2022. 4. 14. 09:45CS/운영체제

CPU Scheduling

CPU 자원을 얼마나 오래? 누구에게 할당할 것인가?

Goal

fairness

모든 프로세스는 모두 cpu를 할당할 수 있어야 함. (특정 프로세스가 CPU를 할당받지 못하는 것을 indefinite starvation이라고 부름.)

 

response time

생성부터 종료까지 귀결되어야 함. 짧은 평균 response time

 

minimize CPU idle time

CPU가 노는 시간이 없어야 함.

 

guarantee deadline

실시간 프로세스를 적시적으로 제약해주어야함. 

 

Non-preemptive Scheduling

비선점 스케쥴링. 한번 프로세스가 CPU를 얻으면 , 다른 누군가에게 CPU를 강제로 뺏기지 못함.

프로세스가 자발적으로 CPU를 릴리즈하기 전까지!

 

FCFS (FIrst Come First Serve) : ready 상태가 되는 순서에 따라서 CPU가 할당 됨.

 

짧은 실행 시간을 가진 프로세스가 오래 기다리게 될 수도 있음

 

SJF (Shortest Job First) : 짧은 실행시간을 가진 프로세스에게 CPU를 할당함.

SJF는 비선점 스케쥴링 방식에서 최적의 평균 대기 시간을 가짐.

하지만 indefinite starvation 문제가 발생할 수도 있음. (실행시간이 짧은 프로세스가 계속 실행되서 상대적으로 긴 프로세스가  CPU할당을 못 받음.)

또한 각 프로세스의 실행 시간을 추정하는 것이 쉬운일이 아님.

Preemption

CPU는 언제든지 다른 프로세스에 의해서 점유될 수 있음.

Round Robin 

FCFS처럼 ready state가 된 순서에 따라서 CPU가 할당됨.

각 프로세스는 CPU에게 일정 시간을 보장받음.

이 일정 시간이 끝나면 context switch를 해서 순서에 따라 다른 프로세스에게 CPU가 할당이 됨.

짧은 실행 시간을 가진 프로세스는 짧은 대기 시간을 가지고, 긴 실행 시간을 가진 프로세스는 긴 대기 시간을 가짐.

시분할 시스템에 적합하다.

 

 

Priority based scheduling 

프로세스는 다른 우선 순위를 갖는다. 높은 우선 순위에 따라서 CPU는 할당됨.

같은 우선 순위를 갖는다면, RR이 적용됨.

Static priority와 Dynamic priority가 있음.

background process는 좀 더 나중에.. foreground process가 좀 더 우선 순위가 높음.

Minimize CPU idle time

스케쥴링 정책에서 프로세스는 이벤트를 기다리는 프로세스들은 CPU를 릴리즈하고, 즉시 block 상태가 됩니다.

오직 ready 프로세스가 CPU를 얻을 수 있다. 이는 모든 CPU 스케쥴링 정책에 활용됨.

Context Switch

CPU가 최근 프로세스에서 다른 프로세스로 주어질 때 이를 context switch, 문맥교환이라고 한다.

비선점, 선점 스케쥴링 방식에서 공통적으로 프로세스가 block이 되거나 종료될 때, 일어난다.

선점 스케쥴링 방식은 RR이 일어나기 때문에 좀 더 빈번하게 일어난다.

프로세스가 CPU를 빼앗기고 다시 주어져도 연속적으로 실행되는 것처럼 느껴짐.

문맥 교환 중에는 반드시 일어나야 하는 작업이 있다.

그 전의 프로세스의 문맥을 저장해야 하고, 새로운 프로세스를 위한 저장된 문맥을 다시 불러와야 한다.

문맥이란 CPU register values (PC, SP, PSW, general purpose registers 등등)을 말한다.

변수 등이 다른 프로세스가 참조하므로 값이 달라진다. 그렇기 때문에 이전의 정보 (변수에 저장된 값, 다음 코드 등 레지스터 값)을 저장하는 것.

문맥 교환 시간은 오버헤드이다. (비용 발생) 자주 발생하면 성능이 떨어진다.

 

 

반응형

'CS > 운영체제' 카테고리의 다른 글

LRU 구현하기  (0) 2022.05.17
순환 리스트로 구현한 라운드 로빈 스케쥴러 (C언어)  (0) 2022.05.17
OS : 프로세스 구현 (microC/ OS-2)  (0) 2022.04.14
OS : Thread (microC/ OS-2)  (0) 2022.04.14
OS : Process (microC/ OS-2)  (0) 2022.04.14