首页 > 解决方案 > 逻辑地址空间大于物理和后备存储的总和

问题描述

当虚拟地址空间大于物理内存时,操作系统可以使用交换来逐出页面帧(例如 LRU 逐出)。CPU 生成页面错误,然后将磁盘中的页面交换到主内存中。当虚拟地址足够大以至于主内存或磁盘都没有足够的存储空间来容纳它时会发生什么?当页框也不在磁盘中时会发生什么?是否调用了另一个页面错误?

标签: operating-systemvirtual-memorymmu

解决方案


当虚拟地址足够大以至于主内存或磁盘都没有足够的存储空间来容纳它时会发生什么?

虚拟内存系统在二级存储中维护逻辑地址空间的映像。设计良好的操作系统不会允许进程映射在辅助存储中没有支持的逻辑地址。当您的应用程序调用系统服务将页面映射到逻辑地址空间时,如果没有可用于页面的辅助存储,则调用将失败。

当页框也不在磁盘中时会发生什么?

有一些设计不佳的操作系统会映射页面而没有辅助存储。您调用系统服务来映射页面,即使页面无法在辅助存储中备份,它也会成功。在这种情况下,您在访问时会遇到内存异常(并且在您的应用程序中没有提示真正的问题是内存分配失败)。

是否调用了另一个页面错误?

不。

在逻辑内存系统(大多数处理器支持)中,页面有两种状态:

1. Mapped
2. Unmapped

在虚拟内存系统中,存在三种状态:

1. Mapped
2. Unmapped and valid
3. Unmapped and invalid

当发生页面错误时,处理器只知道该页面没有映射到内存。然后操作系统必须确定该页面是否在某处的辅助存储中。如果不是,则操作会导致进程看到异常。如果是,操作系统会加载并映射页面,让进程继续愉快地进行。


推荐阅读