Context Switching 은 면접에서 지원자의 기본기를 검사할 목적으로 단골로 등장하는 질문이자, CS의 중요한 기본 지식이기도 하다.
Context Switching 이란 CPU가 한 개의 Task(Process / Thread) 를 실행하고 있는 상태에서 Interrupt 요청에 의해 다른 Task 로 실행이 전환되는 과정에서 기존의 Task 상태 및 Register 값들에 대한 정보 (Context)를 저장하고 새로운 Task 의 Context 정보로 교체하는 작업을 말한다.
여기서 Context란, CPU 가 다루는 Task(Procee / Thread) 에 대한 정보로 대부분의 정보는 Register 에 저장되며 PCB(Process Control Block) 으로 관리된다.
여기서 Process 와 Thread 를 처리하는 ContextSwitching 은 조금 다른데, PCB는 OS에 의해 스케줄링되는 Process Control Block이고, Thread 의 경우 Process 내의 TCB(Task Control Block) 라는 내부 구조를 통해 관리된다.
Task 의 PCB 정보는 Process Stack, Ready Queue 라는 자료구조로 관리가 되며, Context Switching 시 PCB 의 정보를 바탕으로 이전에 수행하던 작업 혹은 신규 작업의 수행이 가능하게 된다.
PCB는 주로 다음과 같은 정보들을 저장하게 된다.
(1) Process State : 프로세스 상태
(2) Program Counter : 다음에 실행할 명령어 Address
(3) Register : 프로세스 레지스터 정보
(4) Process number : 프로세스 번호
Context Switching 시, Context Switching 을 수행하는 CPU 는 Cache 를 초기화하고 Memory Mapping 을 초기화하는 작업을 거치는 등 아무 작업도 하지 못하므로 잦은 Context Switching 은 성능 저하를 가져온다.
일반적으로 멀티 프로세스를 통해 PCB를 Context Switching 하는 것보다 멀티 쓰레드를 통해 TCB 를 Context Switching 하는 비용이 더 적다고 알려져있다.
주로 Context Switching 은 Interrupt 에 의해 발생되는데, Hardware 를 통한 I/O 요청이나, OS / Driver 레벨의 Timer 기반 Scheduling 에 의해 발생한다.
더 자세한 참조 링크 :
https://stackoverflow.com/questions/7439608/steps-in-context-switching/7443719
https://nesoy.github.io/articles/2018-11/Context-Switching
'Computer Base > Computer Science' 카테고리의 다른 글
분산 시스템 환경 (Distributed System) 에서 BASE 원칙과 CAP 정리 (0) | 2019.11.02 |
---|---|
컴퓨터가 시간(Time) 을 다루는 방법 (0) | 2018.12.26 |
Nagle Algorithm (네이글 알고리즘) 에 대한 정리 (0) | 2018.10.19 |
인터넷이 어떻게 동작하는가(How internet works) (0) | 2018.10.15 |
OSI 7계층(OSI 7 Layer) 에 대한 정리 (0) | 2018.08.22 |