I. 자원 할당 시 정보교환, 문맥교환의 개념
- 프로세스 실행 중 다른 프로세스의 CPU 사용 위해 작업 상태를 보관하고 새 프로세스 상태 적재 작업
II. 문맥교환의 절차
가. 문맥교환 절차도
나. 문맥교환 절차
단계 | 절차 | 설명 |
---|---|---|
1 | 인터럽트/시스템 호출 | – 운영체제에서 프로세스 스케쥴러에 의해 인터럽트 발생 |
2 | 커널 모드 전환 | – 프로세스가 실행되는 사용자모드에서 커널 모드로 전환 |
3 | 현재 프로세스 상태 PCB 저장 | – 기존 실행되는 프로세스 정보를PCB에 저장 |
4 | 다음 실행 프로세스 로드 | – PCB에 있는 다음 실행 프로세스 상태 정보 복구 |
5 | 사용자 모드 전환 | – 커널 모드에서 사용자 모드로 전환하여 프로세스 실행 |
- 문맥 교환 절차 중 dispatch, timeout 등 실행 상태가 전이되는 과정에서 문맥교환 발생
III. 태스크간 문맥교환 과정
가. 태스크간 문맥교환 개념도
– 스택(STACK) LIFO 자료구조 – 스택포인터(SP) 최상위 위치한 자료 가리킴 (PUSH,POP 시 변경) – CPU 레지스터 Context 보관 | |
멀티프로세스 환경에서 실행중인 프로세스 상태 보관 및 신규 프로세스 상태를 CPU에 적재하는 과정 |
- 스택, TCB, CPU 레지스터 등 이용하여 문맥 교환 과정 진행
나. 태스크간 문맥교환과정
단계 | 설명 | 실행 영역 |
---|---|---|
1 | 각 TCB(Task Control Block)는 태스크의 우선순위와 스택포인터 보유 | N/A |
2 | 준비 상태 태스크의 TCB 스택은 실행했던 문맥을 마지막 스택에 넣고 끝가리킴 | TCB 영역 |
3 | 태스크2가 준비되어 실행 순서에 SP가 가리키던 문맥을 CPU 레지스터에 복사 | TCB → CPU SP 레지스터 |
4 | SP는 문맥을 복구하며 삭제한 만큼 변화되어 다시 해당 태스크 스택으로 사용 | 스택 영역 |
5 | 실행되던 태스크가 멈추고 다른 태스크로 바뀔 때 반대로 태스크의 스택 저장 | CPU SP레지스터 → TCB |
6 | SP를 Push한 만큼 업데이트 후 CPU 사용권에서 벗어남 | CPU SP 레지스터 |
- 시스템 상 살아있는 모든 태스크는 자신만의 스택과 TCB 보유
IV. 문맥교환의 오버헤드 해결 방안
해결 방안 | 설명 |
---|---|
프로그램 다중화 수준 낮춤 | – 다중 프로그래밍 수준을 낮추어 문맥 교환 발생 빈도 감소 |
스레드 이용 | – Light Weight 프로세스인 스레드를 이용하여 문맥 교환 부하 최소화 |
스택포인터 활용 | – 스택 이용 프로그램의 경우 스택 포인터를 이용하여 문맥 교환 부하 최소화 |
- 멀티프로세스 환경에서 문맥교환은 필수적이므로 정보교환의 최소화 및 최적화가 필요