11-01) CPU 스케줄링 개요

모든 프로세스는 CPU를 필요로 한다!
이러한 프로세스에 대해서 공정하고 합리적이게 CPU 자원을 할당하기 위해서는 운영체제는 각각의 결정을 내려야 한다.

이렇게 운영체제가 CPU 자원을 프로세스에게 공정하고 합리적이에 배분하는 것을 CPU 스케줄링(scheduling) 이라 한다.

😤CPU 스케줄링은 성능과도 아주 밀접한 관계를 가지고 있다.

< 프로세스 우선순위>

  • CPU를 사용하고 싶어하는 프로세스들이 차례로 돌아가며 처리하는 것은 어떨까 ?
    -> 빨리 처리해야하는 프로세스가 있기 때문에, 즉 프로세스마다 우선순위가 다르기 때문에 효율적이지 않다!

우선순위가 높은 프로세스에는 대표적으로 입출력 작업이 많은 프로세스 가 있고 왜? 입출력 작업이 많은 프로세스를 먼저 실행하는 것이 더 효율적일까??

그 이유는 일반적으로 대부분 프로세스들은 CPU와 입출력장치를 모두 사용하며 실행한다. 즉 실행상태와 대기상태를 반복한다

CPU 명령어 실행 -> 보조기억장치 저장 -> CPU 명령어 실행 -> 화면 출력 -> CPU 명령어 실행 -> ...

프로세스 마다 입출력 장치를 이용하는 시간과 CPU를 이용하는 시간의 양의 차이가 당연히 존재하는데,

  • 비디오 재생이나 디스크 백업과 같이 입출력 작업이 많은 프로세스를 입출력 집중 프로세스(I/O bound process) 라고 한다.
  • 복잡한 수학연산, 컴파일, 그래픽 작업 처리와 같이 CPU 작업이 많은 프로세르를 CPU 집중형 프로세스(CPU bound process) 라 한다.

🙄여기서 입출력 작업이 많은 프로세스의 우선순위가 CPU 작업이 많은 프로세스보다 우선순위가 높다

CPU버스트(burst)와 입출력 버스트
"-----------------------------------실행 흐름--------------------------->>>>"
| CPU 사용 ( CPU버스트 ) | 입출력장치 사용( IO버스트 ) | CPU 사용 | • • •

  • 이와 같이 입출력 버스트가 빈번하게 일어나는 프로세스는 입출력 집중 프로세스라고 한다.

왜냐하면 입출력 작업은 대기상태에 많이 머무르게 되기 때문이다. 그래서 각각의 상황에 맞게 CPU를 배분하는 것이 효율적이다 !

PCB에 운영체제는 각 프로세스의 우선순위를 명시하고 CPU는 자연스럽게 순서에 맞게 프로세스를 실행한다.

프로세스 우선순위 직접 확인하기

윈도우에서 Process Explorer라는 소프트웨어를 통해 우선순위 확인가능!

< 스케줄링 큐 >

PCB에 적힌 우선순위를 운영체제가 일일이 확인하는 것은 비효율적이다. CPU를 원하는 프로세는 한두개가 아니고 또 프로세스가 생겨날 수 도 있기 때문이다.

게다가 CPU 자원뿐만아니라 메모리에 적재되고 싶어하는 프로세스도 존재하기 때문에, 운영체제가 매번 PCB를 확인하고 순서를 정하는 것은 비효율적이다

그래서 운영체제가 사용하는 것은 스케줄링 큐 (scheduling queue) 이다. 참고로 스케줄링 큐는 자료구조의 큐와 같이 선입선출 방식일 필요는 없다.

운영체제가 관리하는 대부분의 자원은 이렇게 큐로 관리된다. 또한 대표적인 큐로는

  • 준비큐(ready queue) : CPU를 이용하기 위해 기다리는 큐
  • 대기큐(waiting queue) : 입출력장치를 이용하기 위해 기다리는 큐

다만 먼저 삽입되었다고 해서 먼저 처리하는 것은 아님. 우선순위에 따라서 처리된다.

  • VIP(우선순위가 높음) : 먼저 처리가 된다

예시 ( CPU를 번갈아가며 실행 )
준비상태에서 접어든 프로세스가 디스패치 됨 -> 실행
-> 실행이 끝나면 타이머 인터럽트가 발생해 준비상태로 간다. 만약 입출력장치를 사용해야 된다면 대기상태로 돌입한다.
-> 입출력작업이 완료 되면 인터럽트 신호 발생하고 준비상태로 넘어간다.

대기큐도 여러개가 있다.

  • 같은 장치를 요구한 프로세스들은 같은 큐에서 대기
  • 예로들어 프린터를 요구한 프로세스는 프린터 대기큐에 입출력 작업이 완료를 대기함
  • 만약 입출력이 완료되었다면 완료 인터럽트가 발생, 운영체제는 대기큐에서 작업이 완료된 PCB를 찾는다.
  • 이후, 해당 PCB를 준비상태로 변경한 뒤 대기큐에서 제거 및 준비큐로 이동시킨다.

프로세스 상태 다이어그램

< 선점형과 비선점형 스케줄링 >

만약 어떤 프로세스가 급한 요청을 한다면????
이럴때 두가지 방법이 있따

  • 현재 CPU 자원을 빼앗아 다른 프로세스를 할당 -> 선점형 스케줄링
  • 현재 CPU 작업이 끝날때까지 급한 프로세스를 대기 -> 비선점형 스케줄링

선점형 스케줄링(preemptive scheduling)

  • 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식이다

  • 장점은 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골고루 자원을 분배 할 수 있따.
    -> 프로세스마다 정해진 시간만큼 CPU를 사용하고 정해진 시간을 모두 소비하면 타이머 인터럽트가 발생하여 운영체제가 해당 프로세스로부터 CPU자원을 빼앗아 다른 프로세스를 주는 방식은 선점형 스케줄링의 일종이다.

  • 다만 단점은 그만큼 컨텍스트 스위칭(문맥교환)과정에서 오버헤드가 발생할 수 있다.

비선점형 스케줄링(non- preemptive scheduling)

  • 하나의 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식이다.
  • 장점 : 선점형 프로세스에 비해 문백교환으로 인한 오버헤드가 적다.
  • 단점 : 모든 프로세스가 골고루 자원을 이용하기가 어렵다.

현재 대부분 운영체제는 선점형 스케줄링 방식을 이용한다.

😎 크롬에서의 처리방식

profile
HelloWorld에서 RealWorld로

0개의 댓글