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

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

总线地址

  • **百度百科解释:**地址总线(Address Bus;又称:位址总线)属于一种电脑总线(一部分),是由 CPU 或有 DMA 能力的单元,用来沟通这些单元想要存取电脑内存元件/地方的实体位址。
  • CPU 寻找外部的内存单元靠的是地址总线传输的数据。 如果 CPU 有 8 根地址总线,每根线上传输 0 或 1,那么传输的数据范围为00000000~11111111,每一个数值都对应内存中的一个内存单元,所以可以找到编号为 00000000~11111111 号的内存单元。如果传输的数据为 00110011,那么就会找到 00110011 号内存单元,如果传输的数据为 10110111,那么就会找到 10110111 号内存单元。编号不在[00000000,11111111]范围内的CPU就寻找不到,例如 100000000 号内存单元,CPU 就寻找不到。寻址能力就是计算 CPU 能寻找多少个内存单元,00000000~11111111 号内存单元,一共有 256 个,一个内存单元的大小为 1byte,这 256 个内存单元的大小为 256bytes。
  • CPU 是通过地址总线来指定存储单元的。
  • 地址总线决定了 CPU 所能访问的最大内存空间的大小。eg: 10根地址线能访问的最大的内存为 1024(2 的 10 次方)位二进制数据(1B)
  • 地址总线是地址线数量之和。若 CPU 的地址总线宽度是 32 位,那么 CPU 的寻址范围是 4G(2的32次方位),所以最多支持 4G 内存。
  • 比如有一个现象:装了 32 位的 win7 系统,明明内存条 8G,可系统只是别了 3.8G ,装了 64 位才能识别到 8G。装了 32 位的操作系统 CPU 的访问范围是 2^32 bit,就是 4194304kbit,就是 4096Mbit,等于 4G。树莓派也是 32 位 ,一个 G 的内存,但它只能访问 949M 剩下的挪作他用。

数据总线

  • CPU 通过地址总线寻址,然后通过数据总线与外部设备互换信息。
  • 是 CPU 与内存或其他器件之间的数据传送的通道。
  • 数据总线的宽度决定了 CPU 和外界的数据传送速度。
  • 每条传输线一次只能传输 1 位二进制数据。eg: 8 根数据线一次可传送一个 8 位二进制数据(即一个字节)。
  • 数据总线是数据线数量之和,数据总线的位数决定 CPU 单次通信能交换的信息数量。

数据总线的宽度对 CPU 的性能的影响:

  • 首先,总线的速度(即:CPU 的主频,CPU 的性能指标之一)决定 CPU 和外设互换信息的速度。
  • 其次,数据总线的宽度也是表示 CPU 性能的参数之一(通常,我们说“64 位的 CPU”是指 CPU 的数据总线的宽度是 64 位)。 如:64 位数据总线的 CPU 一次就能取出 64bit 的数据,8 位数据总线的 CPU 一次只能取出 8bit 的数据,在相同频率的情况下,8 位数据总线的 CPU 就得连续取 8 次数据,数据量才能和 64 位数据总线一次取出的数据量相同,单就比较取数据的性能就相差 8 倍。况且,通常 CPU 中的寄存器的位数与数据总线的宽度一样,所以在数据处理方面,64 位的 CPU 又比 8 位的 CPU 快很多。
  • CPU 的地址总线位数和数据总线可以不同(典型代表就是 51 单片机),但是一般都相同。16 位机有 16 根数据总线,20 根地址总线,能访问 1M(2的20次方),32 位机有 32 根数据总线,32 根地址总线,能访问 4G(2 的 32 次方),64 位机确实有 64 根数据总线。

物理地址(PA):

物理地址是内存中的内存单元实际地址,不是外部总线连接的其他电子元件的地址!物理地址属于比较好理解的,物理地址就是内存中每个内存单元的编号,这个编号是顺序排好的,物理地址的大小决定了内存中有多少个内存单元,物理地址的大小由地址总线的位宽决定!

虚拟地址(VA):

参考

虚拟地址/物理地址——virtual address(memory)/physical address: 树莓派 mmap example 访问物理地址的两种方法

树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册

树莓派GPIO驱动原理

树莓派学习——博通BCM2835芯片手册导读、IO口驱动代码调试和测试学习

树莓派的GPIO控制

解决Linux内核问题实用技巧之-dev/mem的新玩法

树莓派3B+ 驱动开发之GPIO

操控树莓派IO口的驱动代码编写

海思hi3516ev200引脚GPIO直接输出高低电平

/dev/mem可没那么简单

Linux系统“/dev/mem”设备使用详解(Hi3520D)

/dev/mem

RPi GPIO Code Samples