-
[운영체제 Step 7] - 프로세스 스케줄링 본문
지난 시간엔 스레드의 관리와 스레드의 개념에 대해 알아보았었습니다.
이번 시간엔 프로세스가 시스템에서 어떻게 스케줄링되어서 자원을 할당 받는지 공부하겠습니다.
중요한건 CPU에 할당 받는 부분에 대해서 집중적으로 한 번 알아보겠습니다.
우리가 프로세스 스케줄링을 왜 해야하는지 알고 계신가요???
우리가 사용하는 시스템은 하나의 프로세스만 가지고 있지 않습니다.
즉 우리 시스템은 다중 프로그래밍이기 때문에 여러 프로세스가 존재합니다.
그렇기 때문에 자원을 나누어서 사용해야할 필요가 있습니다.
이를 적절하게, 효율적으로 사용하려면 자원을 할당 할 프로세스를 선택할 때 "스케줄링" 이라는 개념이 사용됩니다.
이 중 자원을 효율적으로 관리하기 위해 총 2가지로 나눌 수 있습니다.
- 시간 분할 관리 (time sharing)
- 공간 분할 관리 (space sharing)
로 구분할 수 있습니다.
시간 분할 관리는 하나의 CPU에 하나의 프로세스만 들어갈 수 있기 때문에 언제, 누가 어느 시간에 사용할지 시간을 분배하는 방법입니다. 대표적으로 프로세서가 있고 그것을 관리해주는 것을 바로 프로세스 스케줄링이라고 부릅니다.
바로 이번 시간에 배울 내용입니다.
공간 분할 관리는 하나의 자원을 분할해서 동시에 사용하는 것입니다.
이와 같이 하나의 메모리를 프로세스가 분할해서 사용할 때를 공간 분할 관리의 한 예라고 할 수 있겠습니다.
이 메모리에 대한 이야기는 다음의 프로세스가 끝날 때 한 번 설명드리겠습니다.
자 그럼 지금까지 프로세스 스케줄링에 대한 개념을 읊어보았구요.
이제 스케줄링을 왜 하는지, 어떤 목적과 장점이 있는지 알아보도록 하겠습니다.
가장 근본적인 목표는 시스템의 성능을 향상시키기 위해서 수행합니다.
하지만 이 성능이란건 꽤나 모호한 편입니다.
그래서 이 성능이란 것을 제대로 정의해야 성능이 좋은지 알 수 있습니다.
다양한 지표들이 있지만 이 3가지가 가장 대표적입니다.
- 응답 시간 (response time)
- 작업 처리량 (throughput)
- 자원 활용도 (resource utilization)
첫 번째 응답 시간은 작업 요청을 보냈을 때 응답을 받을 때 까지의 시간이 되겠습니다.
두 번째로 작업 처리량은 단위 시간동안 얼마나 많은 일을 할 수 있는지를 의미합니다.
세 번째로 자원활용도는 얼마나 그 자원을 주어진 시간동안 활용할 수 있는지를 의미합니다.
즉, Tr / Tc (활용된 시간 / 주어진 시간)으로도 쓸 수 있습니다.
이 지표 중 뭐가 제일 중요할까요?
아마 고민이 많이 되실겁니다.
정답은 없습니다. 시스템의 목적에 고려하여 성능에 좋은 지표를 각각 선택하면 되기 때문입니다.
이것 외에도 성능 지표는 많습니다.
한 번씩 읽어 보시어 참고하시면 되겠습니다.
자 스케줄링을 본격적으로 공부하기에 앞서 몇 가지의 용어를 정리하고 넘어가겠습니다.
- 대기시간
- 응답시간
- 반환시간
이라는 건데요.
프로세스가 도착지점에 도착해서 실행 시작하기 위한 이 시간을 "대기 시간 (Waiting time)" 이라고 부릅니다.
그리고 작업이 수행이 되다가 첫 번째 응답(출력)이 일어날 때를 "응답 시간 (Response time)" 이라고 부릅니다.
그리고 프로세스가 실행되고 종료될 때 까지를 "실행 시간 (Burst time)" 이라고 부릅니다.
마지막으로 프로세스가 도착하고 종료될 때 까지를 "반환시간 (Turn-around time)" 이라고 부릅니다.
지금까지 스케줄링의 목적을 알아보았습니다.
이 스케줄링의 목적 중 성능 향상이라는 것이 있었는데 이 성능을 향상시키는 지표가 굉장히 다양하고 시스템의 목적에 따라 다를 수 있기 때문에 시스템에 맞는 목적을 고려하여 스케줄링을 하는 것이 좋다라고 말씀 드리고 싶습니다.
그 다음으로 스케줄링을 할 때 기준과 어떤 단계를 거치는지 어떻게 구분하는지를 알아보겠습니다.
스케줄링 기준입니다.
예를들어 스케줄링을 하는데에 있어서 둘 중 하나를 선택해야 한다고 할 때 여러가지 성격이 있을 것입니다.
비용이 더 적은 것이 있을 것이고 처리속도가 더 빠른 것이 있을 수도 있을 것입니다.
이것도 시스템의 목적을 잘 고려하여 선택할 수 있겠습니다.
제일 먼저 프로세스의 특성을 기준으로 알아보겠습니다.
어떤 프로세스가 작업하는걸 가만히 살펴보면 CPU를 열심히 쓰다가 I/O를 쓰다가, 또 CPU를 쓰다가 I/O가 되었다가를 반복하게 됩니다. 즉, 프로세스 수행은 CPU사용과 I/O 대기로 이루어집니다.
근데 어떤 녀석은 CPU Burst(CPU 사용 시간)가 더 긴 경우도 있을 것이고 I/O Burst(I/O 대기 시간)가 더 긴 경우도 있을 것입니다.
이 때 CPU Burst가 더 길 때를 Compute-Bounded Process (연산에 의해서 성능이 bounded된다는 뜻)라고 부르고
반면에 I/O Burst가 더 길 때를 I/O Bounded Process (I/O에 의해서 성능이 bounded된다는 뜻) 라고 부릅니다.
따라서 Burst time은 스케줄링의 기준에서 중요한 기준 중 하나로 손꼽힙니다.
이어서 스케줄링의 단계를 설명드리겠습니다.
스케줄링의 단계는 발생하는 빈도에 의해 나뉘어 집니다.
Long-term은 장기 스케줄링이니까 어감상 가끔 일어난다는 느낌이고 Mid-term은 종종이란 느낌이고 Short-term은 자주 일어난다는 느낌으로 이해하시면 됩니다.
그럼 어떤 녀석들이 이렇게 일어나는지 알아보겠습니다.
첫 번째 Long-term 스케줄링입니다.
가끔 일어나는 스케줄링인 Long term Scheduling은 Job 스케줄링을 이야기하기도 합니다.
프로세스에 대한 개념을 얘기할 때 프로세스라는건 커널에 등록되어서 프로세스가 된다고 했습니다. 그래서 시스템에 플세스가 여럿이 대기하고 있을 때 이 중에서 누구를 등록시켜줄지 결정하는걸 잡스케줄링이라고 하구요. 이 때의 빈도 수는 당연히 적을겁니다.
이 Long-term 스케줄링이 가지는 의미는 다중프로그래밍 정도를 조절하는데에도 쓰입니다.
즉, 시스템 내의 프로세스 수를 조절한다고 이해하시면 되겠습니다.
시스템 안에 100개의 프로세스가 있다고 해보겠습니다.
100개를 혼자서 다 관리하기란 힘들지요. 그래서 몇 개씩을 시스템에 넣어줄지를 결정하는 것을 다중프로그래밍 정도 조절이라고 부르고 이것이 시스템 성능과 밀접한 연관을 짓게 됩니다.
그럼 이 선택되는 프로세스는 무작위로 선택되지 않을 것입니다.
당연히 우선순위가 존재하겠지요.
따라서 여기서 I/O Bounded와 Compute Bounded 프로세스가 사용됩니다.
결론적으로 시스템의 최고 효율을 내기 위해선 이것들을 적절히 잘 섞어서 선택해야 합니다.
만약 어느 한쪽으로 치우치게 된다면 어느 한쪽은 계속 I/O 상태이거나 한쪽은 Burst일 수 있습니다.
시스템 입장에선 굉장히 비효율적이겠지요.
그러므로 이들을 잘 섞어야만 최고의 효율을 낼 수 있을 것입니다.
또한 아까 설명드렸던 시분할 시스템 (time sharing 시스템) 에서는 Long-term 스케줄링이 덜중요합니다.
왜냐하면 빈도수가 적기 때문에 상대적으로 다른 스케줄링기법보다 중요도가 낮다는 특징도 알아두면 좋겠습니다.
그다음 Mid-term 스케줄링을 알아보겠습니다.
suspended ready상태에 프로세스가 있다고 가정해보겠습니다.
그럼 이 때 프로세스를 ready 상태에 올리기 위해 적절하게 메모리에 할당을 해야할 것입니다.
이 때 일어나는 것이 Mid-term 스케줄링입니다.
비교적 잡 스케줄링보다 빈도수가 많습니다.
즉, mid-term 스케줄링은 suspended ready 였던 것을 ready상태로 올리는 단계입니다. 그럼 이 ready상태에서 더 나아가서 running상태로 만드는 것도 있겠지요?
네 그것이 바로 Short-term 스케줄링입니다.
ready상태였던 프로세스를 running상태로 처리하기 위해, CPU에 프로세스를 할당하기 위해 일어나는 기법이 바로 Short-term 스케줄링입니다.
그걸 우리는 프로세스 스케줄링이라고도 부릅니다.
그래서 가장 자주 일어날테고요. 이 기법이 느려지면 시스템의 속도도 당연히 느려지게 될 것입니다.
따라서 연산 속도가 가장 빨라야 한다는 특징이 있습니다.
만약 이 속도가 느리면 어떻게 될까요?
예를 들어 CPU가 100ms/s을 쓰는데 10ms/s가 더 필요하다고 가정해보면 프로세스가 일하는데 걸리는 시간은 110ms/s입니다. 그러면 전체 속도 110ms/s 중에 10이 오버헤드가 일어나므로 약 9%는 오버헤드가 됩니다.
다시 정리하면 Short-term 스케줄링이라는 것은 Process 스케줄링이고 정말 중요한 부분입니다.
그래서 이제 이것에 대해 집중적으로 알아볼 것입니다.
스케줄링의 기본적인 단계를 간략하게 나타낸 것입니다.
그럼 스케줄링이 선택할 수 있는 정책이 어떤 것이 있는지 알아보겠습니다.
정책이 뭔가요???
뉴스에 나오는 정책은 어떤 의미인가요?
정책은 "어떤 것을 수행하는 기준, 방법" 으로 정리할 수 있습니다.
즉, 스케줄링을 어떤 방법으로 설명할 것인가를 스케줄링 정책이라고 합니다.
크게 선점이냐 비선점이냐로 나눌 수 있고 우선순위에 따라서 나눌 수 있습니다.
첫 번째, 선점과 비선점에 대해 알아보겠습니다.
"선점" 이란 누군가 와서 자기 것을 빼앗을 수 있다는 내용이고
"비선점"은 누군가 와서 못 뺏는다는 의미로 이해하시면 되겠습니다.
비선점의 경우에는 어떤 할당 받은 자원에 대해서 본인이 스스로 반납할 때 까지 계속해서 사용할 수 있습니다.
그로 인해서 여러 장단점이 존재하는데요.
제일 먼저 눈에 보이는 효과로는 Context Switching이 적어지기 때문에 비용이 절감된다는 효과가 있습니다.
하지만 응답시간이 길어지면 다른 프로세스의 응답시간도 길어질 수 있고 다른 급한 프로세스가 들어와도 먼저 들어온 비선점 프로세스 때문에 우선 순위가 역전될 수 있다는 단점이 존재합니다.
그리고 선점 스케줄링은 타의에 의해 자원을 빼앗길 수 있습니다.
즉, 우선순위가 높은 프로세스가 등장하게 되면 본인의 할당 시간이 종료될 수 있습니다.
그로 인해 응답성이 높아질 수 있습니다. 그리고 시 분할 시스템에선 당연히 선점 스케줄링을 사용해야 할 것입니다. 그리고 real-time system처럼 급한 일이 들어오면 빨리 처리해줄 수 있는, 응답성이 높은 스케줄링을 선택해야 하므로 선점 스케줄링을 이용해야 할 것입니다.
반면에, 이렇게 되면 프로세스가 자주 바뀌기 때문에 Context switching이 자주 발생하여 오버헤드가 커져서 비용이 증가한다는 단점이 존재할 것입니다.
두 번째 정책
Priority (우선순위)입니다.
대표적으로
- 정적 우선순위
- 동적 우선순위
대표적으로 한 번 우선순위가 바뀌지 않는다는 정적 우선순위는 프로세스가 생성되면 계속 우선순위가 유지됩니다. 그러므로 구현이 쉽고 오버헤드가 적게 일어난다는 장점이 있습니다. 하지만 시스템의 환경 변화에 대해 대응이 어렵다는 단점이 있습니다.
그리고 두 번째로 동적 우선순위는 프로세스의 상태 변화에 따라 우선순위가 변경될 수 있습니다. 그래서 계속 변경해주는 것을 고려해야 하므로 구현이 복잡하고 오버헤드도 커지게 됩니다. 또한 시스템 환경 변화에 유연하게 대응이 가능하다는 장점이 있습니다.
정리하자면 정적 우선순위는 볼펜으로 글씨를 쓴 것이 안지워지고 계속 종이에 남아있는 반면 동적 우선순위는 연필로 작성했을 경우 지웠다 썼다를 반복함으로써 비용이 증가하므로 각기 장단점이 존재한다고 이해할 수 있겠습니다.
이 우선순위는 우리가 어떻게 사용하고 있을까요?
Ctrl + Alt + Delete를 눌러보시면 작업 관리자에서 프로세스의 우선순위를 결정할 수 있습니다.
감사합니다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제 Step 9] - 스케줄링 알고리즘 (SPN, SRTN, HRRN, MLQ, MFQ) (0) | 2021.12.09 |
---|---|
[운영체제 Step8] - 프로세스 스케줄링 알고리즘 (0) | 2021.12.08 |
[운영체제 Step 6] - 스레드 관리 (0) | 2021.12.07 |
[운영체제 Step 5] - 인터럽트(Interrupt) (0) | 2021.12.03 |
[운영체제 Step 4] - 프로세스 관리 (0) | 2021.12.03 |