Operating system 逻辑地址空间大于物理和备份存储的总和
当虚拟地址空间大于物理内存时,操作系统可以使用交换退出页帧(例如LRU退出)。CPU生成页面错误,然后磁盘中的页面被交换到主内存中。当虚拟地址足够大,以至于主内存或磁盘都没有足够的存储空间容纳它时,会发生什么情况?当页面框架也不在磁盘中时会发生什么?是否调用了另一个页面错误 当虚拟地址足够大,以至于主内存或磁盘都没有足够的存储空间容纳它时,会发生什么情况 虚拟内存系统在辅助存储器中维护逻辑地址空间的映像。一个设计良好的操作系统不允许一个进程映射一个逻辑地址,而这个逻辑地址在辅助存储中没有备份。当应用程序调用系统服务将页映射到逻辑地址空间时,如果没有可用于页的辅助存储,则调用将失败 当页面框架也不在磁盘中时会发生什么 有些设计拙劣的操作系统会在没有辅助存储的情况下映射页面。如果调用系统服务来映射页面,则即使无法在辅助存储中备份页面,系统服务也会成功。 在这种情况下,访问时会出现内存异常(并且在应用程序中不会得到任何提示,表明真正的问题是内存分配失败) 是否调用了另一个页面错误 没有 在逻辑内存系统(大多数处理器都支持)中,页面有两种状态:Operating system 逻辑地址空间大于物理和备份存储的总和,operating-system,virtual-memory,mmu,Operating System,Virtual Memory,Mmu,当虚拟地址空间大于物理内存时,操作系统可以使用交换退出页帧(例如LRU退出)。CPU生成页面错误,然后磁盘中的页面被交换到主内存中。当虚拟地址足够大,以至于主内存或磁盘都没有足够的存储空间容纳它时,会发生什么情况?当页面框架也不在磁盘中时会发生什么?是否调用了另一个页面错误 当虚拟地址足够大,以至于主内存或磁盘都没有足够的存储空间容纳它时,会发生什么情况 虚拟内存系统在辅助存储器中维护逻辑地址空间的映像。一个设计良好的操作系统不允许一个进程映射一个逻辑地址,而这个逻辑地址在辅助存储中没有备份。当
1. Mapped
2. Unmapped
在虚拟内存系统中,有三种状态:
1. Mapped
2. Unmapped and valid
3. Unmapped and invalid
当出现页面错误时,处理器只知道页面未映射到内存。然后,操作系统必须确定页面是否位于辅助存储中的某个位置。如果不是,操作将导致进程看到异常。如果是,则操作系统加载并映射页面,允许进程以其愉快的方式继续
当虚拟地址空间大于物理内存时,操作系统可以使用交换退出页帧(例如LRU退出)
假设一个虚拟地址是48位(因此一个虚拟地址空间的大小是256 TiB),并且您正在运行123个进程,其中每个进程都有自己的虚拟地址空间。这总共有31488个TiB的虚拟地址空间。注意:对于运行现代操作系统(Windows、Linux等)的现代80x86 PC来说,这是“非常正常的”
在这31488个TiB中:
- 几乎所有这些都将未使用,并标记为“不存在”。如果软件试图访问它,您会得到一个页面错误,页面错误处理程序会意识到这是一个bug,您可能会得到一个
(或“死亡蓝屏”或…)。因为它没有被使用,所以操作系统不需要任何RAM或磁盘空间SIGSEGV
- 其中一些将是相同的东西加载到RAM中一次,然后映射到许多虚拟地址空间。这对于内核本身和共享库/DLL来说非常常见。它还包括以下情况:同一RAM用于虚拟文件系统缓存和内存映射文件,或者同一RAM作为“共享内存”映射到2个或多个进程,或者同一RAM作为“写时复制”映射到2个或多个虚拟地址空间(例如,在
之后)fork()
- 有些将是“写时分配”-字面上是在许多虚拟地址空间中的许多虚拟地址处映射满零的同一页,如果您对其进行写入,则会出现一个页面错误,页面错误处理程序会为您尝试写入的页面分配一个新的RAM页面。这允许操作系统假装分配了大量虚拟空间,并用零填充,而不使用任何RAM或任何磁盘空间(直到实际修改)
- 有些将是特定流程特有的(修改的)数据