我们不允许为书籍、工具、软件库等寻求推荐的问题。你可以编辑问题,这样就可以用事实和引文来回答问题。
Closed 5 years ago.
我正在寻找系统调用机制的良好入门或技术描述,操作系统使用该机制从用户空间过渡到内核,以调用“打开”、“读取”、“写入”等函数。。。
Is there anything other than the Wikipedia entry? Websites, pdfs, books, source code, all are welcome :)
我们不允许为书籍、工具、软件库等寻求推荐的问题。你可以编辑问题,这样就可以用事实和引文来回答问题。
Closed 5 years ago.
我正在寻找系统调用机制的良好入门或技术描述,操作系统使用该机制从用户空间过渡到内核,以调用“打开”、“读取”、“写入”等函数。。。
Is there anything other than the Wikipedia entry? Websites, pdfs, books, source code, all are welcome :)
对于源代码来说,有很多开源内核可以深入研究。
至于书籍,Robert Love关于Linux内核的书内容丰富。
确切的方法取决于处理器体系结构,以及它为转移到内核模式定义的操作。一种方法,也是x86上的传统方法,是使用软件中断。事实证明,对于一般情况来说,这不是很快,所以后来英特尔添加了SYSCALL
,AMD添加了SYSENTER
。Windows XP及更高版本在启动时为平台选择适当的系统调用技术。
您可以选择为特定功能使用特定的软件中断号,但通常处理器没有足够的中断来覆盖所有系统功能,因此有必要使其中一个寄存器包含所需的功能号。无论如何,如果您正在这样做,那么只使用一个系统调用函数并不是什么困难。
Windows CE在6.0版之前使用了一个并行进程虚拟地址模型,该模型实际上允许进程直接相互调用。页面保护是这样设置的,当这样做时,就会发生访问违规故障:内核获得控制权,修复进程地址空间(将被调用的进程移动到插槽0),修复基于插槽0的参数以指向调用进程,然后返回用户模式。因为返回地址在另一个进程中,所以当函数调用返回时,会发生相反的进程。不幸的是,该模型只允许每个进程有很小的虚拟地址空间(32MB)和少量的进程(32个),因此Windows CE 6.0恢复到更传统的系统调用模型。
您可能想看看minix内核。它是开源的,设计简单,并被用于许多Uni级别的操作系统课程。深入研究/usr/src/kernel/proc.c,尤其是sys_call函数和周围的功能。请记住,minix是一个微内核,所以有些东西可能与您习惯的东西有细微的不同。
If you want to purchase a book that is extremely useful for *nix programming. I would recommend "Advanced Programming in the UNIX Environment" by Stevens and Rago. It has in depth explanations, and code examples.
要想更好地解释Linux中的系统调用,请查看Linux设备驱动程序。
它依赖于体系结构,并且需要了解计算机体系结构。Tanenbaum的《结构化计算机组织》很好地总结了系统调用的基本原理。欲了解更多信息,请阅读任何关于操作系统设计的教科书。