Linux核心設計基礎(七)之系統呼叫

2021-08-27 17:48:17 字數 1021 閱讀 8846

我理解的系統呼叫就是核心提供的一組使用者程序與核心進行互動的介面。除異常和陷入外,系統呼叫是核心唯一的合法入口。像/proc也是通過系統呼叫進行訪問的。

系統呼叫的意義:

系統呼叫的基本原理:

系統呼叫通常的入口是c庫中定義的函式,也可以是自定義的函式(通過syscall進行呼叫)。每個系統呼叫被賦予乙個系統呼叫號,通過這個獨一無二的號就可以關聯系統呼叫。如果乙個系統呼叫被刪除,它所占用的系統呼叫號也不允許被**利用,否則,以前編譯過的**會呼叫這個系統呼叫,但事實上卻呼叫另乙個系統呼叫。核心中用sys_call_table記錄所有已註冊過的系統呼叫。

既然系統呼叫要從使用者空間切換到核心態,那應用程式是如何通知核心的?軟中斷。通過引發乙個異常來促使系統切換到核心態去執行異常處理程式,不過這裡異常處理程式就是系統呼叫的處理程式。在x86上用int 0x80進行軟中斷的觸發,執行第128號異常處理程式system_call()。

系統呼叫新增過程:

asmlinkage long sys_mysyscall(void)

從使用者空間訪問系統呼叫

拿系統呼叫open()來說,

我們可以借助c庫,以

long open(const char *filename, int flags, int mode);

的形式呼叫此系統呼叫。也可以不靠庫支援:

#define nr_open 5

_syscall3(long, open, const char*, filename, int, flags, int, mode);

用巨集的方式,這樣在我們的程式中,不用引入c標頭檔案,直接使用open()即可。

常用系統呼叫

與一般函式的區別

系統設計之 核心元件設計

我們在設計乙個系統核心元件的時候需要注意什麼,這也是我經常問自己的,前段時間在開發 這個cms系統的時候,就遇到需要設計乙個cms的模板解析引擎,這個應該算的上是系統的核心元件,我就把這塊獨立成乙個專案開發,不光是這個專案可以使用,將來如果開發另一套cms的時候依然可以使用,其實這個元件就設計多個類...

linux核心之系統呼叫

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

Linux核心之系統呼叫

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