(六)双端口RAM和多模块存储器
存取周期包括存取时间和恢复时间,一般情况下,DRAM芯片的恢复时间都远大于存取时间,且可能为存取时间的好几倍。因为DRAM芯片的存储元为电容结构,它的读数据是破坏性读出,读完数据后需重新写入数据,所以恢复时间较长。
问题:
1.如果多个CPU都要访问这个内存怎么办
因为多个CPU要访问的是同一个内存条,在第一个CPU访问完后,需等到一个存取周期结束(也就是存取完后需等到恢复时间结束)第二个CPU才能访问该内存条。
2.CPU的读写速度要比主存快很多,对同一个内存条连续进行读/写操作,进行完第一个操作后,由于恢复时间较长,需等到恢复时间结束后才可进行第二次访问操作。
本节就是对这两个问题的解决办法进行学习
第一种解决办法——双端口RAM
在存储器上设置两组/多组相同的端口(数据线、地址线、控制线),可供两个/多个CPU同时访问,两组/多组端口完全独立,互不影响。
两个端口对同一主存操作有以下四种情况:
1.两个端口同时对不同的地址单元存取数据 √
2.两个端口同时对同一地址单元读出数据 √
3.两个端口同时对同一地址单元写入数据 会导致写入错误
4.两个端口同时对同一地址,一个写入数据,另一个读出数据 会导致读出错误
上面出现的写入错误和读出错误两个问题的解决办法是:
设置一个“忙”信号,当进行上述两种操作时,置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问
第二种解决办法——多体并行存储器
多体并行存储器可分为高位交叉编址和低位交叉编址,下图中左边为高位,右边为低位
所谓高位交叉编制就是在地址位的高位来表示多根内存条编号,例如下图,地址位共有5位,内存条有4根,需要两位比特位来为4根内存条编号,第一根内存条为00,第二根为01,第三根为10,第四根为11,剩下三位地址位用来对每根内存条内的存储单元进行编址。低位交叉编址的相关操作也一样,这里就不具体说明。
按照以上的编址方式进行编址可见,高位交叉编址读取连续的地址空间是竖着读的,即按顺序读取完第一个内存条再按顺序读取第二个,以此类推。按低位交叉编址的编址方式,读取连续的地址空间是横着读的,即读取第一个内存条内的第一个字,再读取第二个内存条的第一个字,以此类推,读完所有内存条第一个字的时候,再回来读取第一个内存条的第二个字...
假定现在要连续取5个存储字,存取周期为T,存取时间为r,假设T=4r,即恢复时间为3r,连续访问的情况下,耗时多少。
采用高位交叉编制:
连续访问5个存储字,按高位交叉编制的方式,连续地址空间读/取时竖着进行,即先按顺序读取某一个内存条内的存储单元,读取同一个内存条内的数据,需要等待上一个存取周期(恢复时间结束)结束后才能进行下一个存储字的读取,因此耗时如下图左下角坐标图所示,耗时为5T。
采用低位交叉编制:
连续访问5个存储字,按低位交叉编制的方式,连续地址空间读/取时横着进行,即先读取某一个内存条内的第一个存储单元,再读取下一个内存条内的第一个存储单元,无需等待恢复时间结束,因为它们在不同的内存条,当第五个存储字的存取时间(注意是存取时间而不是存取周期)结束后,第一个存储字的存取周期(恢复时间)正好结束,所以可接着访问第一个内存条的第二个存储单元。因此耗时如下图右下角坐标图所示,耗时为T+4r。
因此可以推断,存/取n个存储字时,高位交叉编址耗时nT,低位交叉编址耗时T+(n-1)r。
事实上,当n趋向于无穷大时,低位交叉编址的耗时接近r。
应该取几个体(即取几个内存条)
根据上面所讲可知,存取周期为4r,存取时间为r时,采用了4个内存条,获得了完美衔接的效果,因此最好的模块数(内存条)m=T/r,但是m大于等于T/r可是可以的
下图中说存取时间为r和总线传输周期为r说法可视为一样,m都大于等于T/r
多模块并行存储器和单体存储器对比
单体存储器没有多模块存储器灵活,但两者的耗时都趋近于r。