跳至內容

系統調用

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