複製鏈接
請複製以下鏈接發送給好友

用户態

鎖定
用户態(user mode)在計算機結構指兩項類似的概念。在CPU的設計中,用户態指非特權狀態。在此狀態下,執行的代碼被硬件限定,不能進行某些操作,比如寫入其他進程的存儲空間,以防止給操作系統帶來安全隱患。在操作系統的設計中,用户態也類似,指非特權的執行狀態。內核禁止此狀態下的代碼進行潛在危險的操作,比如寫入系統配置文件、殺掉其他用户的進程、重啓系統等。
中文名
用户態
外文名
user mode
概    念
計算機結構指兩項類似的概念
CPU設計
非特權狀態
核心態
ring 0
相    關
內核態

用户態簡介

用户態和內核態 用户態和內核態
用户態(user mode)在計算機結構指兩項類似的概念。在CPU的設計中,用户態指非特權狀態。在此狀態下,執行的代碼被硬件限定,不能進行某些操作,比如寫入其他進程的存儲空間,以防止給操作系統帶來安全隱患。在操作系統的設計中,用户態也類似,指非特權的執行狀態。內核禁止此狀態下的代碼進行潛在危險的操作,比如寫入系統配置文件、殺掉其他用户的進程、重啓系統等。
CPU設計中的用户態
用户態不允許程序進行處理器中要求特權態的操作,以避免操作系統崩潰。每個進程都在各自的用户空間中運行,而不允許存取其他程序的用户空間。
x86結構擁有四種級別,級別最高的是ring 0,也就是核心態。級別最低的是ring 3,也就是用户態。ring 1和ring 2設計成供驅動程式使用,但一般很少使用。
操作系統設計中的用户態
操作系統中的用户態,指權限等級中的一般級別,與之相對的是管理員或者超級用户(類Unix系統中,名為“root”或“superuser”等)的特權級別。用户態啓動的每個進程,根據運行該進程的用户,都被系統賦予特定的權限。
操作系統的用户態通常是在相應的CPU用户態中運行代碼,從而在硬件上,實現非法程序的控制。與CPU級別相比,操作系統容許用户態有更加複雜的權限設定。舉例而言,默認下的Unix系統中,運行在用户態的代碼,不準通過偵聽1024以下的端口號,以偽裝成常見的服務,而超級用户運行的代碼則有權這樣做。

用户態linux用户態

用户態用户態與內核態

當一個任務(進程)執行系統調用而陷入內核代碼中執行時,我們就稱進程處於內核運行態(或簡稱為內核態)。此時處理器處於特權級最高的(0 級)內核代碼中執行。當進程處於內核態時,執行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。
當進程在執行用户自己的代碼時,則稱其處於用户運行態(用户態)。即此時處理器在特權級最低的(3 級)用户代碼中運行。當正在執行用户程序而突然被中斷程序中斷時,此時用户程序也可以象徵性地稱為處於進程的內核態。因為中斷處理程序將使用當前進程的內核棧。這與處於內核態的進程的狀態有些類似。
簡言之:
1、用系統調用時進入核心態。Linux 對硬件的操作只能在核心態,這可以通過寫驅動程序來控制。在用户態操作硬件會造成core dump。
2、要注意區分系統調用和一般的函數。系統調用由內核提供,如read()、write()、open()等。而一般的函數由軟件包中的函數庫提供,如sin()、cos()等。在語法上兩者沒有區別。
3、一般情況:系統調用運行在核心態,函數運行在用户態。但也有一些函數在內部使用了系統調用(如fopen),這樣的函數在調用系統調用是進入核心態,其他時候運行在用户態。

用户態上下文關係

處理器總處於以下狀態中的一種:
1、內核態,運行於進程上下文,內核代表進程運行於內核空間;
2、內核態,運行於中斷上下文,內核代表硬件運行於內核空間;
3、用户態,運行於用户空間。
用户空間的應用程序,通過系統調用,進入內核空間。這個時候用户空間的進程要傳遞很多變量、參數的值給內核,內核態運行的時候也要保存用户進程的一些寄存器值、變量等。所謂的“進程上下文”,可以看作是用户進程傳遞給內核的這些參數以及內核要保存的那一整套的變量和寄存器值和當時的環境等。
硬件通過觸發信號,導致內核調用中斷處理程序,進入內核空間。這個過程中,硬件的一些變量和參數也要傳遞給內核,內核通過這些參數進行中斷處理。所謂的“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數和內核需要保存的一些其他環境(主要是當前被打斷執行的進程環境)。 [1] 
參考資料