2008-09-24 38 views

回答

1

对于源代码,有很多开源内核可以深入。

至于书籍,Robert Love's book在Linux内核是非常丰富的。

1

你可能想看看minix内核。它是开源的,设计简单,并且在许多Uni级别的操作系统课程中使用。在/usr/src/kernel/proc.c中有详细的介绍,特别是sys_call函数和周边功能。请记住,minix是一个微内核,所以有些东西可能与你习惯的微妙不同。

1

如果您想购买对* nix编程非常有用的书籍。我会推荐Stevens和Rago的“UNIX环境下的高级编程”。 它有深入的解释和代码示例。

2

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

您可以选择为特定功能使用特定的软件中断号,但通常处理器没有足够的中断来覆盖所有系统功能,所以需要使其中一个寄存器包含所需的功能号。无论如何,如果你这样做,仅使用一个系统调用函数并不困难。

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

0

有关Linux系统调用的详细说明,请参阅Linux Device Drivers中的示例设备驱动程序。

0

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