0

我对物理地址和虚拟地址的概念有点不确定。这是我的理解:

已经编译好的(exe)应用程序文件中指令的虚拟地址是固定的,当应用程序开始执行时,这些固定的虚拟地址会动态映射到内存中的物理地址,并更新相应的页表项。

任何人都可以批准我是否正确?

提前致谢

4

1 回答 1

1

虚拟地址是物理地址之上的抽象层。物理地址映射到 ram 芯片中的特定行。然而,每个进程都有自己的虚拟地址空间。操作系统和硬件在加载/存储时将虚拟地址转换为物理地址。

两个不同进程中的相同虚拟地址通常被转换为两个不同的物理内存位置。例如,您可以编写两个不同的程序,它们都将 main 加载到 0x400000 附近的某个位置。

即使一个 64 位的虚拟地址空间非常大,可以包含所有正在执行的程序的所有代码和数据,但您无法在您的虚拟地址空间中找到另一个进程的代码和/或数据,除非它被操作系统映射到多个过程。

一个例子是共享库。它们被加载到内存中,操作系统将它们所在的物理内存映射到多个进程的虚拟地址空间中。另一个反例是 IPC 共享内存(http://en.wikipedia.org/wiki/Shared_memory)。

您提到的页表是操作系统用于将虚拟内存映射到物理内存的机制。

于 2013-05-10T18:24:21.533 回答