91精品一区二区三区久久久久久_欧美一级特黄大片色_欧美一区二区人人喊爽_精品一区二区三区av

位置:51電子網 » 技術資料 » 嵌入式系統

Linux系統調用接口、系統調用例程和內核服務例程之間的關系

發布時間:2009/2/18 0:00:00 訪問次數:1773

  系統調用接口的主要任務是把進程從用戶態切換到內核態。在具有保護機制的計算機系 統中,用戶必須通過軟件中斷或陷阱,才能使進程從用戶態切換為內核態。

  在i386體系中,linux的系統調用接口是通過調用軟中斷指令“int $ oxso”使進程從用戶態進入內核態的,這個過程也叫做“陷入”。當系統調用接口調用軟中斷指令“int $ ox80”時,這個指令會發生一個中斷向量碼為128的中斷請求,并在中斷響應過程中將進程由用戶態切換為內核態。

  因為linux只允許系統調用接口使用128這一個軟中斷向量,這也就意味著所有的系統調用接口必須共享這一個中斷通道,并在同一個中斷服務例程中調用不同的內核服務例程,所以,系統調用接口除了要引發“int $ ox80”軟中斷之外,為了進人內核后能調用不同的內核服務例程,還要提供識別內核服務例程的參數,這個參數叫做“系統調用號”。也就是說,所有可為進程提供服務的內核服務例程都應具有一個唯一的系統調用號。當然,系統調用接口還應為內核服務例程準各必要的參數。

  綜上所述,系統調用接口需要完成以下幾個任務:

  ●用軟中斷指令“int $ ox80”發生一個中斷向量碼為128的中斷請求,以使進程進入內核態。

  ●要保護用戶態的現場,即把處理器的用戶態運行環境保護到進程的內核堆棧。

  ●為內核服務例程準備參數,并定義返回值的存儲位置。

  ●跳轉到系統調用例程。

  ●系統調用例程結束后返回。

  系統調用例程是系統提供的一個通用的匯編語言程序.其實它是一個中斷向量為128的中斷服務程序,其入口為system_call。它應完成的任務有:

  ●接受系統調用接口的參數。

  ●根據系統調用號,轉向對應的內核服務例程,并將相關參數傳遴給內核服務例程。

  ●在內核服務例程結束后,自中斷返田到系統凋甩接口.

  系統調用的過程如圖所示。

  從圖中可以看到,系統調用接口是用高級語言來編寫的,而通過調用中斷指令陷入內核后的系統調用例程(即圖中的系統調用處理程序)則是用匯編語言編寫的。

  為了通過系統調用號來調用不同的內核服務例程,系統必須維護一個系統調用表,這個表實質上就是系統調用號與內核服務函數的對照表。linux是用數組sys_call_tabl來作為這個表的,在這個表的每個表項中存放著對應內核服務例程的指針,而該表項的下標就是該內核服務例程的系統調用號。linux規定,在1386體系中,系統調用號由處理器的寄存器eax來傳遞。



  圖 系統調用的處理過程

  系統調用表sys_call_table的部分內容列舉如下:


  歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)



  系統調用接口的主要任務是把進程從用戶態切換到內核態。在具有保護機制的計算機系 統中,用戶必須通過軟件中斷或陷阱,才能使進程從用戶態切換為內核態。

  在i386體系中,linux的系統調用接口是通過調用軟中斷指令“int $ oxso”使進程從用戶態進入內核態的,這個過程也叫做“陷入”。當系統調用接口調用軟中斷指令“int $ ox80”時,這個指令會發生一個中斷向量碼為128的中斷請求,并在中斷響應過程中將進程由用戶態切換為內核態。

  因為linux只允許系統調用接口使用128這一個軟中斷向量,這也就意味著所有的系統調用接口必須共享這一個中斷通道,并在同一個中斷服務例程中調用不同的內核服務例程,所以,系統調用接口除了要引發“int $ ox80”軟中斷之外,為了進人內核后能調用不同的內核服務例程,還要提供識別內核服務例程的參數,這個參數叫做“系統調用號”。也就是說,所有可為進程提供服務的內核服務例程都應具有一個唯一的系統調用號。當然,系統調用接口還應為內核服務例程準各必要的參數。

  綜上所述,系統調用接口需要完成以下幾個任務:

  ●用軟中斷指令“int $ ox80”發生一個中斷向量碼為128的中斷請求,以使進程進入內核態。

  ●要保護用戶態的現場,即把處理器的用戶態運行環境保護到進程的內核堆棧。

  ●為內核服務例程準備參數,并定義返回值的存儲位置。

  ●跳轉到系統調用例程。

  ●系統調用例程結束后返回。

  系統調用例程是系統提供的一個通用的匯編語言程序.其實它是一個中斷向量為128的中斷服務程序,其入口為system_call。它應完成的任務有:

  ●接受系統調用接口的參數。

  ●根據系統調用號,轉向對應的內核服務例程,并將相關參數傳遴給內核服務例程。

  ●在內核服務例程結束后,自中斷返田到系統凋甩接口.

  系統調用的過程如圖所示。

  從圖中可以看到,系統調用接口是用高級語言來編寫的,而通過調用中斷指令陷入內核后的系統調用例程(即圖中的系統調用處理程序)則是用匯編語言編寫的。

  為了通過系統調用號來調用不同的內核服務例程,系統必須維護一個系統調用表,這個表實質上就是系統調用號與內核服務函數的對照表。linux是用數組sys_call_tabl來作為這個表的,在這個表的每個表項中存放著對應內核服務例程的指針,而該表項的下標就是該內核服務例程的系統調用號。linux規定,在1386體系中,系統調用號由處理器的寄存器eax來傳遞。



  圖 系統調用的處理過程

  系統調用表sys_call_table的部分內容列舉如下:


  歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)



相關IC型號

熱門點擊

 

推薦技術資料

DFRobot—玩的就是
    如果說新車間的特點是“靈動”,FQPF12N60C那么... [詳細]
版權所有:51dzw.COM
深圳服務熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網安備44030402000607
深圳市碧威特網絡技術有限公司
付款方式


 復制成功!
乌兰县| 新乡市| 乐业县| 东至县| 荔波县| 万源市| 禹城市| 黄山市| 宁晋县| 合水县| 五莲县| 西乡县| 潮州市| 台州市| 平泉县| 恩施市| 徐州市| 锦屏县| 新河县| 南漳县| 清新县| 梅州市| 绵竹市| 水富县| 西昌市| 石泉县| 台北县| 大同县| 太保市| 墨江| 武威市| 阜宁县| 沙田区| 娄底市| 兴山县| 贵南县| 叶城县| 分宜县| 合阳县| 泗阳县| 沈丘县|