系統呼叫

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
系統呼叫(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)。