Welcome! Everything is fine.

[CS 발표_10] Context Switching이란? 본문

CS 스터디/발표

[CS 발표_10] Context Switching이란?

개발곰발 2024. 6. 10.
728x90
Context Switching이란 무엇인가요?
 

인터럽트(interrupt)

인터럽트(interrup)란 CPU에서 프로세스를 처리하다가 예외 상황이 발생할 때 이에 대응할 수 있게 CPU에 처리를 요청하는 것을 말한다. 인터럽트가 발생하는 경우는 입출력 이벤트가 발생할 때, CPU 사용시간이 만료되었을 때, 자식 프로세스를 생성할 때 등이 있다. 

Context Switching

CPU는 하나의 프로세스만 처리할 수 있기 때문에 멀티 프로세스를 처리하려면 인터럽트가 발생하면서 콘텍스트 스위칭이 발생한다.

콘덱스트 스위칭이란 CPU가 처리중인 프로세스를 변경하는 것이다. 다시 말해, 현재 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨서 그 프로세스가 실행 가능하도록 하는 것을 의미한다. 콘덱스트 스위칭이 발생하면 현재 진행 중인 프로세스 or 스레드의 상태를 PCB에 저장하고 다음에 진행할 프로세스 or 스레드의 상태값을 읽어온다.

 

위 그림에서 처리 중인 프로세스를 P0, 다음에 처리할 프로세스를 P1으로 보면 흐름을 이해할 수 있을 것이다. P0을 처리 중에 인터럽트가 발생하면  P0은 idle 상태가 되고, 처리 중인 작업 정보는 P0의 PCB에 저장된다. 그리고 P1의 PCB에 있는 작업 정보를 불러와 레지스터에 로드하고 CPU는 P1을 처리한다. 이렇게 진행중이던 프로세스의 상태를 PCB에 저장하고, 다른 프로세스의 PCB에서 상태를 불러와 로드하는 과정동안 CPU는 아무 일도 하지 못하는데, 이 경우 오버헤드가 발생한다고 말한다. 

 

CPU에서 처리 중인 프로세스가 중간에 변경되어도 이전에 실행하던 코드를 이어서 실행할 수 있는 이유?

PCB에 프로그램 카운터와 스택 포인터 값이 저장되어 있어서!

  • 프로그램 카운터 : 프로세스가 이어서 처리해야하는 명령어의 주소 값
  • 스택 포인터 : 스택 영역에서 데이터가 채워진 가장 높은 주소 값

멀티 프로세스와 멀티 스레드에서의 Context Switching

멀티 프로세스가 멀티 스레드보다 오버헤드가 많이 발생한다. 왜일까? 멀티 프로세스는 프로세스별로 고유한 메모리를 갖는 반면, 멀티 스레드는  stack 영역을 제외한 모든 메모리를 공유하기 때문이다. 따라서 멀티스레드가 오버헤드(작업을 수행하는 데 필요한 추가적인 자원이나 시간, 비용)가 적게 발생한다.

정리

Context Switching은 CPU가 처리 중인 프로세스를 변경하는 것을 의미한다. CPU는 하나의 프로세스만 처리할 수 있어서 멀티 프로세스 환경에서는 Context Switching이 발생한다. CPU 스케줄러에 의해 인터럽트가 발생하면 실행 상태의 프로세스가 준비 또는 대기 상태로 전환되고, 다음에 실행할 프로세스가 실행 상태로 전환된다. 이때 레지스터에 저장된 프로세스 정보가 바뀌면서 오버헤드가 발생하게 된다.