• 地址总线、物理地址、虚拟地址讲解


    什么是地址总线?

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

    换而言之,就是cpu能够访问内存的范围。

    我们平时所说的计算机是32位,64位,指的是计算机的CPU中寄存器的最大存储长度,如果寄存器中最大存储32bit的数据,就称之为32位系统。在计算机中,数据一般都是在硬盘,内存和寄存器之间进行来回存取。CPU通过3种总线把各组成部分联系在一起:地址总线,数据总线和控制总线。地址总线的宽度决定了CPU的寻址能力,也就是CPU能达到的最大地址范围。内存是通过地址来管理的,CPU想从内存中的某个地址空间上存取一个数据,CPU就需要在地址总线上输出这个存储单元的地址。假如地址总线的宽度是8位,能表示的最大地址空间就是256字节,能找到内存中最大的存储单元是255这个格子(从0开始)。即使内存条的实际空间是2G字节,CPU也没法使用后面的内存地址空间。如果地址总线的宽度是32位,那么能表示的最大地址就是2的32次方,也就是4G字节的空间。

    举例说明︰装了32位的win7系统,明明内存条86,可是系统只识别了3.8G ,装了64位,才能识别到8g。

    32位能表示/访问4,294,967,296 bit

    换算一下就是:

    bit4,294,967,296
    kbit4,194,304
    mbit4,096
    gbit4

    我们可以使用指令来查看树莓派的内存有多大,cat /proc/meminfo

    如图所示,32位的树莓派,949M约1G内存大小。

    在这里插入图片描述

    什么是物理地址?

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

    什么是虚拟地址?

    虚拟地址是Windows程序时运行在386保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址,是基于算法的地址(软件层面的假地址)。

    三者的作用

    虚拟地址 (virtual address): CPU启动保护模式后,程序运行在虚拟地址空间中。注意,并不是所有的“程序”都是运行在虚拟地址中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。

    如果CPU寄存器中的分页标志位被设置,那么执行内存操作的机器指令时,CPU(准确来说,是MMU,即Memory Management Unit,内存管理单元)会自动根据页目录和页表中的信息,把虚拟地址转换成物理地址,完成该指令。

    在这里插入图片描述

    我们的32位树莓派物理内存约1G,CPU可以识别的范围是约4G,假设你的程序在磁盘超过1个G,物理地址不够用,大概率运行不起来或者崩掉,此时就需要虚拟地址来帮助我们扩大虚拟的容量(准确说是映射),将我们的物理地址通过分页机制(页表mmu)映射到虚拟地址,我们写的代码都是操控的虚拟地址,上层应用程序都是运行在虚拟地址中的。


    参考:https://blog.csdn.net/qq_55299368/article/details/118875855

  • 相关阅读:
    Android13 Launcher3 定制
    过滤器和拦截器的基本知识
    Hadoop总结——HDFS
    零数科技受邀加入中国信通院隐私计算联盟
    未来趋势:探索Facebook在数字化时代的发展方向
    Hello, World
    (附源码)springboot优课在线教学系统 毕业设计 081251
    python游戏库pygame经典教程
    MySQL高级-SQL优化- update 优化(尽量根据主键/索引字段进行数据更新,避免行锁升级为表锁)
    [第二章 web进阶]XSS闯关-1
  • 原文地址:https://blog.csdn.net/qq_44333320/article/details/125631494