系統呼叫
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
此條目沒有列出任何參考或來源。 (2021年1月21日) |
![](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/4/45/Linux_kernel_System_Call_Interface_and_glibc.svg/300px-Linux_kernel_System_Call_Interface_and_glibc.svg.png)
在電腦中,系統呼叫(英語:system call),指運行在用戶空間的程式向作業系統內核請求需要更高權限運行的服務。系統呼叫提供用戶程式與作業系統之間的介面。大多數系統互動式操作需求在內核態執行。如裝置IO操作或者行程間通訊。
用戶空間(用戶態)和內核空間(內核態)
作業系統的行程空間可分為用戶空間和內核空間,它們需要不同的執行權限。其中系統呼叫執行在內核空間。
函數庫函數
系統呼叫和普通函數庫函數呼叫非常相似,只是系統呼叫由作業系統內核提供,執行於內核核心態,而普通的函數庫函數呼叫由函式庫或用戶自己提供,執行於用戶態。
典型實現(Linux)
Linux 在x86上的系統呼叫通過 int 80h 實現,用系統呼叫號來區分入口函數。作業系統實現系統呼叫的基本過程是:
- 應用程式呼叫函數庫函數(API);
- API 將系統呼叫號存入 EAX,然後通過中斷呼叫使系統進入內核態;
- 內核中的中斷處理常式根據系統呼叫號,呼叫對應的內核函數(系統呼叫);
- 系統呼叫完成相應功能,將返回值存入 EAX,返回到中斷處理常式;
- 中斷處理常式返回到 API 中;
- API 將 EAX 返回給應用程式。
應用程式呼叫系統呼叫的過程是:
- 把系統呼叫的編號存入 EAX;
- 把函數參數存入其它通用暫存器;
- 觸發 0x80 號中斷(int 0x80)。