下面我们进入双端口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。这时候对应的是什么呢?对应的是第二个存储体它当中的一号单元,就是这个样子的。所以如果我们的地址是连续的话,我们相当于是每一个存储体里面、每一个模块里面先进行一个编址,然后一个一个模块地进行这样的编址,所以就是这个样子。

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

  1. 【知识强化】第三章 存储系统 3.4 主存储器与CPU的连接

    我们这节课来看一下关于主存的一些知识.我们将要讲解主存的简单的模型和主存与CPU连接的连接原理. 我们之前呢在第一章已经学过了存储器的构成,包括了存储体.MAR(也就是地址寄存器).MDR(也就是数据 ...

  2. 【知识强化】第二章 数据的表示和运算 2.4 算术逻辑单元ALU

    从本节开始我们就进入到本章的最后一节内容了,也就是我们算术逻辑单元的它的实现.这部分呢是数字电路的一些知识,所以呢,如果你没有学过数字电路的话,也不要慌张,我会从基础开始给大家补起.那么在计算机当中, ...

  3. Android初级教程理论知识(第三章测试&数据存储&界面展现)

    首先介绍单元测试,我在javaweb部分有详细介绍单元测试框架的一篇文章. 可以先看在javaweb中的单元测试详解篇http://blog.csdn.net/qq_32059827/article/ ...

  4. Java基础知识笔记第三章:运算符表达式语句

    算术运算符与表达式 操作符 描述 例子 + 加法 - 相加运算符两侧的值 A + B 等于 30 - 减法 - 左操作数减去右操作数 A – B 等于 -10 * 乘法 - 相乘操作符两侧的值 A * ...

  5. CentOS 7.4 初次手记:第三章 CentOS基础了解

    第三章 CentOS基础了解... 36 第一节 语言编码.终端... 36 I 查看语言编码... 36 II Tty?.pts/?. 36 第二节 bash/sh command. 38 I 查找 ...

  6. Python黑帽编程3.0 第三章 网络接口层攻击基础知识

    3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...

  7. Java基础知识二次学习--第三章 面向对象

    第三章 面向对象   时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...

  8. NodeJs>------->>第三章:Node.js基础知识

    第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info  方法 console.log(" node app1.js 1> ...

  9. Linux知识要点大全(第三章)

    第三章  Linux基本操作 *主要内容 1:认识root用户 2:Linux下命令的写法 3:Linux关机和重启 4:忘记root密码的处理方法 5.  Linux下的目录结构 6.  查看信息 ...

随机推荐

  1. P4206[NOI2005]聪聪与可可

    链接P4206 [NOI2005]聪聪与可可 类似于开车旅行,如果老鼠确定了那么猫的路线是确定的. 预处理\(g_{i,j}\)表示老鼠在\(i\)号点,猫的下一步方向,\(Bfs\)就行了 设\(f ...

  2. web项目分层设计

    model.dao.service.controller之间的关系,还有util和task的简介 model: 与数据库中的表一一对应,实现set和get的方法.

  3. 【leetcode】1037. Valid Boomerang

    题目如下: A boomerang is a set of 3 points that are all distinct and not in a straight line. Given a lis ...

  4. python学习笔记(十三)处理时间模块

    import time time.sleep(2)#等待几秒 时间的三种表现方式: 1.格式化好的时间 2018-1-14 16:12 2.时间戳 是从unix元年到现在所有的秒数 3.时间元组 想时 ...

  5. Netty学习笔记(一)

    学习圣思园Netty笔记,个人理解 2.netty宏观理解-本节内容: 1.阶段性事件驱动,一个请求分为若干阶段处理,每个阶段根据情况合理分配线程去处理,各阶段间通信采用异步事件驱动方式. 2.net ...

  6. iOS7上leftBarButtonItem无法实现滑动返回的完美解决方案

    今天遇到了在iOS7上使用leftBarButtonItem却无法响应滑动返回事件的问题,一番谷歌,最后终于解决了,在这里把解决方案分享给大家. 在iOS7之前的系统,如果要自定义返回按钮,直接设置b ...

  7. thinkphp 级联菜单实现

    养殖场->栋舍级联菜单 //获取默认养殖场和栋舍信息 public function sbjr(){ $yzc_model=M("Yzc"); $list = $yzc_mo ...

  8. 【CDN+】 Spark入门---Handoop 中的MapReduce计算模型

    前言 项目中运用了Spark进行Kafka集群下面的数据消费,本文作为一个Spark入门文章/笔记,介绍下Spark基本概念以及MapReduce模型 Spark的基本概念: 官网: http://s ...

  9. statistics——数学统计函数

    statistics——数学统计函数 转自:https://blog.csdn.net/zhtysw/article/details/80005410 资源代码位置:Lib/statistixs.py ...

  10. 常用的Android关键词定位方法

    1字符串,特征字 根据程序运行中出现的特征字词进行搜索,从而获取定位到程序的相关位置之中.以前用 得比较多,不过现在一般难以找到想要的关键词.有时候需要对特征字进行拆分来进行搜索.才 能获得一点提示. ...