如果您有一个将页面映射到PPN的页表条目会超出计算机上的可用RAM,会发生什么情况。 它会页面错误还是只是忽略计算地址的MSB?或其他什么?
答案 0 :(得分:1)
在我使用Linux内核之前,我做了类似的事情,当然是无意中。无论如何,尝试访问超出最大地址的物理页面会导致内核崩溃。
更具体地说,如果您的虚拟页面在主内存中不可用并且需要从硬盘中获取(交换),则会出现页面错误。或者,如果它在主存储器中可用但具有不同的访问权限(在主存储器中可用于读取,并且您的请求需要写入)。在任何一种情况下,操作系统都会通过交换页面来处理此请求,从而使您可以通过分段错误(臭名昭着的Segmentation fault (core dumped)
)访问或终止请求进程。在启动时,内核会创建一个开始和结束PFN(页面帧编号)并填充页面表,因此基本上不可能发生这样的事情。
如果由于某种原因(除非你操纵内核不应该发生这种情况)你的页面表包含一个无效的PFN或PPN,它会导致内核出现恐慌并产生如下内容:
BUG: unable to handle kernel paging request at ffffea0df0668018
我不了解其他操作系统,但我猜它是一样的。但是,除非内核出现问题,否则不应该发生这种情况。