본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제 OS]우선순위 스케줄링(Priority Scheduling) 총정리,장단점, aging 스케줄링, 우선순위 부여기준

[운영체제 목차]

 

안녕하세요!! 오늘은 우선순위 스케줄링에 관한 내용을 들고 왔어요 ㅎㅎ

 

우선순위 스케줄링이란? 우선순위 알고리즘이 나오게 된 흐름!

이전 SJF가 되었던 SRTF가 되었던 이 스케줄링 방식은 우리 컴퓨터 방식에는 적용하기가 힘들다는 단점이 있었어요!!

 

한번 흐름을 다시 볼까요?

waiting time을 줄여야 하는데 waiting time이 FCFS가 좀 컸어요 그래서 FCFS를 사용 못했죠?

근데 waiting time을 줄이려고 SJF를 썼더니 이거는 또 쓸 수가 없어!! 예측하기가 너무 힘들다는 문제가 있었어요. 그 다음에 우리가 살펴볼 알고리즘이 Priority scheduling!!

 

우선순위 스케줄링이란?

Priority scheduling은 말 그대로 우선순위가 높은 프로세스를 먼저 스케줄링 하는거예요.

근데 문제는 뭘까요? 문제는 Priority를 어떻게 주느냐가 이제 문제겠죠!

 

사실 맥락만 바꾸면 이 우선순위 스케줄링은 FCFS가 될 수도 있고 SJF가 될 수도 있는 특징을 지녔어요.

priority를 가장 먼저 온 얘한테 높은 우선순위를 주는게 FCFS고 Cpu burst가 작은 것에 우선순위를 주는 것이 SJF겠죠!! (사진의 세번째 네모가 설명하고 있는 부문이예요)

우리 컴퓨터에서는 priority 스케줄링을 어떻게 주냐면 그 프로세스의 중요도를 기준으로 부여합니다.

 

첫 번째 네모를 보면 우선순위 알고리즘 특징을

'A priority number(integer) is associated with each process'라고 했어요.

그 프로세스의 중요도 별로 우선순위를 준다! 그래서 우선순위 스케줄링은 그 중요도가 높은 프로세스를 먼저 수행을 합니다.

 

자 예를 들어볼까요?

운영체제가 만들어내는 프로세스들이 있어요, 운영체제 서비스.

그거하고 여러분들이 프로그램을 실행해서 만드는 프로세스가 있어요.

 

그 두 개의 프로세스 중 어떤 프로세스의 우선순위를 높이는 것이 맞을까요?ㅎㅎㅎ

운영체제가 판단하길, 여러분들이 실행시키는 것들은 하찮은 것들입니다 ㅎㅎㅎ. (실제로 제일 낮은 우선순위를 갖거든요..주륵)

운영체제가 만들어내는 프로세스들의 우선순위를 일반적으로 더 높이 줍니다.

프로세스의 어떤 의미, 의미(sementic)에 따라 우선순위를 주고 높은 프로세스를 스케줄링 하는 방법이 Priority scheduling이라 합니다

 

우선순위는 어떻게 정해지나요?

Priorities can be defined either internally or externally.

우선순위는 내부적으로 정의될 수도 있고 외부적으로 정의될 수도 있습니다.

 

내부적으로 정의된 우선순위는, 프로세스의 우선순위를 계산하기 위해 어떤 측정가능한 변수들을 사용해요. 예를 들면, 시간 제한, 메모리 요구량, 열린 파일의 수, 평균 I/O burst비율부터 평균 CPU 버스트 비율까지! 다 우선순위를 계산하는데 종합적으로 사용됩니다.

 

External 우선순위는 말 그대로 운영체제가 스스로 정하는게 아니라 바깥에 이미 설정된 기준을 따르는거예요!

우리가 프로세스의 우선순위를 임의로 설정할 수도 있는데 당근 external설정에 해당되겠죠?

the type and amount of funds being paid for computer use, the department sponsoring the work, and other,oftenpolitical,factors.

프로세스의 중요도, 자원의 유형이나 들어가는 자원의 비용, 사용자 선호도, 가끔은 정치적 요소들부터..등등

 

preemptive vs nonpreemptive

Priority scheduling can be either preemptive or nonpreemptive.

우선순위 스케줄링 또한 선점방식과 비선점 방식 두 방법이 가능합니다.

preemptive 우선순위 스케줄링

: 만약 어떤 프로세스가 ready queue에 도착했는데 이 프로세스가 가지는 우선순위가 현재 돌아가고 있는 프로세스보다 높을 경우 기존에 하고 있던애를 중단시키고 먼저 수행되는!! 이게 선점 방식이 되겠죠?

nonpreemptive 우선순위 스케줄링

:비선점 방식은 중단을 못시킨다고 했잖아요! ㅎㅎ 즉 더 높은 우선순위가 들어오면 ready queue의 앞에 집어넣고 끝날때까지 기다립니다. 그럼 바로 다음에 수행될 수 있겠죠!

 

 

우선순위 문제 보고 가기

문제를 볼까요?

 

낮은 숫자가 높은 우선순위를 갖는다는 전제하에 프로세스가 어떤 순서로 스케줄링 되는지 살펴봅시다. 평균기다림 시간을 구해볼까요?ㅎㅎ

 

일단 가장 높은 우선순위를 갖는 P2가 먼저 수행되겠죠? 그리고 그 다음인 P5, 그 다음으로 우선순위가 높은 P1이 순서대로 수행됩니다. ㅎㅎ 정답 구하는건 너무 쉬워요

 

그래서 평균 waiting time은 ( 0+1+6+16+18)/5 = 8.2ms가 될거예요

 

 

우선순위 알고리즘의 단점?! 문제점 - starvation

 

이렇게 보면 여기 문제가 starvation이라고 나와 있듯이 우선순위가 낮은 프로세스는 높은 프로세스가 있는 한은 절대 실행을 못하는 것이 문제가 됩니다. ㅎㅎㅎ

무한히 기다리는 것=starvation.

 

쉬운 설명을 위해 예를 들어볼게요.

여러분들이 식당에 가서 줄을 서가지고 밥을 먹는데 거기에서의 스케줄링은 Priority scheduling이라고 가정해봅시다. (고등학교 때 학년별로 급식을 먹지 않았었나요? ㅎㅎ 저희는 그랬는뎅...이 때 3학년은 2학년보다 높은 우선순위를 갖기 때문이었겠죠 ㅎㅎ)

즉 중요도에 의해서 Priority를 다 매겨놨어요. 선생님들은 당연히 우선순위가 더 높겠죠? 그 다음에 3학년들 학년별로.. 이렇게 우선순위를 가진다고 할게요. 1학년이 줄 서있었는데 계속 자기보다 높은 우선순위를 가진 사람들이 앞으로 들어오면(인원이 제한 된 수가 아니라면) 자신은 스케줄링을 못 받아가지고 계속 쫄쫄 굶겠죠? starvation이 되는 거죠!!

 

우선순위 알고리즘 문제 starvation 해결 방법- aging 에이징

어떻게 해결해야 될까요? 알고리즘으로 만들어보는 걸 생각해 봅시다.

Priority를 나이로 주자고 했다면 내 앞에 한 사람이 들어가면 내 나이가 한 살 더 많아지는 방법이 있을 수 있겠죠. 또 한명이 들어가면 내 나이가 많아지고 많아지고 하다보면 50대 선생님이 오더라도 내가 더 나이가 많아질 수 있을거예요. 이래서 aging입니다!

solution이 aging. aging이라는 알고리즘이 존재를 합니다. 이런식으로 Priority scheduling의 단점을 해결할 수도 있다는거~!

 

우선순위 스케줄링의 구조

 

priority별로 queue가 있는데

참고로 어떤 책에서는 priority는 0번이 제일 높고 어떤 책에서는 Priority 0번이 제일 낮을 수도 있어요.

Priority가 0번이 더 높은 경우가 더 많이 있는데 이 그림은 4가 제일 높은거겠죠?ㅎㅎ.

Priority 별로 queue가 있고 priority가 높은 쪽에 있는 process가 ready가 있으면 다른 것들은 수행이 안됩니다. 이 때 Priority가 똑같은 것들은 어떻게 해야 될까? 우리가 지금 배운 것으로는 FCFS로 할 수도 있고 FJS로 할 수도 있고~!! 근데 지금 현재 우리가 취하고 있는 방법은 Round Robin이다.

 

즉 현재 컴퓨터 시스템이 사용하는 방법은 '우선순위스케줄링 +라운드 로빈' 방식!!

 

후 오늘도 긴 포스팅이었다. 정말 시간이 훅훅 지나가는 것 같아요!

가끔 운영체제 포스팅 보고 도움 많이 됐다는 댓글을 볼때마다 뿌듯하답니다 ㅎㅎ 그래서 배운지 오래됐지만 쪼끔씩이나마 틈틈히 써서 완성시켜보려고 해요! 시간이 넘 지나서 혹시 잘못된 점이 있을 수도, 오타가 있을 수도 있어요 ㅎㅎ 알려주시면 감사하겠습니다.

도움이 됐다면 보답광고&공감&댓글은 어떤가요?ㅎㅎ 오늘도 좋은 하루 되세요~!!