文章目录
一、计算机的基本组成
- MDR:memory data register主存数据寄存器
- MAR:memory address register主存地址寄存器
完成一条指令分为了三个阶段:取指令-分析指令-执行指令。
下面我们分析上图的取数指令。(取数指令 ≠ 取指令 , 取数指令需要实施取指令、分析指令)
- 取指令
要执行的指令的地址我们是保存在PC当中的,取数指令这条指令的地址是保存在存储体当中的。所以,取指令的第一个操作,就是PC(PC给出了取数指令这条指令它所在的内存单元地址)要把指令的地址送给MAR,再由MAR送给存储体。在控制器的控制下,存储体把指定存储体中保存那条取数指令取出送到MDR中。取出的指令送到IR(IR的功能就是保存当前正在执行的指令)。总结就是取指令将内存中的取数指令取出送到了IR。 - 分析指令
指令寄存器IR当中保存的指令(当前为取数指令)的操作码部分送给CU,经过译码,CU上面的信号将控制相应的执行部件去执行指令要去的相关操作。 - 执行指令
我们这条指令是取数指令,取数指令的功能是把保存在内存单元M中的数据取到ACC寄存器中,为了完成这个操作,在控制器的控制下,我们要把指令当中的地址部分送给存储器,以便我们把数据从存储体取出。
这个操作还是从IR开始,因为IR当中保存了当前这条指令,同时也保持了当前这条指令操作数的地址,我们从IR的地址码部分把地址取出送给MAR,然后由MAR送入给存储体,在控制器的控制之下,从存储体中把我们取数指令取的数取出送入MDR,然后送给ACC。总结就是执行取数指令,将取出的数放到ACC。
二、总线
我们采用总线方式实现外部设备与系统主机的连接,外部设备有地址,主机通过地址确认这次数据传输与哪个设备参与此次输入输出。
2.1 总线控制
三、主存储器
3.1 RAM
3.2 存储器与CPU相连
3.3 存储器校验
3.4 提高存储器访问速度
- 采用更高速器件
- 采用层次结构 cache - 主存
- 调整主存结构
下面主要介绍第三种。
原本我们介绍的主存的结构都是主存当中一个存储字长等于机器字长,也就是说cpu在执行一条指令的时候,如果想取指令的话,指令长度假设和存储字长相等,一次在存储器当中只能取一条指令(一次在存储器当中,如果取数也只能取机器字长相等的数据)。
这是我们就需要调整主存结构使得CPU和存储器存储速度能够匹配。
多体并行方式有两种,其中高位交叉编址的多体存储器中,程序按体内地址顺序存放,而低位交叉编址的多体存储器中,程序连续存放在相邻体中 。
- 高位交叉:各个体并行工作
并行工作的高位交叉编址的多体存储器结构示意图,图中程序因按体内地址顺序存放(一个体存满后,再存入下一个体),故又有顺序存储之称。
高位地址可表示体号,低位地址为体内地址。按这种编址方式,只要合理调动,使不同的请求源同时访问不同的体,便可实现并行工作。例如,当一个体正与CPU交换信息时,另一个体可同时与外部设备进行直接存储器访问,实现两个体并行工作。这种编址方式由于一个体内的地址是连续的,有利于存储器的扩充。
优点:主要有利于扩大常规主存容量。
缺点:即使每个存储体都可独立工作,但因为程序的连续性和局部性,在程序执行过程中被访问的指令序列和数据绝大多数会分布在同一存储体中,那么,就只有一个存储体在不停地碌,其他存储体是空闲的。
- 低位交叉:各个体轮流编址
低位交叉编址的多体模块结构示意图。由于程序连续存放在相邻体中,故又有交叉存储之称。低位地址用来表示体号,高位地址为体内地址。这种编址方式又称为模M编址(M等于模块数),一般模块数取2的方幂,使硬件电路比较简单。有的机器为了减少存储器冲突,采取质数个模块。
优点:大幅度提高主存储器的速度。
缺点:从直观上看,增加存储体个数能够提高主存储器的速度,但是,主存储器的速度不是随存储体个数的增加而线性提高的。
以实际数据为例,比如说某个存储体的有2个存储芯片,每个芯片的存储周期为100ns,如果你去读数据,如果你的数据按照这种放置方法,先放第一个芯片,放满后再放第2个芯片(顺序方式)。那么你读数据的过程就是这样:
读0位置数据,等100ns,读1位置数据,等100ns读2位置数据。很容易理解。
但如果你换个方式来放,比如说我0位置是1号芯片起始,1位置是2号芯片起始位置,2位置是1号芯片第2个单元,3位置是2号芯片的第2个单元这样交叉来编址。再回忆存储周期的概念:其实从芯片中把数据读到缓冲区,再从缓冲区读到CPU,这个读的过程非常短,仅仅是个脉冲就可以解决的问题,但由于芯片的物理属性,你读一个芯片后,必须间隔一段时间才能去读。采用交叉编址后,你的读过程就像这样:
读0位置数据到缓冲区,40ns后,CPU取走了数据。这时1号芯片的100ns的周期还没过,不能去读,但幸运的是我们读的不是1号芯片,而是2号芯片,这样,我们就把2号芯片的数据读到缓冲区。过了40ns后,CPU取走数据,此时过去了80ns,我们只需再等20ns就可以继续去读3号位置数据,这样速度就比以前快了很多
练习:
一个4体并行低位交叉存储器,每个模块的容量是64K×32位,存取周期为200ns,在以下说法中,( )是正确的。
A. 在200ns内,存储器能向CPU提供256位二进制信息
B. 在200ns内,存储器能向CPU提供128位二进制信息
C. 在50ns内,每个模块能向CPU提供32位二进制信息
D. 都不对
解:对CPU来说,它可以在一个存取周期内连续访问4个模块,32位×4=128位。本题答案为B。
3.5 cache
cache的改进
- 增加cache的级数
- 片载(片内)cache
- 片外cache
- 统一缓存和分立缓存
冯诺依曼结构是把指令和数据以同等的方式保存在存储器当中,chache也是一种存储器,而现代计算机有的时候是把指令cache和控制cache分开(比如MIPS),这个和指令执行的控制方式有关。这样做避免在流水过程中造成资源冲突。–参考
cache主存的三种映射
- 直接映射
- 全相联映射
- 组相联映射
四、输入输出系统
1. 将I/O设备中内容送入主存:
- 程序中断方式(需要CPU作为缓冲完成缓存操作)
- DMA方式
2. I/O设备与主机信息传送的控制方式:
- 程序查询方式
- 程序中断方式
- DMA方式
4.1 I/O接口
为什么要设置接口?
- 实现设备的选择
- 实现数据缓冲达到速度匹配
- 实现数据串——并格式转换
- 实现电平转化
- 传送控制命令
- 反映设备的状态(忙,就绪,中断请求)
4.2 程序中断方式
ISR1没有触发中断,INTR1为低电平。
ISR2触发中断,INTR2拉高电平,它的非就是低电平,即引脚左端输入为低电平,导致与非门输出为高电平,传递到INTP3’ 就变成了低电平(中间还有一个非门),并一直向下传递INTP4’ … (紫色为低电平,黄色为高电平)
然后我们需要将中断筛选出来,将INTP’ 与INTR做一次与非门然后取非。
硬件排队器对中断请求源进行排队后,他的输出 I N T P i INTP_i INTPi在从1到N的这些 I N T P INTP INTP中只有一个值为1,该值表明了在所有有中断请求的中断源中,优先级最高的中断源。
确认了我们要选择哪个中断源的中断请求之后,下一步最重要的任务就是如何找到中断服务程序的入口地址。
4.3 DMA方式
DMA与主存交换数据的三种方式:
- 停止CPU访问内存(可以继续不访问内存操作)
- 优点:控制简单,适合大量数据传送
- 缺点:cpu处于不工作或保持状态,未充分发挥CPU对主存的利用率
- 周期挪用(周期窃取)
- DMA访问主存的三种可能:
- CPU此时不访存
- CPU正在访存(DMA等待)
- CPU与DMA同时请求访存(CPU将总线控制权/内存访问权让给DMA)
- DMA与CPU交替访问
- 将主存工作周期分为两部分,C1专供DMA访存,C2专供CPU访存。过程中,不需要申请、建立、归还总线的使用权,由时序来确认总线和内存的使用权。
五、数字运算
5.1 无符号数与有符号数
-
为了解决“正负相加等于0”的问题,在“原码”的基础上,人们发明了“反码”
-
“反码”表示方式是用来处理负数的,符号位置不变,其余位置相反
-
当“原码”变成“反码”时,完美的解决了“正负相加等于0”的问题过去的(+1)和(-1)相加,变成了0001+1101=1111,刚好反码表示方式中,1111象征-0人们总是进益求精,历史遗留下来的问题—— 有两个零存在,+0 和 -0我们希望只有一个0,所以发明了"补码",同样是针对"负数"做处理的 "补码"的意思是,从原来"反码"的基础上,补充一个新的代码,(+1)
-
我们的目标是,没有蛀牙(-0)
-
结论:保存正负数,不断改进方案后,选择了最好的"补码"方案
前提:一定要考虑计算机规定的字长进行转换。
5.2 定点数与浮点数
六、机器指令
指令字(简称指令)即表示一条指令的机器字。
指令格式则是指令字用二进制代码表示的结构形式,由操作码字段和地址码字段组成。操作码字段表征指令的操作特性与功能;地址码字段通常指定参与操作的操作数的地址。
七、指令与中断
7.1 指令系统
7.2 中断系统
八、微指令控制单元
8.1 微操作指令
8.2 控制单元
九、控制单元设计
9.1 组合逻辑设计
9.2 微程序设计