[CS] Chapter 04 CPU 스케줄링 (1편)

Ringo·2024년 5월 30일

Computer Science

목록 보기
6/16
post-thumbnail

📌 스케줄링의 개요

1. 레스토랑 관리자의 스케줄링

CPU 스케줄러는 프로세서 스케줄러라고도 합니다. 스케줄링은 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일을 말합니다.

2. CPU 스케줄링

CPU 스케줄링은 규모에 따라 고수준 스케줄링, 중간 수준 스케줄링, 저수준 스케줄링으로 구분됩니다.

고수준 스케줄링

고수준 스케줄링 (high level scheduling) : 가장 큰 틀에서 이루어지는 CPU 스케줄링

장기 스케줄링, 작업 스케줄링이라고도 합니다.

고수준 스케줄링은 시스템 내의 전체 작업 수를 조절하는 것입니다. 여기서 작업은 운영체제에서 다루는 일의 가장 큰 단위로, 1개 또는 여러 개의 프로세스로 이루어집니다. 고수준 스케줄링 단계에서는 어떤 작업을 시스템이 받아들일지 또는 거부할지를 결정합니다. 고수준 스케줄링에 따라 시스템 내에서 동시에 실행 가능한 프로세스의 총 개수가 정해집니다.

저수준 스케줄링

저수준 스케줄링 (low level scheduling) : 고수준 스케줄링과 반대로 가장 작은 단위의 스케줄링

고수준 스케줄링이 전체 손님 수를 조절하는 단계라면, 저수준 스케줄링은 각 손님의 주문과 그에 따른 요리 제공 순서를 미세하게 조절하는 단계입니다.

CPU 스케줄러 입장에서 저수준 스케줄링어떤 프로세스에게 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 일입니다. 저수준 스케줄링은 아주 짧은 시간에 일어나기 때문에 단기 스케줄링이라고 부릅니다.

CPU 스케줄러는 특별한 명시가 없는 한 저수준 스케줄러를 의미합니다.

중간 수준 스케줄링

중간 수준 스케줄링 (middle level scheduling): 고수준 스케줄링과 저수준 스케줄링 사이에 일어나는 스케줄링

시스템의 부하를 조절하려면 고수준 스케줄링 대신 중간 수준 스케줄링을 고려해야 합니다. 시스템에 과부하가 걸려서 전체 프로세스 수를 조절해야 한다면 이미 활성화된 프로세스 중 일부를 보류 상태로 보냅니다.

중간 수준 스케줄링중지(suspend)와 활성화(active)로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막습니다. 즉 일부 프로세스를 중지 상태로 옮김으로써 나머지 프로세스가 원만하게 작동하도록 지원합니다. 이는 프로세스의 상태 중 보류 상태에 해당하며, 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할을 합니다.

3. 스케줄링의 목적

CPU 스케줄링의 원래 목적은 모든 프로세스가 공평하게 작업하도록 하는 것입니다. 특정 프로세스에 편중되지 않도록 골고루 자원을 배분하기 위해 공평성을 유지하면서도 안정적으로 작동해야 합니다. 즉 특정 프로세스가 시스템 자원을 독점하거나 파괴하는 것을 막기 위해 중요도에 따라 우선순위를 배정해야 합니다. 또한 시스템 자원을 효율적으로 배분하여 전체적인 시스템의 성능을 높여야 합니다.

📌 스케줄링 시 고려 사항

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

선점형 스케줄링 (preemptive scheduling) : 어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식

비선점형 스케줄링 (non-preemptive scheduling) : 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식

선점형 스케줄링에서는 운영체제가 필요하다고 판단하면 실행 상태에 있는 프로세스의 작업을 중단시키고 새로운 작업을 시작할 수 있습니다. 선점형 스케줄링 방식의 대표적인 예로는 인터럽트를 처리하게 하며, 인터럽트 처리가 완료되면 원래의 작업으로 돌아갑니다.

비선점형 스케줄링에서는 어떤 프로세스가 실행 상태에 들어가 CPU를 사용하면 그 프로세스가 종료되거나 자발적으로 대기 상태에 들어가기 전까지는 계속 실행됩니다. 비선점형 스케줄링은 선점형 스케줄링보다 스케줄러의 작업량이 적고 문맥 교환에 의한 낭비도 적습니다. 그러나 CPU 사용 시간이 긴 프로세스 때문에 CPU 사용 시간이 짧은 여러 프로세스가 오랫동안 기다리게 되어 전체 시스템의 처리율이 떨어집니다. 비선점형 스케줄링은 과거의 일괄 작업 시스템에서 사용하던 방식입니다.

2. 프로세스 우선순위

우선순위가 높다는 것은 더 빨리 자주 실행된다는 의미입니다. 준비 상태의 커널 프로세스와 일반 프로세스가 하나씩 있다면 커널 프로세스의 우선순위가 더 높기 때문에 커널 프로세스가 먼저 실행되며 작업이 끝날 때까지 계속 CPU를 사용합니다.

3. CPU 집중 프로세스와 입출력 집중 프로세스

프로세스는 생성된 후 준비, 실행, 대기 상태를 거쳐 완료됩니다. 준비 상태는 CPU를 할당받기 위해 기다리는 상태이므로 실제 작업이 일어나는 상태는 실행 상태와 대기 상태입니다. 프로세스는 CPU를 사용하여 작업하는 실행 상태 또는 입출력을 요청하여 완료되기까지 기다리는 대기 상태에 있습니다. 이때 CPU를 할당받아 실행하는 작업을 CPU 버스트(CPU burst), 입출력 작업을 입출력 버스트(I/O burst)라고 합니다.

프로세스는 위에서 언급한 작업 형태에 따라 CPU 집중 프로세스(CPU bound process)와 입출력 집중 프로세스(I/O bound process)로 나눌 수 있습니다. CPU 집중 프로세스는 수학 연산과 같이 CPU를 많이 사용하는 프로세스로 CPU 버스트가 많습니다. 입출력 집중 프로세스는 저장장치에서 데이터를 복사하는 일과 같이 입출력을 많이 사용하는 프로세스로 입출력 버스트가 많습니다.

스케줄링할 때 입출력 집중 프로세스의 우선순위를 CPU 집중 프로세스보다 높이면 시스템 효율이 향상됩니다. 입출력 집중 프로세스는 CPU를 잠깐 사용한 후 대기 상태로 이동하기 때문에 다른 프로세스가 CPU를 사용할 수 있습니다.

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

전면 프로세스 : GUI를 사용하는 운영체제에서 화면의 맨 앞에 놓인 프로세스

현재 입력과 출력을 사용하는 프로세스이며, 사용자와 상호작용이 가능하여 상호작용 프로세스라고도 합니다.

후면 프로세스 : 사용자와 상호작용이 없는 프로세스

압축 프로그램처럼 사용자의 입력 없이 작동하기 때문에 일괄 작업 프로세스라고도 합니다.

5. 정리

작업의 중요도가 높아 우선순위가 높은 프로세스는 커널 프로세스, 전면 프로세스, 대화형 프로세스, 입출력 집중 프로세스입니다. 반대로 우선순위가 낮은 프로세스는 일반 프로세스, 후면 프로세스, 일괄 작업 프로세스, CPU 집중 프로세스입니다.

📌 다중 큐

1. 준비 상태의 다중 큐

매번 모든 프로세스 제어 블록을 검색하려면 상당히 번거롭습니다.

프로세스의 우선순위를 배정하는 방식에는 고정 우선순위 방식변동 우선순위 방식이 있습니다.

고정 우선순위 방식(static priority) : 운영체제가 프로세스에 우선순위를 부여하면 프로세스가 끝날 때까지 바뀌지 않는 방식

프로세스가 작업하는 동안 우선순위가 변하지 않기 때문에 구현하기 쉽지만, 시스템의 상황이 시시각각 변하는데 우선순위를 고정하면 시스템의 변화에 대응하기 어려워 작업 효율이 떨어집니다.

변동 우선순위 방식 (dynamic priority) : 프로세스 생성 시 부여받은 우선순위가 프로세스 작업 중간에 변하는 방식

이 방식은 구현하기 어렵지만 시스템의 효율성을 높일 수 있습니다.

2. 대기 상태의 다중 큐

대기 상태에서도 다중 큐를 사용합니다. 대기 상태는 입출력이 완료되기를 기다리는 프로세스가 모여 있는 곳입니다. 시스템의 효율을 높이기 위해 대기 상태에서는 같은 입출력을 요구한 프로세스끼리 모아놓습니다. 같은 장치의 입출력을 기다리는 프로세스의 프로세스 제어 블록은 동일한 입출력 큐에 모여 있습니다.

준비 상태의 다중 큐와 대기 상태의 다중 큐 간에 차이가 있습니다. 준비 큐한번에 하나의 프로세스를 꺼내어 CPU를 할당하는 반면, 대기 큐여러 개의 프로세스 제어 블록을 동시에 꺼내어 준비 상태로 옮깁니다. 시스템에는 많은 입출력장치가 있기 때문에 입출력이 동시에 끝날 경우 여러 개의 인터럽트가 한번에 처리 됩니다. 이렇게 동시에 끝나는 인터럽트를 처리하기 위해 인터럽트 벡터(interrupt vector)라는 자료구조를 사용합니다. 인터럽트 벡터에는 동시에 완료된 입출력 정보와 처리 방법이 담겨 있는데, 이 정보에 따라 완료된 프로세스 제어 블록은 모두 준비 상태로 이동합니다.

프로세스 제어 블록은 준비 상태의 다중 큐에 삽입되었다가 CPU 스케줄러에 의해 실행 상태로 옮겨지기도 하고, 입출력 요청이 있으면 대기 상태의 다중 큐에 삽입되기도 합니다. 그리고 입출력이 완료되면 다시 준비 상태의 다중 큐로 이동하는데, 이러한 과정 전체를 CPU 스케줄러가 관리합니다.

profile
끄적끄적…

0개의 댓글