1. 程式人生 > >系統呼叫與過程呼叫

系統呼叫與過程呼叫

程式中執行系統呼叫或過程(函式)呼叫,雖然都是對某種功能或服務的需求,

但兩者從呼叫形式到具體實現都有很大區別。

(1)呼叫形式不同。過程(函式)使用一般呼叫指令,其轉向地址是固定不變的,

包含在跳轉語句中;但系統呼叫中不包含處理程式入口,而僅僅提供功能號,按功能號呼叫。

--->過程函式在編譯成程式後,程式碼的邏輯地址是固定不變的。系統呼叫在程式中並不會產生函式程式碼,所以也沒有入口點一說。

(2)被呼叫程式碼的位置不同。過程(函式)呼叫是一種靜態呼叫,呼叫者和被呼叫

程式碼在同一程式內,經過連線編輯後作為目的碼的一部份。當過程(函式)升級或

修改時,必須重新編譯連結。而系統呼叫是一種動態呼叫,系統呼叫的處理程式碼在調

用程式之外(在作業系統中),這樣一來,系統呼叫處理程式碼升級或修改時,與呼叫

程式無關。而且,呼叫程式的長度也大大縮短,減少了呼叫程式佔用的儲存空間。

--->這裡需要注意程式與程序的關聯與區別。程序載入程式的程式碼以及資料。無論如何,執行中的程式在呼叫的時候無論函式或者系統呼叫,都是需要實體的程式碼,這些程式碼,程序都會載入。不同就在於程式碼的“位置”,或者我們可以理解為位置。程序的地址空間中包含使用者地址空間與核心地址空間。使用者態的程序只能執行使用者的程序地址空間中的程式碼,而系統呼叫的程式碼是存在於核心地址空間中的,所以系統呼叫首先要轉換到核心態。

核心地址空間裡的東西我們可以理解所有程序都共享的,屬作業系統控制的範疇。

(3)提供方式不同。過程(函式)往往由編譯系統提供,不同編譯系統提供的過程

(函式)可以不同;系統呼叫由作業系統提供,一旦作業系統設計好,系統呼叫的功

能、種類與數量便固定不變了。

(4)呼叫的實現不同。程式使用一般機器指令(跳轉指令)來呼叫過程(函式),

是在使用者態執行的;程式執行系統呼叫,是通過中斷機構來實現,需要從使用者態轉變

到核心態,在管理狀態執行,因此,安全性好。

主體摘自作業系統教程。附加個人理解。