출처 : SNUON / 운영체제의 기초: 쉽게 배우는 운영체제 원리 / 서울대 홍성수 교수님
Context switching
현재 수행중인 process의 context를 save
다음에 수행할 process의 context를 load
Context Saving
HW context, memory context, kernel context 중에서 뭘 저장할까?
cpu registers(HW context)
- 다음 프로세스가 수행될 때 덮어 씌워지므로 당연히 저장한다
- 일반적으로 데이터를 대피시킬 땐 계층 구조상 한 단계 아래에 있는 저장 장치로 대피시킨다
- 즉, cpu registers는 메인 메모리로 대피시킨다
memory context
- 필요한 경우에만 부분적으로 저장한다
- 과거에는 저장을 아예 안하거나 전부 저장하기도 했었는데 지금은 메모리가 꽉 차는 경우에만 저장하면 된다
- 즉, 메모리가 꽉차는 경우에 프로세스를 메모리에서 디스크로 대피시킨다(swap)
kernel context
- 커널에 linked list로 독립적으로 저장되어 있으므로 따로 저장할 필요 없다
CPU registers Saving
강의 보면 이해된다.
Process A $\rightarrow$ Process B / Context Switch 과정
1. interrupt 걸리면 프로세스 A의 스택에 (하드웨어적으로) PSW 값, return address (PC 값) push한다.
2. ISR로 jump 한다.
3. Context(cpu registers) saving: (소프트웨어적으로) 프로세스 A의 스택에 CPU registers를 push한다.
4. 스케쥴러가 다음에 실행할 프로세스(프로세스 B)의 PCB의 주소를 알려준다
5. ISR은 프로세스 B의 PCB에 있는 SP(stack pointer)를 참고해 CPU의 SP를 바꿔준다. 즉, CPU의 SP가 프로세스 B의 스택에서 값을 꺼낼 위치를 지정하게 한다.
6. Context(cpu registers) load: 프로세스 B의 스택에서 CPU registers를 pop한다.
7. PSW 값, return adress를 pop해서 return from interrupt. 즉, ISR 종료.
참고
PSW 값은 유저 모드였는지 커널 모드였는지 확인하는 등의 용도인듯
Fake stack
사실 이 방법으로만 해결 안되는 문제가 있다
처음 수행된 프로세스는 stack이 비어있어서 context switching이 안된다는 것이다
프로세스를 처음 수행할 때 fake stack 만들어준다
'CS > 운영체제' 카테고리의 다른 글
[ETL] Multithreading (0) | 2022.05.22 |
---|---|
[ETL] Process Creation and Termination (0) | 2022.05.22 |
[ETL] Processes and Threads - Process Scheduling (0) | 2022.05.16 |
[ETL] Processes and Threads - Process Concept (0) | 2022.05.16 |
[ETL] Computer Hardware (0) | 2022.05.14 |