当我阅读操作系统概念(7e,Silberschatz,Galvin,Gagne)时,我遇到了一个关于向linux内核添加系统调用的研究项目。这本书说明了
最新版Linux内核的系统调用号列于 /usr/src/linux-2.x/include/asm-i386/unistd.h。 (例如,__ NR_close,其中 对应于为关闭文件而调用的系统调用close() 描述符,定义为值6.) 标题下的/usr/src/linux-2.x/arc/i386/kernel/entry.S ENTRY(sys_call_table)找到。请注意,sys_close存储在编号为6 in的条目中 该表与unistd.h中定义的系统调用号一致 文件。 (第75页)
我从ubuntu存储库下载了最新的linux源代码包,发现上面提到的源文件有较小的目录和文件名更改。但有一件有趣的事情让我感到困惑的是文件/usr/src/linux-source-2.6.31/arch/x86/kernel/less syscall_table_32.S,sys_close存储在书中所述的编号为6的条目中,然而,在unistd.h文件__NR_close中定义为57,而不是6.这种差异的原因是什么?
提前致谢
答案 0 :(得分:2)
您确定要比较类似的架构吗?在不同的体系结构中,系统调用可能具有不同的数字。例如,在x86上,close确实是6,而在x86-64上,close是3(在我的PC上的unistd.h中查找)。