堆栈中发生页面错误时会发生什么?

时间:2014-08-09 20:55:05

标签: operating-system emulation virtual-memory

我需要为一个学校项目实施虚拟内存,我对某些事感到困惑。如果在使用堆栈时发生页面错误(例如简单推送),如果我无法推送,我将如何以及在何处保存返回地址?

2 个答案:

答案 0 :(得分:3)

这是一个非常好的问题。页面错误导致中断,如果无法保留返回地址,该中断如何知道返回的位置?

在x86架构上,TSS(任务状态段)包含不同权限级别的不同堆栈指针。因此,如果用户模式进程耗尽堆栈,则会降低CPU权限级别并引发异常。这意味着只要切换到新的权限级别,操作系统就可以开始使用驻留在内核内存中的新堆栈,并且不受用户进程的堆栈限制。

答案 1 :(得分:1)

这是我们的开发团队在面对同样的问题时所做的事情......

我们设计了内部操作系统,以便不允许页面错误处理程序生成页面错误。因此,绝对必须保证页面错误异常堆栈帧被推入的堆栈存在于存储器中。此外,页面错误处理程序使用的任何例程也必须存在于内存中,否则可能导致页面错误,从而违反设计。