Uncategorized

1 4 1 2 CPU 스케쥴링 및 문맥교환(Context-switching)

Written by

🚀 **이 문서는 보다 쉽게 이해할 수 있도록 정리되었습니다.**

CPU 스케쥴링의 개념
CPU를 스케쥴링 한다는 것은 어떤 쓰레드가 어떤 우선순위로 CPU를 얼만큼 사용할 것인지 결정하고 수행하는 과정이다. 또 다른 관점에서 보면 CPU스케쥴링 한다는 것은 쓰레드가 작업을 처리하기 위해 중앙처리를 할당 받는 정책을 계획하고 처리하는 방식이다.

CPU 스케쥴링의 목적
시간당 처리되는 프로세스의 수(throughput)를 높이고 CPU의 효율을 높여주기 위함이다. 프로세스가 CPU를 획득해서 작업이 종료 될 때까지의 시간(turn around time)을 최소화 할 수 있다.
응답 시간(response time)을 최소화하여 시스템 내의 자원들의 활용을 최대화 하고 자원들이 유휴상태로 놓이지 않도록 하며 특정 프로세스 실행이 무한정 대기하지 않도록 시한성을 보장하는 역할을 한다.
공평성(fairness)과 예측성(predictability)을 높여주며, 무기한 연기(indefinite postponement)의 방지하고 급격한 성능 저하 방지(graceful degradation)한다.

CPU 스케쥴링의 단계
CPU 스케쥴링은 크게 장기, 중기, 단기 스케쥴러 단계로 나눌 수 있다.

장기 스케쥴러에서 준비큐에 대기하고 있는 태스크들이 우선순위에 따라서 준비큐에 들어가고 준비 큐에 있는 것들이 단기적으로 우선 순위에 맞춰서 수행이 된다. 그리고 수행 중에 우선순위가 더 높은 것이 들어오거나 퀀텀타임이 끝나게 되면 대기 모드로 들어가며 그 내에서 스케쥴이 결정되어서 다시 준비큐에 들어와서 수행을 준비하게 된다.

종류
Long-term Job
Scheduling(장기)
어느 작업(Job)을 등록하여 시스템 자원을 이용할 수 있게 할 것 인지를 결정한다. 선택된 작업은 프로세스로 된다.
Immediate Level
Scheduling(중기)
어느 프로세스에게 메모리를 할당할 것인지를 결정한다. 시스템의 상태에 따라서 조정하게 된다. (suspending / activating)
Short-term Scheduling(단기)
준비 상태의 프로세스들 중 어떤 것에 CPU를 할당할 것인지를 결정한다. (dispatcher가 수행한다.)

쓰레드 우선순위
우선순위 스케쥴링 알고리즘은 각각의 스레드에 특정한 범위의 우선순위 값이 주어지고, 스케쥴러 루틴은 실행 대기 중에 있는 스레드 중 우선순위 값이 가장 높은 스레드를 선택하여 실행하는 방식이다.

위쪽의 그림은 윈도우 운영체제를 기준으로 하여 쓰레드가 수행되기 위해서 순서대로 기다리고 있는 모습이다. 쓰레드나 프로세스 각각이 우선순위를 갖고 있다. 이 우선순위에 따라서 CPU를 사용할 수 있고 그 사용 시간이 지나면 다시 반환하게 된다. 이러한 방식이 우선순위 방식이다.

선점형 스케쥴링 vs 비선점형 스케쥴링
CPU 스케쥴링 알고리즘에는 크게 선점형과 비선점형으로 나눌 수 있다. 선점형 스케쥴링(Preemptive scheduling)이란 어떤 쓰레드가 CPU를 사용하고 있는 동안 다른 쓰레드에 의해 그 CPU의 사용을 빼앗길 수 있는 스케쥴링 방식을 말하며, 비선점형 스케쥴링(nonpreemptive scheduling)이란 어떤 스레드가 CPU의 사용권을 다른 쓰레드에게 이양한 후에야 다른 쓰레드가 그 CPU를 사용할 수 있게 되는 방식을 말한다.

선점되어지는 경우
스케쥴링의 가장 기본적인 것은 자신에게 할당된 시간 만큼을 다 소비하고 다음 쓰레드에게 할당을 하는 것이다. 이때 자신에게 할당되어서 사용할 수 있는 기본적인 시간을 ‘퀀텀 타임’이라고 한다.
높은 우선순위에 의해서 선점되는 경우가 있다. 준비중이던 쓰레드보단 우선순위가 앞선다면 그 사이에 들어갈 수 있는 것이다.

실행되고 있던 쓰레드의 우선순위 변화 또는 대기 중에 있던 높은 우선순위 쓰레드의 대기 종료등으로 실행되고 있던 쓰레드는 이보다 높은 우선순위의 쓰레드에 의해서 선점되어질 수 있다.

선점형(preemptive) 스케쥴링
선점형 스케쥴링 방식은 한 프로세스가 CPU를 차지하고 있을 때 우선순위가 높은 다른 프로세스가

Leave a Comment