Kernel
如果不是程式語言中的實現,“系統呼叫”是什麼意思?
我想理解術語“系統呼叫”。我熟悉系統呼叫用於從使用者空間應用程序獲取核心服務。
我需要澄清的部分是“系統呼叫”和“系統呼叫的 C 實現”之間的區別。
這是一個讓我困惑的引述:
在類 Unix 系統上,該 API 通常是 C 庫 (libc) 實現的一部分,例如 glibc,它為系統呼叫提供包裝函式,通常與它們呼叫的系統呼叫命名相同
什麼是“他們呼叫的系統呼叫”?他們的來源在哪裡?我可以將它們直接包含在我的程式碼中嗎?
一般意義上的“系統呼叫”是否只是一個 POSIX 定義的介面,但要實際查看實現,可以檢查 C 原始碼並在其中查看實際使用者空間與核心通信的實際情況?
背景說明:我試圖了解最終是否每個 c 函式最終與來自
/dev
.
系統呼叫本身是一個概念。它們代表程序可以要求核心執行的操作。
這些系統呼叫在類 UNIX 系統的核心中實現。這個實現(用 C 編寫,小部分用 asm 編寫)實際上執行系統中的操作。
然後,程序使用一個介面來請求系統執行系統呼叫。該介面由 POSIX 指定。這是 C 標準庫的一組函式。它們實際上是包裝器,它們可能會執行一些檢查,然後呼叫核心中的系統特定函式,告訴它執行系統呼叫所需的操作。訣竅是那些作為介面的函式的名稱與系統呼叫本身相同,並且通常直接稱為“系統呼叫”。
您可以通過系統特定的機制直接呼叫核心中執行系統呼叫的函式。問題是它使您的程式碼絕對不可移植。
因此,系統呼叫是:
- 一個概念,核心為向使用者程序提供服務而執行的一系列動作
- 您應該在程式碼中使用 C 標準庫的函式來從核心獲取此服務。