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

发布于 2024-08-24 23:12:32 字数 650 浏览 9 评论 0原文

当我阅读《Operating System Concepts》(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_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。这种差异的原因是什么?

提前致谢

When I was reading Operating System Concepts (7e, Silberschatz, Galvin, Gagne), I encountered a study project about adding a system call to the linux kernel. The book says that

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)

I've downloaded latest linux source package from the ubuntu repository, and found the mentioned source files with minor directory and file name changes. But there is an interesting thing confuses me in the file /usr/src/linux-source-2.6.31/arch/x86/kernel/less syscall_table_32.S, sys_close is stored at entry numbered 6 as said in the book, nevertheless, in unistd.h file __NR_close defined as 57, instead of 6. What is the reason of this difference?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

゛清羽墨安 2024-08-31 23:12:32

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

Are you sure you're comparing like architectures? On different architectures, system calls may well have different numbers. For instance, on x86, close is indeed 6, while on x86-64, close is 3 (looked up in unistd.h on my PC).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文