dual-mode operation
HOW
0. mode bit
- 현재 실행 코드의 privilege level을 나타내는 flag
1. mode bit to ZERO
mechanism
CPU가 event를 감지해서 (event-driven)
- user code 실행 중
- event 발생:
- system call (ecall)
- interrupt
- exception
- CPU가 회로 레벨에서 수행.
- PC; Program Counter → trap handler address로 변경 (atomically!!!)
- 현재 context 저장 (register, PC 등)
- mode bit → kernel(ZERO)로 변경
2. mode bit to ONE
mechanism
- OS가 작업 끝냄
- OS가 복귀 instruction 실행: 커널 코드 마지막에 Privileged Instruction을 배치함.
- RISC-V: sret
- x86: iret
- CPU가 수행:
- 저장된 PC 복원
- mode bit → user로 변경
F. mode bit write?
| 방향 | trigger | 실행 주체 |
|---|---|---|
| user → kernel | interrupt / trap | CPU (자동) |
| kernel → user | return instruction | CPU (instruction 실행 결과) |