物理地址空间和虚拟地址空间

xiaoxiao2021-02-28  45

http://blog.csdn.net/jiasike/article/details/38852485 一、物理地址(空间)     因为CPU是32位的,其地址总线是32位的,所以其地址总线可编码的个数是2^32(4G),这2^32个物理地址的集合就是物理地址空间。这与38译码器的道理是一样的,这一点很好理解。

二、虚拟地址(空间)     大多数计算机使用8位的块,或者叫做字节(Byte),来作为最小的可寻址的存储器单元,而不是访问存储器中单独的位。     机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的一个字节都由唯一的数字来标识,称为它的地址(虚拟地址)。所有可能虚拟地址的集合就称作虚拟地址空间。                                     ——引自《深入理解计算机系统》P23

从上面这段话,我们可以得到2个信息: 1、虚拟地址依赖于“唯一的数字标识”。 2、虚拟地址空间依赖于“所有可能虚拟地址的集合” 稍稍提炼一下,其实这就是说:虚拟地址空间就是数字可能的表示范围。      对于32位CPU而言,数据总线是32位的,所表示的数据或者说字长是32位的。所以数字的可能表示范围就是2^32(4G)。也就是说,虚拟地址空间是4G。

小小结:     物理地址空间的大小是由地址总线决定的。     虚拟地址空间的大小是由字长决定的。

cpu看到的都是vm(虚拟地址)(在开启mmu之后),所以程序中操作的都必须是映射后的地址空间(无论是内存映射后还是总线上挂载的其他模块) 内存映射其实就是物理地址映射到虚拟地址空间的一个子集,在映射这个层面内存和挂载在总线上的其他模块没有什么区别

映射表是映射表,内存是内存。内存是映射表的一部分,寄存器也是映射表的一部分。除非你用ioremap把寄存器映射到内存上,否则就是通过总线直接写寄存器

转载请注明原文地址: https://www.6miu.com/read-2629282.html

最新回复(0)