首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分页/页错误处理程序-如何使用虚拟地址在磁盘上查找特定内容

分页/页错误处理程序-如何使用虚拟地址在磁盘上查找特定内容
EN

Stack Overflow用户
提问于 2014-12-05 02:56:43
回答 2查看 983关注 0票数 4

分页允许机器在虚拟内存地址空间和真实内存地址空间之间提供一个间接层。在给出地址后,MMU遍历页面表并确定对应的帧是否在内存中。如果是,那么它已经找到了真正的地址和相关的指令可以执行。

但是,如果它不在RAM中呢?当MMU访问页面表并看到需要从磁盘中获取相应的帧时会发生什么?如何知道在磁盘中的位置?如何使用虚拟地址来映射磁盘中的特定内容?

我怀疑这不是通过软件完成的,因为为映射所有地址空间的磁盘设置某种页面表太昂贵了,因为它会自动将I/O操作的数量增加一倍,并使用大量的内存,但还有其他方法吗?

谢谢!

编辑: MMU不处理磁盘,只是告诉操作系统获取给定的页面。操作系统中的页面错误处理程序是从磁盘获取内容的工具,但是如何从磁盘中获取内容呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-06 06:31:27

除了将虚拟地址转换为物理地址之外,MMU不负责其他任何事情。它不进行磁盘访问或其他任何操作。

许多操作系统将内存交换到磁盘或将磁盘上的文件映射到虚拟内存地址空间的技巧通常是通过

  1. 将要交换到磁盘的区域标记为页表中的无效区域,以便在访问时导致页错误。
  2. 当程序访问该区域时,MMU会引发页面错误,并将控制返回给操作系统。
  3. 推断访问了哪个页面,并将适当的数据从磁盘加载到内存中。
  4. 将页表中的相应条目标记为有效,并将其指向包含先前加载的数据的内存。
  5. 在加载指令之前将控制返回给程序,以便重新尝试内存访问。
  6. 程序现在从现在有效的页面中读取非智慧的内容。
票数 1
EN

Stack Overflow用户

发布于 2014-12-06 00:23:08

操作系统需要知道数据在哪里。当发生页面错误时,内存可能位于多个位置。从我的头顶上:

  1. 它可能是初始化数据(想象一下程序启动),而这些数据根本不在磁盘上。
  2. 它可能是静态数据(在某些情况下是动态数据),必须从可执行文件或共享可执行文件加载。
  3. 它可能必须从一个或多个页面文件中的某个位置加载。

MMU不处理这件事。它所做的就是触发一个页面错误。操作系统故障处理程序必须识别正在访问的地址,定位所需的页(从上面的一个源),(必要时释放物理内存),分配物理内存页,将数据从页面加载到物理内存(如果它退出),退出异常处理程序重新启动导致页面错误的指令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27308003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档