1.切換時機
- 1、發生系統調用時
- 2、產生異常時
- 3、外設產生中斷時
2.用戶態到內核態的切換過程
1.讀取tr寄存器,訪問TSS段
- TSS段保存內核棧信息
2.從TSS段中的sp0獲取進程內核棧的棧頂指針
- sp:堆棧指針(Stack Pointer)寄存器,用它只可訪問棧頂。
3.在內核棧中保存當前cs,ss,eip,esp寄存器的值(地址)
- cs 爲代碼段寄存器
- ss 爲棧段寄存器,一般作爲棧使用
- eip:用來存儲CPU要讀取指令的地址,CPU通過EIP寄存器讀取即將要執行的指令
- esp:用戶棧棧頂指針
4.把內核代碼選擇符寫入CS寄存器,內核棧指針寫入ESP寄存器,把內核入口點的線性地址寫入EIP寄存器
- 此時,CPU已經切換到內核態,根據EIP中的值開始執行內核入口點的第一條指令。