※ 이 글을 작성하기 전에 본인은 이 분야의 전문성을 가진 전문가가 아님을 미리 밝힙니다. ※

 

#1. 스케줄링(Scheduling)

스케줄링은 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업이다.

CPU는 한 번의 하나의 작업만 처리 가능하다. 따라서, 여러 개의 작업이 존재할 경우, 해당 작업들이 번갈아 가면서 수행되도록 만드는 것을 스케줄링이라고 한다.

프로세스가 실행되는 순서를 정해주는 작업이라고도 한다.

 

#2. 스케줄링의 목적

스케줄링은 다음과 같은 목적들을 위해서 사용된다.

# 공정성 : 모든 프로세스에게 공정하게 CPU를 할당하기 위함이다.

# 처리율 증가 : 같은 시간 내(단위 시간)에, 처리할 수 있는 프로세스의 양을 증가시키기 위함이다.

# CPU 이용률 증가 : 전체 시스템을 사용한 시간 중, 실제로 CPU가 작업을 처리하는 시간을 늘림으로써 CPU의 이용률

                           을 증가시키기 위함이다.

# 오버헤드 최소화 : CPU의 오버헤드를 최소화 시키기 위함이다.

# 응답시간 최소화 : 작업에게 명령을 내렸을 때, 작업이 명령에 응답하는 시간을 최소화 시키기 위함이다.

# 반환시간 최소화 : 프로세스가 처음 실행되는 시점부터 최종 종료되는 시점까지 걸리는 시간을 최소화 시키기

                           위함이다.

# 이 외에도, 우선순위제도 / 대기시간 최소화 / 무한 연기 회피 등의 목적이 있다.

 

#3. 문맥교환(Context-Switching)

문맥교환 "Context-Switching"에서 'Context'는 "현재 프로세스에 사용되는 자원 혹은 개체들의 상태" 를 의미한다.

'Switching'은 "교환"을 의미한다.

즉 ! CPU가 스케줄링에 따라서 프로세스들에게 CPU를 할당해 줄 때, 현재 CPU가 할당된 프로세스의 정보를 저장하고 새로운 Process의 정보를 설정 후, CPU를 할당하여 실행되도록 하는 것이 문맥교환이다.

여기서, "기존의 프로세스가 가진 정보를 저장하는 과정" 과, "실행될 프로세스가 가졌었던 정보를 재할당 하는 과정" 을 진행하게 된다. 이 과정에서는 필요한 정보들은 'PCB(Process Control Block)' 에 저장이 되어 있다.

PCB를 이용해서 문맥교환을 다시 한번 이야기해보면...

"현재 CPU를 할당받아 실행되고 있는 프로세스의 정보를 PCB에 저장하고, 이제부터 실행될 프로세스의 정보를 PCB로 부터 가져와서 CPU를 할당하는 과정" 을 문맥교환 이라고 말할 수 있다.

그런데 ! 여기서 가장 큰 문제가 하나 발생한다.

바로, "PCB에 정보를 저장하고, 정보를 가져오는 이 타이밍에는, CPU가 아무런 작업도 할 수 없다는 것이다.

따라서, 문맥교환이 너무 자주일어나게 되면, CPU의 오버헤드가 발생할 가능성이 있다.

 

+ Recent posts