본문 바로가기

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

[운영체제OS] 장기스케줄러 vs 중기스케줄러 vs 단기스케줄러에 대해 알아보자! long, medium, short scheduler 차이점 들어봤뉘

[양햄찌가 알려주는 운영체제 완전정복 목차 링크모음]

안녕하세요 ㅎㅎ 오랜만에 다시 운영체제 관련 포스팅을 들고 왔습니다

 

저번시간에 프로세스의 상태에 대해서 얘기하고,,

그 다음에 아주 아주 중요한 컨텍스트 스위칭을 다루면서 PCB에 대해서 진행을 했었는데요~

오늘은 이후 스케줄링에 대해 자세히 들어가기 전, 운영체제 스케줄링이 발전에 온 역사를 들여다보며 스케줄러를 분류해보는 시간을 가지려고 합니다. ㅎㅎ

 

혹시 너무 오랜만이라~~

컨텍스트 스위칭(context switching)과 PCB가 기억나지 않는 분은 꼭! 아래 포스팅을 먼저 읽고 옵시다!

▼운영체제 컨텍스트 스위칭과 PCB: jhnyang.tistory.com/33

 

[운영체제]PCB (Process Control Block)란? PCB 정보 & Context Switching 문맥교환 & Overhead 오버헤드

운영체제 목차 프로세스의 정의와 프로세스 상태에 대한 이해를 기반으로 하고 있습니다. 헷갈리시는 분은 이전 포스팅 보고 오기 프로세스를 조금 어렵게(?) 이렇게 표현하기도 해요 프로세스

jhnyang.tistory.com

스케줄러의 종류

제가 맨날 스케줄러 스케줄러 하니까 스케줄러가 하나만 있는줄 알았죠?(??ㅎㅎ ) 

예전에는 스케줄러를 주로 Long term과 Short term 스케줄러로 나눠서 얘기를 했었어요. 

먼저 말하자면 현재는 사실, short term 스케줄러 하나만 남아서 그냥 스케줄러라고 불러도 다 통용이 되었던건데, 과거에는 스케줄러도 종류가 있었습니다!

누누히 얘기했듯 우리는 당연히~! 그 흐름을 알 필요가 있죠 ㅎㅎ

 

스케줄러는 3개로 나눠서 정리해볼거예요.

 

1. Long-Term Scheduler 장기 스케줄러

2. Short-Term Scheduler 단기 스케줄러

3. Medium-Term Scheduler 중기 스케줄러

 

장기 스케줄러(Long-Term Scheduler 롱텀스케줄러)란 무엇일까

그래서 장기스케줄러 그놈이 무엇이냐!

자 내가 지금 수행해야 할 job이 10개라고 합시다. 그런데 메모리에는 6개밖에 올릴 수 없는 상황이예요. 흠 그러면 당연히 10개 중 6개를 골라서 올려놔야겠죠?? 10개 중 어떤 녀석들로 골라서 메모리에 올릴까! 이게 장기스케줄러가 하는일입니다. job을 고르는거라 해서 long-term scheduler를 job scheduler라고도 해요.

The long-term scheduler, or job scheduler, selects processes from this pool and loads them into memory for execution.

장기스케줄러(또는 잡 스케줄러라고도 불리는)는 풀(pool)로부터 프로세스들을 선별하고 실행을 위해 메모리에 적재합니다. 

 

전에 배웠던 작업과 연결해보면, READY QUEUE에 적재하는 스케줄러가 장기스케줄러겠죠.

근대 막 아무나 넣으면 되냐! 당연히 안되겠죠.

CPU bound process라는건 CPU가 쭉 작업해줘야 하는 즉 CPU가 계산을 해줘야 하는비중이 큰 프로세스를 말하고 I/O bound process는 입출력을 많이 요구하는 프로세스를 말하는데요.

만약 I/O bound 중심의 프로세스들만 쭉 적재시켜버리면, 입출력을 기다리느라 노는 CPU들이 많아질꺼고,,

그렇다고 CPU bound 프로세스들만 적재시켜버리면 사용자와 상호적이지 못하니 실시간적인 의미가 없겠죠.

 

It is important that the long-term scheduler select a good process mix of I/O-bound and CPU bound processes.

결국 제일 중요한건 적절한 비율의 혼합이노라! ㅎㅎ 이것 또한 long-term 스케줄러가 셀렉해서 올려주는거죠.

단기 스케줄러(Short-Term Scheduler 숏텀스케줄러)란 무엇일까

중기스케줄러는 장기/단기 다음에 나온거거든요 그러므로 그 다음으로 단기 스케줄러에 대해 알아볼까요~?

자 롱텀 스케줄러에 의해 6개가 메모리에 있어요, 근데 실제 CPU가 수행하는건 하나죠! 그럼 요 6개 중 결국 또 한번 하나를 골라야 하는데 이걸 고르는 애가 Short-Term Scheduler라 합니다. 결국 CPU를 차지할 녀석을 스케줄링 해주는 것이기 때문에 다른말로 CPU Scheduler라고도 해요.

The short-term scheduler, or CPU scheduler, selects from among the processes that are ready to execute and allocates the CPU to one of them

단기스케줄러(또는 CPU 스케줄러라고도 불리는)는 실행이 준비된 프로세스들 중 하나를 선별해 CPU에게 할당합니다.

 

그럼 단기 스케줄러는 왜 단기라는 이름이 붙었을까요?? 단기 장기?

사진출처: https://afteracademy.com/blog/what-is-long-term-short-term-and-medium-term-scheduler

CPU는 놀지 않게 하는게 제일 중요하죠!! A라는 프로세스가 수행되다가 사용자의 입력을 기다리야 하는 때가 되면 그걸 그대로 기다리고 있음 당근 비싼 CPU 낭비예요. (이전에 프로세스 상태 다들 기억하시죠?) 

기다리는 동안 CPU에 수행되는 애를 B로 교체해서 수행해줄거예요. 그러다 또 I/O가 입력되면 그 프로세스를 다시 이어 수행하기 위해 CPU로 불러오겠죠! 이 외에도 time sharing으로 스케줄링 된다던가 해도 짧게 교체되겠죠. 

 

Often the short-term scheduler executes at least once every 100 milliseconds.

즉 이 스케줄러는 최소 매100밀리세컨즈마다 수행되는데 이렇게 짧은 텀마다 수행되기 때문에 단기 스케줄러라고 하는겁니다.

the long term scheduler may need to be invoked only when a process leaves the system.

반면에 장기 스케줄러 같은 경우는 메모리에 올라간 프로세스가 끝날때 새로 다시 채워 올려준다던가, 프로세스가 너무 많으면 때에 따라 올리지 않고 비워놓던가 하기 때문에 당연히 텀이 더 길 수밖에 없어요. 

 

장기 스케줄러는 요즘에 없다고?!

아까 메모리 허용범위는 6개라면 10개 중 6개의 프로세스를 골라주는게 장기 스케줄러라고 했었죠?!

그런데, 요즘에는 10개가 실행 준비가 되면 메모리로 10개가 다 올라옵니다.

왜 이게 무조건 되는걸까요?! 그야 이전에는 없었던 virtual memory management가 발달(?)되었기 때문이죠 ㅎㅎ 이 가상메모리관리가 뭐냐, 실제 물리적으로는 제한이 있지만 virtual 가상이라는건 제한이 없는거죠. 마치 메모리가 무한으로 있는 것처럼(실제 무한인건 아닙니다) 운영체제가 서비스를 한다는 겁니다. (뒤에 가면 이 원리에 대해 자세히 배웁니다 ㅎㅎ) 결국, 메모리가 무한이라는건 10개 중 6개만 올릴 수 있는 상황 자체가 없다는거고 그러니까 실행될 프로세스는 일단 다 메모리에 올라오는 거죠. 

즉~~~~~ 오늘날에는 long term scheduling은 의미가 없다! long term이 있어야 short term이 있는건데, long term이 없으니까 오늘날엔 그냥 CPU scheduling이라고 합니다. 

 

중기 스케줄러(Medium-Term Scheduler)란 무엇인가

후후 저의 자세한 설명으로 단기 장기 스케줄러는 완벽히 이해가 되었으리라 믿습니다!

고럼 중기 스케줄러는 무엇일까~? 중기스케줄러는 이제 거꾸로 Swapper라고 얘기하기도 합니다.

단기 스케줄러와 장기 스케줄러 이후에 생긴 것이긴 하나 이것도 사실 요즘 운영체제에는 없는거예요.

 

지금 장기 스케줄러에 의해 10개 프로그램 중 6개를 올려서 수행하고 있다고 가정합시다.

그리고 CPU에서 이 6개를 수행하려고 했더니 이 6개가 CPU가 감당하기엔 너무 많은것 같아요(CPU가 프로세스들을 번갈아 교체하면서 처리하겠죠?) 암튼 프로세스가 좀 많아서 문제가 생겼어요.

그러면 어떡할까요.! 이 6개 중 2개를 내려보내면 다른 프로세스들이 좀 더 빨리 돌아갈거예요. 여기 이 6개 중 뭘 골라서 내려보내야 할까 이걸 고르는게 중기스케줄러 (=Swapper)라고 합니다. 

중기 스케줄러는 프로세스를 내릴 때 우선순위가 가장 낮은 프로세스나 일정 시간 동안 활성되지 않았던 프로세스들을 내리겠죠 ㅎㅎ

The key idea behind a medium-term scheduler is that sometimes it can be advantageous to remove a process from memory (and from active contention for the CPU) and thus reduce the degree of multiprogramming.

중기 스케줄러의 핵심은 메모리로부터 프로세스를 제거함으로써 멀티프로그래밍 개수(DOM)를 제어해 더 좋을 수 있다는 데서 나온다. (CPU에 대한 활발한 논쟁으로부터) 

 

이후 포스팅에도 추가적으로 설명이 되긴 할텐데, 이렇게 필요에 따라 프로세스를 내리고 (swapping out) 다시 올리지고 (swapping in) 그런걸 swapping이라고 해요. 이런걸 하는게 중기 스케줄러기 때문에 Swapper라고도 부르는 거랍니다. 

위에서 설명했듯 현재 개념은 가상메모리개념이기 때문에 중기 스케줄러도 또한 사용되지 않아요 ㅎㅎ

(하지만 이런 비슷한 아이디어가 결국 확장되어서 VMM에서 사용되는 거랍니다~! swap이란 개념인 현재까지도 사용되고 있는 개념이니까요. 그러므로 발전 과정의 흐름을 알아두이 매우 중요해요)  

 

스케줄러 종류 정리 

장기 스케줄러

- 상위 (High level, long term) 스케줄링, 작업 스케줄링(Job 스케줄링)

- 어떤 직업이 시스템의 자원을 차지할 것인지 결정 (큐에 적재)

 

단기 스케줄러

- 하위 스케줄링, CPU 스케줄링, 프로세스 스케줄링이라고도 함

- CPU 스케줄러인 디스패처에 의해 동작됨 (프로세스에 CPU할당) 

 

중기 스케줄러

- 어떤 프로세스들이 CPU를 할당받을 것인지 결정

- CPU를 사용하려는 프로세스 간 중재하여 일시 보류 & 재활성화

from 정보기 필기 이론서

 

오늘은 여기까지입니다. 오늘 또한 누군가에게 유익한 포스팅이었기를 바라면서 이만 마치도록 할게요

공감/댓글/광고클릭 등은 열심히 정보를 공유하고자 하는 저에게 큰 동기가 됩니다. 또 봐용~

  • 빵빵 2021.03.08 11:18

    이해하기 쉽게 잘 정리하셨네요 ! 좋은 글 감사합니다

  • 빙글 2021.03.17 20:57

    안녕하세요!! 마지막에 중기 스케쥴러 정리하신 것중에 어떤 프로세스들이 cpu를 할당 받을 지 결정하는게 아니라 프로세스 메모리를 회수하고 메모리 공간을 확보하는 목적 아닌가요?

    • IT 양햄찌(jhnyang) 2021.03.17 23:10 신고

      넵 회수하고 메모리 공간을 확보하는게 중기 스케줄러의 역할이 맞습니다. 해당 정리문은 정보기 책에서 따온 부분인데, 중기스케줄러가 할당 받을 프로세스들을 냅두고 그 외 상황에 따라 동적으로 조절하기 때문에 그렇게 표현한 것 같네요.