Linux: System Call
Understanding the Linux Kenel的第十章,寫到關於System Call,文中對System Call的說明如下:
在Unix系統中透過核心發出System Call來實作user process和硬體裝置之間大部分的介面。
此外也對POSIX API和System Call作了比較:
API:只是一種函式定義,用來只出如何取得特定的服務。
System Call:是透過軟體中斷事件來對核心提出明確的請求。
POSIX:就是指API而非System Call若系統中提供了一組適當的API給AP使用則可以歸類為POSIX。
由以上的說明很明顯的可以知道兩者的差異。
當System Call發生時,最終皆會跳轉到一個稱為System Call Handler的組語函式。在這函式中會作以下三件事情:
1. 將大多數的暫存器的內容儲存在kernel mode的stack中。
2. 調用system call service routine中相應的API來處理System Call。
3. 從System Call Handler離開,重新將第一步驟中儲存在stack中的值存回到暫存器中,此時CPU 會從kernel mode切回到user mode。
下圖是從Understanding the Linux Kernel中第十章節錄出來的,顯示了System Call的大致流程。
在Unix系統中透過核心發出System Call來實作user process和硬體裝置之間大部分的介面。
此外也對POSIX API和System Call作了比較:
API:只是一種函式定義,用來只出如何取得特定的服務。
System Call:是透過軟體中斷事件來對核心提出明確的請求。
POSIX:就是指API而非System Call若系統中提供了一組適當的API給AP使用則可以歸類為POSIX。
由以上的說明很明顯的可以知道兩者的差異。
當System Call發生時,最終皆會跳轉到一個稱為System Call Handler的組語函式。在這函式中會作以下三件事情:
1. 將大多數的暫存器的內容儲存在kernel mode的stack中。
2. 調用system call service routine中相應的API來處理System Call。
3. 從System Call Handler離開,重新將第一步驟中儲存在stack中的值存回到暫存器中,此時CPU 會從kernel mode切回到user mode。
下圖是從Understanding the Linux Kernel中第十章節錄出來的,顯示了System Call的大致流程。
留言
張貼留言