您的位置:首页 > 其它

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

2018-02-18 21:43 267 查看
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把寄存器映射到内存上,否则就是通过总线直接写寄存器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: