系统调用号与系统调用处理程序指针之间的冲突

时间:2010-03-07 23:26:33

标签: linux operating-system linux-kernel system-calls

当我阅读操作系统概念(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.这种差异的原因是什么?

提前致谢

1 个答案:

答案 0 :(得分:2)

您确定要比较类似的架构吗?在不同的体系结构中,系统调用可能具有不同的数字。例如,在x86上,close确实是6,而在x86-64上,close是3(在我的PC上的unistd.h中查找)。