Linux內核學習從零單排(二)

系統調用:

在Linux中,每個系統調用都有一個系統調用號,獨一無二,且一旦分配就不能改變,即使一個系統調用被刪除,該系統調用號也不允許收回。sys_ni_syscall()專門填補無效的系統調用。內核記錄了系統調用表中的所有已註冊過的系統調用的列表,存儲在sys_call_table中。

系統調用執行速度快:其一,上下文切換時間短,其二,系統調用處理程序和系統調用本身簡潔。

應用程序需要執行系統調用時,通過一個軟中斷(引發一個異常使系統切換到內核態),該異常處理程序即爲系統調用處理程序system_call()。當系統調用返回時,控制扔回到system_call()中,它會負責切換回用戶空間,並讓用戶進程繼續執行。


系統調用的實現:

編寫玩一個系統調用後,把它註冊成一個正式到系統調用:1)在系統調用表到最後加入一個表項,從0算起,它在表中到位置就是它到系統調用號。2)在<asm/unistd.h>鍾定義該系統調用使之支持各種體系結構。3)將該系統調用編譯進內核。只要把它放進kernel/目錄下到一個相關文件即可,如sys.c。再啓動內核即可使用該新系統調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章