반응형

CPU 에 현재 프로세스가 끝난다음 이후 프로세스를 어떤거롤 선택할 것인가?

 

FIFO 는 큐형태를 말하는 것

우선순위큐는 우선순위가 높은것이 먼저 돌아간다

 

선점형 비선점형으로 우선순위가 갈리는데

 

Preemptive : 쫓아내는 것 , 돌아가고 있는 프로세스 쫓아내는 것

Non-preemptive : 못 쫓아내는 것 , 이것은 프로세스가 cpu 를 선점하고 나면 그 프로세스가 릴리즈 끝날때까지 기다린다는 것

 

 

 

 

1,4번의 경우를 보면 자발적으로 wait 으로 가거나 terminate 상태로 간다 즉 non-preemptive 하기 때문에 non-preemptive  나 preemptive를 고민할 필요가 없다

 

2,3 번의 경우는 2번은 돌다가 레디로 가니 쫓아내어지게 되는 것이고 3번은 대기하고 있는것이 준비가 갔을때 준비로간 프로세스 우선순위가 높다면 바로 실행으로 가기 때문에 쫓아내는 형태가 될수 있다

 

 

디스패처(Dispatcher) 란? : 컨텍스트 스위치를 해주는 모듈을 디스패처라고 한다

디스패처는 당연히 빨라야 한다

 

P0, P1 이 컨텍스트 스위칭 할때

 

PCB 란 운영체제가  프로세스를 제어하기 위해 정보를 저장해 놓은 곳으로 프로세스의 상태 정보를 저장하는 구조체이다

Context Switching 할대 필요하다

PCB 는 프로세스 생성 시 만들어지며 주기억장치에 유지된다

 

PCB0 번 블럭과 PCB1 번 블럭이 교체 되면서 컨텍스트 스위칭이 일어난다

그리고 이렇게 교체 되는 딜레이 시간을 dispatch latency 라고 한다 그리고 이 시간은 가금적 짧아야 한다

 


-------PCB에서 유지되는 정보----------
● PID : 프로세스의 고유 번호
● 상태 : 준비, 대기, 실행 등의 상태
● 포인터 : 다음 실행될 프로세스의 포인터
● Register save area : 레지스터 관련 정보
● Priority : 스케줄링 및 프로세스 우선순위
● 할당된 자원 정보
● Account : CPU 사용시간, 실제 사용된 시간
● 입출력 상태 정보
-------------------------------------------




CPU의 레지스터들의 값이 다른 것로 바뀌기 전에 어딘가에 저장을 하고 나가야해요.

이때 PCB에 CPU에서 수행되던 레지스터 값들이 저장이 됩니다. 내가 수행하던 프로세스가
어디까지 수행됐는지(프로그램 카운터), stack pointer의 위치가 어디인지, 그 외 register들의
집합 정보들을 잠시 저장한다는거죠. 어디에? PCB에!

그림을 보면 executing되다가 다른 프로세스 P1)을 수행시키기 위해 PCB0에다가
P0프로세스 정보를 저장하네요. 그리고 레지스터에 PCB1에 저장되어있던 process 1 정보를
가져와 P1을 수행시킵니다.


이런 저장 공간을 PCB라고 하고 사실 이렇게 수행중인 프로세스를 변경할 때 레지스터에
프로세스의 정보가 바뀌는 것을 Context Switching 문맥교환이라고 합니다.

 

 

위 그림은 컨텍스트 스위치가 얼마나 자주일어나는지 알수 있는 내용이다

vmstat 1 3 은 1초에 3번 확인한것

1초에 72번 1초에 73번 1초에 81번은 CW 가 일어났다는 것

 

 

스케줄링 기준

CPU utilization : cup 가 놀지 않고 최대한 CPU 를 돌리는 방식을 말한다

Throughput : 이 수치를 높이는 것인데 단위시간 내에 프로세스의 완결되는 숫자를 높이는 것

Turnaround time : 프로세스가 실행하면서 종료 될때까지 즉 실행에서 종료되는 시간까지의 시간을 최소화 시키는 것

Waiting time : 어떤 프로세스가 Ready Queue 에서 대기 시간을 최소화 시켜주는 것으로 Ready queue  에 있는 대기 시간의 합을 최소화 시켜주는 방식

 

Response time : 응답 시간을 최소화 하는 것 (UI 같이 반응이 즉각 일어 나는 것들의 반응 시간을 최소화 하는것)

 

 

스케줄링 프로블럼 : Ready Queue 에 있는 프로세스 중에서 어떤걸 CPU 에 올릴것인지에 대한 문제 

 

 

해결방법

 

FCFS : 처음 들어온걸 먼저 올려준다

SJF : SRTF  : 의 방식은 짧은 잡을 먼저 올린다

이렇게 둘은 전체의 해당 프로세스의 시간이 있을때 그 시간 전체를 모두다 할당해 주는 방식이다

 

RR :Round-Robin : 시분할로 시간을 분할하여  정해진 시간 만큼 실행되고 해당 시간이 종료되면 다른것이 올라와 실행 되는 방식

 

Priority-based : RR 을 쓰는데 우선순위를 부여하여 선점하는 방식

MLQ : Multi-Level Queue :  경우에 따라서 위의 방식들 중에서 스케줄링 방식을 선택하는 것

MLFQ :  MLQ를 하는데 피드백을 줘서 상황에 따라 더 좋은 걸 선택하려는 방식

 

 

 

 

 

반응형

+ Recent posts