컴퓨터과학/운영체제

[운영체제] Context Switching(문맥 교환)

PureStack 2021. 10. 29. 23:49

출처: Operating System Concepts 10th Ed, Abraham Silberschatz, Peter Bare Galvin, Greg Gagne

Context Switching(문맥 교환)이란?

유튜브로 동영상을 보면서 채팅을 치는 경우가 많다. 사용자 입장에서는 동시에 일어나는 것처럼 보이지만 사실 CPU는 한번에 하나의 프로세스만 처리 가능하다. 각 프로세스는 일 처리 위해 CPU 자원을 짧은 시간 내에 할당받아 일을 처리한다.


이처럼 여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task의 상태를 PCB에 저장하고, 다음에 진쟁할 Task 상태 값을 읽어 적용하는 과정을 문맥 교환(Context Switching)이라 한다.


Context Switching의 과정

  1. Task의 대부분 정보는 Register에 저장되고 PCB로 관리된다.
  2. 우선 현재 실행되고 있는 Task의 PCB 정보를 저장하는 작업을 한다.
  3. 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 이를 통해 CPU가 이전에 진행한 과정을 연속적으로 수행할 수 있다.

Context Switching은 많은 시간이 소요된다. Cache 초기화, Memory Mapping 초기화, 항상 실행되어야 하는 커널 등의 작업들 수반으로 Context Switching은 많은 시간이 소요되는데, 이런 시간을 오버헤드라 지칭한다.


Context Switching 비용은 프로세스가 스레드보다 많이 든다.

프로세스는 공유하는 메모리가 없으므로 캐시 메모리 초기화 등의 무거운 작업을 해야 하는 반면에, 스레드는 Stack 영역을 제외하면 모든 메모리를 공유하기 때문에 Context Switching 방식에서 Stack 영역만 변경 후 진행하면 되기 때문이다.