操作系统中使用的"系统调用"机制是否有很好的描述?

时间:2020-03-06 14:39:35  来源:igfitidea点击:

我正在寻找有关系统调用机制的良好入门知识或者技术描述,该机制被操作系统用于从用户空间过渡到内核以调用诸如"打开","读取","写入"等功能。

除了Wikipedia条目之外,还有其他内容吗?
网站,pdf,书籍,源代码,都欢迎:)

解决方案

对于源代码来说,有很多开放源代码内核可供我们使用。

至于书籍,罗伯特·洛夫(Robert Love)的关于Linux内核的书非常有用。

我们可能想看看minix内核。它是开源的,设计简单,并且在许多Uni级操作系统课程中使用。深入了解/usr/src/kernel/proc.c,尤其是sys_call函数和周围的功能。请记住,minix是一个微内核,因此某些事情可能与我们习惯的有所不同。

如果我们想购买一本对* nix编程非常有用的书。我会推荐Stevens和Rago的" UNIX环境中的高级编程"。
它具有深入的解释和代码示例。

确切的方法取决于处理器体系结构及其定义的用于转移到内核模式的操作。一种方法和x86上的传统方法是使用软件中断。事实证明,对于一般情况来说,这并不是很快,所以后来,英特尔添加了" SYSCALL",而AMD添加了" SYSENTER"。 Windows XP和更高版本在引导时为平台选择适当的系统调用技术。

我们可以选择对特定功能使用特定的软件中断号,但是通常处理器没有足够的中断来覆盖所有系统功能,因此必须使其中一个寄存器包含所需的功能号。如果我们仍然这样做,那么仅使用一个系统调用函数就不会有多少困难。

在版本6.0之前的Windows CE中,使用并行进程虚拟地址模型,该模型实际上允许进程直接相互调用。设置页面保护,以便完成此操作时,会发生访问冲突错误:内核获得控制权,修复进程地址空间(将被调用的进程移至插槽0),修复基于slot-0的参数进入呼叫过程,并返回到用户模式。因为返回地址在另一个进程中,所以当函数调用返回时,将发生相反的过程。不幸的是,此模型仅允许每个进程使用非常小的虚拟地址空间(32MB),而只允许很少数量的进程(32),因此Windows CE 6.0恢复为更传统的系统调用模型。

要很好地解释Linux中的系统调用,请查看Linux设备驱动程序中的示例设备驱动程序。

它依赖于体系结构,并且需要了解计算机体系结构。 Tanenbaum的"结构化计算机组织"对系统调用的基础进行了很好的总结。有关更多信息,请阅读有关操作系统设计的任何教科书。