我读到“当一个程序执行像MOV REG,1000
这样的指令时,它会将内存地址1000的内容复制到REG。可以使用索引,基址寄存器,段寄存器和其他方式。
这些程序生成的地址称为虚拟地址,并形成虚拟地址空间。“
任何人都可以解释一下,它是什么(这些程序生成的地址称为虚拟地址)是什么意思?
答案 0 :(得分:32)
程序和数据作为数字存储在存储单元中。每个存储器单元都有一个唯一的编号,称为地址。表示有效地址的数字范围称为地址空间。
当程序运行时,CPU从内存中读取数据并将结果写回内存。 CPU通过指定读取或写入操作所针对的存储器单元的地址,将所需位置传送到存储器。
CPU有多种方式可以提供地址(请记住,地址只是一个数字)。表示地址的数字可以在寄存器中,它可以存储在另一个存储位置,可以通过向寄存器加上或减去一个偏移来计算,等等。在所有情况下,您编译的程序都会指示CPU如何提供(或生成)读取或写入所需的地址。
现代架构允许多个程序执行,就好像它们拥有整个逻辑地址空间一样。换句话说,几个程序可以写入同一地址的内存位置,而不会踩到彼此的结果。这是通过虚拟化地址空间来完成的:假设程序A和B生成写入内存位置0x1000。在操作系统的帮助下,CPU可以对地址执行其他调整,将映射到程序A的物理地址 0x60001000,对程序B执行0x5F001000。程序认为他们写入0x1000的位置,因为它们在虚拟地址空间中运行。他们的内存模型是一个连续的块,从0开始,一直持续到0x000100000000(假设你的系统有4GiB的内存可供进程使用)。但是这个模型的工作原理只是因为CPU另外将其逻辑地址转换为物理地址,这些地址在运行程序的过程中根据需要进行分配和删除。
因为表示地址的相同数字对程序和CPU意味着不同,程序的地址空间称为虚拟,CPU的地址空间称为物理
答案 1 :(得分:1)
当程序访问内存时,它不知道或关心支持地址的物理内存存储在何处。它知道操作系统和硬件一起工作以映射定位正确的物理地址,从而提供对所需数据的访问。因此,我们将程序用于访问存储器的地址称为虚拟地址。虚拟地址由两部分组成;页面和该页面的偏移量。