内存芯片的内部结构、存储原理和内存对齐

内存芯片的内部结构、存储原理和内存对齐

在这里插入图片描述

内存芯片的内部结构

在这里插入图片描述

  • 可以看到,在内存芯片中有8个Bank,分别是Bank0~Bank7,Bank是用来存储数据的。

在这里插入图片描述

  • 每个仓库又由很多内存单元构成,从本质上讲,每个仓库就是由内存仓库在二维平面上组成的矩阵,这些内存单元就是内存中存储数据的基本单位。
  • 可以算一下一个Bank有多少个内存单元(1个字节),512*1024*1024/8

在这里插入图片描述

  • 一个内存单元又由8个基本单元电路构成

在这里插入图片描述

  • 这个电路非常简单,只有两个电子元件,一个是晶体管,一个是电容
  • 这根绿色的线叫比特线,蓝色的线叫字节线
  • 晶体管有三个极,导通控制极(基极)连接到字节线上,另外两极(集电极和发射极)分别连接在比特线和电容上
  • 晶体管实际上就是一个电子开关,控制了基本电路的通断,电容器用来存储电荷。

在这里插入图片描述

  • 先给绿色的比特线通上电,电流流到电子管,但这时候电子管是断开的,所以电流到达不了电容器,下面给字节线通电,这个时候在导通控制极的作用下,晶体管导通,这时从比特线过来的电流就会通过晶体管流向电容器,给电容器充电,电容器充电后,会呈现高电势,这个高电势就对应二进制的1。
  • 给字节线和比特线断电,此时晶体管会被断开,整个电路形成了开路,这个时候电荷会被存储到电容器中,电容器会一直呈现高电势,也就相当于一位二进制数1被保存到了内存中,

在这里插入图片描述

  • 现在只给蓝色的字节线通电,这时导通控制极控制晶体管联通,电路变成通路,这时比特线上没有电,那么电容器上的电荷就会通过比特线流走,这时电容变回低电势,低电势对应二进制的0,所以在这个简单的电路中,电容可以存储1比特的数据。

  • 根据电容器高低电势分别对应二进制的1和0,由此我们可以得到,在内存中存储数据的最小单位就是这个基本单元电路,也就是1比特。

在这里插入图片描述

  • 一个内存单元中有八个这样的基本电路,所以一个内存单元可以存储8比特的数据,即一个字节的数据。
  • 因此内存中存储数据的基本单位是一个内存单元,也就是一个字节。

存储数据原理

效率低的办法

在这里插入图片描述

  • 上面这部分是一个内存芯片中的8个Bank,下面这部分是CPU,CPU中集成了内存控制单元,CPU和内存之间通过数据总线和地址总线连接到一起。

在这里插入图片描述

  • 假设现在有一个16位的16进制数 0x123456789ABCDEF0,那么CPU是如何将这个数保存到内存中然后再取出来的呢。因为计算机只能存储二进制的0和1这两个数,所以要先将这个16进制数转换为二进制数
    • 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000
  • 由于内存存取数据的基本单位是一个字节,一个字节包含8位二进制,所以将这个64位二进制数分为8组,每一组为一个字节。

在这里插入图片描述

  • 这里有8个Bank,我们如何选择Bank呢,我们可以先假设一下,把这个数据保存到第一个Bank,下面我们看一下存取过程。
  • 首先CPU要生成一个内存的逻辑地址,这个逻辑地址会被内存单元转换为内存的物理地址,最后转换成一个行地址和一个列地址,通过行地址和列地址,在内存单元组成的这个二维矩阵中,可以唯一定位一个内存单元的位置,这就是内存寻址。
  • 寻址完成,CPU就会将一个字节的数据通过数据总线,保存到被定位的那个内存单元中。
  • 那么现在就保存了一个字节的数据,还剩下7个字节的数据,依次类推,通过行列地址(0,1)(0,2)(0,3)(0,4)(0,5)(0,6)(0,7)放入,我们可以看到这样的操作要重复8次才能将这个数全部保存到内存中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 那么取这个数据的过程正好相反,首先内存寻址,通过行地址和列地址定位到要取的数据,然后通过数据总线将数据传送到CPU中,同样这个过程也需要重复8次,才能将这个数完整的取出,并传送到CPU中,我们可以看到在这个存和取的过程中,同一时间,只能对一个Bank进行操作,剩下的7个Bank被闲置,64位的数据总线也只用了8位,这样就造成了资源的极大浪费,同时也浪费了更多的资源时间,严重降低了CPU访问内存的效率。

在这里插入图片描述

效率高的办法

在这里插入图片描述

  • 有没有更好的办法呢
  • 内存芯片中的8个Bank是并列连接的,在寻址的时候,我们可以发送一个行地址和一个列地址,同时对8个Bank中相对应的内存单元进行定位,而64位的数据总线,也可以一次将这8个字节保存到这内存中,取数据时也可以通过一次寻址定位,将这8个字节的数据一次读取到CPU中,从把数据都保存到一个仓库中相比,这样可以节省大量的时间,大大提高了CPU访问内存的效率。
  • 那么现在我们来思考一个问题,一个内存芯片中一次寻址可以定位8个字节的数据,内存条上有8个这样的内存芯片,那么一次寻址可以定位多少字节呢,答案是64个字节,原因是这8个内存芯片是并联的,芯片内部的Bank也是并联的,所以一次寻址可以同时定位到8个内存芯片中,64个Bank内的相对应的内存单元,也就是64个字节的数据。
  • 所有的这些数据都是为了提高对内存的访问效率,那么这样就使得内存地址在物理上变得不连续,
    在这里插入图片描述

在这里插入图片描述

内存对齐

在这里插入图片描述

  • 下面我们再看一种情况,这8个Bank中,前面两个Bank的内存单元中已经保存了数据,这个时候我们如何存储这8个字节的数据呢,有两种方法

不内存对齐

在这里插入图片描述

  • 首先进行寻址定位,我们看到这时有8个内存单元同时被定位,但是前面这两个内存单元已经被使用,只有后面这六个内存单元可以使用,所以在这次寻址中,只能将这8个字节的前六个字节保存到内存中,还剩下两个字节的数据,我们就需要第二次寻址定位,这次寻址还是同时定位了8个内存单元,但只需要前面两个内存单元,我们将剩下的两个字节的数据保存到内存单元中,

在这里插入图片描述

在这里插入图片描述

  • 那么取数据时也需要两次寻址定位,每次定位都会读取8字节的数据,一共读取了16个字节的数据,但这不是我们要取的数据,这个时候就需要对这个16字节的数据进行额外的处理,首先抛弃无用的数据,然后将有有用的数据重新组合出我们要读取的数据。这样座有优点也有缺点,优点是可以不浪费内存空间,但缺点是需要两次内存访问,还要对取出的数据进行额外的处理,因此降低了内存访问的效率。

内存对齐

在这里插入图片描述

  • 寻址定位时,我们另起一行,通过一次寻址定位,就可以将8字节数据保存到内存中,但这个时候我们可以看到这里浪费了6个字节的空间,取数据时也可以通过一次寻址定位将这8个字节的数据全部取出,这个时候取出来的数据就是我们所要的数据,不需要花费额外的时间去处理数据,相比第一种方法,这样做的优点是减少了内存访问的次数,从而提高了CPU对内存访问的效率,缺点就是对内存空间造成了一定的浪费,这种方法实际上就是内存对齐,也叫字节对齐。
  • 现在内存造价越来越低,扩充内存很容易,但想要提高内存的访问效率就非常难,所以现在通常都是使用内存对齐的方法来存取数据,目的就是为了提高内存的访问效率,其实这就是用牺牲空间来换取时间的方法,来提高内存的访问效率。
    在这里插入图片描述
  • 38
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YRr YRr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值