navis
컨텍스트 스위칭 본문
컨텍스트 스위칭(Context Switching)
컨텍스트 스위칭의 정의
컨텍스트 스위칭이란 'CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것'을 의미합니다. 여기서 '컨텍스트'는 프로세스/스레드의 상태, 즉 CPU와 메모리에서의 상태를 말합니다.
컨텍스트 스위칭이 필요한 이유
컨텍스트 스위칭이 필요한 주요 이유는 다음과 같습니다:
- 여러 프로세스와 스레드들의 동시 실행: 동시에 실행되는 것처럼 보이기 위해.
- 공정한 CPU 시간 분배: 여러 프로세스와 스레드들이 공정하게 CPU 시간을 나눠 가지기 위해.
- 우선순위 높은 작업의 빠른 처리: 높은 우선순위의 작업이 빠르게 처리될 수 있도록 하기 위해.
컨텍스트 스위칭이 발생하는 시기
컨텍스트 스위칭은 다음과 같은 상황에서 발생할 수 있습니다:
- 주어진 Time Slice(시간 할당량)를 다 사용했을 때.
- I/O 작업을 수행해야 할 때.
- 다른 리소스를 기다려야 할 때.
- 인터럽트(Interrupt) 발생 시.
멀티태스킹에서의 컨텍스트 스위칭
멀티태스킹 환경에서는 프로세스가 매우 짧은 시간 동안 번갈아가며 실행됩니다. 이는 마치 여러 프로세스가 동시에 실행되는 것처럼 보이게 하며, 이러한 프로세스 교체를 '컨텍스트 스위칭'이라고 합니다.
컨텍스트 스위칭의 수행 주체
컨텍스트 스위칭은 OS의 **커널(Kernel)**에 의해 수행됩니다. 커널은 운영체제의 핵심 기능을 담당하며, 각종 리소스를 관리하고 감독하는 역할을 합니다.
컨텍스트 스위칭 과정
공통점
- 커널 모드에서 실행: 모든 컨텍스트 스위칭은 커널 모드에서 실행됩니다. 이는 프로세스가 직접 컴퓨터의 리소스에 접근하지 않고 커널을 통해 접근하는 것을 의미합니다.
- CPU 레지스터 상태 교체: 모든 컨텍스트 스위칭은 CPU 레지스터 상태를 저장하고 새로운 프로세스의 레지스터 상태를 로드합니다.
차이점
- 프로세스 컨텍스트 스위칭: 서로 다른 프로세스 간의 스위칭은 가상 메모리 주소 처리를 추가로 수행해야 합니다. 이는 MMU(Memory Management Unit)와 TLB(Translation Lookaside Buffer) 관리를 포함합니다.
- 스레드 컨텍스트 스위칭: 같은 프로세스 내의 스레드 간 스위칭은 메모리 주소 처리를 필요로 하지 않으므로 상대적으로 빠릅니다.
MMU와 TLB
- MMU: 가상 메모리와 물리 메모리 사이의 주소 변환을 담당합니다.
- TLB: MMU 내에 존재하는 캐시 메모리로, 가상 주소를 물리 주소로 변환하는 과정을 가속화합니다.
컨텍스트 스위칭의 영향
캐시 오염(Cache Pollution)
컨텍스트 스위칭은 캐시 오염을 일으킵니다. 캐시는 CPU가 자주 사용하는 데이터를 임시로 저장하는 공간인데, 컨텍스트 스위칭 후 캐시는 이전 프로세스의 데이터를 포함하고 있어 현재 프로세스에 필요 없는 데이터로 채워져 있을 가능성이 큽니다. 이는 성능 저하로 이어질 수 있습니다.
오버헤드(Overhead)
컨텍스트 스위칭은 순수한 오버헤드입니다. 이는 실행 중인 프로그램의 동작과는 관계없이 추가적인 CPU 작업이 필요하게 되어 성능 저하를 초래합니다.
요약
컨텍스트 스위칭은 CPU가 여러 프로세스와 스레드를 공정하게 처리하기 위해 필수적인 작업입니다. 그러나 이러한 스위칭은 캐시 오염과 오버헤드를 유발하여 성능 저하를 초래할 수 있습니다. 프로세스 간의 스위칭은 스레드 간의 스위칭보다 더 많은 작업이 필요하며, 따라서 더 많은 오버헤드를 발생시킵니다. 이를 이해하고 관리하는 것은 시스템 성능 최적화에 중요한 요소입니다.
'CS' 카테고리의 다른 글
OSI 7계층 & TCP/IP 4계층 (0) | 2024.05.23 |
---|