CPU特權(quán)級
為了防止內(nèi)核被用戶進(jìn)程隨意訪問,CPU通過特權(quán)級實現(xiàn)訪問控制,當(dāng)前特權(quán)級決定了哪些CPU指令可以被執(zhí)行。
linux CPU特權(quán)級分2層: Ring 0和Ring 3,內(nèi)核運行在最高特權(quán)級Ring 0,用戶進(jìn)程運行在最低特權(quán)級Ring 3。
用戶進(jìn)程要執(zhí)行特權(quán)操作,需要從Ring 3轉(zhuǎn)變到Ring 0。
系統(tǒng)調(diào)用
系統(tǒng)調(diào)用是操作系統(tǒng)為了統(tǒng)一管理硬件資源,并為上層應(yīng)用程序提供良好的環(huán)境,使應(yīng)用程序具有更好的兼容性,在內(nèi)核代碼中封裝的接口,比如常見的fork、read、write等。
系統(tǒng)調(diào)用的步驟
CPU執(zhí)行用戶程序時,處于用戶空間,執(zhí)行內(nèi)核程序時,處于內(nèi)核空間。

image.png
每次發(fā)起系統(tǒng)調(diào)用,就會產(chǎn)生用戶空間與內(nèi)核空間的切換,具體步驟如下
- 用戶進(jìn)程把系統(tǒng)調(diào)用號,存入寄存器
- 用戶進(jìn)程把系統(tǒng)調(diào)用相關(guān)入?yún)⒋嫒爰拇嫫?/li>
- 用戶進(jìn)程執(zhí)行80中斷
- CPU接收到中斷信息,執(zhí)行中斷處理程序(在這一步驟切換到內(nèi)核態(tài))
- 運行內(nèi)核程序
- 內(nèi)核程序把返回值存入寄存器
- 內(nèi)核程序恢復(fù)用戶進(jìn)程的上下文,用戶進(jìn)程繼續(xù)執(zhí)行