1. 程式人生 > >2018-2019-1 20189204《Linux核心原理與分析》第五週作業

2018-2019-1 20189204《Linux核心原理與分析》第五週作業

第四章——系統呼叫的三層機制(上)

4.1使用者態、核心態和中斷
庫函式封裝系統呼叫,使得程式設計師不直接接觸到系統呼叫,保持整個系統的穩定,避免崩潰。
1.使用者態與核心態的區分
核心只能被系統呼叫操作,系統呼叫可以被API、Shell、應用程式操作,API和SHELL可以被應用程式操作
2.Intel x86 CPU的執行級別——0~3,數字越小,級別越高
OS----Ring0
驅動程式----Ring1、Ring2
應用程式----Ring3
在Linux系統中只採用了其中的0和3兩個特權級別,分別對應核心態和使用者態。
使用者態只能訪問0x00000000~0xbfffffff的地址空間,0xc0000000以上的地址空間只能在核心態下訪問。這裡說的地址空間是程序的邏輯地址而不是實體地址,邏輯地址是程序的地址空間裡面的,現在的CPU都可以通過MMU(記憶體管理單元)把邏輯地址轉換為物力地址。
3.中斷(系統呼叫是一種特殊的中斷)
從使用者態進入核心態的方式有兩種
(1)中斷(進入核心態的主要方式),使用者態程序執行時,硬體中斷訊號到來,進入核心態
(2)Trap(系統呼叫只是特殊的中斷)
4.中斷過程
從使用者態切換到核心態,就要把使用者態暫存器上下文儲存起來,同時要把核心態的暫存器的值放到當前CPU中
中斷/init指令儲存使用者態棧頂地址、當時的狀態字、當時的CS:EIP的值