이번에는 스케줄링에 대해서 다뤄볼거예요

스케줄링에서는 이전의 포스트에도 언급한 적이 있는데
Ready queue 중에 실행시킬 프로세스를 하나 선택하는 것을 스케줄링이라고 해요!
이걸 다르게 말하면, Ready queue에 있는 프로세스들을 내가 스케줄링 할 순서대로 정렬하는 거죠.
정렬을 한 번 하면 제일 앞에 있는 것부터 하나하나씩 실행하면 되는거죠
여러분들도 사실 매일매일 스케줄링을 하면서 살고 있어요? 내가 오늘 뭘하고 뭘해야할지 내일 뭐할지 등등...
이것도 마찬가지입니다! 그래서 스케줄링이라고 해요
Dispatcher와 스케줄링을 합쳐서 넓은 의미의 스케줄링이라고 합니다.
고르는 작업을 스케줄링, 고른 프로세스를 CPU에 올리는 것을 dispatch!
dispatch 일을 하는 아이를 dispatcher라고 부릅니다.
FCFS, SJF, RR 등 줄 세우는 방법에 따라 여러 가지 스케줄링 알고리즘이 제안되고 연구되어왔어요.
이러한 스케줄링 등이 나오게 된 배경은 무엇인지, 어떤 알고리즘인지 차근차근 알아볼 예정입니다.
Scheduling Criteria
이제 작업할 프로세스를 고르는 거라는 것을 스케줄링이라고 부른다는 것은 알았어요!
그래서 그 프로세스들 중에 어떤 애를 고르는거야? 그 많은 스케줄링 알고리즘들 중에 뭐가 가장 좋은건데? 라는 의문이 발생하죠.
즉 스케줄링 알고리즘이 일을 처리하는 데 있어서 좋다 나쁘다 평가를 하는 기준이 있어야 할거예요.
그러한 평가의 척도를 scheduling criteria라고 부릅니다.
1. CPU utilization
"CPU가 놀지 않고 얼마나 많이 사용되고 있는가!"를 말합니다. CPU는 비싼 자원이라 CPU가 노는 일 없이 많이 일 할 수 있도록 좋은 알고리즘이에요. 자세한 내용은 알고리즘별로 예시를 들면서 상세히 설명할 예정이니 스케줄링에서 이런게 중요하구하고나 대략적인 이해만 하면 됩니다!
2. Throughput = 처리양
Throughput이라는 말은 단위시간당 처리하는 일의 양을 말해요(네트워크에서는 단위 시간당 전송한 양을 의미)
Mbps, Kbps 이런 것들이 네트워크에서 얘기하는 throughput이고 우리 CPU 측면에서의 throughput은 instructions per second라고 해서 초당 몇 million의 명령을 수행했는가 이런 단위를 말해요 여기서는 주어진 시간 동안 몇 개의 프로세스를 수행했는가가 되겠죠!
3. Turnaround time
이걸 수행해줘! 라고 요청한 다음에 끝날 때까지 시간을 말합니다. 빨리 끝날수록 당연히 더 좋은 알고리즘이겠죠?!
time이 세 개나(turnaround time, waiting time, response time) 나오니까 헷갈리지 않게 차이점을 잘 정리해두세요!
4. Waiting time
내가 '지금 이거를 실행해줘'라고 요청을 했는데 다른 애가 실행되고 있어서 내가 기다려야 하는 시간이에요.
즉 ready queue에서 running이 되기 위해 기다리는 시간을 말합니다.
I/O요청의 경우 다른 사람 때문에 기다리는 게 아니라 나 때문에 기다리는거니까 어쩔 수 없는 거고
다른 사람 때문에 내가 기다리는 시간을 waiting time이라고 합니다.
5. Response time
대화 형으로 동작할 때 얘가 나한테 응답을 주는 시간을 말해요.
이거는 3번과 헷갈릴 수 있으므로 쉽게 예시를 들어서 설명을 해보도록 할게요
아주아주 큰 압축 파일을 하고 있다고 생각합시다. 근데 프로그램이 3초 동안 가만히 있어요
그럼 얘가 지금 압축을 하고 있는건지 아니면 도대체 뻑나서 죽은거지 궁금하겠죠?! 보통 사람들은 일반적으로 2초가 넘으면 궁금해한다고 합니다.ㅎㅎ
그래서 2초 이전에 "나 지금 죽은거 아니고 작업 중인거야~"라고 알려주면 아 얘가 열심히 압축 중이구나 알 수 있겠죠?!
그 알려주는 거 그게 response time입니다.
즉 이런 time들은 당연히 줄일 수록 좋겠죠?!
반대로 throughput하고 CPU utilization은 늘릴수록 좋습니다!
잠깐 쉬어가는 광고타임!! 언제나 꿀같은 보상은 저를 춤추게 합니다 헤헤
스케줄링은 이것이 전부?!
아니다! CPU뿐만 아니라 다양한 곳에 존재
지금까지 살펴본 것은 정확히는 CPU스케줄링이예요
사실 우리 컴퓨터 시스템에서는 스케줄링이 아주 많은 곳에서 발생을 합니다. 아래 내용은 예시일 뿐이니, 모르는 내용이면 넘어가도 좋아요!
나중에 디스크 관리 부문에 들어갈 때 다시 살펴보긴 하겠지만, 디스크에서도 (하드디스크, SSD등) 데이터를 읽는 작업을 하겠죠?! 특히 PC가 아닌 서버 같은 환경에서는 디스크에서 데이터를 읽는 요청이 엄청 나게 많이 발생을 합니다. 그럼 이것을 어떤 순서로 읽어야지 디스크의 순서가 가장 높을 수 있을까?! 이것이 디스크 스케줄링입니다!
이 외에도 데이터를 저장하고 관리하는 데이터베이스에서 어떤 트랜잭션이 엄청나게 많이 걸려오는데 어떤 순서로 실행을 해야 할까
이것도 이제 스케줄링을 해야 합니다.
또 네트워크에 패킷을 보내야 하는데 네트워크에 엄청나게 많은 패킷이 와! 그러면 어떤 순서로 보내야 하는가 이것을 네트워크에서는 패킷 스케줄링이라고 합니다.
즉 스케줄링은 꼭 CPU에서만 국한되는 것이 아니라 컴퓨터 시스템의 아주 많은 부분에서 나오는 데다가, 이제 앞으로 배울 알고리즘들이 기본적으로 그런 개념은 다 똑같이 사용할 수 있다! 컴퓨터 전반에 걸친 스케줄링에 대해 살펴본다고 생각할 수 있기 때문에 중요한 내용들입니다!
다음 게시글에서는 스케줄링의 목표와 피해야 할 starvation 에 대해서 살펴볼게요
도움이 됐다면 공감 꾹
공감과 댓글은 지식 공유의 힘이 됩니다 ;)
'별걸다하는 IT > 운영체제 OS' 카테고리의 다른 글
[운영체제 IPC]메세지 교환(Message passing) vs 데이터 공유(Shared memory) 프로세스간 통신! (2) | 2019.01.27 |
---|---|
운영체제(Operating System : OS)란 ? 운영체제 종류와 목적, OS 정복 (24) | 2019.01.23 |
[운영체제]프로세스 상태(Process State-ready, waiting etc) (11) | 2019.01.22 |
[운영체제]프로세스와 프로그램 차이는? (Process vs Program) (2) | 2019.01.22 |
[운영체제]교착상태 처리방법(Handling deadlocks) 예방법, 해결방안 (3) | 2019.01.22 |
최신 댓글