系統呼叫與普通過程呼叫的異同點

2021-09-29 21:44:26 字數 1017 閱讀 1983

相同點:

改變指令流程

重複執行和公用

改變指令流程後需要返回原處

不同點:

系統呼叫是動態呼叫,而call呼叫方式是靜態呼叫;

執行狀態不同

進入方式不同

與程序排程的關係不同:

巢狀或遞迴呼叫

1. 系統呼叫是動態呼叫,而call呼叫方式是靜態呼叫;

系統呼叫是動態呼叫,程式中不包含被呼叫**

好處:(1)使用者程式長度縮短

(2)當os公升級時,呼叫方不必改變

系統呼叫方式的呼叫位址和返回位址都是不固定的:系統呼叫指令中不包含呼叫位址,只包含功能號;系統呼叫返回指令中也不包含返回位址,通過棧儲存和彈出返回位址。

call呼叫方式是靜態呼叫:被呼叫**與呼叫**在同一程式之內。call呼叫方式,其呼叫位址是固定的,包含在呼叫語句中

2. 執行狀態不同

呼叫和返回經歷了不同的系統狀態:

核心和應用程式的**分別執行在cpu的不同的狀態下(系統態/核心態/管態和使用者態/目態),所用位址空間也不同――核心的**可以直接訪問應用程序的位址空間,反之不然。

3.進入方式不同

利用int或trap指令進行系統呼叫;利用call或jmp指令進入普通的過程呼叫;

call指令的內部實現過程:

返回位址壓棧(即該call指令所在的位址);

將該call指令中所含的位址(即被呼叫**所在位址)送入pc

ret指令的內部實現過程:

從棧頂彈出返回位址送入程式計數器pc

4. 與程序排程的關係不同

採用搶先式排程的系統,在系統呼叫返回時,要進行重新排程的檢查――是否有更高優先順序的任務就緒(建立或喚醒)。

5. 巢狀或遞迴呼叫

對系統呼叫,一般不允許在同乙個程序中發生巢狀或遞迴。

系統呼叫與庫函式的異同

本文,系統呼叫和庫函式呼叫的異同。以檔案操作為例,詳情參考 linux 系統呼叫和 ansi c 檔案操作的區別 我們知道在 linux 下對檔案操作有兩種方式 linux 系統呼叫和 ansi c 檔案操作。linux 系統呼叫指最底層的乙個呼叫,在 linux 程式設計裡面就是底層呼叫,面向的是...

系統呼叫sys write的過程

user space 只能通過系統呼叫來訪問kernel提供的函式,下面以sys read 為例 sys write函式宣告在include linux syscalls.h檔案中。這個檔案中申明了linux kernel提供的所有系統呼叫 asmlinkage long sys write uns...

Linux系統呼叫的過程

系統呼叫使用者態切換核心態的引發原因 呼叫系統呼叫函式 軟中斷 缺頁異常 硬中斷 系統呼叫的過程 產生0x80號中斷,儲存當前程序的現場資訊,將系統呼叫的系統呼叫號寫入eax暫存器中。中斷處理程式執行,也即切換到了核心態,此處也是執行程式呼叫的程式,從eax暫存器中讀出系統呼叫號,查詢系統呼叫表,找...