2019-11-19-Linux-特權級

Linux-特權級、內核態(tài)和用戶態(tài)

CPU特權級

Intel x86架構的cpu一共有0~4四個特權級,0級最高,3級最低,硬件上在執(zhí)行每條指令時都會對指令所具有的特權級做相應的檢查。硬件已經(jīng)提供了一套特權級使用的相關機制,軟件自然要好好利用,這屬于操作系統(tǒng)要做的事情,對于UNIX/LINUX來說,只使用了0級特權級別和3級特權級。也就是說在UNIX/LINUX系統(tǒng)中,一條工作在0級特權級的指令具有了CPU能提供的最高權力,而一條工作在3級特權的指令具有CPU提供的最低或者說最基本權力

用戶態(tài)和內核態(tài)

內核棧:Linux中每個進程有兩個棧,分別用于用戶態(tài)和內核態(tài)的進程執(zhí)行,其中的內核棧就是用于內核態(tài)的堆棧,它和進程的task_struct結構,更具體的是thread_info結構一起放在兩個連續(xù)的頁框大小的空間內。

    現(xiàn)在我們從特權級的調度來理解用戶態(tài)和內核態(tài)就比較好理解了,當程序運行在3級特權級上時,就可以稱之為運行在用戶態(tài),因為這是最低特權級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態(tài);反之,當程序運行在0級特權級上時,就可以稱之為運行在內核態(tài)。
    
    雖然用戶態(tài)下和內核態(tài)下工作的程序有很多差別,但最重要的差別就在于特權級的不同,即權力的不同。運行在用戶態(tài)的程序不能訪問操作系統(tǒng)內核數(shù)據(jù)結構合程序。  當我們在系統(tǒng)中執(zhí)行一個程序時,大部分時間是運行在用戶態(tài)下的。在其需要操作系統(tǒng)幫助完成某些它沒有權力和能力完成的工作時就會切換到內核態(tài)。
    
    Linux進程的4GB地址空間,3G-4G部分大家是共享的,是內核態(tài)的地址空間,這里存放在整個內核的代碼和所有的內核模塊,以及內核所維護的數(shù)據(jù)。用戶運行一個程序,該程序所創(chuàng)建的進程開始是運行在用戶態(tài)的,如果要執(zhí)行文件操作,網(wǎng)絡數(shù)據(jù)發(fā)送等操作,必須通過write,send等系統(tǒng)調用,這些系統(tǒng)調用會調用內核中的代碼來完成操作,這時,必須切換到Ring0,然后進入3GB-4GB中的內核地址空間去執(zhí)行這些代碼完成操作,完成后,切換回Ring3,回到用戶態(tài)。這樣,用戶態(tài)的程序就不能隨意操作內核地址空間,具有一定的安全保護作用。保護模式,通過內存頁表操作等機制,保證進程間的地址空間不會互相沖突,一個進程的操作不會修改另一個進程的地址空間中的數(shù)據(jù)。在內核態(tài)下,CPU可執(zhí)行任何指令,在用戶態(tài)下CPU只能執(zhí)行非特權指令。當CPU處于內核態(tài),可以隨意進入用戶態(tài);而當CPU處于用戶態(tài),只能通過中斷的方式進入內核態(tài)。一般程序一開始都是運行于用戶態(tài),當程序需要使用系統(tǒng)資源時,就必須通過調用軟中斷進入內核態(tài). 

用戶態(tài)切換到內核態(tài)的三種方式

1、系統(tǒng)調用

這是用戶態(tài)進程主動要求切換到內核態(tài)的一種方式,用戶態(tài)進程通過系統(tǒng)調用申請使用操作系統(tǒng)提供的服務程序完成工作。而系統(tǒng)調用的機制,其核心還是使用了操作系統(tǒng)為用戶特別開放的一個中斷來實現(xiàn),例如lx86的int 80h

2、異常

當CPU在執(zhí)行運行在用戶態(tài)下的程序時,發(fā)生了某些事先不可知的異常,這時會觸發(fā)由當前運行進程切換到處理此異常的內核相關的程序中,也就是轉到了內核態(tài),比如缺頁異常。    

3、外圍設備的中斷

當外圍設備完成用戶請求的操作后,會向CPU發(fā)出相應的中斷信號,這時CPU會暫停執(zhí)行下一條即將要執(zhí)行的指令轉而去執(zhí)行與中斷信號對應的處理程序,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個轉換的過程自然也就發(fā)生了由用戶態(tài)到內核態(tài)的切換。比如硬盤讀寫操作的完成,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。
 
這3種方式是系統(tǒng)在運行時由用戶態(tài)轉到內核態(tài)的最主要方式,其中系統(tǒng)調用可以認為是用戶進程主動發(fā)起的,異常和外圍中斷是被動的。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容