我有一个关于操作系统和页面错误处理程序的概念性问题。让我们考虑内核具有虚拟地址空间的情况。因此,如果存在页面错误并且执行跳转到页面错误处理程序。如果用于执行页面错误处理程序的堆栈导致页面错误,那么会发生什么?
最佳答案
if the stack for the execution of the page fault handler causes a page fault what happens then?
没有为处理程序保留堆栈。
页面错误处理例程是操作系统内核的一部分,因此在内核空间中。即使内核内存仍然组织成页面,这些页面仍然驻留在物理内存中并且不会换出到磁盘。换出到磁盘的东西在用户空间中。因此,由于内核内存不会被换出,因此在内核尝试处理页面错误时不会生成页面错误。
如果你仔细想想,这是有道理的。如果处理页面错误的代码需要页面错误处理程序将其自身返回到物理内存,则内核将无法处理任何页面错误。它无法这样做。
原则上,如果我们仍然尝试假设您的场景,那么我认为内核会:
- 需要变得更复杂才能处理您提出的这个案例;
- 无法使用或支持虚拟地址空间和/或交换内存;
- 一旦发生第一个页面错误就会崩溃(例如,可能是内核崩溃)
关于c++ - 递归页面错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055511/