我需要为一个学校项目实施虚拟内存,我对某些事感到困惑。如果在使用堆栈时发生页面错误(例如简单推送),如果我无法推送,我将如何以及在何处保存返回地址?
答案 0 :(得分:3)
这是一个非常好的问题。页面错误导致中断,如果无法保留返回地址,该中断如何知道返回的位置?
在x86架构上,TSS(任务状态段)包含不同权限级别的不同堆栈指针。因此,如果用户模式进程耗尽堆栈,则会降低CPU权限级别并引发异常。这意味着只要切换到新的权限级别,操作系统就可以开始使用驻留在内核内存中的新堆栈,并且不受用户进程的堆栈限制。
答案 1 :(得分:1)
这是我们的开发团队在面对同样的问题时所做的事情......
我们设计了内部操作系统,以便不允许页面错误处理程序生成页面错误。因此,绝对必须保证页面错误异常堆栈帧被推入的堆栈存在于存储器中。此外,页面错误处理程序使用的任何例程也必须存在于内存中,否则可能导致页面错误,从而违反设计。