2013-05-10 126 views
0

我对物理和虚拟地址的概念有点不确定。以下是我所了解的内容:虚拟与物理地址

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

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

在此先感谢

回答

1

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

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

尽管64位虚拟地址空间非常大,并且可能包含所有正在执行的程序的所有代码和数据,但您不能在虚拟地址空间内找到其他进程的代码和/或数据,除非它被操作系统分成多个进程。

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

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