進程用戶態和內核態


Linux有4GB的地址空間:

 

內核空間是共享的,存在整個內核的代碼和所有的內核模塊以及內核所維護的數據。

特權級:

最關鍵的工作必須交給特權級最高的進程去執行,這樣可以做到集中管理,減少有限資源的訪問和使用沖突。inter x86架構的cpu一共有四個級別,0-3級,0級特權級最高,3級特權級最低。

用戶態和內核態:

當一個進程在執行用戶自己的代碼時處於用戶運行態(用戶態),此時特權級最低,為3級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態。Ring3狀態不能訪問Ring0的地址空間,包括代碼和數據;

當一個進程因為系統調用(write、send)陷入內核代碼中執行時處於內核運行態(內核態),此時特權級最高,為0級。執行的內核代碼會使用當前進程的內核棧,每個進程都有自己的內核棧。

用戶態的程序就不能隨意操作內核地址空間,具有一定的安全保護作用。這說的保護模式是指通過內存頁表操作等機制,保證進程間的地址空間不會互相沖突,一個進程的操作不會修改另一個進程地址空間中的數據。

用戶態和內核態的切換:

系統調用:這是用戶態進程主動要求切換到內核態的一種方式。用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作。例如fork()就是執行了一個創建新進程的系統調用

異常:當cpu在執行運行在用戶態下的程序時,發生了一些沒有預知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關進程中,也就是切換到了內核態,如缺頁異常。

外圍設備的中斷:當外圍設備完成用戶請求的操作后,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令而轉到與中斷信號對應的處理程序去執行,如果前面執行的指令時用戶態下的程序,那么轉換的過程自然就會是 由用戶態到內核態的切換。如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行后邊的操作等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM