计算机组成原理

文章目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
MAR反应存储单元得个数
MDR反应存储数据子长

在这里插入图片描述
控制器

在这里插入图片描述
在这里插入图片描述

如何完成一条指令

取数在这里插入图片描述
通过PC取操作指令,到MAR中寻找地址,根据地址找到数据给MDR再由MDR交给IR IR再交给执行控制单元CU CU通过分析指令得知这是取的操作,取得数得地址就是指令的后半部分,然后IR根据地址到MAR查询然后再存储体中找到数据交给MDR 这个时候MDR就会直接将数据传给ACC
PC-MAR-M-MDR-IR
OP(IR)-CU
AD(IR)-MAR-M-MDR-ACC
存数

在这里插入图片描述
PC-MAR-M-MDR-IR
OP(IR)-CU
AD(IR)-MAR-M
ACC-MDR-M

加法

PC-MAR-M-MDR-IR
OP(IR)-CU ==+
AD(IR)-MAR-M-MDR-X
ACC+X->ACC

减法

PC-MAR-M-MDR-IP
OP(IR)-CU ==-
AD(IR)-MAR-M-MDR-X
ACC-X>ACC

乘法
PC-MAR-M-MDR-IP
OP(IR)-CU *
AD(IR)-MAR-M-MDR-MQ
ACC-X
ACC
0
X*MQ>ACC(high)+MQ(low)
在这里插入图片描述
在这里插入图片描述

内容容量计算

2^MAR位数 * MDR位数 得出多少bit

总线

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总线控制

在这里插入图片描述
每个io设备通过BR线发出请求,控制部件根据请求顺序,通过BG线来允许设备占用总线,若此时设备响应设需要向BS发出指令,表示占用总线

在这里插入图片描述

每个设备发出请求,总线控制器则有一个计时器,再根据设备总线来以此查询各设备是否发出请求,若发出则该设备发信息到BS线
在这里插入图片描述

每个设备发出请求,控制器中的排队器对请求得优先级排序,再对设备通过BG线进行应答

总线通信控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

存储器

在这里插入图片描述
磁盘的工作原理

磁头先寻道,找到之后磁片旋转到目的扇区

按照作用分类

在这里插入图片描述
flash memory 充当中间层 主存快速读取副存的内容
cache 是cpu 和 主存之间的桥梁 速度比主存快

存储器的层次结构

在这里插入图片描述
在这里插入图片描述
缓存和主存之间最大的问题是速度不匹配,为了解决这个问题主要用了特定的硬件来做。
主存和辅存则是解决容量问题这里是软硬件结合来做的通过虚拟存储器,来构造逻辑地址,当程序装载时再转化成主存中的真实地址

主存

在这里插入图片描述
MAR MDR 现在集成在了cpu中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按字寻址:根据子长发现一个字是由几个字节组成的 按字寻址则只需要找到几个字节中的首字节就能找到该字的全部字节,我觉得有些浪费内存

在这里插入图片描述
在这里插入图片描述
译码驱动:cpu给出地址通过总线中的地址线传输给主储存器的译码驱动,根据译码驱动单元确定存储矩阵的某个具体单元来完成存取操作
读写电路:连接数据线
片选线:存储器内部有很多片,片选线可以确定访问的地址在哪片当中,一般有两种CS CE
读写控制线:操作信号

在这里插入图片描述
在这里插入图片描述
读写控制线低写高读
在这里插入图片描述

首先用八个芯片组成16k8位的存储器同样的地址同时操作相当于16k个地址8位的宽度
由于要变成64k这个64k则表示地址容量所以要增加地址容量就必要再增加芯片数量由于要保持8位的同时输入输出所以只能再之前的16k
8的基础上再增加三组这样地址总数也达到了64k,这个时候为了能够保持一组当中的芯片能同时读取则需要把芯片中的片选线集合在一起,给第一组分配0-16k的地址,往后每组地址以此类推

译码驱动方式
在这里插入图片描述
地址译码器的位数对应存储矩阵中的每一行例如上图的四位地址则有16中10进制的值,每一个值对应一行,而一行有多少列则有数据线的条数所决定,所以称为存储矩阵
在这里插入图片描述
每一个行列选择出的单元只包含一位信息 而接入读写电路的io有多条则 每一条都会接入上方这样的一个单元即一个y地址会选择在每条io线上对应的列!!!如下图
在这里插入图片描述
在这里插入图片描述
动态RAM

DRAM
数据是由电容是否通电来表示01的 通电表示1
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RAM刷新

存取周期表示连续两次的写或读操作所需要的最短时间
由于电容容易漏电所以需要经常刷新,刷新的时候是刷新行地址,刷新一行的数据。
内存在计算机运行时都会不停的刷新数据,有几种刷新的方式
在这里插入图片描述在这里插入图片描述增加了存取周期,并且每进行一次存取周期都会刷新一行,但并不需要这么高的刷新频率 如第一种方式那样2ms只刷新一次128行,但如果这种方式就会在2ms内刷新多次128行了
在这里插入图片描述
异步刷新则综合了前两种方式,我们的目的是在刷新周期内将所有的行刷新一次,如在2ms内刷新128行,故我们只需要每过15.6us 就进行一行的刷新这样2ms就可以完成128行的刷新了

在这里插入图片描述

位扩展

在这里插入图片描述

两个片同时使用共同的地址

字扩展

在这里插入图片描述
有一个关键点就是如何让两片同时工作,即根据第11根地址线来控制cs 来决定那一片被使用

字和位同扩展

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

存取速度

在这里插入图片描述
在这里插入图片描述
高位交叉是在同一个存储体内从上到下顺序执行,同一时刻只在一个存储体内工作
浪费带宽,主要用于存储器容量的扩展

低位交叉 个体轮流编址

在这里插入图片描述
程序在存储体见横向存储这样在同一时刻可以有多个存储体,因为cpu可以不断的输入地址码 ,这样实现了流水线操作
在这里插入图片描述

在这里插入图片描述
tao的意思时总线传输数据的周期,总线周期分为地址周期、控制信号周期、等待时间周期、数据传输周期

总线周期的概念

在这里插入图片描述

高性能访问芯片

在这里插入图片描述

高速缓存

依靠程序访问的局部性原理来提高缓存的利用率
在这里插入图片描述
主存的块地址号和缓存的块地址号时对应的 块的大小是相同的 块内地址位数也是相同的 内存和缓存间传输数据时整块传送的,所以块号和块内地址都不会发生变化
块内地址就是数据在块内的偏移地址

cpu如何命中cache中的块?
根据地址中的主存储块号来对比cache中的标记号,若有相同的则命中

在这里插入图片描述

cpu对内存的访问过程
通过地址总线传输地址
地址分为块号和块内地址
块号拿出给cache的一个控制结构处理检查是否命中即(存储体中有该标号)命中则根据块号和块内地址直接访问cache存储体
若未命中则检查是否可以装进块到cache中若时则将块放入cache中
若不能则需要cache替换机构根据替换算法来决定替换cache中的哪些块
主存和cache存储体间有直接通路可以交换数据

以下时流程图
cache读写操作

在这里插入图片描述在这里插入图片描述

cache可以分布在cpu内部或者主板上

在这里插入图片描述

直接映射方式存储字长
首先要明确的是一个地址分为块号和块内地址
在直接映射中块号位数=主存字块标记t位+cache字块地址c位
所以在主储存体中用了2^(t+c)个块由于高速缓存的大小是远远小于主存的,所以我们称cache存储体的大小为一个区
而为了达到直接映射的目的,所以我们也把主存上的块为划分为区 这个时候按照cache字块地址的位数c可以把chache划分为2^c个块 主存为了达到相同的效果所以把块号的c个低位哪来当块号 用t位来当区号 这样就形成了2^t个区

当cpu给出一个地址后,我们可以先根据块号先定位到cache中的对应块号,再根据 地址中的区号来与在cache中定位到的块的标记做比较相等区则表示命中,反之未命中

优点:速度很快,我们可以快速的判断是否命中cache块
缺点:cache的利用率很低,在程序执行的时候若有跳转指令则可能调到例外区块上的在cache中已经被占用的块的位置,这个时候就有冲突,之前的cache块就要被替换,当这个时候其他的cache块都是空的没有利用到、

全相联映射

在这里插入图片描述
这种映射方式 仍是将主存分块 但并没有为块分区因为可以随机把主存中的块放入cache中的任意块
cpu给出一个地址 只需要将主存块标拿出来和cache存储器中的没块的标记进行比较若相等则命中
缺点:电路难以设计,在映射的过程中标记位比较长效率不高
优点:命中率高
在这里插入图片描述
首先要理解什么叫做组?主存中每个区的相同编号的块的集合,大小由组内位置所决定
首先我们从公式中可以理解cache中有多少各组那么对应的主存中每一个区就有多少个块,映像当中每个区的第一块都可以放在cache中第一个组中的任意一个字块,即通过每个块在所在区的块号我们可以得知他会被放在cache中的哪个组、

优点:减少了直接映射的那种冲突问题
这个比较牛皮
这种模式的关键在于分组,它综合了直接映射和全映射的模式这了个中
当r=c时 这个时候只有一个组 这个时候就变成了全相连
当r=0时 这个时候变成直接相连

在cpu的cache可以采用直接映射
中间层次的cache可以采用组相连映射

替换算法

先进先出算法
比较垃圾存在很多问题

最少使用算法LRU
比较好

辅助存储器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

磁盘驱动器送来信号表示操作的磁道,音圈电机操作小车移动读写臂进行寻道
数据控制则是完成数据的转换和读写控制
在这里插入图片描述

i/o系统

在这里插入图片描述

io接口和io设备之间并行传输并需要请求应答过程
在这里插入图片描述
同步的关键

主机必须要要有统一的时标,时表规定了在某一个时间点必须开始或完成的工作 跟总线的周期一样
在这里插入图片描述

在这里插入图片描述
程序启动io设备过后没有停止等待,而是转而执行现行程序,等到io借口中的数据准备好后向cpu发出程序中断请求后cpu保存当时现场转而和io接口传送数据,传输完毕后恢复现场继续执行程序
缺点:需要各种指令来控制现场和中断等

在这里插入图片描述弄的又一个牌子 。。。。L的PBT也就那样 手
在这里插入图片描述在这里插入图片描述

我觉得DMA牛逼

接口

在这里插入图片描述

在这里插入图片描述

设备选择线 通过cpu传输过来的设备地址与io接口中的相匹配 匹配即选中
数据线: 双向 多根
命令线 cpu发出的命令
状态线 :表明设备的工作状态

接口功能:
1 选址 由设备选择电路组成
2 传送命令的功能 由命令寄存器,命令译码器完成
3传送数据的功能 由数据缓冲寄存器完成
4 反应设备状态的功能 设备状态标记 由触发器实现
在这里插入图片描述

io接口的组成

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

每个io设备会发出中断请求,请求会在排队器中排队,确定优先级(硬软)、
cpu根据求求确定中断向量地址(中断向量地址形成部件)
在这里插入图片描述
可以看到中断向量地址形成部件传输到cpu后再到内存中取指 这里jmp到200 执行打印机服务程序
在这里插入图片描述

在这里插入图片描述

单重中断和多重中断

在这里插入图片描述

程序查询方式总结

在这里插入图片描述
首先cpu用过地址线选择到设备,再通过启动命令来通过与门 这时会让d为0 b为1 b为1则会启动设备 ,设备将数据读入到数据存储器中,设备结束工作 这个时候将d置为1 cpu不断查询的设备的状态就是d是否为1 当d为1时 cpu就知道可以通过数据线读取数据寄存器的数据了
在这里插入图片描述
在这里插入图片描述
1选择设备和启动命令
2 d0 b1 设备启动并准备好数据到DBR
3 d1 b0
4 mask =0 INTR的D端输入为1
5 cpu 进行中断查询 置INTR为1、
6INTR发出中断请求,并且在排队器排队
7 cpu响应请求通过设备编码器将请求从排队器中拿出形成向量地址 再有cpu从向量地址中读取跳转指令或者中断程序的地址,最终执行中断服务程序,中断服务程序再从DBR中读取数据。
在这里插入图片描述
单中断和多重中断
关键在于多重中断在中断服务程序中会开中断,允许这个中断服务程序被其他的中断服务请求打断
在这里插入图片描述

控制单元

微操作命令分析

指令解释的过程中控制单元发出的一些指令,这些指令要完成的动作和整条指令要完成的工作相比要小。所以叫微操作命令

完成一条指令的四个工作周期
取指
间址
执行周期 完成操作数的取数和计算的工作

取指周期

在这里插入图片描述
pc传到MAR 通过地址总线传递给存储器,cu发出读命令,指令通过数据总线到MDR,再到IR
cu要判断指令的op pc+1、

间址周期
在这里插入图片描述
在取指的基础上 cu应该会分析处IR码中的指令特征
为间址这样就将指令的形式地址发给MAR
MAR通过地址总线到存储器
cu发出读指令
存储器将操作数的实际地址发给MDR
MDR将实际地址添加到AD(IR)

执行周期

1,非访存的指令

CLA 清acc 0->ACC
COM 取反 将ACC取反
SHR 算术右移
CSL 循环左移
在这里插入图片描述
2 访存指令
在这里插入图片描述
转移指令

在这里插入图片描述
在这里插入图片描述
中断周期

在这里插入图片描述
在这里插入图片描述

控制单元

在这里插入图片描述

CU受时钟控制

在这里插入图片描述

时钟控制控制单元发出各种类型的信号

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
时钟控制cu何时发出控制信号
在这里插入图片描述
在这里插入图片描述

多级时序系统

机器周期
在这里插入图片描述

一个机器周期中存在许多的微操作

时钟周期是控制计算机操作的最小的时间单位
一个时钟周期可以做一个或多干个微操作
一个微操作也可能花费多个时钟周期
将一个机器周期划分成活干个时间相等时间段(时钟周期)
用时钟周期控制产生一个或多个微操作命令(并行的执行)
在这里插入图片描述
在这里插入图片描述
一般存在访问内存的机器周期时间会长一些
在这里插入图片描述
脉冲信号周期内是没有信号的。就象人的脉搏一样。脉冲信号一般指数字信号,它已经是一个周期内有一半时间(甚至更长时间)有信号。计算机内的信号就是脉冲信号,又叫数字信号。

时序控制方式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

控制单元的设计

组合逻辑设计

cu会发出各种的有序的微操作命令(控制信号),这些信号都是有先后关系的,有固定的时间点
而先后关系和时间点的确定就是由节拍信号所控制的
所以必定有一个节拍发生器产生信号输入到cu中
节拍发生器的外端接的时计算机主频算是主时钟 (我理解为产生脉冲信号(数字信号)一个周期激发态占一半时间)
节拍发生器会产生多个节拍信号(我理解为时钟周期)输入到cu中
在每个节拍信号的起始端(上升延)cu会产生给定的控制命令(微操作 产生何种微操作与现在执行的时哪条指令有关系)、在这里插入图片描述
op(IR)经过译码以后会有n位连接到cu中但只有一位是1 (高电平),cu会根据这个来判断出是什么样的操作,再通过标志位(比如说有些跳转指令需要标志位)来产生在一个节拍信号中所要进行的微操作 例如到c0-ck中有一个或几个有效,并且在同一节拍中有效的微操作可以时并行的。
在这里插入图片描述

在这里插入图片描述
cu 在操作码 节拍信号 标志位 的输入下,产生控制信号1-12 还有对算术逻辑单元的控制信号,以及根据计算结果修改标志位

安排微操作时序的原则

在这里插入图片描述
在这里插入图片描述
t0:两个微操作操作的对象不同可以在同一个节拍执行
t1:两个微操作操作的对象不同且没有依赖关系可以调换顺序
t2:两个微操作只在cpu内部进行没有访存操作时间快 一个节拍放两个操作也行,这个两个操作有先后顺序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
向量地址到pc 必须放在最后一个节拍中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在cu中通过硬件电路来控制 控制信号的产生 比如上图 能够在不同机器周期和节拍产生同一种指令
上面这样列表格的作用就是根据表格得出每一个控制信号的表达式 再根据表达式来画出逻辑图
逻辑图清楚的表明了控制信号会在哪种情况下产生
比如说在上图的控制信号会在取指阶段的所有指令下的t1节拍中产生

微程序设计

在这里插入图片描述
在这里插入图片描述

设计思想

将一个节拍中的可以并行操作的微操作合并成为微指令 微指令中的 1代表执行1这个位置所代表的微操作即发出控制信号 ,由多个微指令构成的叫做微程序 一个微程序对应一个条机器指令 一个微指令对应一个节拍且对应1一条或多条可以并行执行的微操作
在这里插入图片描述
微程序控制单元的基本框图
在这里插入图片描述
指令操作码-》微地址形成部件-》顺序逻辑(在标志位和时钟信号的控制下)展示微程序的首地址(第一条微指令)给CMAR(控制内存地址寄存器)-》将地址交给地址译码器到控制存储器中取出微指令到CMDR中同时还会取出下一微指令的地址,最后由CMDR来将控制信号传递给cpu内部和系统总线

注意的时 微地址形成部件给出的时微程序的地址,再由顺序逻辑在多个地址中选择,选择正确的地址送入到控制存储寄存器。

之一微指令的格式:操作控制码 顺序控制码(下一条微指令的地址)
在这里插入图片描述
需要注意的是:
微地址形成部件会决定每个周期微程序的首地址
在这里插入图片描述
在M+2的微指令的地址码区不能表明下一跳微指令的地址 ,这里要执行其他的指令周期,这个时候需要微指令地址形成部件根据操作码再生成下一个周期(比如说执行周期或者间址周期)的首地址

在这里插入图片描述
在这里插入图片描述

个人感觉逻辑控制单元设计和微程序设计差别在于逻辑控制单元是根据节拍 标志位 操作码 通过逻辑电路动态生成控制信号的,而微程序设计则是提前将控制信号保存在只读内存中,需要用某一个微程序时从控制内存中读出微指令,微指令则表明了一个节拍中可以并行执行的控制信号,这样指令的执行过程就只是把微指令从控制内存中读出来而已,不需要动态生成

微程序设计还有两个关键的地方
1、微指令的控制信号字段该如何组合,怎么用来表示控制信号
2 如何形成下一条地址

控制字段如何编码??

1直接编码
在控制字段当中每一位代表一个微操作命令

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

微指令的下一地址如何形成?

1微指令的下地址段指出
2根据机器指令的操作码形成
3增量计数器
在这里插入图片描述
在这里插入图片描述

终极图
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

微程序设计距离

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二进制

在这里插入图片描述
x代表的是真值!!真值即为二进制加上±符号位
在这里插入图片描述

整数和小数区分正负分别是用,和.
在这里插入图片描述
在这里插入图片描述
补码运算解决了这个问题

补码

在这里插入图片描述

在这里插入图片描述
负数的补数就是负数的原码各位取反+1

因为负数的绝对值要和补数的绝对值相加等于模数(我理解模其实相当于进位+1 原本的位全部归0)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

对于补数的理解

+6 + -3 模为4
+6 +0110
-3 -0011
+0110 + -0011 = +0011 =3
-3 的补数为 1101 补码为11101
+0110 + 1101 = 1,0011 除去模即溢出位 为 0011
所欲 +6 + (-3|-3的补数)结果都一样

补码高位仅仅是为了表明这是负数的补码

记住2^(n+1)+x
在这里插入图片描述

移码

在这里插入图片描述

在这里插入图片描述

一般用于浮点数的阶码部分

在这里插入图片描述

顿悟:可以直接用补码的补数部分减去模得到真值

译码和补码其实就是符号位取反

在这里插入图片描述

浮点数表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

定点运算

移位
在这里插入图片描述
在这里插入图片描述

负数补码向右移动一位表明真值扩大了一倍 所以对应的补数也要扩大
负数补码向左移动一位表明真值缩小了一倍 所以对应的补数也要缩小

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结论 无论是什么码 左移都代表真值翻倍 右移都代表真值减小一倍

在这里插入图片描述

在这里插入图片描述
对于这个的理解:
对于不同的真值丢弃对真值的填充的值是没有影响的 但丢弃非填充值则有影响
负数的反码丢弃0则会出问题

在这里插入图片描述
加减法运算

在这里插入图片描述
在这里插入图片描述

练习二 可以口算得出正确结果为-138 但是机器字长只有8位 表示的的范围为-128-127 -138 超过了表示的范围、、

溢出判断

在这里插入图片描述
最高有效的进位表示数值部分相加产生的进位
符号位的进位表示两个符号位相加产生的进位

负数相加没产生溢出表明最高有效位的进位为1
正数相加没产生溢出表明最高有效位的进位为0

在这里插入图片描述
在这里插入图片描述
a是被加数
x是要被运算的数
ga为1表示加法
gs为1 表示减法
做减法的时候由于最终是要做加法 所以要把被操作数进行全取反(符号位也要取反)+1的操作,+1的操作可以由其他加法器或者就用上图的加法器进行操作,然后暂存到acc中 再放回x中 之后再去被加数到acc中
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值