我现在想写一个内核已有一段时间了。我已经对C有足够的了解,而且我已经涉足x86汇编程序了。你知道,我想在C中编写一个符合POSIX标准的内核,以便* NIX应用程序可以移植到我的操作系统中,但是我没有在标准POSIX内核函数上找到很多资源。我在the Open Group's POSIX page上找到了有关文件系统结构,环境变量等的资源。
不幸的是,我还没有找到任何解释POSIX兼容内核必须具有的调用和内核函数的东西(换句话说,内核必须遵守POSIX的内部结构类型)。如果有人能找到这些信息,请告诉我。
答案 0 :(得分:11)
POSIX根本没有定义内核的内部结构,内核到用户空间接口,甚至libc。实际上,即使Windows也有一个符合POSIX标准的子系统。只需确保链接中定义的POSIX接口以某种方式工作 。但请注意,POSIX不需要在内核中专门实现任何内容 - 如果您愿意,可以使用您自己设计的更简单的内核接口在C库中实现。
恰好有很多符合POSIX标准的操作系统(BSD,Linux等)在许多调用和内核层之间具有相当紧密的关系,但也有例外。例如,在Linux上,write()
调用是直接系统调用,在内核中调用sys_write()
函数。但是在Windows上,write()
在POSIX支持DLL中实现,该DLL将文件描述符转换为NT句柄并调用NtWriteFile()
为其提供服务,然后在{{1}中调用相应的系统调用}。所以你在如何做事方面有很大的自由 - 如果有的话,这会让事情更难:)
答案 1 :(得分:4)
opengroup.org将关于内核系统调用的决定留给每个实施 例如,write()必须看起来和行为如上所述,但它未在下面调用它。许多调用如write,read,lseek都可以自由调用内核中的任何入口点。
所以,不,没有任何东西可以说你必须拥有一个特定的函数名,并且内核中有一组定义的语义。它必须在C运行时库中可用。