linux核心之系統呼叫

2021-07-04 12:26:42 字數 1365 閱讀 4316

應用程式與系統呼叫    

使用者應用程式訪問並使用核心所提供的各種服務的途徑,就是系統呼叫,系統呼叫介面層作為核心和使用者應用程式之間的中間層,扮演了乙個橋梁,系統呼叫把應用程式的請求傳達給核心,核心處理完後,把結果返回給應用程式。

應用程式通過作業系統提供的應用程式設計介面api而不是直接通過系統呼叫來程式設計。

linux相容於posix標準,(protable operating system inte***ce of  unix),乙個api可由多個系統呼叫完成。

作業系統api通常以c庫的方式提供,c庫的函式又由系統呼叫實現

系統命令也是由系統呼叫實現的。

系統呼叫表

系統呼叫表sys_call_table儲存了系統呼叫對應的服務例程的函式位址

entry(sys_call_table)

.long sys_exit

系統呼叫的函式都是以sys_字首的,

每個系統呼叫都有獨一無二的系統呼叫號

每乙個系統呼叫號都剛好對應了系統呼叫表中的某一項

系統呼叫服務例程

以  asmlinkage long sys_getpid(void)

為例,系統呼叫服務例程都以asmlinkage 為開頭,返回值都為long,如果執行錯誤返回為負值,然後函式名都以sys_開頭

系統呼叫的使用方式為,1,通過使用者呼叫c庫函式去呼叫系統呼叫

2.使用者直接呼叫系統呼叫,使用者直接呼叫系統呼叫時,使用_syscalln0 ,1,2,3,4,5,6完成,數字代表系統呼叫的引數個數。

為什麼要進行系統呼叫呢

1,系統呼叫為使用者空間提供統一的訪問硬體資源的介面,以至於應用程式不需要知道具體的硬體訪問操作

2.可以對系統進行保護,保護了系統的穩定與安全

系統呼叫執行過程

系統呼叫執行需要乙個使用者空間到核心空間的轉換。不同平台有不同指令完成,這種指令叫作業系統陷入

x86中是軟中斷0x80

執行到軟中斷服務程式後,呼叫系統呼叫處理程式,系統呼叫處理程式根據系統呼叫號,從系統呼叫表中找到系統呼叫服務程式,執行

系統呼叫的實現

要實現乙個系統呼叫

(1)要編寫系統呼叫服務例程

asmlinkage long  sys_hello()

在include/linux/syscalls.h中宣告函式

插曲:使用者空間和核心之間安全的傳送資料需要使用核心提供的函式strndup_user函式

(2)新增系統呼叫號

在include/asm-i386/unistd.h

(3)修改系統呼叫表

.long sys_hello

(4)重新編譯核心並測試

應用程式直接呼叫,使用syscall(系統呼叫號);

Linux核心之系統呼叫

linux核心之系統呼叫 1.應用程式通過api而不是直接呼叫系統呼叫來程式設計 2.getpid 系統呼叫示例 asmlinkage long sys getpid void asmlinkage 編譯器僅從棧中提取引數 系統呼叫的命名規則 sys syscallname 3.每個系統呼叫都對應乙...

Linux核心之系統呼叫

1.應用程式通過api而不是直接呼叫系統呼叫來程式設計 2.getpid 系統呼叫示例 asmlinkage long sys getpid void asmlinkage 編譯器僅從棧中提取引數 系統呼叫的命名規則 sys syscallname 3.每個系統呼叫都對應乙個唯一的系統呼叫號,如果系...

Linux核心學習之系統呼叫

文章參考linux核心修煉之道。1.系統呼叫概念 大家都知道作業系統的作用是管理計算機的軟硬體資源,但是作業系統要向使用者提供各種各樣的服務,而使用者應用程式訪問這些服務的方式就是通過系統呼叫。但是一般來說,我們都是通過作業系統封裝好的api 應用程式設計介面 來間接使用系統呼叫的。比如在windo...