Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服務(wù)例程之間的關(guān)系
發(fā)布時間:2009/2/18 0:00:00 訪問次數(shù):1792
系統(tǒng)調(diào)用接口的主要任務(wù)是把進(jìn)程從用戶態(tài)切換到內(nèi)核態(tài)。在具有保護(hù)機(jī)制的計算機(jī)系 統(tǒng)中,用戶必須通過軟件中斷或陷阱,才能使進(jìn)程從用戶態(tài)切換為內(nèi)核態(tài)。
在i386體系中,linux的系統(tǒng)調(diào)用接口是通過調(diào)用軟中斷指令“int $ oxso”使進(jìn)程從用戶態(tài)進(jìn)入內(nèi)核態(tài)的,這個過程也叫做“陷入”。當(dāng)系統(tǒng)調(diào)用接口調(diào)用軟中斷指令“int $ ox80”時,這個指令會發(fā)生一個中斷向量碼為128的中斷請求,并在中斷響應(yīng)過程中將進(jìn)程由用戶態(tài)切換為內(nèi)核態(tài)。
因為linux只允許系統(tǒng)調(diào)用接口使用128這一個軟中斷向量,這也就意味著所有的系統(tǒng)調(diào)用接口必須共享這一個中斷通道,并在同一個中斷服務(wù)例程中調(diào)用不同的內(nèi)核服務(wù)例程,所以,系統(tǒng)調(diào)用接口除了要引發(fā)“int $ ox80”軟中斷之外,為了進(jìn)人內(nèi)核后能調(diào)用不同的內(nèi)核服務(wù)例程,還要提供識別內(nèi)核服務(wù)例程的參數(shù),這個參數(shù)叫做“系統(tǒng)調(diào)用號”。也就是說,所有可為進(jìn)程提供服務(wù)的內(nèi)核服務(wù)例程都應(yīng)具有一個唯一的系統(tǒng)調(diào)用號。當(dāng)然,系統(tǒng)調(diào)用接口還應(yīng)為內(nèi)核服務(wù)例程準(zhǔn)各必要的參數(shù)。
綜上所述,系統(tǒng)調(diào)用接口需要完成以下幾個任務(wù):
●用軟中斷指令“int $ ox80”發(fā)生一個中斷向量碼為128的中斷請求,以使進(jìn)程進(jìn)入內(nèi)核態(tài)。
●要保護(hù)用戶態(tài)的現(xiàn)場,即把處理器的用戶態(tài)運行環(huán)境保護(hù)到進(jìn)程的內(nèi)核堆棧。
●為內(nèi)核服務(wù)例程準(zhǔn)備參數(shù),并定義返回值的存儲位置。
●跳轉(zhuǎn)到系統(tǒng)調(diào)用例程。
●系統(tǒng)調(diào)用例程結(jié)束后返回。
系統(tǒng)調(diào)用例程是系統(tǒng)提供的一個通用的匯編語言程序.其實它是一個中斷向量為128的中斷服務(wù)程序,其入口為system_call。它應(yīng)完成的任務(wù)有:
●接受系統(tǒng)調(diào)用接口的參數(shù)。
●根據(jù)系統(tǒng)調(diào)用號,轉(zhuǎn)向?qū)?yīng)的內(nèi)核服務(wù)例程,并將相關(guān)參數(shù)傳遴給內(nèi)核服務(wù)例程。
●在內(nèi)核服務(wù)例程結(jié)束后,自中斷返田到系統(tǒng)凋甩接口.
系統(tǒng)調(diào)用的過程如圖所示。
從圖中可以看到,系統(tǒng)調(diào)用接口是用高級語言來編寫的,而通過調(diào)用中斷指令陷入內(nèi)核后的系統(tǒng)調(diào)用例程(即圖中的系統(tǒng)調(diào)用處理程序)則是用匯編語言編寫的。
為了通過系統(tǒng)調(diào)用號來調(diào)用不同的內(nèi)核服務(wù)例程,系統(tǒng)必須維護(hù)一個系統(tǒng)調(diào)用表,這個表實質(zhì)上就是系統(tǒng)調(diào)用號與內(nèi)核服務(wù)函數(shù)的對照表。linux是用數(shù)組sys_call_tabl來作為這個表的,在這個表的每個表項中存放著對應(yīng)內(nèi)核服務(wù)例程的指針,而該表項的下標(biāo)就是該內(nèi)核服務(wù)例程的系統(tǒng)調(diào)用號。linux規(guī)定,在1386體系中,系統(tǒng)調(diào)用號由處理器的寄存器eax來傳遞。
圖 系統(tǒng)調(diào)用的處理過程
系統(tǒng)調(diào)用表sys_call_table的部分內(nèi)容列舉如下:
歡迎轉(zhuǎn)載,信息來自維庫電子市場網(wǎng)(www.dzsc.com)
系統(tǒng)調(diào)用接口的主要任務(wù)是把進(jìn)程從用戶態(tài)切換到內(nèi)核態(tài)。在具有保護(hù)機(jī)制的計算機(jī)系 統(tǒng)中,用戶必須通過軟件中斷或陷阱,才能使進(jìn)程從用戶態(tài)切換為內(nèi)核態(tài)。
在i386體系中,linux的系統(tǒng)調(diào)用接口是通過調(diào)用軟中斷指令“int $ oxso”使進(jìn)程從用戶態(tài)進(jìn)入內(nèi)核態(tài)的,這個過程也叫做“陷入”。當(dāng)系統(tǒng)調(diào)用接口調(diào)用軟中斷指令“int $ ox80”時,這個指令會發(fā)生一個中斷向量碼為128的中斷請求,并在中斷響應(yīng)過程中將進(jìn)程由用戶態(tài)切換為內(nèi)核態(tài)。
因為linux只允許系統(tǒng)調(diào)用接口使用128這一個軟中斷向量,這也就意味著所有的系統(tǒng)調(diào)用接口必須共享這一個中斷通道,并在同一個中斷服務(wù)例程中調(diào)用不同的內(nèi)核服務(wù)例程,所以,系統(tǒng)調(diào)用接口除了要引發(fā)“int $ ox80”軟中斷之外,為了進(jìn)人內(nèi)核后能調(diào)用不同的內(nèi)核服務(wù)例程,還要提供識別內(nèi)核服務(wù)例程的參數(shù),這個參數(shù)叫做“系統(tǒng)調(diào)用號”。也就是說,所有可為進(jìn)程提供服務(wù)的內(nèi)核服務(wù)例程都應(yīng)具有一個唯一的系統(tǒng)調(diào)用號。當(dāng)然,系統(tǒng)調(diào)用接口還應(yīng)為內(nèi)核服務(wù)例程準(zhǔn)各必要的參數(shù)。
綜上所述,系統(tǒng)調(diào)用接口需要完成以下幾個任務(wù):
●用軟中斷指令“int $ ox80”發(fā)生一個中斷向量碼為128的中斷請求,以使進(jìn)程進(jìn)入內(nèi)核態(tài)。
●要保護(hù)用戶態(tài)的現(xiàn)場,即把處理器的用戶態(tài)運行環(huán)境保護(hù)到進(jìn)程的內(nèi)核堆棧。
●為內(nèi)核服務(wù)例程準(zhǔn)備參數(shù),并定義返回值的存儲位置。
●跳轉(zhuǎn)到系統(tǒng)調(diào)用例程。
●系統(tǒng)調(diào)用例程結(jié)束后返回。
系統(tǒng)調(diào)用例程是系統(tǒng)提供的一個通用的匯編語言程序.其實它是一個中斷向量為128的中斷服務(wù)程序,其入口為system_call。它應(yīng)完成的任務(wù)有:
●接受系統(tǒng)調(diào)用接口的參數(shù)。
●根據(jù)系統(tǒng)調(diào)用號,轉(zhuǎn)向?qū)?yīng)的內(nèi)核服務(wù)例程,并將相關(guān)參數(shù)傳遴給內(nèi)核服務(wù)例程。
●在內(nèi)核服務(wù)例程結(jié)束后,自中斷返田到系統(tǒng)凋甩接口.
系統(tǒng)調(diào)用的過程如圖所示。
從圖中可以看到,系統(tǒng)調(diào)用接口是用高級語言來編寫的,而通過調(diào)用中斷指令陷入內(nèi)核后的系統(tǒng)調(diào)用例程(即圖中的系統(tǒng)調(diào)用處理程序)則是用匯編語言編寫的。
為了通過系統(tǒng)調(diào)用號來調(diào)用不同的內(nèi)核服務(wù)例程,系統(tǒng)必須維護(hù)一個系統(tǒng)調(diào)用表,這個表實質(zhì)上就是系統(tǒng)調(diào)用號與內(nèi)核服務(wù)函數(shù)的對照表。linux是用數(shù)組sys_call_tabl來作為這個表的,在這個表的每個表項中存放著對應(yīng)內(nèi)核服務(wù)例程的指針,而該表項的下標(biāo)就是該內(nèi)核服務(wù)例程的系統(tǒng)調(diào)用號。linux規(guī)定,在1386體系中,系統(tǒng)調(diào)用號由處理器的寄存器eax來傳遞。
圖 系統(tǒng)調(diào)用的處理過程
系統(tǒng)調(diào)用表sys_call_table的部分內(nèi)容列舉如下:
歡迎轉(zhuǎn)載,信息來自維庫電子市場網(wǎng)(www.dzsc.com)
熱門點擊
- Linux設(shè)備驅(qū)動程序的函數(shù)跳轉(zhuǎn)表
- PIE中斷向量的映射方式
- Linux系統(tǒng)調(diào)用例程system_call
- PIE模塊級中斷
- 什么是Linux內(nèi)核模塊
- Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服
- ARM復(fù)位原理
- Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服
- Linux字符設(shè)備驅(qū)動程序的注冊
- Linux外部設(shè)備的基本概念
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點是“靈動”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究