-
用户空間
鎖定
- 中文名
- 用户空間
- 外文名
- User space
- 別 名
- 使用者空間
- 相關術語
- 核心空間
- 學 科
- 計算機科學
目錄
用户空間用户空間概述
Linux系統將自身劃分為兩部分,一部分為核心軟件,即是kernel,也稱作內核空間,另一部分為普通應用程序,這部分稱為用户空間。
用户空間中的代碼運行在較低的特權級別上,只能看到允許它們使用的部分系統資源,並且不能使用某些特定的系統功能,也不能直接訪問內核空間和硬件設備,以及其他一些具體的使用限制。
用户空間定義
這是存儲器保護機制中的一環。
而其他的應用程序,則運行在用户空間上。
所有運行在用户空間的應用程序,都被統稱為用户級(userland)。
用户空間linux中的用户空間與內核空間
linux驅動程序一般工作在內核空間,但也可以工作在用户空間。
Linux簡化了分段機制,使得虛擬地址與線性地址總是一致,因此,Linux的虛擬地址空間也為0~4G。Linux內核將這4G字節的空間分為兩部分:
將最高的1G字節(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱為“內核空間”;
因為每個進程可以通過系統調用進入內核,因此,Linux內核由系統內的所有進程共享。於是,從具體進程的角度來看,每個進程可以擁有4G字節的虛擬空間。
Linux使用兩級保護機制:0級供內核使用,3級供用户程序使用。每個進程有各自的私有用户空間(0~3G),這個空間對系統中的其他進程是不可見的。最高的1GB字節虛擬內核空間則為所有進程以及內核所共享。
內核空間中存放的是內核代碼和數據,而進程的用户空間中存放的是用户程序的代碼和數據。不管是內核空間還是用户空間,它們都處於虛擬空間中。
雖然內核空間佔據了每個虛擬空間中的最高1GB字節,但映射到物理內存卻總是從最低地址(0x00000000)開始。對內核空間來説,其地址映射是很簡單的線性映射,0xC0000000就是物理地址與線性地址之間的位移量,在Linux代碼中就叫做PAGE_OFFSET。
用户空間內核空間和用户空間之間如何進行通訊?
內核空間和用户空間一般通過系統調用進行通信。
用户空間用户模式驅動內核模式驅動的判斷及標準
用户空間模式的驅動一般通過系統調用來完成對硬件的訪問,如通過系統調用將驅動的io空間映射到用户空間等。
因此,主要的判斷依據就是系統調用。
內核空間和用户空間上不同太多了,比如用户態的鏈表和內核鏈表不一樣;用户態用printf,內核態用printk;用户態每個應用程序空間是虛擬的,相對獨立的,內核態中卻不是獨立的,所以編程要非常小心等等。
還有用户態和內核態程序通訊的方法很多,不單單是系統調用,實際上系統調用是個不好的選擇,因為需要系統調用號,這個需要統一分配。可以通過ioctl、sysfs、proc等來完成。
- 參考資料
-
- 1. linux內核空間和用户空間詳解 .CSDN[引用日期2018-07-31]