CPU 스케줄링

오늘은 운영체제를 접하면 처음 배우게 되는 CPU 스케줄링과 관련된 내용을 살펴보겠습니다.

CPU 스케줄링이란?

우리가 사용하는 컴퓨터는 동시에 많은 작업을 진행합니다. 우리는 인터넷을 서핑하며 동시에 카카오톡으로 소통하고 유튜브로 동영상을 켜놓고 워드로 문서를 작업합니다. 현대의 컴퓨터는 이렇게 수 많은 종류의 작업을 진행하게 됩니다.

이런 일이 어떻게 가능할까요? 그것은 바로 컴퓨터가 어떤 일을 어떻게 처리할지 알고 있기 때문입니다.

먼저 용어를 정리합시다. 우리가 컴퓨터로 하는 수 많은 작업들을 우리는 프로세스라고 부릅니다. 쉽게 말하면 우리가 실행하는 프로그램이죠.

컴퓨터는 CPU라고 하는 장치가 존재합니다. 이 장치가 프로세스를 처리하면 우리는 컴퓨터에서 제공해주는 작업의 결과물을 보고 느낄 수 있게 됩니다.

따라서 컴퓨터는 다양한 프로세스를 효과적으로 CPU에 전달하여 우리가 컴퓨터를 효율적으로 사용할 수 있도록 도와주어야 합니다.

이렇게 어떤 프로세스가 얼마나 CPU를 사용할지 관리해주는 것을 CPU 스케줄링이라고 합니다.

다시 말하면 CPU 스케줄링이란 프로세스가 생성된 후 종료될 때 까지 모든 상태 변화를 조정하는 일을 말합니다.

그리고 이러한 CPU 스케줄링은 그 범위에 따라 일반적으로 3가지 단계로 나뉩니다.

CPU 스케줄링의 단계

  • 고수준 스케줄링 (Long-term Scheduling)

    가장 큰 틀에서 이루어지는 CPU 스케줄링으로 시스템 내의 전체 프로세스 수를 조절합니다.
  • 중간 수준 스케줄링 (Medium-term Scheduling)

    프로세스의 활성화, 중지 상태를 조절하는 스케줄링으로 전체 시스템의 활성화 된(저수준 스케줄링을 받는)프로세스의 수를 조절하여 저수준 스케줄링이 완만히 이루어지도록 조절해주는 역할을 합니다.
  • 저수준 스케줄링(Short-term Scheduling)

    어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기상태로 보낼지 등을 결정하는 스케줄링입니다. 우리가 공부하는 대부분의 내용을 차지하고 있습니다.

스케줄링의 고려사항

  • 선점형 스케줄링

    선점형 스케줄링이란 프로세스가 CPU를 할당받아 작업하고 있다고 하더라도 스케줄러가 강제로 CPU를 빼앗을 수 있는 스케줄링 방법을 말합니다. CPU 사용의 독점을 방지할 수 있고 여러 프로세스를 한 번에 처리되는 것 처럼 보이게 할 수 있으나 프로세스를 계속 바꿔주는 과정(문맥 교환)에서 오버헤드가 발생할 수 있습니다.
  • 비선점형 스케줄링

    프로세스가 CPU를 점유하고 있는 동안 빼앗을 수 없는 방식입니다. 오버헤드가 적지만, 한 번에 한가지 작업만 처리할 수 있다는 단점이 있습니다.
  • CPU 집중 프로세스 (CPU bound process)

    CPU를 많이 사용하여 CPU burst가 많은 프로세스입니다.
  • 입출력 집중 프로세스 (I/O bound process)

    입출력을 많이 사용해 I/O burst가 많은 프로세스입니다.
    일반적으로 I/O bound process에 CPU를 먼저 할당하는 방식이 유리합니다. 왜냐하면 CPU를 조금 사용하다가 금방 I/O하러 나가버리기 때문에 다른 프로세스가 CPU를 사용할 수 있기 때문입니다.ㅠ
  • 전면 프로세스

    GUI를 사용하는 운영체제에서 화면의 맨 앞에 놓여있는 프로세스를 의미합니다. 맨 앞에 놓여있는 프로세스는 입출력이 사용되고, 사용자와 상호작용이 가능해야 합니다.
  • 후면 프로세스

    사용자의 입력 없이 작동하는 프로세스입니다.
  • 프로세스 우선순위

    위에서 우리는 스케줄링시 고려해야할 특성을 살펴봤습니다. 일반적인 프로세스의 우선순위는 다음과 같습니다.

Process Status (프로세스 상태)

CPU 스케줄링 알고리즘을 이해하려면 우선 스케줄링을 받는 대상인 프로세스가 어떤 상태를 가지고 변화하는지 알아야 합니다.

우선 우리가 카카오톡, 유튜브 등 어떤 작업을 컴퓨터에서 시작하면 새로운 프로세스가 탄생하게 됩니다.생성된 프로세스는 메모리에 적재되고 프로세스를 관리하는 PCB(Process Control Block)이 할당됩니다.
할당된 프로세스는 바로 CPU를 점유하지 않고 우선 대기상태에 들어가게 됩니다.그러다 스케줄러가 dispatch라는 행위를 하면 프로세스는 CPU를 점유하게 되고 running상태에 들어갑니다. 이부분이 바로 프로세스가 처리되는 부분입니다.
일반적으로 CPU를 할당받은 프로세스는 일정량의 작업을 진행하면 다른 프로세스에게 CPU를 넘겨야 합니다. 프로세스는 Interupt를 받게 되면 사용하고 있던 CPU를 반납하고 다시 대기상태에 들어가게 됩니다.
가끔 실행중인 프로세스는 I/O나 이벤트 인터럽트를 받게 됩니다. 이는 쉽게 생각하면 프린터기를 이용하는 상황이라고 생각하면 됩니다. 실행중인 프로세스가 이러한 인터럽트를 받으면 입출력 전용 큐에 따로 저장되어 입출력 장치의 처리를 기다리게 되는데 이러한 과정을 waiting이라고 합니다.
당연히 입출력 작업이 완료되면 프로세스는 다시 ready상태로 돌아가 CPU를 기다리게 됩니다. 우리가 사용하는 수 많은 프로세스는 이러한 라이프 사이클을 가지고 처리됩니다.
그러다 프로세스가 종료(exit)되면 프로세스는 terminated상태 즉, 제거상태가 됩니다.

여기까지가 활성화된 프로세스의 라이프 사이클입니다. 우리가 사용하는 많은 프로세스는 이러한 상태변화를 수행하며 CPU에 의해 우리에게 보여지게 됩니다.

CPU 스케줄링이란 바로 이러한 상태를 어떻게 하면 효과적으로 조절하여 사용자가 컴퓨터를 잘 사용할 수 있게 만들어줄지에 관한 개념입니다.

즉, 어떻게 여러가지 작업을 처리해야 사용자가 동시에 많은 프로세스를 사용하도록(또는 동시에 하는 것 처럼 느끼도록)할 수 있는지 고민하는 과정이죠.

그러나 본질은 바로 이러한 상태변화를 조절한다는 내용입니다.

지금까지 CPU스케줄링이 가지는 의의와 프로세스의 라이프사이클에 관하여 살펴봤습니다. 다음 포스팅에선 이러한 프로세스를 스케줄링하는 알고리즘이 어떤 것들이 있는지 하나씩 살펴보겠습니다.

profile
웹 개발을 공부하고 있는 윤석주입니다.

0개의 댓글