Linux中的系統呼叫

2021-10-10 23:01:19 字數 593 閱讀 8638

當使用者態的程序呼叫乙個系統呼叫時,cpu切換到核心態並開始執行乙個核心函式。

核心實現了許多不同的系統呼叫,程序必須傳遞乙個名為系統呼叫號(system call number)的引數來識別所需的系統呼叫,eax暫存器就用作此目的。

所有的系統呼叫均返回乙個整數值。

系統處理程式與其他異常處理程式的結構類似:

在核心態儲存大多數暫存器的內容

呼叫名為系統呼叫服務例程的相應的c函式來處理系統呼叫

退出系統呼叫處理程式:用儲存在核心棧中的值載入暫存器,cpu從核心態切換回到使用者態。(所有的系統呼叫都要執行這一相同操作,該操作用組合語言**實現)。

system_call

()函式首先把系統呼叫號和這個異常處理程式用到的所有cpu暫存器儲存到相應的棧中;

引數傳遞:系統呼叫通常也需要輸入/輸出引數,這些引數可能是實際的值,也可能是使用者態程序位址空間的變數,甚至是指向使用者態函式的指標的資料結構位址;

為了用暫存器傳遞引數,必須滿足兩個條件:

每個引數的長度不能超過暫存器的長度

引數的個數不能超過6個(除了eax中傳遞的系統呼叫號)(不同的平台限制不同);

參考:深入理解linux核心

linux中的系統呼叫

linux 0.11 中的close api解析 通常情況下,呼叫系統呼叫和呼叫普通自定義函式在 上並沒有什麼區別,但呼叫後發生的事情有很大不同。呼叫自定義函式是通過call指令直接跳轉到該函式的位址,繼續執行。呼叫系統呼叫是呼叫系統庫中為該系統呼叫編寫的乙個介面函式,即api。而api要做的就是去...

Linux中的wait系統呼叫

系統中的殭屍程序都要由wait系統呼叫來 下面就通過實戰看一看wait的具體用法 wait的函式原型是 include 提供型別pid t的定義 include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如...

linux中wait系統呼叫

系統中的殭屍程序都要由wait系統呼叫來 下面就通過實戰看一看wait的具體用法 wait的函式原型是 include 提供型別pid t的定義 include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經 退出,...