天天看點

4、系統調用

系統調用

  在系統中真正被所有程序都使用的核心通信方式是系統調用。例如當程序請求核心服務時,就使用的是系統調用。一般情況下,程序是不能夠存取系統核心的。它不 能存取核心使用的記憶體段,也不能調用核心函數,CPU的硬體結構保證了這一點。隻有系統調用是一個例外。程序使用寄存器中适當的值跳轉到核心中事先定義好 的代碼中執行,(當然,這些代碼是隻讀的)。在Intel結構的計算機中,這是由中斷0x80實作的。

    程序可以跳轉到的核心中的位置叫做system_call。在此位置的過程檢查系統調用号,它将告訴核心程序請求的服務是什麼。然後,它再查找系統調用表sys_call_table,找到希望調用的核心函數的位址,并調用此函數,最後傳回。

    是以,如果希望改變一個系統調用的函數,需要做的是編寫一個自己的函數,然後改變sys_call_table中的指針指向該函數,最後再使用cleanup_module将系統調用表恢複到原來的狀态

參考

[2] http://man.lupaworld.com/content/develop/joyfire/kernel/6.html

繼續閱讀