总线地址
其实就是CPU能够访问内存的范围。CPU寻找外部的内存单元靠的是地址总线传输的数据。寻址能力就是计算CPU能寻找多少个内存单元。
地址总线的位数决定了CPU可直接寻址的内存空间大小。一般来说,若地址总线为n位,则可寻址空间为2^n位。若CPU的地址总线宽度是32位,那么CPU的寻址范围是4G(2的32次方位),所以最多支持4G内存。
比如:装了32位的win 7 系统,内存8G,可系统最大只能识别3.29G,所以要使用4G以上大内存就要用windows x64位系统。装了32位的操作系统CPU的访问范围是2^32 bit,就是4194304kbit,就是4G。树莓派也是32位 ,一个G的内存,但它只能访问949M,剩下的另作他用。
地址总线是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向三态的。
数据总线:
- CPU通过地址总线寻址,然后通过数据总线与外部设备互换信息。
- 是CPU与内存或其他器件之间的数据传送的通道。
- 数据总线的宽度决定了CPU和外界的数据传送速度。
- 每条传输线一次只能传输1位二进制数据。eg: 8根数据线一次可传送一个8位二进制数据(即一个字节)。
- 数据总线是数据线数量之和,数据总线的位数决定CPU单次通信能交换的信息数量。
物理地址
在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫(硬件上)实际地址或绝对地址。
物理地址它是在地址总线上,以电子形式存在的,使得数据总线可以访问主存的某个特定存储单元的内存地址。在和虚拟内存的计算机中,物理地址这个术语多用于区分虚拟地址。尤其是在使用内存管理单元(MMU)转换内存地址的计算机中,虚拟和物理地址分别指在经MMU转换之前和之后的地址。
虚拟地址
逻辑地址(基于算法的地址(软件层面的地址)称为虚拟地址
-
虚拟地址是Windows程序时运行在386保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址,与实地址模式下的分段地址类似,虚拟地址也可以写为“段:偏移量”的形式,这里的段是指段选择器。而linux没有这种保护模式,本来用的就是虚拟地址。
-
虚拟地址 (virtual address): CPU启动保护模式后,程序运行在虚拟地址空间中。注意,并不是所有的“程序”都是运行在虚拟地址中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。
-
如果CPU寄存器中的分页标志位被设置,那么执行内存操作的机器指令时,CPU(准确来说,是MMU,即Memory Management Unit,内存管理单元)会自动根据页目录和页表中的信息,把虚拟地址转换成物理地址,完成该指令。
-
使用了分页机制之后,4G的地址空间被分成了固定大小的页,每一页或者被映射到物理内存,或者被映射到硬盘上的交换文件中,或者没有映射任何东西。对于一般程序来说,4G的地址空间,只有一小部分映射了物理内存,大片大片的部分是没有映射任何东西。物理内存也被分页,来映射地址空间。对于32bit的Win2k,页的大小是4K字节。CPU用来把虚拟地址转换成物理地址的信息存放在叫做页目录和页表的结构里。
-
对于x86系统,页目录的物理地址放在CPU的CR3寄存器中。CPU把虚拟地址转换成物理地址。
树莓派芯片手册(地址):
-
BCM2835是树莓派3B CPU的型号,是ARM-cotexA53架构,
-
cpu Bus是地址总线,00000000~FFFFFFFF是CPU寻址的范围,就是4294967296bit。
-
MMU单元(页表算法)将物理地址映射为虚拟地址
-
DMA是高速拷贝单元,CPU可以发动DMA直接让DMA进行数据拷贝,直接内存访问单元。