본문 바로가기

Study/개발일지

[백엔드온라인TIL] cpu 스케쥴링 (58일차)

0.🚶들어가며

 이전 글에서는 프로세스와 스레드에 대해 알아보았었습니다. 프로세스가 CPU에 할당을 받아야 작업을 수행한다고 했었죠. 이때 여러 프로세스 중 누가 CPU의 할당을 받을 것인지에 대한 내용을 다룬 CPU 스케줄링에 대해 글을 작성해보겠습니다.


1.⏰CPU 스케줄링이란?

 이전 글에서 알아봤듯 프로세스는 생성되고 난 뒤 여러 상태를 거치게 됩니다. 운영체제의 CPU 스케줄러는 Ready 상태의 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 결정합니다. 이를 CPU 스케줄링이라 하는 것이죠. 또한 Dispatcher는 CPU 제어권을 CPU 스케줄러에 의해 선택된 프로세스에게 넘깁니다. 이를 Context Switch라고 합니다.

 

CPU 스케줄링은 규모에 따라 장기, 중기, 단기 스케줄링으로 구분됩니다. 이에 대해 먼저 알아보도록 합시다.

1) 장기 스케줄링 (Long-term scheduler)

  • 가장 큰 틀에서 이루어지는 CPU 스케줄링입니다. 고수준 스케줄링, 작업 스케줄링이라고도 합니다.
  • 프로세스에 Memory(및 각종 자원)을 주는 문제를 스케줄링 합니다.
  • 전체 시스템의 부하를 고려하여 작업 요청을 받아들일지, 거부할지에 대한 결정을 합니다. 즉 new 상태의 프로세스를 admitted 하는 작업을 장기 스케줄러가 합니다.
  • 즉, 장기스케줄링의 결정에 따라 시스템 내의 프로세스 총 개수(degree of multiprogramming)가 정해집니다.
  • 최근 운영체제에서는 보통 장기 스케줄러가 없습니다. 프로그램을 실행시키면 곧바로 ready 상태에 돌입하죠.

2) 중기 스케줄링 (Medium-term scheduler, Swapper)

  • 장기스케줄링은 프로세스의 활성화 승인을 다룬다면 중기 스케줄링은 이미 활성화가 된 프로세스들에 대한 관리를 합니다.
  • 시스템의 과부하를 막기 위해 활성화된 프로세스들의 중지 여부를 결정하여 활성화된 프로세스 수를 조절합니다.
  • 즉, 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냅니다.(Swap out)
  • 이 역시 degree of multiprogramming을 제어하는 것이죠.
  • 중기 스케줄링에 의해 중지된 프로세스들은 보류 상태(Suspended, Stopped)가 됩니다.

3) 단기 스케줄링 (Short-term scheduler, CPU scheduler)

  • 가장 작은 단위의 스케줄링을 단기 스케줄링이라고 합니다.
  • 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정합니다.
  • 단기 스케줄러가 어떤 기준에 따라 프로세스를 선택(스케줄링 알고리즘)하고 어느 정도 자원을 배분(Time slice와 관련)할지에 따라 시스템에 큰 영향을 끼칩니다. 
  • 단기 스케줄링은 스케줄링 중에서도 핵심인 부분이라 뒤에서 다룰 내용은 대부분 단기 스케줄링에 대한 내용입니다.

 

# CPU 스케줄링의 목적

 CPU 스케줄링의 목적은 모든 프로세스가 적당히, 공평하게, 효율적으로...(줄여서 적공효..) 자원을 할당받는 것입니다. 하지만 다양한 상황에서 적공효를 만족시킨다는 것은 쉽지 않은 일입니다. 자연스럽게 이를 위한 고려사항들을 떠올리게 되고 그에 맞는 알고리즘들이 설계되었습니다. 이는 글 뒷부분에서 소개하고 적공효로 퉁쳐버린 스케줄링 목적을 조금 더 자세하게 살펴보겠습니다.

  • 공평성 : 프로세스에게 자원을 배분하는 과정이 공평해야 합니다.
  • 효율성 : 시스템 자원이 쉬는 시간이 없어야 합니다. (CPU를 놀게 하면 안 됩니다..)
  • 안정성 : 중요 프로세스들은 우선권을 주어야 합니다. 또한 프로세스가 증가해도 안정적으로 돌아가야 합니다.
  • 확장성 : 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되야합니다.
  • 반응 시간 보장 : 프로세스의 요구가 있을 경우 적절한 시간 안에 반응을 해줘야 합니다.
  • 무한 연기 방지 : 특정 프로세스의 작업이 무한정 연기되면 안 됩니다.

2.🤔스케줄링 시 고려사항

 위에서 살펴본 CPU 스케줄링 목적을 이루기 위해 고려해야 하는 사항들을 소개해보겠습니다.

1) 선점형 스케줄링과 비선점형 스케줄링

  선점(preemptive)이란 '빼앗을 수 있음'을 말합니다. 즉, 선점과 비선점 스케줄링 방식은 어떤 프로세스가 CPU를 할당받으면 이를 운영체제가 강제로 회수할 수 있는 스케줄링 방식인지, 아닌지에 대한 내용입니다.

 

(1) 선점형 스케줄링

 선점형 스케줄링의 경우 운영체제가 필요하다고 판단하면 실행 상태에 있는 프로세스의 작업을 중단시키고 새로운 작업을 시작할 수 있습니다. Timeout 상황, I/O Interrupt, System call 등이 발생한 경우 현재 실행 상태에 있는 프로세스의 CPU를 강제로 회수하고 다른 프로세스에게 CPU를 할당해줄 수 있는 스케줄링 방식입니다.

 

 선점형 스케줄링은 Context switch로 인한 오버헤드가 발생합니다. 그러나 하나의 프로세스가 CPU를 독점한다는 것은 동시에(느낌상) 여러 작업을 할 수 없다는 의미이므로 대부분의 저수준 스케줄러는 선점형 스케줄링 방식을 사용합니다.  

 

(2) 비선점형 스케줄링

 비선점형 스케줄링의 경우 어떤 프로세스가 실행 상태에 들어가면 그 프로세스가 끝나거나 CPU를 자진 반납하는 경우가 아니면 계속 실행되는 것을 말합니다. 이는 Context switch에 대한 오버헤드도 없고 스케줄러가 할 일도 적어져 효율적일 수 있으나 전체 시스템의 처리율이 떨어지게 됩니다.


2) 프로세스 우선순위

 프로세스 간에도 우선순위가 존재할 수 있습니다. 프로세스는 크게 커널 프로세스 일반 프로세스로 나뉘는데 CPU 스케줄러는 보통 커널 프로세스를 높은 우선순위에 둡니다. 커널과 관련된 작업들은 보통 일반 프로세스보다 중요하기 때문이죠. 여기서 우선순위가 높다는 것은 일반적으로 더 빨리 자주 실행된다는 의미입니다. 시스템 자원을 더 많이 받는다는 것이죠. 

 

 일반 프로세스 간에도 우선순위가 존재합니다.  비디오 플레이어와 워드 작업이 같은 우선순위라면 실시간으로 영상을 출력해야 하는 비디오 플레이어가 끊기고 맙니다. 이러한 문제 해결을 위해서는 일반 프로세스 간에도 우선순위를 매겨야 한다는 사실이 합리적임을 알 수 있습니다.


3) CPU bound process와 IO bound process

 이전 글에서도 살펴봤듯 프로세스에는 여러 상태가 있습니다. 이때 실제 작업이 일어나는 것은 실행 상태와 대기 상태입니다. CPU를 사용하는 실행 상태와 입출력을 요청하여 완료되기를 기다리는 대기상태이죠. 이때 CPU를 할당받아 실행하는 작업을 CPU 버스트, 입출력 작업을 I/O 버스트라고 합니다.

 

 위에서 언급한 작업 형태에 따라 CPU 버스트가 많은 프로세스를 CPU bound process, I/O 버스트가 많은 프로세스를 IO bound process라고 합니다. 두 프로세스 간에는 IO bound process를 먼저 실행상태로 옮기는 것이 효율적입니다. IO bound process의 경우 CPU를 할당받아도 금방 대기 상태로 빠지는 반면 CPU bound process의 경우 할당받은 CPU 시간을 전부 사용하는 경우가 많기 때문이죠.

 

 따라서 스케줄링 시 IO bound process의 우선순위를 CPU bound process보다 높이는 것이 시스템 효율 향상에 도움이 됩니다.


4) 전면 프로세스와 후면 프로세스

 전면 프로세스는 GUI를 사용하는 OS에서 화면 맨 앞에 놓인 프로세스를 말합니다. 아마 이 글을 읽고 계신 분들은 브라우저를 통해 제 글을 읽고 계실 테니 브라우저가 전면 프로세스일 겁니다.. 전면 프로세스는 현재 입출력을 사용하는 프로세스이며 사용자와 상호작용이 가능하죠. 그에 반해 후면 프로세스는 사용자와 상호작용이 없는 프로세스입니다. 압축 프로그램 같은 것이 대표적인 예시가 될 수 있습니다.

 

 두 프로세스의 우선순위를 생각해봅시다. 전면 프로세스는 사용자의 요구를 즉각 반응해야 하지만 후면 프로세스는 상호작용이 없습니다. 따라서 전면 프로세스에 우선순위를 더 높게 쳐주는 것이 합리적입니다. 즉, 전면 프로세스가 후면 프로세스보다 CPU를 할당받을 확률이 높습니다.


5) 정리

지금까지 CPU 스케줄링을 할 때 고려할 사항들을 살펴보았습니다. 아래는 각 고려사항에 대한 우선순위를 보여주는 그림입니다.

 

 

 

 

선전 스케줄링과 비선점 스케줄링의 차이를 들어 설명하세요.
비선점 스케줄링 은 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법입니다. 선점 방식보다 스케줄러 호출 빈도가 낮고 문맥 교환에 의한 오버헤드도 적습니다. 일괄처리 시스템에 적합하고, CPU 사용 시간이 긴 하나의 프로세스가 CPU 사용 시간이 짧은 여러 프로세스를 오랫동안 대기시킬 수 있으므로, 처리율이 떨어질 수 있다는 단점도 있습니다.
선점 스케줄링 은 하나의 프로세스가 CPU를 할당 받아 실행하고 있을 때 우선 순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 기법입니다. 모든 프로세스에게 CPU 사용 시간을 동일하게 부여할 수 있으며, 빠른 응답시간을 요하는 대화식 시분할 시스템에 적합하며 긴급한 프로세서를 제어할 수 있습니다.

728x90