2008-09-24 26 views

回答

1

對於源代碼,有很多開源內核可以深入。

至於書籍,Robert Love's book在Linux內核是非常豐富的。

1

你可能想看看minix內核。它是開源的,設計簡單,並且在許多Uni級別的操作系統課程中使用。在/usr/src/kernel/proc.c中有詳細的介紹,特別是sys_call函數和周邊功能。請記住,minix是一個微內核,所以有些東西可能與你習慣的微妙不同。

1

如果您想購買對* nix編程非常有用的書籍。我會推薦Stevens和Rago的「UNIX環境下的高級編程」。 它有深入的解釋和代碼示例。

2

確切的方法取決於處理器體系結構以及它爲轉移到內核模式而定義的操作。一種方法和x86上的傳統方法是使用軟件中斷。事實證明,這對於一般情況來說並不是很快,所以後來英特爾增加了SYSCALL,AMD增加了SYSENTER。 Windows XP和更高版本在啓動時爲該平臺選擇適當的系統調用技術。

您可以選擇爲特定功能使用特定的軟件中斷號,但通常處理器沒有足夠的中斷來覆蓋所有系統功能,所以需要使其中一個寄存器包含所需的功能號。無論如何,如果你這樣做,僅使用一個系統調用函數並不困難。

Windows CE在版本6.0之前使用並行進程虛擬地址模型,該模型實際上允許進程直接相互調用進程。頁面保護設置完畢後,會發生訪問衝突錯誤:內核獲取控制權,修復進程地址空間(將被調用進程移入插槽0),修復基於插槽0的參數以指向到調用進程,並返回到用戶模式。由於返回地址在另一個進程中,所以當函數調用返回時,會發生相反的進程。不幸的是,這個模型只允許每個進程有非常小的虛擬地址空間(32MB)和少量的進程(32),所以Windows CE 6.0恢復爲更傳統的系統調用模型。

0

有關Linux系統調用的詳細說明,請參閱Linux Device Drivers中的示例設備驅動程序。

0

它依賴於體系結構,需要了解計算機體系結構。 Tanenbaum的「結構化計算機組織」很好地總結了系統調用的基礎知識。有關更多信息,請閱讀操作系統設計的任何教科書。