8 内部存储器

图片来源:南京大学软件学院COA课程PPT

©author:zzb

8 内部存储器

image-20211218091500668

image-20211014141312493

原来是32位机器,那么内存一般是4GB,因为232次方就是4GB,再多插内存条也没有用,因为地址最多232个,因此最多就只能区分出这么多的单元

就相当于房间数不能增加了,如果想要增大,那么只能增加房间里可以住的人数,即提高寻址能力

Q:每个计算机所能访问的地址有限?

n长01串决定了2n个地址,由计算机的设计决定的,不由总线(地址线)决定。eg. 16位的线可以传2次表示32位地址

image-20211014143002582

一个位元是一个bit,有两种状态,用来代表0和1,至少要能被写入一次,否则不存储信息是没用的

早期的存储器是由磁芯制作的,其原理为:将磁环(磁芯)带磁性或不带磁性之状态,用以代表1或0之比特,磁芯存储器是非易失性存储器(Non-volatile Memory),即使死机或电源中断,只要没有发生错误的写入信号,则仍然可保有其内容。

image-20211014143326652

RAM

image-20211014143631213

易失的volatile,断电内容丢失

动态随机存取存储器Dynamic Random Access MemoryDRAM

image-20211014144043754

由于这种需要定时刷新的特性,因此被称为“动态”存储器,刷新会影响访问,所以访问速度会变慢

一般用于主存

静态随机存取存储器Static Random-Access Memory,SRAM

image-20211014144411503

所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。当电力供应停止时,SRAM储存的数据还是会消失

一般用于高速缓存

image-20220106121310582

image-20211014144835899

与SRAM相比,DRAM的优势在于结构简单——每一个比特的数据都只需一个电容跟一个晶体管来处理,相比之下在SRAM上一个比特通常需要六个晶体管。正因这缘故,DRAM拥有非常高的密度,集成度高,体积小,单位体积的容量较高因此成本较低。但相反的,DRAM也有访问速度较慢,耗电量较大的缺点。

image-20211014150146768

image-20211014150540744

传统异步DRAM,CPU不知道何时主存才能准备好数据,所以要一直等待着,而同步DRAM则为主存与时钟信号同步,会在固定的若干个事时钟周期后准备好数据,所以CPU只要那个时间点去取数据即可,中间可以完成其他的事情

image-20211014150551277

这样CPU就不需要区等待数据的存取,而是知道会在哪个时钟周期完成数据的存取,到时后再去执行即可,而中间时间CPU则可以进行其他操作

注意这里的时钟不是CPU时钟

image-20211014150922689

  • SDRAM在一个时钟周期内只传输一次数据,它是在时钟上升期进行数据传输;

  • 而DDR则是一个时钟周期内可传输两次数据,也就是在时钟的上升期和下降期各传输一次数据。使得数据传输数率更快

ROM

image-20211014151455163

通过掩膜来写入,写入一次后就不能再写入,只能读

image-20211014151912592

使用电信号来写入

主要进行读操作的存储器

image-20211014153107731

EPROM

image-20211014153123784

光擦除,电写入,注意要写入前要擦除之前的内容才行

EEPROM

image-20211014153642509

可以随时写入而不删除之前的内容

但速度慢,写操作每字节需要几百微秒

密度低

Flash Memory

image-20211014154321299

image-20211014154729160

image-20211014154957475

其中2048x2048x4,前两个表示有这么多行和列,4表示一个单元是4个bit,说明由4个2048*2048的位元阵列构成image-20220106144909649

尽可能排成正方形,这样可以减少线的数量,如果100个单元排成一排,那么寻址需要100根线,而如果是10X10排,那么只要20根线组合即可,只要把要寻址的行和列进行加电,那么就可以选中交叉的那个单元

2048=2^11,所以需要11根线,图中的行/列地址缓冲器可以一次由11位的地址线传入行,下一次再传入列,当两者都有后,再去找存储单元

image-20211024204118897

image-20211024204126649

  • 集中式刷新:停止所有读写操作并刷新,这样内存就是一会工作一会不工作,对计算机影响很大

  • 分散式刷新:在每个存储周期中,当完成读写时刷新,刷新时间和集中式是一样长的,只是把这段时间分散到多个周期内,因此不会出现突然不工作的情况,因为刷新时间就是死区,那么没有刷新时间就没有死区,所以分散式刷新不存在死区。代价就是,由于把刷新时间融入到了存取周期中,导致存取T周期变长image-20220106134846778

    这里是每次读写完这个行后,就刷新这个行,并且不考虑CPU一直读取一行而导致其他行没有被刷新的情况,默认CPU从第一行一直读取到最后一行,所以刷新间隔就为行数个存取周期

    再用概率的视角来看,每一行被读/写的概率几乎相同,若把时间扩展到足够长,读取次数足够多(即从宏观的视角),每一行被读取的次数几乎是相同的,那么平均来看,从微观来看,我们也可以近似的看成cpu每一次都读/写了不同行。

  • 异步刷新(效率高,常用):设置一个时间间隔,在这个间隔内要保证每一行都被刷新一次,至于在间隔中什么时候刷新,是根据被不被访问来决定的,如果现在被访问,就不刷新,不被访问就刷新。但如果一直被访问,那么可能会去影响读写强行刷新

    image-20220106135525380

    它将每一行的刷新都分开来,也就是说只要在规定的时间完成对每一行一次的刷新就行了,(2ms/64)间隔进行一次一行的刷新,这里的2ms是规定的,因为DRAM要求,至少2ms更新所有行一次。

    每一行只要在最大刷新周期(不刷新/充电就丢失数据的极限时间)内,找个每一行它自己觉得方便的时候刷新即可。

    这样在读写的时候也能刷新,把刷新时间放在了读写中,读写这行就刷新其他行

    所以说,异步式刷新所说的某行在Xms内至少刷新一次=每(Xms/行数)至少刷新一行。在上述的例子中,就是每4ms内至少刷新一次 = 每(4ms/256=15.6ms)至少刷新一行。

  1. 某一行充一次电/刷新一次的时间,也等于一个存取周期(存储周期)。

  2. 刷新间隔:所有存储单元都刷新一遍所需要的时间,也是两次所有存储单元开始刷新之间间隔的时间。

image-20211024205216480

image-20211024205628703

图中内存条上黑色的是芯片,芯片连接在一起是通过板子上的金属线

  • 位扩展:地址线不变,数据线增加。如1bit到8bit,数据线要增加8倍几个bit就要几根

  • 字扩展:改变寻址单元个数,但不改变每个单元中的位数,即寻址能力不变。地址线增加,数据线不变。

    16K=214,所以换成行列除2,因此地址线需要7条。变成64K=216,所以地址线需要8根 (因为行列复用,所以扩大四倍只要多加1根线即可,如果不复用则要多加两根)

  • 字、位同时扩展:地址线和数据线都增加

image-20211024210939299

只能插1根、2根、4根,而且要先插相同颜色

多插内存条是字扩展,寻址能力不会变

image-20220106141216889

image-20220106141242754

主存地址的低3位是用于选片的,注意数据的存放方式,在一个芯片上不是连续的,而是在不同芯片的同一位置连续存放。

同时地址中高位为行地址,低位为列地址

先根据行号选出整行到缓冲中,然后在从中选出列

image-20220106141626007

总结

image-20211024211121508

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
  • Copyrights © 2022-2024 zzb
  • RZ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信