系統呼叫

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
系統呼叫(system calls), Linux內核, GNU C函數庫(glibc).

電腦中,系統呼叫(英語:system call),指運行在用戶空間程式作業系統內核請求需要更高權限運行的服務。系統呼叫提供用戶程式與作業系統之間的介面。大多數系統互動式操作需求在內核態執行。如裝置IO操作或者行程間通訊。

用戶空間(用戶態)和內核空間(內核態)[編輯]

作業系統的行程空間可分為用戶空間內核空間,它們需要不同的執行權限。其中系統呼叫執行在內核空間

函數庫函數[編輯]

系統呼叫和普通函數庫函數呼叫非常相似,只是系統呼叫由作業系統內核提供,執行於內核核心態,而普通的函數庫函數呼叫由函數函數庫或用戶自己提供,執行於用戶態。

典型實現(Linux)[編輯]

Linux 在x86上的系統呼叫通過 int 80h 實現,用系統呼叫號來區分入口函數。作業系統實現系統呼叫的基本過程是:

  1. 應用程式呼叫函數庫函數(API);
  2. API 將系統呼叫號存入 EAX,然後通過中斷呼叫使系統進入內核態;
  3. 內核中的中斷處理常式根據系統呼叫號,呼叫對應的內核函數(系統呼叫);
  4. 系統呼叫完成相應功能,將返回值存入 EAX,返回到中斷處理常式;
  5. 中斷處理常式返回到 API 中;
  6. API 將 EAX 返回給應用程式。

應用程式呼叫系統呼叫的過程是:

  1. 把系統呼叫的編號存入 EAX;
  2. 把函數參數存入其它通用暫存器;
  3. 觸發 0x80 號中斷(int 0x80)。