如何更改虚拟内存页面位置?

时间:2018-03-01 09:01:12

标签: memory-management kernel virtual-memory

因此,当我们第一次引用已提交的页面时,物理内存中的一个页面被定位,并且这些地址(一个在虚拟地址空间中,一个在物理地址空间中)在页面条目中连接。现在,由于每个应用程序都必须使用virtaul内存并通过该层,理论上可以在不实际复制每个字节的情况下移动内存。我的意思是更改虚拟地址空间中的页面地址。因此,例如,如果一个页面条目说:"嘿,物理内存中的第11页与ID为1001"的进程虚拟空间中的第156页相关联,并且我想移动156-第页到第169页,我可以更改此页面条目说:"嘿,物理内存中的第11页与进程虚拟空间中的 169 页面相关联ID 1001"。 Windows或Linux操作系统是否提供了我可以使用的功能?

2 个答案:

答案 0 :(得分:0)

你的问题很好但是有点不匹配。

通常:虚拟内存地址转换的管理是操作系统级别的任务,而不是编译器或应用程序级别的活动。事实上,大多数操作系统都竭尽全力使流程透明化。因为这样的语言并没有真正涉及到这一点。

现在,如果您使用的操作系统支持这种内存地址重定位,最明显的方法是将此OS功能封装在C ++实体中,如现有OS接口类中的方法或新类。 / p>

现在,如果您有所需操作系统调用的示例代码,则主题变为"如何在C ++中封装这些代码?"这开启了对C ++和OOP技术的讨论。

另一方面,如果您不知道所需的操作系统调用,这会导致您希望完成此任务的特定操作系统的问题?这开启了操作系统和内存管理的讨论。

答案 1 :(得分:0)

应用程序不知道物理内存和逻辑页面映射到哪个页面框架。完全可能(并经常发生)逻辑页面到物理页面映射,以便在程序执行时进行更改。

在某些系统上,可以将多个逻辑页面映射到同一物理页面。但是,应用程序无法控制映射到哪个物理页面。

参见例如Memory Mapping the same file multiple times?