一、计算机的基本结构
(一)从程序员视角来看
- 最底层是机器语言,是使用机器码实现的二进制,指令集。
- 是汇编语言指令集,它使机器语言指令难以记忆的弊端得到解决,与机器语言指令是一一对应关系,该语言需要一个汇编语言解释器,根据指定规则解释成机器语言
- 是高级语言,这种语言用人类完全能够理解的方式进行编码,通过编译器编译成汇编语言,然后再成为机器码进行运行。
(二)现代计算机结构的特点(冯.诺伊曼计算机)(抽象的思想)
A、为什么现在的计算机都是冯. 诺伊曼计算机类型呢?
- 因为现在的计算机都是在冯诺依曼早期提出的存储程序概念上进行设计的计算机。冯诺依曼结构是一种将程序指令储存器和数据储存器合并在一起的计算机概念结构。故这种计算机又称为储存程序计算机。
B、冯诺依曼计算机结构的特点
- 都由五大部件组成
- 指令和数据以同等的地位存于储存器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成,操作码指出具体要做什么操作。
- 存储程序
- 以运算器为中心
C、冯诺依曼计算机结构图和分析
- 实线是数据流通线路,输入设备将信息输入经过运算器储存到储存器中,运算器将数据取出运算后将结果储存到储存器,最后再经过运算器输出到输出设备。指令先从储存器中取出到控制器,控制器分析将指令分析,进行执行调用。
- 每个部件的作用:运算器负责算数运算和逻辑运算;储存器负责数据和指令集的储存;输入设备将人能识别的数据转换为计算机数据输入;控制器分析储存器中储存的指令决定不同指令之间执行的顺序;输出设备将计算机处理结果转换为人能够识别的形式输出;
- 这样的结构有一个弊端:数据的输入和输出都必须经过运算器,这样运算器不仅要形式自己算数运算和逻辑运算的职能还要进行数据的输入和输出,所以运算器就成为了计算机性能的瓶颈,故我们要对此结构进行改进。
D、我们改成以存储器为中心并分析
- 我们改成以存储器为中心,这样一部分不需要计算的数据就可以直接通过储存器输出到输出设备。
- 虚线是控制器对其他组件进行控制和其他组件对控制器的状态反馈。
- 至此我们还可以对此结构进行抽象,进行层次化的改进。
E、对计算机结构图进行层次化分析并简化
- 我们把控制器(CU)和运算器(ALU)并称为CPU;把储存器分成主存和辅存;CPU和存储器共称为主机;
- 我们把输入设备和输出设备称为I/O设备;
- 主机和I/O设备共称为计算机的硬件;所以我们得出下图结构
- 实线代表数据传递,虚线代表控制器控制和状态反馈
(三)计算机系统复杂管理方法三Y原则(模块化思想)
A、要层次化,一个系统要能划分成多个层次,每个层次又有多个子模块;
B、模块化,因为有模块,所以模块和模块之间要有可以相互连接的接口;
C、规则性,模块的功能要尽量通用性,实线高复用。例如计算机的内存,只要所有内存生产厂商只要按照内存接口的统一标准设计接口,则只要是内存插到电脑上就能够提升电脑性能。
二、用计算机解决实际问题
(一)什么问题适合计算机来解决
当给定定义域x和值域y,当有一个函数满足每个x都有对应的值域中的y对应,则这个问题就适合计算机来解决,比如根据一定条件来判断一个人是男是女,要根据一些特征来判断满足则对应是,不满足则否,不存在想做鸡蛋一样模棱两可的情况。
(二)问题抽象和计算机处理过程
A、要想把问题用计算机处理,需要三个步骤:1.将问题抽象成数学模型 2.用计算机给定指令集实现这些数学模型 3.将指令集汇集成程序,该程序是指令的集合。
B、举例:计算机如何处理数学模型:ax^2 + bx + c
- 方法一:(该方法要用到储存器,需要更大的存储空间,且需要指令多,执行较慢)
- 将x用取指令从储存器中取出放入运算器中的累加器(寄存器)中;
- 将x从储存器中取出,调用乘指令算出x^2的结果;
- 调用存数指令将累加器(寄存器)中数据存入储存器中,然后调用取指令取出b;
- 调用取指令取出x,调用乘指令计算x*b的结果,放入累加器中。
- 最后用取指令分别取出x^2的结果,调用加指令和x^2相加存入累加器,再从储存器中取出c,调用加指令将c累加到寄存器中,实现结果的实现。
- 方法二:(对数学模型进行改进,不再用到存储器存储中间运算结果,故指令集也调用较少,执行更快)
- 优化数学模型为:(ax + b)x + c;
- 取数指令取出a,添加到累加器,取指令取出x,调用乘指令,累加到累加器(寄存器);
- 调用取指令,取出b,调用加指令,将b累加到累加器;
- 再调用取指令,取出x,调用乘指令,累加到寄存器,取指令取出c,再调用加指令累加到寄存器,结果得出。
(三)指令和数据在储存器中的储存和储存器的结构
A、指令都是由指令操作码和地址码构成(都是二进制数)
- 例如我们上面提到的取数指令,就可以是这样的结构:000001 0000001000;指令1,其保存地址在十进制8的储存器位置中。
B、同样我们获取的a等数据也都在存储器中储存,有相应的地址。
C、那么储存器到底有什么样的结构才能满足我们这些存储要求呢?
(四)存储器的结构图及分析
A、结构图如下:
B、对存储体的分析
- 存储体-->存储单元-->存储元件(0/1);存储体由存储单元构成,存储单元又由不定的0或1的存储元件构成。
- 每个存储单元中所有二进制代码的集合称为存储字;
- 每个存储字所含有的二进制位数的数量称为存储字长;
- 每个存储单元都会被赋予一个地址码,用来唯一标识其在存储体中所在的位置
- 当指令调用或数据取存都通过地址码寻址。
C、对MAR(存储器地址寄存器)的分析
- MAR用来储存存储体中存储单元的位置信息。
- 其也是二进制,每个存储字标识一个存储单元,因此MAR的长度就是存储体中存储单元的个数
D、对MDR(存储器数据寄存器)的分析
- MDR是用来储存从cpu中将要存入存储体中的数据和存储将要从存储体中取出的数据。
- 所以其长度常常等于存储体的存储字长。
(五)运算器的结构及运行流程
A、运算器的结构如下:
-
ALU是运算器的核心运算单元,因为其是双向电通路设计,没有储存功能,所以需要我们提供寄存器,ACC和X就是两个寄存器,用来储存要计算的数据。而MQ是当运算的结果超过运算数本身长度时,要用到MQ来寄存。
B、加减乘除运算时,各储存器存储的数据类型如下表
算法 | X | MQ | ACC |
---|---|---|---|
加 | 加数1 | 无 | 加数2 运算结果3 |
减 | 被减数 | 无 | 减数 运算结果 |
乘 | 乘数1 | 相乘结果的低位 | 乘数2 相乘结果的高位 |
除 | 被除数 | 商 | 除数 余数 |
-
乘法运算使用上下相乘的方法(很像我们十进制中乘法运算的方式)运算结果高位在ACC中存放,地位在MQ中存放,同时因为每位相乘结束之后,还有每位数的累加操作,这些累加数的结果也需要在ACC中完成。
C、加减乘除在运算器中的执行过程
-
在加指令开始执行之前,先执行取数指令将被加数取入ACC-->根据加指令中指定的加数储存单元位置,取出加数,放入X-->ALU执行运算将结果保存到ACC中。
- 在减指令开始之前,先执行取数指令将被减数取入ACC-->根据减指令中指定的减数位置取出减数放入X-->ALU开始运算并将结果存入ACC。
- 在乘指令开始之前,先执行取数指令将被乘数取出放入ACC-->根据乘指令中指定的乘数位置将乘数取出放入MQ-->将ACC中的被乘数移入X -->执行ACC的清零操作,为运算过程中的累加操作做准备-->ALU执行运算,将结果保存到MQ和ACC中。
- 在除指令开始之前,先执行取数指令将被除数取入ACC-->根据除指令中指定的除数地址将除数取出放入X-->ALU执行运算并将结果的商保存到MQ,将余数保存到ACC中。
那么每条指令的执行和多条指令之间的协调又是如何实现的呢?这就需要我们了解控制器。
(六)控制器的结构及运行流程
A、一条指令的执行都需要经历的过程:取指令取出这条指令(操作码和地址码的集合)-->分析指令分析指令的操作码-->核心控制单元调用相关部件执行指令。
B、控制器的结构如下
-
CU是核心控制单元,负责调用具体的部件执行相关操作;
-
PC是程序计数寄存器,用来储存要取出的指令的地址,当指令被取出执行+1,存入下一个要执行指令索引;
-
IR是指令寄存器,取指令取出的指令存放在这里供核心控制单元分析;
(七)整体分析一条指令的或一个程序的执行过程
A、综合结构图如下:
B、 分析取数指令和存数指令的完整执行过程
-
控制器根据PC中存入的指令地址存入MAR,然后控制器令储存器返回MAR中的指令,存储体将指定指令放入MDR,MDR再将指令传入IR中
-
CU对指令中的操作码进行分析,发出信号通知运算器要存入数据了!而后把IR中命令后面的相关数据的地址码存入MAR,控制单元命令存储器返回MAR中的数据到MDR中,MDR将数据返回到运算器的ACC中。
-
执行完毕后,PC+1传入PC,控制单元将PC对应地址传到MAR中,令存储体将对应指令传入MDR,MDR将指令传入IR,CU分析指令,并通知运算器要储存数据了!
-
而后运算器将数据传入MDR,MDR将数据存入存储体。
C、宏观分析整个ax^2+bx+c这个程序的执行过程
先通过输入设备将程序输入-->将程序的首地址索引存入PC-->控制器中CU根据PC取出命令(改步骤如上面分析)存入IR-->.....每条指令执行-->最后打印指令(也是条指令也要经过上面的过程)-->打印结果-->停机。
(八)计算机硬件的主要技术指标
A、机器字长:该指标跟CPU中寄存器的字长有关,通常寄存器字长越长,机器性能越好;比如同样要进行8位数乘于8位数的运算,那么64位寄存器只需要一次运算即可,但是8位数的寄存器却需要调用更多次。
B、运算速度(其决定因素较多)
- 主频,主频越大速度越快
- 核数,以及每个核中的线程数。
- 衡量机器每条指令的执行速度综合考量,例如CPI(每条指令执行需要的时钟周期数)、MIPS(每秒执行百万条命令的条数)
- 直接运行应用程序或者大型游戏对比测试。
C、储存大小(该指标又分为主存和辅存)
主存通常使用存储单元个数 * 存储字长来表示(结果就是存储的总位数),例如该主存的MAR有10位,那么其就能表示2^10个存储单元,MDR是8,代表着每个存储单元字长为8,所以可以标识为1k X 8位的主存大小。
辅存通常直接使用字节数标识例如80GB,B=2^3,K=2^10,1GB=2^30B;
三、计算机的发展与应用
(一)世界上第一台计算机
ENIAC,其是美国用于美国弹道试验室而研制的计算机,在研制这台计算机的过程中,冯诺依曼提出了冯诺依曼计算机的概念,这台计算机没有实际的寄存器。
(二)计算机发展的动力
A、需求,对计算机算力的不断提高的需求
B、相关技术的发展:电子管,集成电路;计算机设计结构的不断更新;
下表展示计算机使用
代 | 时间 | 硬件技术 | (次/秒) |
---|---|---|---|
一 | 1946 -1957 | 电子管 | 40000 |
二 | 1958-1964 | 晶体管 | 200000 |
三 | 1965-1971 | 中小规模 集成电路 | 1000000 |
四 | 1972-1977 | 大规模 集成电路 | 10000000 |
五 | 1977-至今 | 超大规模 集成电路 | 100000000 |
C、计算机也随着技术迭代而不断更新,下面是几个有影响的计算机
- 普林斯顿计算机,由普林斯顿大学制造的符合冯诺依曼结构的计算机
- 1964年研制成功的IBM公司的IBM system /360,采用大主机结构,同时是多个大小system机构,高性能system在低性能system上也可以运行,360代表愿景是帮助商、科两方发展。
D、微型计算机的出现与发展
- 微型计算机就是使用微处理器(使用大规模集成电路集成控制器和运算器的CPU)的微型计算机供给个人使用的计算机。
- 1971年,inter公司生产第一个微处理芯片,当时是4位的处理器芯片,到如今已经成为了64位数的芯片。
- 1970年存储器芯片诞生,开始只能存储256位 ,到现在的64M位。
- inter公司在微处理芯片方面做出了巨大贡献,从1979年的处理芯片的集成2.9万个晶体管到现在的一个芯片可集成30亿个晶体管,inter公司贡献了巨大力量。
- 摩尔定律发现集成电路可容纳的电子元件(晶体管)每18个月就会扩大两倍,每18月就会有一款新的芯片诞生。
(三)语言和软件的发展
A、语言的发展
- 刚开始的机器中都有自己的指令集,不同的机器指令集不同,所以一台机器上的程序想要在另一台机器上运行就必须修改指令集,同时0/1代码对程序猿来讲极难记忆。
- 后来在机器语言的基础上发展出了汇编语言,这样相比于0/1代码,程序员对于指令集更容易理解,但依然是不同机器上有不同的汇编语言。
- 再后来就有了高级语言,程序员不需要了解机器的指令集,直接面向问题编程即可,比较代表的高级语言有FORTRAN(用于科学计算)java、c++等。
B、系统软件的发展(与语言发展同时进行)
- 语言处理程序:汇编程序、编译程序、解释程序(和语言配合使用)
- 数据库管理程序
- 操作系统:linux、kylin linux、windows、macOS、DOS(磁盘操作系统)等等。
- 服务程序:装配、调试、诊断、排错。
- 网络软件
C、软件发展的特殊性
- 软件开发需要大量代码,人力成本巨大
- 软件测试工程量大,难以完美监测
- 人来开发很难不在开发过程中不发生错误,一旦发生错误,很有可能付出昂贵的代价。
(四)计算机应用领域
科学计算(如天气模拟等)、数据处理(如银行系统)、实时控制和工业控制、网络技术(如电商、网课等)、虚拟现实、办公自动化和信息管理系统、CAD/CAM/CIMS(计算机辅助设计/计算机辅助制造/计算机集成制造系统)、人工智能、多媒体技术。
(五)计算机发展展望
A、人工智脑发展,要求更高算力,更大储存
B、芯片发展受限:晶体管大小受物理极限制约,同体积集成数量达极限;芯片精密程度越高设备就越昂贵成本越高;芯片功耗、线延迟、散热更大;C 、传统硅芯片计算机是否会被替代:如光计算机(已实现光进行数据传输和存储)、 DNA生物计算机、量子计算机等
四、总线(bus)
(一)什么是总线?为什么要使用总线?信息在总线中传递的方式?
一台计算机的各个部件之间进行信息传递需要建立连接用来传递信息;传递信息建立连接有两种方式,方式一是每个部件之间都建立连接形成一张网,但是这样导致当部件过多时,部件之间的接口就占用大量空间,同时如果要增加部件,就要增加跟所有其他部件的通路,故也难以扩展;第二种方式就是有一条总线,所有要发送的消息发送到总线,接收端只要连接总线即可实现接收总线就是一条用于传递信息的公共通路,是各个部件共享的传输介质;信息在总线中传递的方式有两种:串行化传输,一次仅传递一位,还有一种是并行化传输,一次可以传递多位,但是并行化传输适用于短程传输,远程传输可能导致信息变形。导致接收时数据发生变化。
(二)几种BUS的设计思路及其弊端
A、单总线设计:
因为总线一次仅允许一次消息的传递和收发,所以这样设计有两大弊端
- 当程序中CPU正在执行时,如果突然设备有I/O操作要占用总线,那么CPU正在执行的操作就要暂停,不仅增大了总线压力,还影响运行效率;
- 当要传递的信息通路过长就会占用总线很长时间拖慢程序运行效率。
B、双总线设计(以CPU为中心)
- 这种数据的输入和输出都要经过CPU极大增加了CPU的压力,增加能耗,增大压力
- 当有数据输入时,CPU仍然要停掉,等待储存信息发送。
- 通道是一种简单的cpu结构,有自己的指令专门为两条总线设计
C、双总线设计(以储存器为中心)
这样当有数据输入时就可以直接进入主存而不影响主存器与CPU之间的处理进程;
当然当主存存入数据时,时不能同时取出数据的,所以当有用户输入时,对CPU还是略用影响,但可以通过以后实现主存双操作后CPU就可以流畅执行处理逻辑了。
D、三总线结构形式一
1.相较于双总线,这里有一条DMA总线,一些高速外设可以直接通过该总线访问主存,而不用经过I/O总线。
E、三总线结构的形式二
- 因为CPU处理速度每年近乎翻番的增长,而内存的存储延迟则发展缓慢,为了解决内存对CPU处理性能的瓶颈,所以在为CPU增加了专门的cache,CPU所需要的数据直接从cache中获取即可。
- 局部I/O控制器是用来管理一些高速I/O设备的。
- 多个外设连接到外部总线,然后扩展总线通过一个拓展总线接口接入系统总线,实现了外部设备扩展方便。
- 但是这样的设计也有弊端,就是扩展总线的压力会很大,拖慢效率。
F、四总线结构(将外设分类连接不同总线)
- 这样四总线就可以将高速外设直接连接到高速总线上,低速外设还是通过接口连接到高速总线上,如此就解决了外设都连一条bus拖慢效率的问题。
(三)计算机上总线设计
A、传统微型计算机总线结构(双线结构)
仅仅实现通路,性能尚未考虑。
B、VL-BUS标准下的总线结构(高速外设和低速外设分离总线使用)
C、PCI总线结构(桥的特殊性)
PCI总线结构跟VL-BUS大致相同,特点就是当外设过多,高速总线性能下降时,可以通过桥来加入更多总线,不同外设连接不同总线来缓解压力,例如下图;
(四)总线的分类
A、片内总线:芯片内部的总线,用于芯片内部运算器和控制器之间的信息传递
B、系统总线,用来传递系统各个部分之间信息的总线;根据传递信息类型的不同,系统总线有分为下面三种:
- 数据总线:用来传递数据,是双向的,例如CPU传递出数据,同时也要接收要计算的数据。
- 地址总线,单项的用来给CPU向储存器发送要获取的数据或指令的地址信息。
- 信号总线:双向的,有出有入,CPU中的控制器通过它传递控制命令,各部件用来向CPU传递状态或操作请求(如I/O的中断请求)
C、通信总线:是不同计算机系统之间或者计算机系统与其他系统之间的信息交流传递的通路;其又可分为串行消息总线和并行消息总线。
(五)总线的特性
A、总线在现代微型计算机中就是我们常说的主板,主板上面印刷着电路,同时主板提供了多个接口,供不同部件接入(如CPU插板等等),同时这样也要求主板(总线)拥有如下特性:
-
机械特性:主板拥有固定的尺寸、形状、管脚数、和排列顺序;
- 电气特性:每个电路有固定的传输方向(单项或双向)和有效的电平范围(不同的电平代表不同数值,如0或1)
- 功能特性:每根传输线都有特定功能,如系统总线中有专门传递数据的总线,有地址总线等等;
- 时间特性:信号传递的顺序和时间都要进行处理。
(六)总线的性能指标
-
总线宽度:数据传输线路根数越多,同时传输的数据就越多,性能越好。
-
标准传输率:每秒传输的最大(极限)字节数(MBps)
-
时钟同步/异步:同步、不同步(不等于异步)
-
总线复用情况:总线合理复用可以提高总线利用率,减少管脚数,从而减小芯片大小。例如inter的8086处理器,当中的20条地址总线同时有16条也是数据总线。
-
信号线数:地址线、控制线、数据线的总和数量。
-
总线控制方式: 突发、自动、仲裁、逻辑、技术、
-
其他:例如负载能力等等;
五、总线控制(重难点)
(一)为什么要有总线控制?
总线因为只允许一次发送信号(或数据)与接收信号,同时要保证在一组收发进行时,其他组件不会干扰,所以要有总线控制。
(二)总线控制的基本概念
A、主组件:这些组件拥有总线的控制权,能够决定占有总线与否,一个总线上可以有多个主组件。
B、从组件:这些组件只能够被动接受信号或数据,没有总线占用权利。
(三)总线判优控制(集中式和分布式)
A、什么是总线判优控制?
就是怎样确定当多个组件请求总线时,应该谁来获得总线的控制权。又怎样保持总线占用状态在结束前不被其他组件控制。
集中式是将总线控制交给一个组件来集中管理,分布就是将总线控制权交给各个可能控制总线的部件根据某种规则来决定占用优先级。
B、集中式----链式查询方式
- 这样方式每当有组件想要占用总线时,都需要通过BR总线将占用请求提交到总线控制部件,总线控制部件收到后,会通过BG电路依次检查组件,将总线控制权交给第一个检查到的部件,同时通过BS总线通知各部件总线正在被占用,暂时不能再被占用。
- 这样的方式的优点是:可扩展性强,一旦有组件想要加入,只需要将BG电路延长接入即可,也可以增加BS等的稳定性,增加线的条数,使总线更加可靠。
- 这样也有缺点是:就是BG线路对电路完整性要求较高,一旦有组件之间的BG电路中断,则其后的所有组件都无法被赋予总线使用权
- 这样的总线控制方式一般用在小型家用计算机和嵌入式的结构中。
C、集中式--计数器定时查询方式
- 相比于链式请求,该方式取消了BG线路,改用计数器和设备地址线来实现控制权赋予,这种方式更加灵活
- 执行过程:不同组件通过BR发出总线占用请求,总线控制部件收到有总线占用请求后,通过计数器中初始设备地址确定对应设备是否有占有请求,如果有赋予其占用权利,如果没有就将计数器加一或减一指向另一个组件,再通过设备地址线向组件确认,如果组件有请求占用,就通过BS线向总线控制器反馈,占用总线。
- 这种方式可以自由设置初始组件优先级,并且通过设置计数器迭代规则灵活设置权利赋予变化方式。
D、集中式--独立请求方式
- 此种方式将每个组件都和总线控制器建立一组线(BG和BR),这样总线控制器就不需要确认请求发送方,而直接根据内部优先级逻辑来确定要给予控制权的组件,如此节省了查询的时间,提高了效率,但同时也增加了线路的条数。
- 执行流程:当有组件需要控制主线,就通过自己独立的BR线向总线控制器发出控制总线请求,总线控制器收到要占用总线的组件的请求后,根据排队器中的逻辑直接通过独立的BG线路赋予对应组件总线控制权。
- 排队逻辑可以自己定义,这样就更加灵活且速度更快。
(四)总线通信控制
A、总线执行周期的几个阶段(一次主设备和从设备进行的安全且有效的通信)
-
申请分配阶段: 主模块申请总线占用,总线仲裁。
-
寻址阶段: 主模块向从模块给出地址和命令。
-
传数阶段:主模块和从模块交换数据。
-
结束阶段:主模块撤销地址,命令等有关信息。
B、主线通信的四种方式(主从模块通信的方式)
- 同步方式:由统一的时钟标识来规定数据传送过程(每个阶段干固定的事);
- 异步方式:采用应答方式,没有统一时钟控制通信过程。
- 半同步方式:同步和异步方式的结合
- 分离式通信:充分发挥每条总线的瞬时最优性能(不懂?)
C、同步通信方式大概如下:
通信过程被规定好了四个阶段:(就CPU从从设备获取数据来讲)第一阶段:主设备向从设备发送要获取数据的地址和取数命令;第二阶段:从设备将对应数据发送到主设备,主设备确认接收;第三阶段:撤销写命令;第四阶段:撤销对总线的占用;(大概就是这样一个过程,具体细节被忽略)
- 这种通信方式只适合总线较短的通信,也只适合主从设备收发数据效率接近的情况;因为时钟长短的设置会偏向数据收发较慢方和尽量保证操作执行完毕。如果线路过长或者主从收发效率不一致会导致时钟过长程序阻塞和收发较快方,闲置时间过长;
D、异步通信方式:
异步通信方式中主设备先向从设备发送请求信号,然后从设备发送应答信号,如此主设备和从设备建立连接(不互锁方式)
主设备向从设备发送信号后,从设备返回自己的接收状态,如果主设备发现从设备已经接收到就会撤销请求发送。这里也存在从设备发送信号丢失导致主设备信号一直处于高电平状态(互锁方式)
主设备向从设备发送信号,如果从设备没有及时发送接收完毕信号,主设备会再次发送,再次请求完毕信号(互锁方式)
E、半同步通信方式(同步和异步的结合)
从设备和主设备的通信过程还是按照时钟周期进行,以读命令为例,T1主设备发出地址信息,T2主设备发出读命令请求,从设备收到读命令请求,但是由于从设备(存储器)的处理速度较慢,向主设备发送WAIT的低电平信号,主设备收到之后,会等待一个时钟周期,再次确认,直到收到从设备发出的WAIT高电平信号,才会共同进入下一个周期进行数据交换。
- 这种方式就解决了同步方式只能使用再性能相当的组件之间的局限性。
F、上面的三种通讯方式都有一个问题,就是通道有空闲时间
-
我们从三个步骤看:主设备先发出地址和命令;从设备因为性能原因发出等待信号,接下来到从设备处理结束这段时间,总线是在被占有同时闲置状态的;这样就会限制电脑性能成为性能瓶颈。
- 所以要分离通信方式来解决这个问题
G、分离通讯方式
第一阶段:主设备发出地址和命令,直接断开连接,释放总线控制权。
第二阶段:从设备处理完成后,切换为主设备身份请求总线占用,将数据发送给原主设备。
这样就合理释放了总线,让总线性能得到了充分使用,这种方式有如下特点:
- 各个模块都有占有总线的控制权;
- 采用的是同步通信方式,命令发出后直接断开连接,不等对方确认;
- 总线被占用时不会被闲置;
- 各模块准备数据时不用占用总线;
六、存储器概览
(一)存储器的分类
A、按存储介质来分
- 磁表面存储器:事先将磁刻到合金材质的表面上,根据磁性不同分为0/1用来储存信息,由一个一个圆环构成,需要磁针来读数据
- 半导体存储器:TTL和MOS(多用于计算机上,继承度高)
- 磁芯存储器:来自1954年对计算机储存器革命性的突破,极大提高了计算机的性能;其通过电流通过线圈留下的不同磁极纸箱来规定0/1,从而达到保存信息的作用。
- 光盘存储器:激光、磁光材料;
B、按存取方式分类
- 存取时间与物理地址无关(随机存取):随机存储器,只读存储器(放一些系统的关键信息)
- 存取时间与物理地址有关(串行访问):顺序存取存储器(磁带)、直接存取存储器(磁盘,找圆环和其扇面)
C、按在计算机中的作用分类
- Flash Memory 不仅可以成为U盘类型,还能作为辅储存器和主储存器的中间缓冲储存器,当要从辅储存器中读取数据时,如果Flash Memory中有就直接读取,因为Flash memory速度更快。
- 高速缓冲存储器通常用在CPU和存储器之间,用来解决CPU处理速度和存储器速度不匹配的问题。
(二)存储器三个主要特性之间的关系、CPU和缓存以及祝福存的层次关系
A、各种存储器的对比图
- 由上图可见,普通用户要求的大容量高速度储存器单靠一种是无法实现的(因为大容量往往速度慢),所以我们要满足这一要求就需要有软件统一协调多种类型的存储器从而达到大容量高储存的目的,故而出现了存储器的层次之分;
B、缓存和主存、主存和辅存
- 因为CPU得性能每年增长性能要远大于主存存储性能,为了弥补这一差距带来的性能瓶颈,所以引入了缓存(cache),缓存建立在主存和CPU之间,缓存和主存是用硬件连接(为了提高效率)的方式,地址用的是主存的地址,CPU所需要的绝大部分数据都在缓存中。
- 辅存和主存都主要是数据储存的目的,所以二者是软硬件结合的方式建立连接的,同时他们对程序员来讲是一个整体,二者统一叫做虚拟内存,地址统一使用虚拟地址,通过指定软件将虚拟地址转换为实际地址。
- 在处理速度方面:CPU大概10ns,缓存20ns,主存和辅存200ns。
七、主存储器
(一)概览
A、对储存器结构的再细化(如下)
B、主存和CPU得联系主要有三条线:地址总线、数据总线、控制总线
C、主存的地址分配:
我们假设我们的存储体的存储单元(存储字)的存储字长是32位(一共4个字节),寻址是按照字节寻址, 在数据存入时根据数据结构决定地址,有两种方式:首先假设我们有8位的数字(12345678,每两位占用一个字节,恰好把一个存储字占满)
- 第一种--大尾方式(将数的高位当作地址):
这样第一个数据的地址就时12占用的字节表示。
- 第二种--小尾方式 (将数的低位当作地址)(现在的X86操作系统就使用这种方式来指定地址)
这样第一个数据的地址就时78占用的字节表示。
- 如果地址线有24根,这时我们一次能够寻找到2^24=16MB的地址位数。
- 如果一个存储字长是16位,那么一次能按字寻址能找到 8MW。
- 存储字长是32位,则一次能找到 4MW。
D、存储器的性能指标
-
存储容量:指存储器存储体拥有的总位数,位数越多容量越大。
- 存储时间:存储器完成一次存入或取出数据操作所需要的时间,时间越长性能越差;
- 存储周期:是两次储存器执行的时间间隔,第二次操作开始时间-第一次操作开始时间=存储周期;第一次存入/取出时间 + 恢复时间 = 储存周期,所以储存周期>存储时间;
- 存储带宽:存储器一次能够存入或取出的数据 位/秒。
(二)半导体储存芯片浅析
A、结构如下
- 片选线会在向芯片发送请求信号前给出一个CS或者 CE信号,如果是低电平信号,代表命令中地址或要获取的数据地址在该芯片的储存矩阵中。
- 读写控制线会根据命令的类型给出WE或者OE信号,如果WE信号是低电平则代表此次操作是写,如果是高电平,且OE是低电平就是读操作
- 根据地址线和数据线来计算储存器容量
- 如果有10根地址线,数据线有4条,那么一根地址线可以保存两位,这个储存器就有1KB个储存单元,数据线有4条,这代表每个储存单元的储存字为4位,所以芯片容量就可以表示为1K * 4位;
- 14根地址线,1根数据线,芯片容量就是16K * 1位;
B、片选线的作用
- 假定场景,CPU要求存储器是64K * 8位的,我们现在有16k * 8位,所以我们要分成四组,每组8个储存芯片:
当有数据要存入时,判断其地址后是最后一组地址对应组,则最后一组片选线的电平就是低电平,代表储存在该处,同时从8个芯片同一地址取出数据构成8位数据或指令数据,其他组的片选线是高电平,代表数据不在自己组。
C、译码器的执行流程(涉及一点电路知识,但我不懂!)
- 译码器的大概流程,当地址线进入译码器后,如果输入的信号是0,0,0,则译码器输出方向只有一条线0会对应启动,那么其0线连接的储存单元就全部可以输出到输出或输出(根据读写控制线确定),如下图。
- 线选法:
- 上图读写控制电路有一条通路,电流方向不同分别代表不同的命令(读和写)
- 这种方式还是有弊端,当地址译码器奇效线上的储存单元过多时,就无法同时输出到指定单元,并且选中的储存单元不够精确,是一组储存单元。
- 重合法
- 这种方式分为两个译码器,将会生成两条通路,交汇点上的储存单元才会被输出到I/o设备,这样就能够精确锁定某些储存单元格。
- X0这条线虽然接通了0,0,但是同行的其他单元在y地址译码器端却没有通路,故无法输出。
(三)随机存取存储器(RAM)---静态RAM
A、静态RAM的基本电路结构(中间涉及数字电路知识,解释不周还请海涵!)
-
T1~T4是由四个晶体管组成的触发器,用来保存0/1信息,该触发器的左端是非端输入1信号,右端是true端,负责输入0信号。
-
T5和T6这两个晶体管构成的开关,控制整个储存原件的通路,这两个开关分别控制触发器两端的输入和输出,当T5和打开时,允许非信号输出和输入;
-
在实际的储存器中是由多个触发器构成的矩阵,T7和T8由每列共用,当T7和T8联通时,输入输出信号才能构成通路进入储存单元。
-
例如当一行的行地址选择线路被接通了,这一行的T5和T6就都被联通了,但是因为列地址选择还没接通,就无法进行输入和输出。当T7和T8接通后,对应行列交叉点的储存单元才完全被接通,可以进行输入和输出。
-
在写选择线路上通过两个写放大器将或与非分别传到对应触发器侧;输出信号通过读选择确定后从Dout端输出
B、写操作和读操作流程
储存原件被行列选中(T5、T6、T7、T8都被打开),写入信号从DIN进入,分别从两个写放大器通过通路到达触发器是和非端实现数据写入;
储存原件行列选中,读出信号从触发器两端流出,从Dout端输出。
C、以Inter 2114 芯片分析 储存单元的读写过程
- 结构如下图:
- 这个储存芯片的结构:将一行上的64个储存单元分成了四组,四个列选线经过译码以后的一条线选线连接了四组中的各一列(一共四列)如此实现了,一次选择到四个储存单元的效果。
- 读过程分析:WE为高电平,CS信号都为低电平,代表读操作和储存单元在该芯片上,随后行选线和列选线共同选中四个储存单元,电路接通,读写电路根据WE信号将数据输出。
- 写过程分析:WE和CS都为低电平,代表写操作和数据要储存到该储存单元,随后行选线和列选线选中四个储存单元,读写电路将数据接入电流通路,数据存入对应储存单元。
(四)随机存取存储器(RAM)---动态RAM
A、动态RAM的基本电路结构
过程解释:
读过程:预充电信号有效,T4打开,Vdd放电,读数据线通电显示高电平(1)--> 读选择线选中,T2打开-->这时候会有两种情况,情况一,Cg电容没电(0)则T1不会被打开,读数据线为高电平,所以输出的结果为1,与电容Cg中实际储存的值相反;--->情况二,Cg电容被充电(1),则T1被打开,电流进入读数据线,读数据线变为低电平(0),最后读出结果为1,也正好相反。-->为了避免这种情况我们要在读线路端加上非门来转换读结果,使一致。
写过程:写选择线被选中,T3打-->两种情况:情况一,写数据线是1,则向电容Cg充电-->情况二,写数据线是0,则Cg向外放电,数据变为0;可见数据写入是一致的。
B、以三管动态RAM芯片(inter 1103)为例,分析写入和读出过程(容量1k*1位)
- 分析写入过程:
- 行地址译码器左端五条地址线都输入1信号,译码器结果为31号线路,改行所有储存单元被选中---> 列地址译码器下端地址线前四个为0,最后一根为1,则译码结果为1号列选择线起效,最终31行1列那一个储存单元被选中,读写控制电路通过写数据线将结果存入储存单元;
- 分析读出过程:
- 行地址译码器左边地址线都为0译码结果为0号线读选择线被选中,同时列地址译码器也译码结束选中0号列,故0行0列储存单元被选中,读数据线被接通,数据通过读写控制电路输出。
- 为什么要有刷新放大器:因为我们储存数据的单元是电容,而电容会漏电,一段时间后储存在其中的电会变弱甚至消失,刷新放大器会定时更新储存单元的数据,让电容正常显示数据。
C、分析单管动态RAM inter 4116(16k*1位)
总体概览:
- 从该芯片的容量来看,至少需要14跟地址线才能够表示出16k个储存单元,但是该芯片只用了7根地址线(A0~A6)分两次来实现:第一次先通过七根地址线将行地址保存到行地址缓存器中,第二次通过七根地址线将列地址信息保存到列地址缓存器中,都保存完成后经过各自译码器找到要存入存储单元,开始存入数据
- 如果是读操作就需要经过再生放大器,将结果返回到I/O缓存器中,最后经过数据输出驱动输出。
分析读操作:
- 读放大器是一个“跷跷板”电路,即左端和右端的电平一定不同,分别表示0或1
- 128根行线再地址线被译码后一根行线被选中(这里63行被选中,该行电路联通),列线也有一根线被选中(这里是0列被选中),读数据线和该列的电路被联通,63行0列的储存单元被选中,该储存单元的电容分为两种情况(情况一,没电,那么放大器右端就是高电平1,情况二,有电,放大器右端就是低电平0),读出结果与电容实际情况相反。
分析写操作:
- 第63行线先被选中,63行线路被联通,而后0列线被选中,数据线被联通,数据从Din端输入,经I/o缓冲器到达63行,0列储存单元,如果输入为1(高电平)经读放大器后,存入电容就是0(低电平),可见无论存入什么,获得也就是什么(因为存和读都经过读放大器)
D、动态RAM的刷新(假定存储芯片为128*128的矩阵,存取周期为0.5微秒,刷新时间间隔为2毫秒)
- 为什么要动态刷新?
- 因为动态RAM都是用电容来作为基本单元储存数据,而电容很小,每隔一段时间不对单元中的数据刷新,那么数据就会消失,导致信息失效。
集中刷新方式
- 动态刷新器连接在每一行,所以是以行为单位进行刷新,由假设可知刷新时间间隔为2毫秒,而存取周期是0.5微秒,所以如下图:
- 2毫秒是4000个存取周期,为了保持刷新,刷新器需要占用128个存取周期来完成所有存储单元数据的刷新,这些周期内线路是不能进行读写的,故称为“死区”,用死区周期数/总周期 =死时间率。
分散刷新方式
这种方式将每行的刷新放到一个存取周期中来做,使存取时间变为原来的两倍,且没有死区,致命的缺点就是将芯片的存取周期拉长导致芯片存取性能下降。
集中和分散相结合的方式
我们保证每隔两毫秒所有的行都被刷新一遍即可,每行都会刷新,这样既不会发生像分散方式那样刷新过于频繁,也不会出现集中式刷新那样过于长时间的“死区”。
这样虽然也会在刷新每行时出现短暂0.5微秒短暂的“死区”,但是我们可以将这短暂的死区时间放在CPU的对指令的译码阶段,从而让死区时间等于没有,故称没有死区。
(五)动态RAM和静态RAM的对比
DRAM | SRAM | |
---|---|---|
储存原理 | 电容 | 触发器 |
集成度 | 高 | 低 |
芯片引脚 | 少 | 多 |
功耗 | 小 | 大 |
价格 | 低 | 高 |
速度 | 慢 | 快 |
刷新 | 有 | 无 |
- 功耗方面解释:因为静态RAM的触发器是由六个晶体管组成的,其中三个晶体管一直保持放电状态,而电容仅由一个晶体管和电容组成功耗小。
- 由以上对比,我们可想而知,DRAM更适合做主存,而SRAM功耗大但速度快,所以更适合做cache,连接CPU和主存之间作为缓冲。