2011-05-24 109 views
0

我看了很多,如果在线线程/教程关于进程的地址空间是如何分为进程/内核4GB(VM)地址空间如何使用,而交换台从/到用户空间到内核空间

例如: 我有一些Helloworld程序 在我有调用为printf(反过来它使写系统调用进入内核空间)

我怀疑内核使用Helloworld程序堆栈。 你能告诉我整个执行的衔接...

./helloworld - >的printf() - >写系统调用 - >显示驱动器 - >从写回 - >回的HelloWorld

谢谢, Amarender

回答

0

这个问题的详细答案取决于具体的内核和体系结构。然而,一般的答案是,当用户空间想要调用内核时,它会执行一个陷阱指令,导致CPU更改特权级别并开始执行内核代码。作为权限级别更改的一部分,CPU也将切换到内核堆栈。内核完成后,它将执行一个从陷阱中返回的序列,该序列将恢复用户空间堆栈并在其停止的位置恢复执行。

0

总而言之:写系统调用时,会生成int $80陷阱。处理程序将当前进程寄存器保存在内核堆栈中(存在于内核地址空间中)。然后,更改段寄存器中的CPL以启用内核页表。然后内核查找它的系统调用表并找到所需例程的适当地址。执行然后跳转到可以调用设备驱动程序代码的例程。 完成其工作后,内核通过恢复段寄存器中的寄存器内容和CPL返回到用户模式。

相关问题