gpt4 book ai didi

linux - 系统调用号与系统调用处理程序指针冲突

转载 作者:太空狗 更新时间:2023-10-29 11:16:44 25 4
gpt4 key购买 nike

当我在阅读操作系统概念(7e、Silberschatz、Galvin、Gagne)时,我遇到了一个关于向 linux 内核添加系统调用的学习项目。书上说的

The system call numbers for recent versions of the Linux kernel are listed in /usr/src/linux-2.x/include/asm-i386/unistd.h. (for instance, __NR_close, which corresponds to the system call close() that is invoked for closing a file descriptor, is defined as value 6.) The /usr/src/linux-2.x/arc/i386/kernel/entry.S under the heading ENTRY(sys_call_table). Notice that sys_close is stored at entry numbered 6 in the table to be consistent with the system call number defined in unistd.h file. (pg. 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。这种差异的原因是什么?

提前致谢

最佳答案

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

关于linux - 系统调用号与系统调用处理程序指针冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com