用戶空間

用戶空間

作業系統中,虛擬記憶體通常會被分成用戶空間(又稱使用者空間),與核心空間這兩個區塊。

基本介紹

  • 中文名:用戶空間
  • 外文名:User space
  • 別名:使用者空間
  • 相關術語:核心空間
  • 學科:計算機科學
用戶空間概述,定義,linux中的用戶空間與核心空間,核心空間和用戶空間之間如何進行通訊?,用戶模式驅動核心模式驅動的判斷及標準,

用戶空間概述

Linux系統將自身劃分為兩部分,一部分為核心軟體,即是kernel,也稱作核心空間,另一部分為普通應用程式,這部分稱為用戶空間。
用戶空間中的代碼運行在較低的特權級別上,只能看到允許它們使用的部分系統資源,並且不能使用某些特定的系統功能,也不能直接訪問核心空間和硬體設備,以及其他一些具體的使用限制。

定義

作業系統中,虛擬記憶體通常會被分成用戶空間(英語:User space,又譯為使用者空間),與核心空間(英語:Kernel space,又譯為核心空間)這兩個區塊。
這是存儲器保護機制中的一環。
核心、核心擴充(kernel extensions)、以及驅動程式,運行在核心空間上。
而其他的應用程式,則運行在用戶空間上。
所有運行在用戶空間的應用程式,都被統稱為用戶級(userland)。

linux中的用戶空間與核心空間

linux驅動程式一般工作在核心空間,但也可以工作在用戶空間。
Linux簡化了分段機制,使得虛擬地址與線性地址總是一致,因此,Linux的虛擬地址空間也為0~4G。Linux核心將這4G位元組的空間分為兩部分:
將最高的1G位元組(從虛擬地址0xC0000000到0xFFFFFFFF),供核心使用,稱為“核心空間”;
而將較低的3G位元組(從虛擬地址 0x00000000到0xBFFFFFFF),供各個進程使用,稱為“用戶空間)。
因為每個進程可以通過系統調用進入核心,因此,Linux核心由系統內的所有進程共享。於是,從具體進程的角度來看,每個進程可以擁有4G位元組的虛擬空間。
Linux使用兩級保護機制:0級供核心使用,3級供用戶程式使用。每個進程有各自的私有用戶空間(0~3G),這個空間對系統中的其他進程是不可見的。最高的1GB位元組虛擬核心空間則為所有進程以及核心所共享。
核心空間中存放的是核心代碼和數據,而進程的用戶空間中存放的是用戶程式的代碼和數據。不管是核心空間還是用戶空間,它們都處於虛擬空間中。
雖然核心空間占據了每個虛擬空間中的最高1GB位元組,但映射到物理記憶體卻總是從最低地址(0x00000000)開始。對核心空間來說,其地址映射是很簡單的線性映射,0xC0000000就是物理地址與線性地址之間的位移量,在Linux代碼中就叫做PAGE_OFFSET。

核心空間和用戶空間之間如何進行通訊?

核心空間和用戶空間一般通過系統調用進行通信。

用戶模式驅動核心模式驅動的判斷及標準

用戶空間模式的驅動一般通過系統調用來完成對硬體的訪問,如通過系統調用將驅動的io空間映射到用戶空間等。
因此,主要的判斷依據就是系統調用。

核心空間和用戶空間上不同太多了,比如用戶態的鍊表和核心鍊表不一樣;用戶態用printf,核心態用printk;用戶態每個應用程式空間是虛擬的,相對獨立的,核心態中卻不是獨立的,所以編程要非常小心等等。
還有用戶態和核心態程式通訊的方法很多,不單單是系統調用,實際上系統調用是個不好的選擇,因為需要系統調用號,這個需要統一分配。可以通過ioctl、sysfs、proc等來完成。

相關詞條

熱門詞條

聯絡我們