눈팅하는 게임개발자 블로그
Context Switching 본문
Context
프로그램이 실행 중인 상황에 대한 정보.
메모리 : 프로세스가 할당 받아 사용 중이던 메모리에 대한 정보
CPU 레지스터들의 값 : PC, SP, AC등 레지스터들이 가지고 있는 값들에 대한 정보
Context Switching
현재 실행중인 프로그램의 실행을 중지하고 다른 프로그램을 실행하도록 하는 작업.
현재 실행중인 프로그램의 Context를 다른 곳에 복사하여 저장하고
실행시키고자 하는 프로그램의 Context를 가져온다.
Thread Switching
현재 실행중인 스레드를 중단 시키고, 다른 스레드에게 CPU를 할당하여 실행시키는 과정
현재 CPU의 컨텍스트를 현재 스레드의 TCB(Thread Control Block)에 저장하고
스위칭 할 스레드의 TCB에 저장된 컨텍스트를 CPU에 적재한다.
스레드 스위칭이 발생하는 4가지 경우
1. 스레드가 자발적으로 다른 스레드에게 양보(yield()함수와 같은 시스템 호출 발생)
2. 스레드가 시스템 호출을 실행하여 블록되는 경우 (read(), sleep(), wait()함수와 같이 I/O가 발생하거나 대기를 명령받은 경우)
3. 스레드의 타임 슬라이스(시간 할당량)을 모두 소진한 경우
4. 하드웨어 인터럽트가 발생하는 경우 (더 높은 우선 순위의 스레드가 I/O작업을 끝낸 경우 등)
위의 경우 스레드 스위칭이 일어날 수 있으며, 일어나지 않을 수도 있다.
Thread Context Switch 과정
1. 스레드 1이 실행되다가 block 상태가 되고 스레드 2가 다음 스케줄링 대상으로 선택되면
2. CPU는 현재의 Context 정보를 스레드 1의 TCB에 저장한다.
3. CPU는 스레드 2의 Context 정보를 스레드 2의 TCB로부터 가져온다. (dispatch)
4. 이후 CPU가 실행될 시 스레드 2가 실행된다.