컨택스트 스위칭
은 하나의 task가 끝날 때까지 기다리지 않고 동시에 여러 task를 번갈아가며 실행하는 방법이다.
인터럽트
가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장한다. 이 과정에서 cpu는 아무런 일을 하지 않기 때문에 잦은 컨택스트 스위칭은 성능저하를 야기한다.
스레드는 캐시메모리나 PCB에 저장하거나 비워야하는 내용이 적어서 컨택스트 스위칭이 빠르지만 프로세스는 스레드보다 처리해야할 내용이 많아 느리다.
OS에서 컨택스트는 CPU
가 프로세스를 실행하기 위해 필요한 프로세스에 대한 정보이다.
PCB는 관리 대상 프로세스에 대한 정보를 포함하는 운영체제 커널 내부에 존재하는 자료구조이다.
- 프로세스의 생성될 때 PCB도 함께 생성되며 주기억장치(메모리)에서 유지되고 프로세스 종료시 함께 사라진다.
프로세스의 Context
는 커널 내부안에 있는PCB(Process Control Block)
에 저장되어있다.- CPU는 프로세스를 실행할 때 PCB에 있는 해당 프로세스의 Context를 읽어서
레지스터
값을 변경한다.
- CPU는 기억을 못하고 계산만하기 때문에 요청한 명령을 처리하기 위해서 프로세스의 Context를 일시적으로 레지스터에 저장한다.
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태
에서 인터럽트 요청에 의해
다음 우선 순위의 프로세스가 실행되어야 할 때
기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)으로 교체
하는 작업이다.
CPU는 여러 개의 스레드를 시간 할당량만큼
시분할
하여 번갈아가며 실행한다. (CPU는 동시에 한 개의 스레드 또는 프로세스만 실행할 수 있다). CPU가 프로세스를 실행하는 도중에Interrupt
가 발생하면, 운영체제는 CPU가 실행했던 스레드의 현재 Context를PBC
에 저장하고 곧 실행할 스레드의 Context를 메모리에 로드하여 CPU가 실행할 수 있도록 한다.
- CPU의 개수와 스레드의 개수가 같거나 적으면
Context Switching
이 발생하지 않는다.- 프로세스 간의
Context Switching
은OS 스케쥴러
가 담당한다.
CPU | 레지스터 | 운영체제 | 프로세스/스레드 | PCB | 시간 할당량 (Time Slice) |
---|---|---|---|---|---|
의사 | 의사의 머리(뇌) | 간호사 | 환자 | 환자 진료표 | 진료 시간 |
의사 (CPU)
는 각환자 (프로세스/스레드)
를 특정한진료 시간 (Time-Slice)
동안환자 진료표 (PCB)
을머리에 담아(레지스터)
진료를 한다. 각 환자의진료표 (PCB)
는간호사 (OS)
가 따로 관리한다. 환자A의 진료가 끝나면 간호사는 진료표A에 기록하고 다른 환자B의 진료표B를 꺼낸다 (Context Switching).
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요한 경우 CPU에게 알려 처리할 수 있도록 하는 것이다.
Interrupt가 발생하면 프로세스가 하던 일을 멈추고 이미 정해진 코드에서 요청에 대한 처리를 수행한다.
- 컨택스트 스위칭을 발생시키는 Interrupt 종류
I/O request
: 입출력(I/O) 요청이 왔을 경우Time Slice Expired
: CPU 사용시간이 만료되었을 경우Fork a Child
: 자식 프로세스를 만들 경우Wait for an Interrupt
: Interrupt 처리를 기다릴 경우
시간할당량 (time slice) | Context Switching 수 | Interrupt 수 | 오버헤드 |
---|---|---|---|
작다 | 증가 | 증가 | 증가 |
크다 | 감소 | 감소 | 감소 |
프로세스에 배정된 시간할당량이 작으면 작을 수록 프로세스를 거의 동시에 수행하는 것처럼 보이게 된다. 하지만 시간할당량이 채워져 다음 프로세스를 수행하기 위한
Context Switching
이 자주 발생한다. 다음 프로세스를 수행하려면 현재 수행중인 프로세스를 중단하기 위해Interrupt
도 자주 발생한다.
Context Switching
동안 CPU는 아무런 일을 하지 못한다. 그로 인해 오히려오버헤드
가 증가하여 효율(성능)이 떨어진다.
👉 적정량의 시간할당량이 필요하다.
👏프로세스 컨텍스트 스위칭
- 각 프로세스는 공유하는 데이터가 없기 때문에
캐쉬
가 지금껏 쌓은 데이터를 없애고 새로운 캐쉬 정보를 쌓아야한다는 부담요소가 있다.
캐쉬
: CPU와 메인메모리 사이에 위치하며 CPU에서 한번 이상 읽어들인 메모리의 데이터를 저장하고 있다가, CPU가 다시 그 메모리에 저장된 데이터를 요구할 때, 메인메모리를 통하지 않고 데이터를 전달해준다.👏스레드 컨텍스트 스위칭
- 서로 공유하는 영역(
Code, Data, Heap
)에 대한 캐쉬 정보를 사용할 수 있기 떄문에 프로세스 컨택스트 스위칭보다 부담이 적다.
컨택스트 스위칭
을 하는 주체이다
Interrupt
가 발생했을 때, 다음 차례로 수행할 프로세스를 결정한다.- 스케쥴러는 프로세스를
시분할 (Time-Slicing)
을 통해 동시에 수행하는 것처럼 보이게 한다. (사실은 하나씩 처리한다)