核心空間,使用者空間,系統呼叫三者之間的關係

2021-10-10 01:25:13 字數 1458 閱讀 2661

核心在os啟動時部署在記憶體上稱為「核心空間」的區域中並執行,但其他程式在稱為「使用者空間」的記憶體區域中執行。

shell也在「使用者空間」中執行,從shell呼叫的程式(命令)也在「使用者空間」中執行。這是乙個通過分離來保護核心的結構。使用者空間上的程序訪問核心空間的手段是「系統呼叫」。

正在執行的程式(=程序)可以在自己的記憶體區域內自由使用(不通過核心),但是在向hdd寫入或通過nic進行網路通訊等,在向自己的記憶體外傳送資訊時,會問核心。

但是,如果程序可以任意處理核心的請求內容,就會出現安全問題。因此,在系統呼叫中準備了幾種,根據種類決定可以委託的內容。

例如,從檔案中讀取使用系統呼叫為read。

同樣,寫入檔案是write,記憶體請求是malloc,新的程序生成是fork和clone。

都是核心的工作是必要的處理,這樣的定型的委託使之使用,隨意的委託不能發出的限制,是為了保護核心。

換句話說,核心在結構上受到保護,通過固定的漏洞「系統呼叫」可以安全地使用核心的功能。

使用者空間的程式必須被授予「執行使用者」。

例如,在多使用者環境的linux的情況下,一般使用者在登入時啟動shell,一般使用者使用該shell進行操作。

shell的執行使用者是登入使用者,從shell呼叫的程式基本上也是其登入使用者。

這種繫結到人的使用者被稱為「普通使用者」。

例如,當登入到linux帳戶i.suzuki並啟動bash時,bash的執行使用者是i.suzuki。

以下是普通使用者通過shell使用cat命令時的影象。

另一方面,在linux伺服器等中,即使人不手動登入,程式也會自動啟動,對來自網路的請求自動進行應答處理。

例如,dns伺服器的bind的程式和郵件伺服器的postfix的程式很有名。

bind的執行使用者是named,postfix的執行使用者一般是postfix,但這些使用者不能登入。因為沒有設定登入shell(在成功登入後可以操作的shell)。(反過來說,如果您設定登入shell,您可以登入。)。

這種不允許登入並用於執行自動啟動程式的使用者被稱為「系統使用者(服務使用者)」。

程式只能在執行使用者許可權內完成。例如,程式的執行使用者判斷是否可以訪問檔案系統。

一般使用者通過shell當場一邊思考一邊進行非定型處理。另一方面,系統使用者的程式按照預先確定的(程式設計)進行定型處理。

那個時候不使用shell。

這個想法在gui環境的linux和windows中也是一樣的。

在登入時,啟動各種程式來提供桌面環境,而不是shell,但執行使用者將成為登入使用者,訪問檔案系統也受到執行使用者的限制。

使用者空間與核心空間通訊介面之procfs

procfs是比較老的一種使用者態與核心態的資料交換方式,核心的很多資料都是通過這種方式出口給使用者的,核心的很多引數也是通過這種方式來讓使用者方便設定的。除了sysctl出口到 proc下的引數,procfs提供的大部分核心引數是唯讀的。struct proc dir entry create p...

使用者空間與核心空間的介面 proc檔案系統

最早在接觸linux bsp時,專案中有一項規格就是底層需向上層提供硬體pcb及bom資訊。由於在linux的根檔案系統 proc目錄下有硬體cpu 記憶體 儲存器等與硬體相關的資訊,並且在使用者空間通過cat命令就可以輕易獲得,於是有個想法,就是設法將專案中硬體pcb及bom等資訊展現在 proc...

網域名稱 空間 伺服器 三者之間的關係

網域名稱首先指向你的伺服器,這個過程叫解析。伺服器分成好多小塊,每小塊叫乙個空間或者乙個虛擬主機。所以當你輸入你的網域名稱以後,伺服器收到你網域名稱的訪問資訊,但不知道要開啟這麼多個小塊中的那乙個。所以要在你的空間上增加進去你的網域名稱,意思是你這個空間只支援輸入你的網域名稱才可以訪問,這一過程叫做...