[운영체제] - 컨텍스트 스위칭(Context Switching)
✅ 컨텍스트 스위칭 (Context Switching) 이란?
▪ 여러개의 프로세스가 실행되고 있을 때, 기존에 실행되던 프로세스를 중단하고 다른 프로세스로 CPU에 실행할 프로세스를 교체하는 기술
☑ 컨텍스트
▪ CPU가 해당 프로세스를 실행하기 위해 필요한 해당 프로세스의 정보를 의미한다.
▪ 위의 정보들은 뒤에 설명할 PCB(Process Control Block)에 저장된다.
☑ 프로세스의 동작
▪ Program Counter, Stack Pointer 를 가지고 동작한다.
▪ Program Counter - 다음에 실행할 코드의 주소를 담고 있다.
▪ Stack Pointer - 호출된 함수와 변수들의 주소를 갖고 있다.
현재 프로세스의 PC와 SP 주소를 PCB(Process Control Block)에 저장해두고, 교체할 프로세스의 PC와 SP 주소를 가져와서 업데이트 하면서 컨텍스트 스위칭을 구현할 수 있다.
✅ Process Control Block (PCB) <프로세스 제어 블럭>
▪ 사용 목적 : 컨텍스트 스위칭 시 기존 프로세스의 데이터를 저장할 메모리의 별도 공간
▪ 관리할 필요가 있는 특정한 프로세스의 정보를 저장할, 운영체제 내의 커널 메모리 영역
▪ 저장하는 것 : ProcessID, Register 값 (PC, SP 등), 프로세스 상태, 전체 프로세스 크기 등
✅ 컨텍스트 스위칭 동작
☑ 컨텍스트 스위칭 발생 주요 트리거
▪ 멀티 테스킹 - 여러 프로세스를 번갈아 실행해야하는 환경에서, 스케쥴러에 의해 프로세스 전환이 일어날 수 있다.
▪ 인터럽트 - 하드웨어 등의 인터럽트가 발생할 경우, 해당 인터럽트를 먼저 처리하기 위해 컨텍스트 스위칭이 발생할 수 있다.
▪ 사용자 및 커널 모드 전환 - 운영체제에서 모드 간 전환이 필요할 때 발생할 수 있다.
(컨텍스트 스위칭은 운영체제에서 중요한 기능이며, 매우 빈번한 동작이기에 성능에 매우 민감하다. 따라서 컴퓨터 언어와 가장 가까운 어셈블리어로 작성되어 있다.
추가적으로 컨텍스트 스위칭이 과도하게 많이 일어날 경우 오버헤드가 발생하게 되기에 과도한 사용도 좋지 않다. )
☑ P1 프로세스가 running 상태이고 P2는 ready상태에서,
➡️ 인터럽트 발생 : 스케쥴러가 P1 프로세스의 실행 중단을 요청하고 P2 프로세스의 실행을 요청한다.
➡️ P1프로세스의 정보들과 Stack Pointer의 값, 다음 실행해야하는 코드의 주소값 (Program Counter)의 값을 PCB1에 저장한다.
➡️ P1 프로세스는 ready 또는 waiting(blocked) 상태로 바뀌고 P2 프로세스가 CPU 할당을 받게 된다.
여기서 P2 프로세스의 상태가 ready에서 running으로 바뀌는데, 이 작업을 디스패치(dispatch)라고 한다.
➡️ P2가 실행중이다가 P1의 CPU 사용을 요청 받을 경우, 위의 과정과 마찬가지로 이번엔 P2 프로세스 정보를 PCB2에 저장하고, PCB1에 있던 P1 프로세스의 SP와 PC 값으로 새로 할당한다.