零聲Linux內?源核?碼 2023
2023-06-09 12:49 作者:bili_73767213996 | 我要投稿
系統(tǒng)調用
進程通過系統(tǒng)調用進入和退出內核模式,許多POSIX函數(shù)是系統(tǒng)調用的簡單封裝,如open,close,ictol,write和read等。驅動設備只能在內核模式下執(zhí)行,應用程序不能直接調用設備驅動程序,而是使用預定義的系統(tǒng)調用間接的訪問驅動程序代碼。
下面是系統(tǒng)調用read的一個例子:
n = syscall(SYS_read, fd, buffer, length)
Linux提供的系統(tǒng)調用列表由內核版本決定,并且不隨時間變化而變化。然而,用于創(chuàng)建系統(tǒng)調用的機制卻會因為不同處理器體系結構而不同。系統(tǒng)調用函數(shù)是一個用于創(chuàng)建系統(tǒng)調用的匯編代碼的封裝。命令strace對于追蹤系統(tǒng)調用非常有用,因為利用它可以知道當前任務執(zhí)行的情況。
通常用戶代碼先將參數(shù)壓入堆?;蛘弑4嬖陬A定義的寄存器中,然后在使用中斷調用系統(tǒng)調用處理器。中斷處理器將進程轉入到內核模式,并調用適當?shù)南到y(tǒng)調用。在內核模式下,它從寄存器中讀取參數(shù)或使用特定的函數(shù)從用戶空間復制參數(shù)。可移植程序不能直接使用系統(tǒng)調用,而是依賴庫為其實現(xiàn)系統(tǒng)調用。系統(tǒng)調用隨著操作系統(tǒng)版本變化而變化,庫的調用則無需這些變化。
標簽: