rootfs (使用者空間)
|kernel (核心空間) --- 檔案系統 裝置驅動 網路協議棧 程序管理 記憶體管理 平台** 系統呼叫 --- 七大子系統
|uboot
|
硬體
linux系統分為使用者空間和核心空間
使用者空間的特性:
包含了應用軟體, c庫,對應的cpu的工作模式為usr模式;不能直接訪問硬體裝置;
如果進行記憶體的非法訪問,應用程式會崩潰,但是系統不會崩潰! ((int )0 = 0;)
4g虛擬記憶體,使用者空間獨佔前3g;
包含了7大子系統
檔案系統,裝置驅動,網路協議棧,程序管理,記憶體管理,平台**,系統呼叫
對應的cpu的工作模式為svc模式;
可以直接對硬體進行訪問操作;
如果進行記憶體的非法訪問,作業系統直接崩潰!
(int )0 = 0;
4g虛擬記憶體,核心空間獨佔後1g;
空間的劃分的本質目的:實現作業系統的自我保護
使用者和核心如何互動 –>通過系統呼叫
應用程式呼叫系統呼叫函式
系統呼叫號:linux系統給每乙個系統呼叫函式都分配乙個唯一的號碼,類似人的身份證號;
系統呼叫表:本質上就是乙個大陣列,每個元素儲存著乙個核心函式名(函式位址),陣列元素對應的下標就是系統呼叫號;
1.應用程式呼叫系統呼叫函式,首先呼叫到c庫的對應函式的定義地方;
例如read系統呼叫函式的定義在c庫中;
2.呼叫到c庫的函式定義的地方後,將會做如下工作:
2.1首先儲存read函式對應的系統呼叫號到r7暫存器
2.2呼叫svc指令觸發軟中斷異常
老arm體系結構:swi
新arm體系結構:svc
軟中斷:實現cpu的工作模式由usr切換到svc
此時:使用者程式由使用者空間「陷入」核心空間
3.一旦觸發異常,cpu跳轉到異常向量表軟中斷的處理入口,至此進入核心空間
4.進入軟中斷的處理入口以後,將會做如下事情:
1.從r7暫存器中取出系統呼叫號
2.2.以系統呼叫號為下標(索引)在系統呼叫表中找到對應的核心函式sys_read
5.找到對應的核心函式以後,呼叫這個核心函式,呼叫完畢,原路返回到使用者空間,至此應用程式的read函式呼叫完畢
Linux 系統呼叫原理
unistd.h檔案記錄著系統呼叫中斷號的資訊。syscall nr kill,sys kill security keys keyctl.c define nr add key 217 syscall nr add key,sys add key syscall define5 add key,c...
Linux系統呼叫原理
對於linux系統開發,系統呼叫是平常開發工作中算是用的比較多,那什麼是系統呼叫呢?顧名思義,系統呼叫就是由核心抽象出的一些介面 用層呼叫,從而達到應用層訪問得以訪問核心層資源,之所以需要這麼麻煩,是因為linux系統中分為核心態和使用者態,這裡簡單可以認為不同的記憶體位址所具有的許可權不一樣,核心...
Linux系統呼叫 syscall 原理
linux體系結構 核心空間與使用者空間是程式執行的兩種不同狀態,通過系統呼叫和硬體中斷能夠完成從使用者空間到核心空間的轉移。如下圖所示 linux 體系結構圖 從上圖得知,linux由使用者空間和核心空間 一般情況下,使用者程序是不能訪問核心的。它既不能訪問核心所在的記憶體空間,也不能呼叫核心中的...