【发布时间】:2011-01-24 19:14:48
【问题描述】:
在阅读操作系统概念(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 在标题下 条目(sys_call_table)。请注意,sys_close 存储在编号为 6 的条目中 该表要与 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。这种差异的原因是什么?
提前致谢
【问题讨论】:
标签: linux operating-system linux-kernel system-calls