免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Linux中內核空間與用戶空間的示例分析-創新互聯

這篇文章主要介紹了Linux中內核空間與用戶空間的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創新互聯建站2013年開創至今,是專業互聯網技術服務公司,擁有項目成都做網站、成都網站制作網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元兗州做網站,已為上家服務,為兗州各地企業和個人服務,聯系電話:028-86922220

內核空間和用戶空間

對 32 位操作系統而言,它的尋址空間(虛擬地址空間,或叫線性地址空間)為 4G(2的32次方)。也就是說一個進程的大地址空間為 4G。操作系統的核心是內核(kernel),它獨立于普通的應用程序,可以訪問受保護的內存空間,也有訪問底層硬件設備的所有權限。為了保證內核的安全,現在的操作系統一般都強制用戶進程不能直接操作內核。具體的實現方式基本都是由操作系統將虛擬地址空間劃分為兩部分,一部分為內核空間,另一部分為用戶空間。針對 Linux 操作系統而言,最高的 1G 字節(從虛擬地址 0xC0000000 到 0xFFFFFFFF)由內核使用,稱為內核空間。而較低的 3G 字節(從虛擬地址 0x00000000 到 0xBFFFFFFF)由各個進程使用,稱為用戶空間。

對上面這段內容我們可以這樣理解:

每個進程的 4G 地址空間中,最高 1G 都是一樣的,即內核空間。只有剩余的 3G 才歸進程自己使用。

換句話說就是, 最高 1G 的內核空間是被所有進程共享的!

下圖描述了每個進程 4G 地址空間的分配情況(此圖來自互聯網):

Linux中內核空間與用戶空間的示例分析

為什么需要區分內核空間與用戶空間

在 CPU 的所有指令中,有些指令是非常危險的,如果錯用,將導致系統崩潰,比如清內存、設置時鐘等。如果允許所有的程序都可以使用這些指令,那么系統崩潰的概率將大大增加。

所以,CPU 將指令分為特權指令和非特權指令,對于那些危險的指令,只允許操作系統及其相關模塊使用,普通應用程序只能使用那些不會造成災難的指令。比如 Intel 的 CPU 將特權等級分為 4 個級別:Ring0~Ring3。

其實 Linux 系統只使用了 Ring0 和 Ring3 兩個運行級別(Windows 系統也是一樣的)。當進程運行在 Ring3 級別時被稱為運行在用戶態,而運行在 Ring0 級別時被稱為運行在內核態。

內核態與用戶態

好了我們現在需要再解釋一下什么是內核態、用戶態:

當進程運行在內核空間時就處于內核態,而進程運行在用戶空間時則處于用戶態。

在內核態下,進程運行在內核地址空間中,此時 CPU 可以執行任何指令。運行的代碼也不受任何的限制,可以自由地訪問任何有效地址,也可以直接進行端口的訪問。

在用戶態下,進程運行在用戶地址空間中,被執行的代碼要受到 CPU 的諸多檢查,它們只能訪問映射其地址空間的頁表項中規定的在用戶態下可訪問頁面的虛擬地址,且只能對任務狀態段(TSS)中 I/O 許可位圖(I/O Permission Bitmap)中規定的可訪問端口進行直接訪問。

對于以前的 DOS 操作系統來說,是沒有內核空間、用戶空間以及內核態、用戶態這些概念的。可以認為所有的代碼都是運行在內核態的,因而用戶編寫的應用程序代碼可以很容易的讓操作系統崩潰掉。
對于 Linux 來說,通過區分內核空間和用戶空間的設計,隔離了操作系統代碼(操作系統的代碼要比應用程序的代碼健壯很多)與應用程序代碼。即便是單個應用程序出現錯誤也不會影響到操作系統的穩定性,這樣其它的程序還可以正常的運行(Linux 可是個多任務系統啊!)。

所以,區分內核空間和用戶空間本質上是要提高操作系統的穩定性及可用性。

如何從用戶空間進入內核空間

其實所有的系統資源管理都是在內核空間中完成的。比如讀寫磁盤文件,分配回收內存,從網絡接口讀寫數據等等。我們的應用程序是無法直接進行這樣的操作的。但是我們可以通過內核提供的接口來完成這樣的任務。

比如應用程序要讀取磁盤上的一個文件,它可以向內核發起一個 "系統調用" 告訴內核:"我要讀取磁盤上的某某文件"。其實就是通過一個特殊的指令讓進程從用戶態進入到內核態(到了內核空間),在內核空間中,CPU 可以執行任何的指令,當然也包括從磁盤上讀取數據。具體過程是先把數據讀取到內核空間中,然后再把數據拷貝到用戶空間并從內核態切換到用戶態。此時應用程序已經從系統調用中返回并且拿到了想要的數據,可以開開心心的往下執行了。

簡單說就是應用程序把高科技的事情(從磁盤讀取文件)外包給了系統內核,系統內核做這些事情既專業又高效。

對于一個進程來講,從用戶空間進入內核空間并最終返回到用戶空間,這個過程是十分復雜的。舉個例子,比如我們經常接觸的概念 "堆棧",其實進程在內核態和用戶態各有一個堆棧。運行在用戶空間時進程使用的是用戶空間中的堆棧,而運行在內核空間時,進程使用的是內核空間中的堆棧。所以說,Linux 中每個進程有兩個棧,分別用于用戶態和內核態。

下圖簡明的描述了用戶態與內核態之間的轉換:

Linux中內核空間與用戶空間的示例分析

既然用戶態的進程必須切換成內核態才能使用系統的資源,那么我們接下來就看看進程一共有多少種方式可以從用戶態進入到內核態。概括的說,有三種方式:系統調用、軟中斷和硬件中斷。這三種方式每一種都涉及到大量的操作系統知識,所以這里不做展開。

整體結構

接下來我們從內核空間和用戶空間的角度看一看整個 Linux 系統的結構。它大體可以分為三個部分,從下往上依次為:硬件 -> 內核空間 -> 用戶空間。如下圖所示(此圖來自互聯網):

Linux中內核空間與用戶空間的示例分析

在硬件之上,內核空間中的代碼控制了硬件資源的使用權,用戶空間中的代碼只有通過內核暴露的系統調用接口(System Call Interface)才能使用到系統中的硬件資源。其實,不光是 Linux,Windows 操作系統的設計也是大同小異。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Linux中內核空間與用戶空間的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯成都網站設計公司,關注創新互聯成都網站設計公司行業資訊頻道,更多相關知識等著你來學習!

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、網站設計器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網站題目:Linux中內核空間與用戶空間的示例分析-創新互聯
標題鏈接:http://m.newbst.com/article30/hsgso.html

成都網站建設公司_創新互聯,為您提供外貿網站建設軟件開發Google網站維護做網站微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設