Server/Study
[Server] Context Switching
GiveZero
2023. 4. 26. 16:29
1) 무조건 대기
무조건 1ms 대기
Thread.Sleep(1);
2) 조건부 양보
우선순위가 낮은 애들한테는 양보 X => 우선순위가 나보다 같거나 높은 쓰레드가 없으면 다시 본인에게
Thread.Sleep(0);
3) 지금 실행 가능한 쓰레드가 있으면 실행
실행 가능한 애 없으면 남은 시간 소진
Thread.Yield();
이 방법들은 좋기만 한가?
자비롭지만, 좋기만하진않음. 컨텍스트 스위칭 비용 발생
컨텍스트 스위칭
여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것
CPU에 실행할 프로세스를 교체하는 기술
PCB (Process Context/Control Block)
별도 공간에 process 상태값들을 저장하고, 해당 값들을 찾는 방법으로 구현
작동 순서
- 스케줄러가 A 프로세스의 실행을 중단하고 B 프로세스를 실행할 것을 요청
- A 프로세서에서 SP값과 PC값을 PCB에 저장
SP(Stack pointer) : Stack의 데이터 위치
PC(Program Counter) : 다음 실행해야하는 코드의 주소값 - A프로세스는 ready 또는 block 상태로 바뀜
- CPU에서 B 프로세스를 실행함
이 과정을 통해 B 프로세스의 상태가 ready에서 running으로 바뀌는데, 이 작업을 디스패치(dispatch)라고 한다. - B프로세스에서 A프로세스로 컨텍스트 스위칭을 할 경우
5-1) B프로세스의 SP값과 PC값을 PCB에 저장
(이 때 PCB는 A프로세스의 위치값을 저장하는 PCB와는 별도로 생성되는 메모리 공간)
5-2) A프로세스의 PCB에서 SP값과 CP값을 찾아 SP와 PC에 덮어씌움