對於linux系統開發,系統呼叫是平常開發工作中算是用的比較多,那什麼是系統呼叫呢?
顧名思義,系統呼叫就是由核心抽象出的一些介面**用層呼叫,從而達到應用層訪問得以訪問核心層資源,之所以需要這麼麻煩,是因為linux系統中分為核心態和使用者態,這裡簡單可以認為不同的記憶體位址所具有的許可權不一樣,核心態可以訪問使用者態記憶體,使用者態不可以訪問核心態,但實際如果需要通過核心態訪問資源,就需要通過呼叫系統呼叫介面間接訪問核心態了。
一般來說中斷可以分兩種,軟中斷和硬中斷
系統呼叫介面之所以能夠訪問核心態程式,是使用了軟中斷的實現方式
中斷有兩個屬性,乙個稱為中斷號(從0開始0),乙個稱為中斷處理程式(interrupt service routine, isr).不同的中斷具有不同的終端號,而同時乙個中斷處理程式一一對應乙個中斷號。在核心中,有乙個陣列稱為中斷向量表(interrupt vector table),這個陣列的第n項包含了指向第n號中斷的中斷處理程式的指標。當中斷到來時,cpu會暫時中斷當前執行的**,根據中斷的中斷號,在中斷向量表中找到對應的中斷處理程式,並呼叫它。中斷處理程式執行完成以後,cpu會繼續執行之前的**。
舉個例子,執行系統呼叫fork流程
eax暫存器存放的是系統呼叫號,當然系統呼叫傳參會放到對應的暫存器上,然後呼叫init 0x80指令切換到核心態,再執行真正的系統呼叫實現
Linux系統呼叫原理
rootfs 使用者空間 kernel 核心空間 檔案系統 裝置驅動 網路協議棧 程序管理 記憶體管理 平台 系統呼叫 七大子系統 uboot 硬體linux系統分為使用者空間和核心空間 使用者空間的特性 包含了應用軟體,c庫,對應的cpu的工作模式為usr模式 不能直接訪問硬體裝置 如果進行記憶體...
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系統呼叫 syscall 原理
linux體系結構 核心空間與使用者空間是程式執行的兩種不同狀態,通過系統呼叫和硬體中斷能夠完成從使用者空間到核心空間的轉移。如下圖所示 linux 體系結構圖 從上圖得知,linux由使用者空間和核心空間 一般情況下,使用者程序是不能訪問核心的。它既不能訪問核心所在的記憶體空間,也不能呼叫核心中的...