我知道,要执行程序,应将其复制到RAM。但是问题的整体可能不会始终被复制。

由于RAM的大小有限,因此有称为虚拟内存的机制。如果未解决的内容不在内存中,则会发生页面故障,并且将数据复制到RAM。我的问题是谁跟踪了RAM中哪些数据而不是在RAM中?

有帮助吗?

解决方案

操作系统(在CPU的帮助下)保持 页面表, ,这是每个虚拟页面的映射到其映射到的物理页面。页面表还包括一些特定页面当前映射的内容。对于每个负载和存储指令,硬件将行走页面表(或至少一个缓存的部分。)如果当前将虚拟页面映射到物理页面,则硬件将算出并返回正确的数据。

如果虚拟页面当前未启用,则操作系统会收到中断。在这一点上,它看着 内存图 为此过程。这是虚拟内存范围的列表,应应用于该范围的权限,以及在不在RAM中时从该范围内存储数据的磁盘上的文件(如果有)。通常,对于主要可执行文件,将有一个文本段,数据段,有时还会有一个仅读取数据段(用于常数)以及一个 BSS (零初始化数据)段,一个堆栈和堆由 malloc. 。每个共享对象(共享库)可能会加载每个共享对象(共享库)(通常是)其他文本和数据段。

您可以使用 mmap() 告诉POSIX操作系统在内存图中创建一个新区域,该区域的权限以及用于支持该区域的文件。在Linux上,对于现有过程,您可以使用该列表来获取其当前映射区域的清单 pmap 命令。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top