Context Switching
태그 :
- 개념
- Running 상태의 Task가 사용하던 Context를 메모리 특정 영역에 저장한 후 새로이 수행 될 Task의 Context를 TCB또는 Stack에서 CPU의 레지스터 영역으로 복사하여 새로운 Task가 수행되도록 하는 일련의 작업
I. 병행처리를 위한 Context Switching의 이해
가. Context의 정의
- Task가 사용하는 CPU 레지스터 들의 값
나. Context Switch의 정의
- Running 상태의 Task가 사용하던 Context를 메모리 특정 영역에 저장한 후 새로이 수행 될 Task의 Context를 TCB또는 Stack에서 CPU의 레지스터 영역으로 복사하여 새로운 Task가 수행되도록 하는 일련의 작업
다. Context Switching 관련 개념
용어 |
설명 |
Dispatching |
- 준비상태의 프로세스들 중에서 우선순위가 가장 높은 프로세스에게 CPU를 할당 |
Time Quantum |
- 특정 프로세스에게 할당되는 시간의 단위 - 특정 프로세스의 CPU 독점을 방지 |
Preemption |
- Time Quantum이 초과하면 인터럽트를 통해 CPU 사용권을 빼앗는 스케쥴링 기법 |
II. Context Switch의 진행과정
가. Context Switch의 발생시점
구분 |
내용 |
비자발적 문맥 교환 |
- 타임 슬라이스(Time Slice) 소진 시 - 인터럽트(Interrupt) 발생 시 |
자발적 문맥 교환 |
- 프로세스 자신이 잠들 때(Sleep) - 프로세스가 Exit 할 때 - 시스템 호출로부터 사용자 모드로 돌아왔으나 실행될 가장 적당한 프로세스가 아닐 때(wait) - 커널이 인터럽트 처리를 마치고 프로세스가 사용자 모드로 돌아왔으나 실행될 가장 적당한 프로세스가 아닐 때 (wait) |
다. Context Switch의 진행과정
① Interrupt나 시스템 호출에 의해 문맥 교환 요구
② 사용자 Mode -> 운영체제 모드
③ 기존 프로세스의 현재 H/W 상태정보를 PCB에 저장 (PCB: Process Control Block)
④ 다음에 실행할 프로세스의 상태정보를 PCB에서 복구한 후 다음 프로세스를 실행함
⑤ 운영체제 모드 -> 사용자 Mode로 전환
다. PCB의 저장정보
- 프로세스 상태 : 신규, 준비, 수행, 대기, 정지
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어 주소
- 레지스터 : 누산기, 스택, 색인 레지스터
- 프로세스 번호
III. Context Switch 과정의 오버헤드 및 해결방안
가. 오버헤드 발생시점
단계 |
실행루틴 |
오버헤드작업 |
1 |
현 프로세스 |
|
2 |
Interrupt 처리 루틴 |
현재 상태를 PCB에 저장 |
3 |
프로세스 스케쥴러 |
다음 실행 프로세스를 준비 Queue 에서 선택 |
4 |
Dispatch |
다음 Process의 PCB값 복구 |
5 |
다음 프로세스 |
나. 오버헤드 해결 방안
- Context Switch 자주 발생하지 않도록 다중프로그래밍의 정도를 낮춤
- 스택중심의 장비에서는 Stack 포인터 레지스터를 변경하여 프로세스간 문맥교환 수행
- Light Weight Process인 스레드를 이용하여 Context Switch 부하를 최소화시킴
IV. 스레드 중심의 Context Switch
가. 스레드의 개념
- CPU이용의 기본단위로서 프로세스에서 실행되는 하나의 일관된 소스코드
나. 스레드의 Context Switch
- 스레드는 실행에 필요한 최소한의 정보만을 가지고 자신이 속해 있는 프로세스의 기억장치나 파일과 같은 실행환경을 공유하여 프로세스의 생성과 문맥교환 등의 오버헤드를 줄임
다. 스레드를 통한 Context Switch의 장점
- 병행성 증진 : 단일 프로세스에서 다수의 스레드 생성 및 수행
- 오버헤드 감소 : 실행 환경의 공유를 통해 오버헤드 줄임
[참고자료]
(1) 개념도
(2) 수행절차
- CPU 내에 존재하는 레지스터들은 현재 실행 중인 프로세스 관련 데이터들로 채워짐(T0) (실행 중인 프로세스가 변경되면, CPU 내에 존재하는 레지스터들의 값이 변경되어야 함)
- 프로세스 T1이 실행되기 전에, 현재 T0 레지스터들이 지니고 있는 데이터들을 저장.
- 프로세스 T1은 Ready 상태로 바뀌고, 프로세스 T1와 관련된 메모리에 백업된 레지스터 정보를 Restore하여 수행. 프로세스 T1은 마지막 실행 이후를 이어서 실행.
- 프로세스 T0 관련 레지스터 정보는 메모리에 저장되고, 프로세스 T1 관련 레지스터 정보는 CPU의 레지스터에 복원