2010-07-15 53 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