一、 什麼是系統呼叫
在linux的世界裡,我們經常會遇到系統呼叫這一術語,所謂系統呼叫,就是核心提供的、功能十分強大的一系列的函式。這些系統呼叫是在核心中實現的,再通過一定的方式把系統呼叫給使用者,一般都通過門(gate)陷入(trap)實現。系統呼叫就是使用者空間應用程式和核心提供的服務之間的乙個介面。由於服務是在核心中提供的,因此無法執行直接呼叫;相反,您必須使用乙個程序來跨越使用者空間與核心之間的界限。在特定架構中實現此功能的方法會有所不同。
二、 系統呼叫的作用
系統呼叫在linux系統中發揮著巨大的作用,如果沒有系統呼叫,那麼應用程式就失去了核心的支援。我們在程式設計時用到的很多函式,如fork、open等這些函式最終都是在系統呼叫裡實現的,這裡我們說到的兩個函式,即fork和exit,這兩函式都是glibc中的函式,但是如果我們跟蹤函式的執行過程,看看glibc對fork和exit函式的實現就可以發現在glibc的實現**裡都是採用軟中斷的方式陷入到核心中再通過系統呼叫實現函式的功能的。具體過程我們在系統呼叫的實現過程會詳細的講到。
由此可見,系統呼叫是使用者介面在核心中的實現,如果沒有系統呼叫,使用者就不能利用核心。
三、 系統呼叫的現實及呼叫過程
詳細講述系統呼叫的之前也講一下linux系統的一些保護機制。
linux系統在cpu的保護模式下提供了四個特權級別,目前核心都只用到了其中的兩個特權級別,分別為「特權級0」和「特權級3」,級別0也就是我們通常所講的核心模式,級別3也就是我們通常所講的使用者模式。劃分這兩個級別主要是對系統提供保護。核心模式可以執行一些特權指令和進入使用者模式,而使用者模式則不能。
這裡特別提出的是,核心模式與使用者模式分別使用自己的堆疊,當發生模式切換的時候同時要進行堆疊的切換。每個程序都有自己的位址空間(也稱為程序空間),程序的位址空間也分為兩部分:使用者空間和系統空間,在使用者模式下只能訪問程序的使用者空間,在核心模式下則可以訪問程序的全部位址空間,這個位址空間裡的位址是乙個邏輯位址,通過系統段面式的管理機制,訪問的實際記憶體要做二級位址轉換,即:邏輯位址、線性位址、實體地址。
系統呼叫對於核心來說就相當於函式,我們是關鍵問題是從使用者模式到核心模式的轉換、堆疊的切換以及引數的傳遞。
圖 1. 使用中斷方法的系統呼叫的簡化流程
圖 2. 系統呼叫表和各種鏈結
五、系統呼叫的功能和分類
作業系統核心在執行期間的活動可以分為兩個部分:上半部分(top half)和下半部分(bottom half),其中上半部分為應用程式提供系統呼叫或自陷的服務,是同步服務,由當前執行的程序引起,在當前程序上下文中執行並允許直接訪問當前程序的資料結構;而下半部分則是由處理硬體中斷的子程式,是屬於非同步活動,這些子程式的呼叫和執行與當前程序無關。上半部分允許被阻塞,因為這樣阻塞的是當前程序;下半部分不允許被阻塞,因為阻塞下半部分會引起阻塞乙個無辜的程序甚至整個核心。
這些系統呼叫按照功能邏輯大致可分為「程序控制」、「檔案系統控制」、「系統控制」、「存管管理」、「網路管理」、「socket控制」、「使用者管理」、「程序間通訊」幾類,詳細情況可參閱文章系統呼叫列表,見附錄1:
如果你想詳細看看系統呼叫的說明,可以使用man 2 syscalls 命令檢視,或乾脆到 《核心原始碼目錄》/include/asm-i386/unistd.h原始檔種找到它們的原本。
六、使用linux系統呼叫(請參考:http://www.ibm.com/developerworks/cn/linux/l-system-calls/)
解了系統呼叫的實現及呼叫過程,我們可以根據自己的需要來對核心的系統調用作修改或新增。
本段將介紹幾個系統呼叫的構造,從而展示它們的實現和使用者空間應用程式對它們的使用。
向核心中新增新系統呼叫,需要執行 3 個基本步驟:
新增新函式。
更新標頭檔案。
針對這個新函式更新系統呼叫表。
注意:請參考:http://blog.csdn.net/pengluer/archive/2010/01/07/5151410.aspx
附錄1:請參考:http://blog.csdn.net/pengluer/archive/2010/01/07/5151486.aspx
深入理解Linux系統呼叫
環境準備 1.安裝環境 1 sudo apt install build essential 2 sudo apt install qemu install qemu 3 sudo apt install libncurses5 dev bison flex libssl dev libelf de...
深入理解系統呼叫
一.實驗要求 二.實驗環境搭建 1.安裝開發工具 sudo apt install build essential sudo apt install qemu install qemu sudo apt install libncurses5 dev bison ex libssl dev libe...
深入理解Linux核心 系統呼叫
系統呼叫 使用者態程序向核心發出的,實現使用者態程序呼叫硬體裝置的函式或者中斷 優點 使程式設計更容易,將使用者從學習硬體裝置的低階程式設計特性中解放 提高系統到安全性,核心在滿足請求之前可以做正確性檢查 提高可移植性 系統呼叫與api呼叫的區別 1 api呼叫是乙個函式定義 系統呼叫是通過軟中斷向...