计算机组成原理

image-20210531150601852

image-20210531111032467

软件

image-20210531111208860

硬件

image-20210531112655239

1.冯诺依曼

ENIAC手动接线代表指令。冯诺依曼将指令存储起来

image-20210531113110649

运算器为中心,数据要经过运算器。

现代的将存储器为中心

image-20210531113528807

主存储器

取存数据的程,现代这两个寄存器继承到了cpu里面

image-20210531113844906image-20210531113937808

通过译码器将地址转为one hot,1的那个为接通

image-20210531153111051

运算器

image-20210531114435559

控制器

image-20210531114630517

举例

a * b + c 的执行过程,高级语言转为指令存放到内存中。这里的指令是单地址指令

根据pc从内存取指令(初始0) -> 分析指令(操作码) -> 执行指令内容 指令和数据都是来自存储体

image-20210531115304027

将机器指令转换为多条微指令

高级语言 ->(编译) 汇编语言 -> 操作系统 ->(汇编) 机器语言 01 -> 微指令

或者直接将高级语言转为机器语言(python)逐句翻译

主频

image-20210531151536611

波特率比特率

image-20210607222453605

2.基础

1.进制转换

十进制转其他

​ 整数除基取余

image-20210601113732024

​ 小数乘基取整

image-20210601113850208

二进制转其他(4、8、16):多位一组,分组转换

2.BCD码

用二进制表达十进制数,当超过10时需要加6修正

image-20210601114659976

3.ASCII

image-20210601114946178

汉字7445个,需要2B

4.校验

奇校验:加完校验1的个数为奇数个,一般放前面

海明校验:p的位置为2^n,标记出出错位置

d为数据,p为校验码image-20210601120945066

pi为d为1的下标上第i为异或得到,共需要大约log2位用来校验image-20210601121114649

循环冗余校验CRC :

有一个给出的生成多项式,最高为x次image-20210601121801336,转为二进制被除数1101有x+1位,将数据左移x位后除以该数(模二除),得到的余数就是校验位。发送 移位后的数 加上 余数。

校验:数据模二除多项式,余数为零

5.数据表示

无符号数: 0 ~ 2^n-1

有符号数:一位表示符号

定点小数:纯小数。0. x,再加一位表示符号image-20210601122710917

原码:有符号数image-20210601123056307,加减计算需要讨论符号

反码:负数按位取反

补码:负数按位取反,末尾加一(原理上是用溢出值减绝对值)。计算直接加

移码:加上128后,转为无符号机器数。比较大小

移位:

image-20210601131324554

溢出判断

​ 1.通过符号判断

​ 2.进位判断法:V= S异或C 其中S为符号位产生的进位,C为最高有效位产生的进位。

​ 3.双符号位: V=Sf1 Sf2 + 其中,Sf1和Sf2分别为最高符号位及第二符号位。

求补电路:

将补码表示的带符号数转换成 无符号绝对值

image-20210601171422268

绝对值乘法

acc中保存当前进位,MQ高位保存结果以及低位未计算的乘数,当乘数都移出去后,结果就是ACC MQ

image-20210601154034355

绝对值除法

image-20210601160052898

ACC中放当前值,MQ中放结果

浮点数表示

image-20210601161602994

规格化,M左移使得最高位有效

溢出时,将M右移

IEEE 754 image-20210601163257381image-20210601165117606)

image-20210601163002198

浮点数运算:小阶向大阶看齐

ALU

Arithmetic and logic unit 算数、逻辑、移位

与非:image-20210601165845453现实容易实现

异或:image-20210601165936688和加法的逻辑类似

全加器:

image-20210601170821403

多位串行:

image-20210601171144274

并行

组内并行,组间串行

3.存储器

读取过程:地址线先传送地址数据到MAR,略微等待后片选线读写控制线给出信号,将数据读入MDR中

image-20210602131615023

实际上,地址是有行选和列选(需要的线少一倍),刷新时是以行为单位。

image-20210602133806204

地址线连接MAR(行列分别传入),数据线连接MDR

寻址方式:按字、字节、半字、双字寻址

存储方法:

​ 小段方式:先放低位字节,低位在左

​ 大段方式:先放高位,高位在左

半导体存储器

辅存不和cpu直接通信,主存RAM+ROM

RAM

Random Access Memory

image-20210602133519525

刷新时间:2ms要都刷新过一次。

image-20210602134144186

ROM

Read only Memory

保存必要信息,非易失。保存os在辅存中的位置,开机必要信息

image-20210603102734100

扩展

位扩展

​ 进行位数的扩充(加大字长) 一个存储器对应byte中的一位

​ 例:使用16K1的存储器芯片组成16K8位的存储器

image-20210603104237304

字扩展法:

​ 进行字向扩充(位数不变) 需要先选择取哪个存储器

​ 例如:用16K*8位的芯片组成64K *8位的存储器

image-20210603104254082

​ A0~A13为地址选择 A14 A15为芯片选择(2:4译码器)

字位同时扩展法:

​ 一个存储器的容量为MN位,若使用 lk位的芯片(l<M,K<N),需要在字向和位向同时进行扩展. 此时共需(M/l)*(N/k)个存储器芯片

多体并行存储体

低位交叉编址

(右图)将相邻的单元放到不同的存储体中,这样不需要等待恢复时间再去读取下一个(流水线)

需要满足当再一次读取到M0时,M0已经恢复

image-20210603112354973

image-20210603111717030

宏观上扩展了4倍

cache

空间局部性原理(访问的都是相近的元素)

cache和主存可以以块为单位交流

标记项:cache是从主存中哪里来的、cache是否有效

全相联映射

​ 随便放,查找时遍历查看

直接映射:

​ 主存第j块和Cache第i块有如下函数关系:

​ i= j mod m (m为Cache中总块数)

image-20210604111316459

​ 访问过程:依据cache块号直接去查找,看表中对应保存的组号与主存中组号是否一样。

​ 空间利用率低,命中率也低,硬件实现简单,成本低.

组相联映射:

​ 将cache分组,主存必须放入对应组中,但组内可以随意放置

替换与修改

RAND FIFO LRU(最近最少使用) LFU(历史次数)

写回法:脏位决定是否需要写回

全写法:有一个缓冲同时修改

虚拟存储

将访问外存(逻辑地址)映射到主存(物理地址)

image-20210604115521773

4.指令

image-20210604165949832

指令格式

image-20210604152403058

image-20210604153414463image-20210604153350576

image-20210604160201175

指令的址方式

1.顺序寻址方式 2.跳跃寻址方式

数据寻址方式

用寻址特征表明现在的寻址方式

image-20210604161158449

立即寻址

寄存器寻址

直接寻址

寄存器间接寻址

基址寻址(BR)面向操作系统,内容操作系统确定,有利于多道程序数据块

变址寻址(IX)用于循环程序,数组的偏移

相对寻址(PC) (PC)+A 跳转指令

寄存器寻址:(SP)保存栈顶指针

间接寻址

CISC、RISC

image-20210604165458037

image-20210604165743389

5.CPU

ALU+CU+寄存器+中断系统

image-20210605121433796

CPU结构

cpu内部总线完成内部数据传输;MAR,MDR要和内外总线都要连接

还有一种结构为:寄存器之间通过专用线连接

image-20210605122928712

指令周期

一个机器周期(CPU周期)是一次存取周期

image-20210605123401431

微操作

取指、取数

image-20210605132815242image-20210605132849850

控制器

cpu控制方式:

​ 同步控制方式、异步控制方式、联合控制方式

同步:

image-20210605123401431
硬布线:RISC

节拍发生器:将时钟转为节拍

image-20210605141903363

安排微操作的时钟节拍

image-20210605135938501

设计电路

image-20210605141448990

image-20210605141717000

微程序:CISC
image-20210605154140727

​ 将微指令保存到控制存储器CM中(CPU内部,ROM实现,一条条已经写好的),类似于指令的保存执行

​ 水平型:可以同时执行。垂直型:类似机器指令

image-20210605151805913

操作控制字段:标记一个个微操作,

直接表示法:为1就执行 需要很长

编码表示法

混合image-20210605152026694组内互斥

顺序控制字段:下一条微指令是 跳转 还是 顺序

流水线

将这几个过程重叠起来,并行运行

image-20210605160344293image-20210605160349615

问题:

​ 时间不一样:全部统一为最长的时间

冲突:

​ 硬件:

​ 结构相关(资源冲突):硬件资源满足不了 同时需要访问内存

​ 编程:

​ 数据相关(数据冲突):一条指令依赖前一条指令的执行结果(数据)却无法得到 c=a+b; c++;

硬件直接暂停 添加空指令 数据旁路 编译优化

​ 控制相关(控制冲突):流水线遇到分支(if) 指令或其他改变PC值的指令

​ (acm算法运行为非流水执行过程。)

6.总线

image-20210607212721351

分时 共享

​ 机械特性、电器特性、功能特性、时间特性

分类

​ 串行、并行(宽度高、频率低)

​ (内部总线、系统总线(数据、地址、控制)、I/O总线) 轮询

​ 单总线 双总线(速度不同,进行分离)

image-20210607213949316image-20210607213918796

​ 三总线(提高io速度) DMA控制器控制高速传输(不用CPU),别的中断(鼠标键盘)实现

image-20210607214207930

4总线

image-20210607225218682

​ 地址总线(AB)—其宽度可表明地址空间范围 32位寻址范围2^32 4G

​ 数据总线(DB)—其宽度可表明一次读写的二进制位数 32位4B

​ 控制总线(CB)— 包括各种控制命令(如存储器读 写、I/O读写)、请求信号与仲裁信号、中断请求与应答 等。

复用AB和DB

性能指标

​ 时钟周期T:机器的时钟周期 时钟频率:1/T

​ 传输周期:N个时钟周期:申请、寻址、传输、结束 工作频率:1/N

​ 总线宽度:DB宽度

​ 总线带宽:每秒传输的B ,工作频率 * 总线带宽 / 8

总线仲裁

集中总裁

链式查询:BR BG BS , BG按顺序查询,距离近的优先级高

image-20210607220159388

计算器定时查询:独立的BG线,计数器每次加1代表访问下一个IO , log n

image-20210607220536152

独立请求:需要排队、速度快。独立的BG线

image-20210607220713828
分布式仲裁

​ 不需要中央仲裁器,每个潜在的主 方功能模块都有自己的仲裁号和仲裁器

​ 将总裁号发到总裁总线上去比较

总线操作

​ 申请分配(请求、仲裁)、寻址阶段、传输阶段、结束阶段

同步定时方式:根据时钟的上升沿控制节奏

image-20210607222304595

异步定时方式

image-20210607222129667

半同步通信:加控制信号,当数据没传到位时等待

分离式通信:将准备数据时,总线控制权交出来

总线标准

image-20210607224104543

image-20210607224633259

image-20210607224925037

image-20210607225022641

image-20210607225726363

7.IO

CPU管理外围设备有几种方式:

image-20210626104910735

IO指令由CPU产生,用来控制IO;通道指令为通道产生,具体执行

image-20210626103906731

输入输出设备

​ 输入: 鼠标键盘 输出 :显示器打印机

​ 外存

磁表面存储

​ 串行读取

image-20210626110114399

磁盘

​ 按照扇区读取,寻道->旋转->传输时间。利用便宜可以实现加速或者冗余

image-20210626110421321

光盘

image-20210626111615777

固态硬盘

image-20210626111746131

IO接口

控制、读取io其实就是访问响应寄存器

image-20210626112849731

如何定位编址?统一编址、独立编址(主存的编址和IO的编址是否在一起)

查询方式

​ 比如每秒查询鼠标30次,询问鼠标有没有数据。查到了还需要等待鼠标传输数据

中断方式

image-20210626114555456

在指令完成后,查看中断源寄存器是否有1,有1就进入中断

image-20210626182320701

实现优先级

image-20210626184052004

image-20210626184644527

DMA

​ 接收IO请求,向CPU发出占用总线的请求

问题