Linux系統(tǒng)調用接口、系統(tǒng)調用例程和內核服務例程的概念
發(fā)布時間:2009/2/18 0:00:00 訪問次數:1857
現(xiàn)在在業(yè)界,“系統(tǒng)調用”這個術語的使用有些混亂。為了討論問題清楚起見,下面在介紹“系統(tǒng)調用”這個術語來源的過程中,對于本書所使用的有關系統(tǒng)調用的名詞做一下約定。
在計算機系統(tǒng)沒有使用保護機制之前,進程與內核共同運行在同一個空間,根本就沒有用戶空間和內核空間的概念和界限。在某種意義上來說,內核可以看做進程的一部分,只不過這部分不是由應用程序設計者來編寫的。因此,在形式上,內核函數與普通的庫函數之間并沒有本質的區(qū)別,用戶應用程序對于這兩者都可以直接調用。但是,內核函數是為了提供系統(tǒng)功能服務的函數,或者說,用戶是為了享用系統(tǒng)提供的與系統(tǒng)有關的服務才調用內核函數的,所以為了與提供數學運算之類通用功能的函數相區(qū)別,就把提供內核服務的內核函數叫做“系統(tǒng)調用”,而把系統(tǒng)提供的通用函數叫做“庫函數”。
自從計算機硬件系統(tǒng)可支持保護模式后,為了計算機系統(tǒng)及內核的安全,保護模式規(guī)定:只有通過陷人指令迸程才能由用戶空間進人(也叫做“陷入”)內核空間。但由于高級語言不支持中斷,于是用高級語言編寫的用戶應用程序就不可能直接陷人內核來訪問內核函數了,于是內核也就安全了。
內核確實是安全了,但應用程序需要使用內核函數的服務時怎么辦呢?操作系統(tǒng)的開發(fā)人員就用高級語言設計了一些接口,在接口里在匯編語言的程序中使用陷人指令使進程進人內核來調用內核服務函數。然后,就把這些高級語言的接口提供給高級語言用戶,于是高級語言用戶即可通過這些預先設計的接口來調用內核服務,又不能隨便進人內核而對內核造成危害,這樣就兩全其美了。人們把上面的做法叫做對內核函數的封裝。當然,封裝之后的內核函數調用是系統(tǒng)調用。
但是,現(xiàn)在也正因為上面的這個原因,使得“系統(tǒng)調用”這個術語變得模糊起來。因為在有保護模式的系統(tǒng)中,經過了封裝的內核函數從程序結構上與普通函數就截然不同了。如果將封裝了的內核函數叫做系統(tǒng)調用,那么在沒有保護模式的系統(tǒng)中調用內核函數的方法又應叫做什么呢?至今,這個問題未見有人回答。所以,為了下面討論問題清楚起見,在這里做一個約定:應用程序調用內核服務的這個行為叫做“系統(tǒng)調用”;把提供服務的內核函數叫做“內核服務例程”;把陷入中斷后,用來對內核服務例程進行封裝的匯編函數叫做“系統(tǒng)調用例程”;把用高級語言對系統(tǒng)調用例程進行了再封裝之后,外觀看起來與高級語言函數沒有區(qū)別的這個函數叫做“系統(tǒng)調用接口”。
也就是說,在保護模式下,應用程序可調用的內核函數是如圖所示被包裹上了兩層之后的一個特殊接口。說它特殊,是因為系統(tǒng)調甩接口是通過中斷來調用系統(tǒng)調用例程的,正是這個調用使進程由用戶空間陷入了內核空間。
圖 內核函數的封裝
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
現(xiàn)在在業(yè)界,“系統(tǒng)調用”這個術語的使用有些混亂。為了討論問題清楚起見,下面在介紹“系統(tǒng)調用”這個術語來源的過程中,對于本書所使用的有關系統(tǒng)調用的名詞做一下約定。
在計算機系統(tǒng)沒有使用保護機制之前,進程與內核共同運行在同一個空間,根本就沒有用戶空間和內核空間的概念和界限。在某種意義上來說,內核可以看做進程的一部分,只不過這部分不是由應用程序設計者來編寫的。因此,在形式上,內核函數與普通的庫函數之間并沒有本質的區(qū)別,用戶應用程序對于這兩者都可以直接調用。但是,內核函數是為了提供系統(tǒng)功能服務的函數,或者說,用戶是為了享用系統(tǒng)提供的與系統(tǒng)有關的服務才調用內核函數的,所以為了與提供數學運算之類通用功能的函數相區(qū)別,就把提供內核服務的內核函數叫做“系統(tǒng)調用”,而把系統(tǒng)提供的通用函數叫做“庫函數”。
自從計算機硬件系統(tǒng)可支持保護模式后,為了計算機系統(tǒng)及內核的安全,保護模式規(guī)定:只有通過陷人指令迸程才能由用戶空間進人(也叫做“陷入”)內核空間。但由于高級語言不支持中斷,于是用高級語言編寫的用戶應用程序就不可能直接陷人內核來訪問內核函數了,于是內核也就安全了。
內核確實是安全了,但應用程序需要使用內核函數的服務時怎么辦呢?操作系統(tǒng)的開發(fā)人員就用高級語言設計了一些接口,在接口里在匯編語言的程序中使用陷人指令使進程進人內核來調用內核服務函數。然后,就把這些高級語言的接口提供給高級語言用戶,于是高級語言用戶即可通過這些預先設計的接口來調用內核服務,又不能隨便進人內核而對內核造成危害,這樣就兩全其美了。人們把上面的做法叫做對內核函數的封裝。當然,封裝之后的內核函數調用是系統(tǒng)調用。
但是,現(xiàn)在也正因為上面的這個原因,使得“系統(tǒng)調用”這個術語變得模糊起來。因為在有保護模式的系統(tǒng)中,經過了封裝的內核函數從程序結構上與普通函數就截然不同了。如果將封裝了的內核函數叫做系統(tǒng)調用,那么在沒有保護模式的系統(tǒng)中調用內核函數的方法又應叫做什么呢?至今,這個問題未見有人回答。所以,為了下面討論問題清楚起見,在這里做一個約定:應用程序調用內核服務的這個行為叫做“系統(tǒng)調用”;把提供服務的內核函數叫做“內核服務例程”;把陷入中斷后,用來對內核服務例程進行封裝的匯編函數叫做“系統(tǒng)調用例程”;把用高級語言對系統(tǒng)調用例程進行了再封裝之后,外觀看起來與高級語言函數沒有區(qū)別的這個函數叫做“系統(tǒng)調用接口”。
也就是說,在保護模式下,應用程序可調用的內核函數是如圖所示被包裹上了兩層之后的一個特殊接口。說它特殊,是因為系統(tǒng)調甩接口是通過中斷來調用系統(tǒng)調用例程的,正是這個調用使進程由用戶空間陷入了內核空間。
圖 內核函數的封裝
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
熱門點擊
- Linux設備驅動程序的函數跳轉表
- PIE中斷向量的映射方式
- Linux系統(tǒng)調用例程system_call
- PIE模塊級中斷
- 什么是Linux內核模塊
- Linux系統(tǒng)調用接口、系統(tǒng)調用例程和內核服
- ARM復位原理
- Linux系統(tǒng)調用接口、系統(tǒng)調用例程和內核服
- Linux字符設備驅動程序的注冊
- Linux外部設備的基本概念
推薦技術資料
- DFRobot—玩的就是
- 如果說新車間的特點是“靈動”,F(xiàn)QPF12N60C那么... [詳細]