总线地址&物理地址&虚拟地址

总线地址&物理地址&虚拟地址

总线地址

总线地址和地址总线是一个概念。地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。是CPU能够访问内存的范围

例如:

  1. 比如一个32位的win7系统,其内存8G,但是系统最大往往只能识别3.29G,只有使用64位系统才可以全部完整的内存。其原因就是:32位操作系统CPU的访问范围是2^32 bit(4,234,967,296bit),约等于3.9G(1 gbit = 1024 mbit = 1024^2 kbit = 1024^3 bit)。
  2. 树莓派也是32位 ,一个G的内存,但它只能访问949M,剩下的另作他用。

物理地址

在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫实际地址绝对地址

在这里插入图片描述

虚拟地址

虚拟地址的具体描述形式是逻辑地址,虚拟地址是基于算法的;软件层面的;“假”的地址

Windows程序时运行在386保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址,与实地址模式下的分段地址类似,虚拟地址也可以写为“段:偏移量”的形式,这里的段是指段选择器。而linux没有这种保护模式,本来用的就是虚拟地址

  • 既然已经有了物理地址,为什么还要有虚拟地址?

​ 如果没有虚拟地址的话:当多个程序要并发执行时,这些程序的数据需要同时放到内存,为了区分这些程序,需要给内存的存储地址编号成物理地址,然要将进程和物理地址映射起来就可以成功并发运行了。

听起来似乎确实不需要虚拟地址了,但是实际中内存可能只有一个G,而进程可能有很多,总量很可能超过一个G,也就是说内存作为一个有限的资源很有可能被立刻占满。所以,直接将进程和物理地址映射是行不通的。

此时,就需要虚拟地址先将进程与虚拟地址映射起来,再将虚拟地址与物理地址映射起来,就可以实现多个进程对于内存的共用,使得超过内存大小的程序也可以顺利运行。

基于总线/物理/虚拟地址理解树莓派芯片外设

我们首先通过下面指令查看树莓派芯片型号:

cat /proc/cpuinfo

在这里插入图片描述

我们可以看到我使用的是树莓派3B,芯片型号是:BCM2835,下面就是BCM2835芯片手册:

在这里插入图片描述

  • BCM2835是ARM-cotexA53架构

  • 00000000~FFFFFFFF是CPU寻址的范围,就是4,294,967,296 bit,约4个G;虚拟地址也有4个G,而物理地址只有1个G

  • DMA是高速拷贝单元,CPU可以发动DMA直接让DMA进行数据拷贝,直接内存访问单元

  • DMA是高速拷贝单元,CPU可以发动DMA直接让DMA进行数据拷贝,直接内存访问单元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值