我正在寻找操作系统用来从用户空间转换到内核以调用“open”,“read “,”写“等等......
除了Wikipedia条目以外还有什么吗? 网站,pdf,书籍,源代码,欢迎所有人:)
答案 0 :(得分:2)
确切的方法取决于处理器体系结构以及它为转移到内核模式定义的操作。一种方法,以及x86上的传统方法,是使用软件中断。事实证明这对于一般情况来说并不是很快,因此后来,英特尔增加了SYSCALL
并且AMD增加了SYSENTER
。 Windows XP及更高版本在启动时为平台选择适当的系统调用技术。
您可以选择将特定软件中断号用于特定功能,但通常处理器没有足够的中断来覆盖所有系统功能,因此必须使其中一个寄存器包含所需的功能号。如果你这样做,那么仅使用一个系统调用函数并不困难。
Windows CE在6.0版之前使用并行进程虚拟地址模型,该模型实际上允许进程直接相互调用。设置页面保护,以便在完成此操作时,发生访问冲突错误:内核获得控制权,修复进程地址空间(将被调用进程移动到插槽0中),修复基于slot-0的参数以指向到调用进程,并返回到用户模式。因为返回地址在另一个进程中,所以当函数调用返回时,会发生相反的过程。不幸的是,这个模型只允许每个进程(32MB)和少量进程(32)的非常小的虚拟地址空间,因此Windows CE 6.0恢复到更传统的系统调用模型。
答案 1 :(得分:1)
对于源代码来说,有很多开源内核需要深入研究。
至于书籍,Linux内核上的Robert Love's book非常有用。
答案 2 :(得分:1)
您可能想看一下minix内核。它是开源的,设计简单,用于许多Uni-level OS课程。仔细研究/usr/src/kernel/proc.c,特别是sys_call函数和周围的功能。请记住,minix是一个微内核,所以有些东西可能与你习惯的有些不同。
答案 3 :(得分:1)
如果您想购买对* nix编程非常有用的书籍。我推荐Stevens和Rago的“UNIX环境中的高级编程”。 它有深入的解释和代码示例。
答案 4 :(得分:0)
有关Linux中系统调用的详细说明,请查看Linux Device Drivers中的示例设备驱动程序。
答案 5 :(得分:0)
它依赖于体系结构,需要了解计算机体系结构。 Tanenbaum的“结构化计算机组织”对系统调用的基础知识进行了很好的总结。有关更多信息,请阅读有关操作系统设计的任何教科书。