当程序在通用寄存器中存储一个内存地址时,该地址对于进程是本地的还是虚拟的?
可能是两个完全不同的程序执行不同的操作会将相同的内存地址加载到通用寄存器中吗?
答案 0 :(得分:1)
通用寄存器中存储的内存地址是否相对?
不。它们是平行的。 内存管理单元将一种地址转换为第二种地址。
当程序在通用寄存器中存储一个内存地址时,该地址对于进程是本地的还是虚拟的?
这只是GPR中的一个值。此值可用于访问在用户进程中为<虚拟>虚拟地址的地址。该地址对于每个进程都是唯一的。
两个完全不同的程序执行不同的操作,是否会将相同的内存地址加载到通用寄存器中?
两个不同的程序可以使用GPR中的相同地址来访问两个不同的物理内存位置。从{em>虚拟地址到物理地址的地址转换由MMU完成。
程序1:
Virtual address ^ Physical address
0x04000000 = 0x00001234
程序2:
Virtual address ^ Physical address
0x04000000 = 0x12345678
两个进程的虚拟地址相同。
物理地址不是。
两者之间的差异由MMU处理,该MMU在每个过程中将转换为另一个。
答案 1 :(得分:0)
CPU使用虚拟地址。如果两个不同的进程在寄存器中放置了相同的虚拟地址,则没有关系,因为每个虚拟地址都将转换为不同的物理地址(在OS *的帮助下)。
*更多详细信息: 操作系统负责在一个特殊的寄存器中分配一个地址,该地址指向地址转换表的开始。该表(及其地址)在每个进程中都是唯一的。