您好,登錄后才能下訂單哦!
本篇內容介紹了“Linux用戶態和內核態怎么理解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
我們先來看一張Linux
整體架構圖。
系統調用時操作系統的最小功能單位。根據不同的應用場景,不同的Linux
發行版本提供的系統調用數量也不盡相同,大致在240-350之間。這些系統調用組成了用戶態跟內核態交互的基本接口,例如:用戶態想要申請一塊20K大小的動態內存,就需要brk系統調用,將數據段指針向下偏移,如果用戶態多處申請20K動態內存,同時又釋放呢?這個內存的管理就變得非常的復雜。
庫函數就是屏蔽這些復雜的底層實現細節,減輕程序員的負擔,從而更加關注上層的邏輯實現。它對系統調用進行封裝,提供簡單的基本接口給用戶,這樣增強了程序的靈活性,當然對于簡單的接口,也可以直接使用系統調用訪問資源,例如:open()
,write()
,read()
等等。庫函數根據不同的標準也有不同的版本,例如:glibc
庫,posix
庫等。
Shell
顧名思義,就是外殼的意思。就好像把內核包裹起來的外殼。它是一種特殊的應用程序,俗稱命令行。為了方便用戶和系統交互,一般一個Shell
對應一個終端,呈現給用戶交互窗口。當然Shell
也是編程的,它有標準的shell
語法,符合其語法的文本叫Shell
腳本。很多人都會用Shell
腳本實現一些常用的功能,可以提高工作效率。
在CPU
的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如:清內存、設置時鐘等。如果所有的程序都能使用這些指令,那么你的系統一天死機N回就不足為奇了。所以,CPU
將指令分為特權指令和非特權指令,對于那些危險的指令,只允許操作系統及其相關模塊使用,普通的應用程序只能使用那些不會造成災難的指令。Intel
的CPU
將特權級別分為4個級別:RING0
、RING1
、RING2
、RING3
。
當一個任務(進程)執行系統調用而陷入內核代碼中執行時,我們就稱進程處于內核運行態(或簡稱為內核態)。此時處理器處于特權級最高的(0級)內核代碼中執行。
當進程處于內核態時,執行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。
當進程在執行用戶自己的代碼時,則稱其處于用戶運行態(用戶態)。即此時處理器在特權級最低的(3級)用戶代碼中運行。
當正在執行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象征性地稱為處于進程的內核態。Linux
使用了Ring3
級別運行用戶態,Ring0
作為 內核態,沒有使用Ring1
和Ring2
。Ring3
狀態不能訪問Ring0
的地址空間,包括代碼和數據。Linux
進程的4GB
地址空間,3G-4G部分大家是共享的,是內核態的地址空間,這里存放在整個內核的代碼和所有的內核模塊,以及內核所維護的數據。用戶運行一個程序,該程序所創建的進程開始是運 行在用戶態的,如果要執行文件操作,網絡數據發送等操作,必須通過write
,send
等系統調用,這些系統調用會調用內核中的代碼來完成操作,這時,必 須切換到Ring0
,然后進入3GB-4GB
中的內核地址空間去執行這些代碼完成操作,完成后,切換回Ring3
,回到用戶態。
這樣,用戶態的程序就不能 隨意操作內核地址空間,具有一定的安全保護作用。
處理器總處于以下狀態中的一種:
1、內核態,運行于進程上下文,內核代表進程運行于內核空間;
2、內核態,運行于中斷上下文,內核代表硬件運行于內核空間;
3、用戶態,運行于用戶空間。
從用戶態到內核態切換可以通過三種方式:
**系統調用:**這是用戶態進程主動要求切換到內核態的一種方式,用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作,比如前例中fork()實際上就是執行了一個創建新進程的系統調用。而系統調用的機制其核心還是使用了操作系統為用戶特別開放的一個中斷來實現,例如Linux的int 80h中斷。
**異常:**當CPU在執行運行在用戶態下的程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了內核態,比如缺頁異常。
**外設中斷:**當外圍設備完成用戶請求的操作后,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序,如果先前執行的指令是用戶態下的程序,那么這個轉換的過程自然也就發生了由用戶態到內核態的切換。比如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行后續操作等。
這3種方式是系統在運行時由用戶態轉到內核態的最主要方式,其中系統調用可以認為是用戶進程主動發起的,異常和外圍設備中斷則是被動的。
“Linux用戶態和內核態怎么理解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。