2010-07-15 55 views
6

我想寫一個內核一段時間了。我已經對C有了足夠的瞭解,並且已經在x86 Assembler中涉足了。你看,我想編寫一個在C中符合POSIX標準的內核,以便* NIX應用程序可以被移植到我的操作系統,但是我沒有在標準POSIX內核函數上找到很多資源。我在the Open Group's POSIX page上找到了關於文件系統結構,環境變量等的資源。編寫符合POSIX的內核

不幸的是,我還沒有發現任何解釋什麼叫和內核功能的POSIX兼容的內核必須(換句話說,必須在內核中有什麼樣的內部結構,以符合POSIX)。如果有人能找到這些信息,請告訴我。

回答

11

POSIX根本沒有定義內核的結構,內核到用戶空間的接口,甚至是libc的內部。事實上,即使Windows有一個POSIX兼容的子系統。只要確保在你的鏈接處定義的POSIX接口以某種方式工作。但是,請注意,POSIX不需要在內核中專門實現任何東西 - 如果您願意,可以使用自己設計的更簡單的內核接口在C庫中實現。

只是很多POSIX兼容操作系統(BSD,Linux等)在許多這些調用和內核層之間有相當密切的關係,但也有例外。例如,在Linux上,write()調用是直接系統調用,在內核中調用sys_write()函數。但是在Windows上,write()是在POSIX支持DLL,它轉換文件描述符到NT手柄,並呼籲NtWriteFile()爲其服務,這反過來會調用ntoskrnl.exe相應的系統調用來實現。所以你在如何做事情方面有很大的自由 - 這會讓事情變得更加困難,如果有的話:)

4

opengroup.org將關於內核系統調用的決定留給每個實現。例如,write()必須看起來和行爲如上所述,但它在下面調用的內容沒有定義。很多像write,read,lseek這樣的調用可以自由地在內核中調用他們想要的任何入口點。

所以,不,真的有什麼,說你必須有一定的功能名稱與定義的一組內核提供語義。它只能在C運行時庫中使用。

+0

好的,我現在明白了。我希望我可以正確編寫POSIX內核。感謝您解決這個問題! – 2010-07-15 21:14:12