如何解决4gbVM如何在从/到用户空间切换到内核空间时使用地址空间
| 如果有关进程地址空间如何划分为进程/内核的在线线程/教程,我进行了很多研究 例如: 我有一些Helloworld程序 在这种情况下,我有调用作为printf(反过来,它使写入系统调用进入内核空间) 我怀疑内核如何使用Helloworld程序堆栈。 你能告诉我整个执行如何进行... ./helloworld-> printf()->写入系统调用->显示驱动程序->从写入返回->返回helloworld 谢谢, mar解决方法
该问题的详细答案取决于特定的内核和体系结构。但是,通常的答案是,当用户空间要调用内核时,它会执行陷阱指令,从而使CPU更改特权级别并开始执行内核代码。作为特权级别更改的一部分,CPU还将切换到内核堆栈。完成内核后,它将执行从陷阱返回的序列,该序列将还原用户空间堆栈并从中断的位置继续执行。
,简而言之:进行写系统调用时,将生成“ 0”陷阱。处理程序将当前进程寄存器保存在内核堆栈中(存在于内核地址空间中)。然后更改段寄存器中的CPL以启用内核页表的使用。然后内核查找其系统调用表,并找到所需例程的适当地址。然后执行跳到例程,该例程又可以调用设备驱动程序代码。
完成工作后,内核通过恢复段寄存器中的寄存器内容和CPL返回到用户模式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。