- Dispatch & Context Switching

준비 큐에 있는 프로세스들 중에서 CPU 스케줄링 알고리즘에 의해서 실행될 하나의 프로세스를 선정하여 CPU를 할당하는데 이를 디스패치(Dispatch)라고 한다. 이 CPU를 할당받은 프로세스는 ready 상태에서 running 상태로 변화한다.


운영체제에서는 각각의 프로세스들에게 지정된 시간 동안 CPU를 점유할 수 있게 하는데, 이 시간을 보통 타임 슬라이스(Time - Slice) 혹은 할당 시간량(Time Quantum)이라고 한다. 타임 슬라이스를 지정하는 이유는 하나의 특정 프로세스가 지속적으로 CPU를 점유하고 있는 것(독점)을 방지하고 시분할과 다중 프로그래밍을 원활하게 하기 위함이다.


따라서 해당 프로세스가 실행 중에 있다가 할당된 시간이 초과되면 다시 준비 큐 맨 뒤로 들어감으로 실행 상태에서 준비 상태로 상태가 전환된다.


이때!!,

프로세스 스케줄러(=CPU 스케줄러)는 준비 상태의 준비 큐에서 다시 CPU를 할당할 프로세스를 선정하여 할당 시간을 배정한 후 그 프로세스에게 CPU를 디스패치함으로 해당 프로세스는 ready 상태에서 running 상태로 변화한다. 이 과정, 한 프로세스에서 다른 프로세스로 CPU가 할당되는 과정을 Context Switching 이라고 한다.


Context Switching은 운영체제가 프로세서의 제어를 획득할 때마다 발생한다. 더불어 할당시간이 짧을수록 Context Switching이 자주 발생하여 부하도 같이 증가한다. 



Context Switching 과 부하는 어떠한 관계가 있을까? 여기에 답을 할 줄 알아야 한다.

우선 컨텍스트 스위칭이 일어나는 과정을 보면 기존 프로세스에 해당하는 PCB를 저장하고 다음에 실행할 프로세스 PCB를 로드해야 하는 과정을 거침을 알 수 있다.

PCB내부에는 다음에 실행할 프로세스의 주소를 가지고 있다.(PC : Program Counter) 그리고 프로세스 상태 정보 및 레지스터 세트(누산기, 인덱스 레지스터, 스택 포인터...) 등 있는데 이러한 PCB를 위의 과정으로 거치게 되면 컨텍스트 스위칭을 진행하는 프로세스는 idle 상태(유휴 상태)가 발생한다. 그리고 이러한 프로세스의 idle 상태는 결과적으로 프로그램의 성능을 낮춘다. 따라서 잦은 컨텍스트 스위칭을 오버헤드(Overhead)를 일으키며 과정을 아래의 그림과 같다.


오버헤드(Overhead)란?

어떤 처리를 하기위해 들어가는 간접적인 처리시간 & 메모리를 의미한다. 밑의 그림을 보면 컨텍스트 스위칭을 하는 시점에서는 프로세스는 아무것도 수행할 수 없다. idle 상태가 되어버리기 때문이다.


요즘의 컴퓨터들은 저장해야할 많은 상태 레지스터를 가지고 있기 때문에 컨텍스트 스위칭은 하드웨어의 지원에 많이 의존되고 있다. 왜냐하면 CPU 성능에 따라 오버헤드를 조금이나마 줄일 수 있기 때문이다. 하지만 그렇지 않으면, 컨텍스트 스위칭을 하는 경우 오버헤드를 고려할 수 밖에 없다.



그럼 이러한 컨텍스트 스위칭에 대한 오버헤드(부하) 문제를 어떻게 해결할 것인가?

1) 컨텍스트 스위칭이 자주 발생하지 않도록 다중 프로그래밍의 정도를 낮춘다.

2) 스택 중심의 장비에서는 스택 포인터 레지스터를 변경하여 프로세스간 컨텍스트 스위칭을 수행한다.

3) 경량 프로세스, 즉 스레드를 이용하여 컨텍스트 스위칭 부하를 최소화한다.



- 프로세스 PCB(Process Control Block) (= 프로세스 디스크립터)

프로세스는 프로세스 자체와 PCB로 이루어져 있다. PCB는 운영체제가 그 프로세스를 관리하는데 필요한 모든 정보를 유지하는 자료구조 테이블이다. 운영체제는 기억 장치에 PCB를 유지하며, 운영체제가 CPU를 다른 프로세스에게 넘겨주고자 할 때(Context Switching 발생하는 경우), 프로세스의 모든 정보를 PCB에 저장시키고 이후에 다시 실행하고자 할 때에는 PCB에 보관된 정보를 재사용한다.



- 프로세스 PCB에 대한 정보

  • 프로세스 이름

  • 상태 : 기본 스레드의 현재 상태 (프로세스는 하나의 기본 스레드를 가지고 있다.)

  • 소유자

  • 실행 시간 통계

  • 스레드

  • 관련 프로세스 리스트

  • 자식 프로세스 리스트

  • 주소 공간

  • 자원

  • 스택 : 주기억장치 내의 기본 스레드의 스택 위치



- PCB 관리
PCB는 프로세스가 생성될 때 만들어지며, 모든 프로세스는 각각 고유의 PCB를 가지게 된다. 그리고 수행이 완료된 프로세스는 해당 PCB도 함께 삭제된다. (프로세스가 Terminated 된 상태) PCB는 서로 링크되어 있을 때가 대부분이며, 같은 상태의 프로세스들이 존재하는 준비 큐나 대기 큐는 FIFO 형태로 PCB 들을 연결한다.



[ 참고링크 ]


Context Switching


Posted by doubler
,