문맥교환(Context Switching)
[TOC]
문맥교환
문맥교환이 필요한 이유
- 하나의 Task만 처리한다면 다음 Task는 끝날 때까지 기다려야한다.
- 빠른 속도로 Task를 바꿔가며 실행해 사람에게는 실시간처럼 보이게 된다.
문맥교환이란?
- 현재 진행중인 Task(Process, Thread)의 상태를 저장하고 다음 진행할 task의 상태값을 읽어와 실행하는 것.
- 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.
PCB(Process Control Block) 구조
- process state : 프로세스 상태
- process counter : 다음 실행할 명령어 주소 값
- CPU registers
문맥교환 절차
- 인터럽트/시스템 호출
- 커널모드 전환
- 현재 프로세스 상태를 PCB에 저장
- PCB에서 다음 실행 프로세스 상태 로드
- 사용자 모드 전환
문맥교환 발생 상황
- dispatch : 준비 -> 실행
- CPU할당 시간 만료 : 실행 -> 준비
- I/O 작업 및 할당 : I/O작업이 필요하여 작업 완료시까지 대기. 실행 -> 대기
- System Call : 또다른 서비스 호출이 필요한 경우 대기. 실행 -> 대기
오버헤드
문맥교환이 잦을 수록 오버헤드가 커진다.
오버헤드 해결 방안
- 프로그램 다중화 수준 낮추기 -> 빈도 최소화
- 스레드 이용 : 가벼운 프로세스인 스레드를 이용하여 부하 최소화
- 스택포인터 활용 : 스택 이용 프로그램의 경우 스택 포인터를 활용해 문맥교환 최소화