CS/운영체제

문맥교환(Context switch)?

Geisha 2025. 1. 14. 16:37
CPU 스케줄링에 대해 공부하게 되면
CPU에서 하나의 프로세스만 동작하지 않는것을 알수 있다.
다양한 프로세스가 CPU를 거치게 되고 어떠한 프로세스는
인터럽트가 발생하게되면 중지되고 우선순위에 의해 디스패치된다.

디스패치될 때 Context switch 를 통해 CPU 에서 실행될
프로세스가 바뀌게 되는데 이러한 Context switch 즉, 문맥교환은
어떻게 이루어지고 왜 중요한지 알아보자

컨택스트 스위치

문맥교환(Context Switch)은 운영체제에서 CPU가 실행 중인 프로세스나 스레드를 다른 프로세스로 전환하는 과정을 말한다. 이 과정에서 CPU는 현재 실행 중인 프로세스의 상태(컨텍스트)를 저장하고, 새로 실행할 프로세스의 상태를 로드한다. 컨텍스트에는 CPU 레지스터, 프로그램 카운터, 스택 포인터, 메모리 맵 등이 포함된다.

 

컨텍스트 스위치가 필요한 이유

  1. 멀티태스킹 구현: 컨텍스트 스위치를 통해 여러 프로세스나 스레드가 CPU를 번갈아 사용할 수 있다. 이는 CPU가 동시에 여러 작업을 수행하는 것처럼 보이게 만들어 사용자 경험을 향상시킨다.
  2. 자원 효율성: CPU가 한 프로세스의 작업이 끝날 때까지 대기하지 않고, 다른 준비된 프로세스를 실행함으로써 자원을 최대한 활용할 수 있다.
  3. 응답 시간 단축: 우선순위가 높은 작업(예: 사용자 인터페이스 응답)이 빠르게 실행될 수 있도록 낮은 우선순위 작업과 번갈아 실행한다.
  4. 교착 상태 및 대기 방지: 프로세스가 I/O 작업 등으로 대기 상태에 들어가면, CPU는 다른 작업으로 전환하여 비효율적인 자원 낭비를 방지한다.

컨텍스트 스위치의 과정

  1. 현재 실행 중인 프로세스/스레드 의 상태(레지스터, 프로그램 카운터 등)를 PCB(Process Control Block)/TCB(Thread Control Block)에 저장.
  2. 실행할 프로세스/스레드 의 PCB/TCB 를 참조하여 이전 상태를 복원.
  3. 새로운 프로세스/스레드 를 실행.

컨텍스트 스위치의 단점

  • 오버헤드: 저장 및 복원 작업은 CPU 자원을 소모하므로, 과도한 컨텍스트 스위치는 시스템 성능에 영향을 줄 수 있다.
  • 캐시 미스: 프로세스 전환 시 CPU 캐시가 초기화되면서 캐시 미스가 발생할 수 있다.

 


컨텍스트 스위치의 중요성 요약

컨텍스트 스위치 효율적인 멀티태스킹과 CPU 자원 활용을 가능하게 하며, 다양한 프로세스가 동작 중인 현대 운영체제의 핵심 기능 중 하나다. 비록 오버헤드가 있지만, 이를 통해 시스템의 응답성과 자원 사용률을 극대화할 수 있다.


캐시 미스가 발생한다는데 어떻게 일어나나?

프로세스 a가 진행중인데 프로세스 b로 전환되어 문맥 교환이 이루어지면 CPU 캐시메모리에는 프로세스 a에서 자주 사용되던 데이터가 남아있게 된다. 따라서 프로세스 b로 전환된 이후에는 필요한 데이터가 캐시에 없게되고 캐시미스가 일어나며 메인메모리에서 가져오게 되는데 이는 캐시메모리에 접근하는것 보다 느릴수 밖에 없다. 하지만 한번 캐시미스가 일어난 데이터는 프로세스 b가 종료되거나 다른프로세스로 전환 즉, 문맥교환 되기전까지 유효하게 된다. 이처럼 문맥교환이 자주 일어나면 컨텍스트 저장 및 복원 (Saving and Restoring Context) 뿐만 아니라 캐시미스 또한 자주 일어난다는 것이고 이러한 과정들에 있어 오버헤드가 증가할 수 밖에 없다.

 

오버헤드란 무엇인가?

- 시스템이나 프로그램이 목표 작업을 수행하는 데 필요한 추가적인 자원이나 시간적 비용을 의미