【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器

下面我们进入双端口RAM和多模块存储器的学习。这是提高我们的存储器的访存速度的一些措施。

我们之前已经讲过我们的主存和CPU是进行连接的,那么这就导致了一个问题就是说,随着我们现代科技的发展,计算机的应用领域在不断地扩大,我们所处理的信息量呢也越来越多,所以呢我们的CPU的功能在不断地加强,我们主存的这样一个容量也在不断地扩大,这就导致了一个问题就是说我们的CPU的速度和我们的主存速度是不匹配的,CPU的速度的增长是一个指数级别的增长,而主存的速度的增长只是一个线性的一个增长。所以,我们现在要解决的问题呢就是提高我们访存的速度,能够使得我们主存和CPU的速度进行匹配。那么我们提出了两种解决方案,第一种解决方案呢,就是我们采用高性能的这样的存储器。第二种呢我们就采用一种高速缓冲存储器,这样的一个策略。那么我们这节课呢就来看一下我们的双端口RAM和我们的多模块存储器的一个概念,这节课的重点是双端口RAM,但是我们这一节的重点呢不在这里,这里只要大家掌握了解一下,而我们的多模块就是我们这节的重点,大家做好一个准备。

我们之前已经讲过了,这是一个存储器的结构框图。那么我们的存取周期啊分为一个存取的时间,再加上一个恢复的时间。为什么呢?因为我们在进行一次存取之后,是不能立即进入下一次存取的。我们的存储器要进行一个恢复,那么这一段时间呢,就叫做恢复时间。而我们的存储周期就是由存取时间,加上恢复时间而构成的。这时候如何来缩短我们的存取周期,如何来提高我们的访存速度呢?我们就有两种方案,第一种方案就是我们对不同时间进行不同的存取操作的这样一个部件进行一个并行。第二种呢我们就采用流水线的一个方式。那么前者也就是我们双端口的存储器,它是一个空间上的运行,它是有两个端口,这样呢我们就可以用这两个端口来进行我们的存取,就可以提高我们的访存速度。而我们的多模块的存储器呢,它是一个时间上的并行,它是采用一个流水线的技术来提高我们的访存速度的。

那么双端口RAM是什么样子的呢,是这个样子。它有两个端口,它一个同一个存储器啊它有左右两个独立的端口,所以呢就有两个相互独立的地址线,数据线和我们的控制线分别配合我们的CPU进行连接。但是呢,我们可以看到啊,就是如果这样的时候呢,它会带来一些问题。那么我们两个端口对同一个主存进行操作的时候有4种情况,第一种情况是我们不同时地来进行一个存取。那么不同时,肯定就不会产生错误,这是没有问题的。

第二种,它同时对一个地址单元进行操作,但是呢它是读出数据,你同时读是不会产生任何问题的。

但是第三种就有问题了。就是说我们同时写这时候就会发生写入错误。

那么第四种情况,一个进行写一个进行读,这时候我们要读的是你写之前的还是你写之后的数据呢,这时候就会发生错误,这时候呢就会产生一个读出错误。

那么如何解决它呢?很简单,你只要置一个“忙”的这样一个信号。如果我们的这个忙信号啊它起作用了,那么我们这时候就暂时地关闭一个端口,然后呢没有关闭的那个端口我们可以正常访问。然后呢被关闭的这个窗口呢我们延长一段时间之后然后再打通,这样呢就会对我们的这些冲突产生的错误呢就得到了一个解决。啊这是一个双端口的RAM,这实际上很好理解,大家只要稍微地看一下就行了,这不是重点,重点呢就在我们下面的多模块的存储器。

那我们来看一下多模块的存储器,那么之前已经讲过,就是说,我们的CPU的速度是比我们的存储器要快的。如果这时候从存储器当中同时取出m个字,这样的话我们就可以充分地利用CPU的资源,我们就可以提高运行的速度,所以呢我们就提出了这样的叫做多模块的存储器的概念。

我们的普通存储器,我们每一行呢是一个存储单元,那我们有这样的一个方法。就是说我们我们还是一个存储体,但是呢我们每一行可以存储m个字。也就是说我们还是一个存储体,但是呢我们每一行可以存储m个字,像这样呢我们就叫做单体、多字的存储器。虽然只有一个存储体,但是呢我们每一个存储单元我们多存一点我们存储m个字,这时候呢总线的宽度如果也是m的话,我们这时候一次就可以并行地读出我们这m个字,啊就是这个样子的。但是这显然就增加了我们存储器的带宽,因为我们这时候每个存储单元要存储m个字,也就是说在一个存取周期当中我们同一个地址它取出m条指令,然后呢把这样的指令逐条地送入到我们的CPU当中,相当于什么呢,相当于我们每m分之一个存取周期我们就取一条指令,所以呢这样的话呢就增加了我们存储器的带宽,也就提高了我们的工作速率。但是这样的方式是有缺点的,也就是说我们的数据和指令啊,在主存当中必须是连续存放的,连续存放我们才能一下子把这一行读出来,然后这一行呢是m个字。但是如果我们遇到了什么像转移指令啊,或者我们的不能连续存放的操作数,这时候我们的效果呢就不明显了,我们还是要读几次的。

所以它的缺点就是说我们的指令和数据必须是连续存放,我们才能同时读出。

所以这是第一种方法就是说我们的单体、多字的系统,我们还是一个存储体。但是我们每个单元存储了m个字,也就存储了多字,所以才叫单体多字。

第二种方式呢叫做多体并行的这样的存储器,我们用多个存储体、用多个模块就是这个样子的。我们采用的叫做多体并行的这样一个存储器,和上面是不一样的。上面只有单体,而下面呢是多体。它是由多个模块组成的,每一个模块它有相同的容量和存取速度。并且我们每一个模块都有独立的读/写控制电路、独立的地址寄存器和独立的数据寄存器。所以,这时候呢既可以同时工作,也可以交叉工作。那么我们这样的东西呢就是多个模块组成的这样的一个叫做多体并行的存储器,如果要对它进行编址的话,我们有两种方式进行编址,就是这样的。

第一种呢叫做高位交叉编址的多体存储器。它的高位是几号,而低位是体内地址,就是每一个体当中,每一个模块当中它的地址。

第二种方式呢叫做低位交叉编址。它的高位是体内地址,而低位是几号。

它有什么不同呢?我们来举一个例子来看一下。我们现在把它具体化,把这个n呢取成8,也就是说我们每一个模块当中是有8个这样的存储单元的。

如果采用高位编址呢,是这个样子的。我们00000,前两位是它的体号,后三位是它的每一个模块当中它的体内地址。那么我们如果是00001呢,它应该是对应的是哪个呢?对应的应该是下面的这个。所以就相当于是这样竖过来编址,就是每一个存储,每一个模块我们先把它里面进行一个编址,是这个样子。所以呢,前两位就是它的体号,就是M0这个下标0。而后三位呢就是它体内的一个地址。M0当中的第一号,M0当中的第二号,一直到M0当中的第8号。这时候如果我们再进行移位的话就是01000。这时候对应的是什么呢?对应的是第二个存储体它当中的一号单元,就是这个样子的。所以如果我们的地址是连续的话,我们相当于是每一个存储体里面、每一个模块里面先进行一个编址,然后一个一个模块地进行这样的编址,所以就是这个样子。

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/11470847.html