计算机组成原理
考纲整理:
计算机系统概述
数据的存储和运算
存储系统
指令系统
中央处理器
总线
输入/输出系统
计算机系统概述
大纲:
冯诺依曼机
计算机基本硬件组成
计算机性能指标
高级程序、汇编程序、机器程序之间的关系
性能概念
响应时间:计算机完成某个任务所需要的总时间
吞吐量:也叫带宽,表示单位时间内完成任务的数量
时钟频率概念
时钟周期:时钟间隔的时间
时钟频率:每秒多少个时钟周期,单位Hz(赫兹)
1s = 10 ^ 3 ms = 10 ^ 6 us = 10 ^ 9ns = 10 ^ 12ps
CPI概念
平均执行每一条指令所需要的时钟周期数
计算公式:CPU时间 = 指令数 * CPI * 时间周期时间
MIPS
每秒执行 多少百万条指令数
计算公式:
MIPS = 指令数 / (执行时间 * 10 ^ 6)
MIPS = 时钟频率 / (CPI * 10 ^ 6)
FLOPS
每秒执行多少百万几次浮点操作
软件角度
编译系统: 预处理、编译、汇编、链接
整数存储
无符号数
最大的无符号数表示
8位: 1111 1111 0xFF 2 ^ 8 - 1
16位:1111…111 0xFFFF 2 ^ 16 -1
有符号数
最高位是 负权重
有符号数的最大值 最高位一定是0
8位: 0111 1111 0x7F 2 ^ 7 - 1
16位 : 011111…1111 0x7FFF 2 ^ 15 - 1
-1 表示为1111 1111
把有符号数变成无符号数:底层的二进制数不变
溢出
1.x >= 0,y>=0 x + y < 0 正溢出
2.x <= 0,y <= 0 x + y > 0 负溢出
3.x >= 0,y < 0 x-y < 0 正溢出
4.x < 0,y > 0 x-y > 0 负溢出
地址表示
大端法 高字节放低地址
小端法 高字节放高地址
移位
左移 逻辑左移和算术左移 (本质一样)
右移 逻辑右移和算术右移(注意这里区分有符号和无符号,有符号算术右移需要补1)
浮点数
形式:规格化的值(normalized)、非规格化的值(normalized)、特殊值(NAN)
规格化
分成三部分 公式表达为 V = (-1) ^ n * M * 2^E
float存储[4字节] s(31:30) exp(30:23)阶码[不能等于0也不能等于255] frac(22:0) 尾数
double存储[8字节] s[63:62] exp[11位] (62-52) frac(52:32)(31:0)
公式:
E = e - bias
e(float)min = 1,e(float) = 254
bias(float) = 127
M = 1.f22f21...f1f0 = 1 + f
非规格化
阶码(exp)字段表示0的或者表示非常接近0的
表示0
1.s = 0 M = f = 0 V = +0.0
2.s = 1 M = f = 0 V = -0.0
公式:
(注意与规格化数求法区分)
E = 1-bias
M = f
特殊值
1.如果阶码字段(exp)全等于1,尾数(frac)全是0,表示这个数是无穷
区分正负无穷的点就是符号位s s = 0 是正无穷;s = 1 是负无穷
2.如果阶码字段(exp)等于1,尾数不等于0,表示不是一个数
浮点数加法
步骤:
1.对阶
2.有效位数相加
3.将结果规格化
4.舍入(如果已经精确了不需要进行舍入)
类型转换
1.int ——> float 不会溢出,但是精度没办法保证
2.int/float ——> double
3.double ——>float
运算部件
二进制加法
搭加法器
异或门进行加法运算,用与门进行进位操作
全加器 用两个半加器组成
PS:注意区分行波加法器(一位一位进行运算)和先行进位加法器(进位一次性算出来)的区别
内存
内存图(从上到下):寄存器、高速缓存(cache)、内存、本地存储(磁盘)、网盘
RAM
分为 DRAM 和 SRAM
基本结构:DRAM 用的是电容和一个晶体管(用的是阵列的形式,需要发两次地址行地址和列地址才能取出数据通过数据总线发给CPU)、SRAM用的是六个晶体管
DRAM分类:
同步DRAM SDRAM
双倍速率同步DRAM DDR SDRAM
低功耗双倍率同步 DRAM
ROM
现在随着时代的发展有的ROM也可以读也可以写
ROM分类:
可编程ROM 只能被编程一次
可擦写可编程ROM (通过紫外线照射擦除) EPROM
电子可擦写 ROM EEPROM
闪存 (flash memory) 例如固态硬盘
cache
cache的组织结构:
1.直接映射 cache的行数等于组数
怎么直接映射?
1.先定组
2.行匹配 匹配Tag值
3.字抽取 从指定地址开始取数据
2.组相联 组相联的 cache 的行数大于 1,但小于 C/B
怎么查找组相联的数据?(最近最少使用算法)LRU
1.先定组
2.行匹配 依旧是匹配 Tag(但是得匹配每一行的Tag)
3.字抽取
3.全相联 只有一个组,多行cache
不需要组选择,直接 行匹配和字抽取
写入数据到cache
依旧分为两种情况:
写命中 (写穿透、写回)和 写不命中(写分配、写不分配)
虚拟内存
虚拟地址支持的最大的空间0 - N-1
页表 是建立虚拟地址和物理地址的关系的结构
在虚拟地址和物理地址之间需要翻译,叫做MMU
虚拟地址
内容:虚拟页号(VPN) 虚拟页偏移量(VP0)
数据取出也分两个内容:
1.数据在内存里面
2.数据不在内存里面(TLB缓存页表项)
指令系统
指令集分为 intel x86 ARM v7、v8、v9 MIPS 、 RISC-V
寄存器:
MIPS 32个通用寄存器
x86 16个通用寄存器
PS: 字长是虚拟地址空间的最大大小
寻址方式
定义:确定操作数或者指令有效地址的方式
寻址方式也分这以下种:
注意:x86有变址寻址
MIPS:
1.寄存器寻址(操作数是寄存器)
2.常数/立即数寻址
3.基址+偏移量寻址
4.伪直接寻址
若数据不在寄存器中,那么就得从内存中取出数据,放入寄存器中
关于数据从内存到寄存器之间有一个数据传送指令
1.取数指令(将内存中的数读出来放入寄存器) LW:Load word
2.存数指令(将寄存器中的数放入内存) SW:Store word
汇编代码
区分不同有效位:
看到 rax-->64位
看到 edx-->32位
看到 dx --> 16位
为什么只有一个返回值?
因为在x86的寄存器中只有**%rax这一个存储返回值**的寄存器
汇编有两种格式:
Intel / AT&T
两者的区别:
1.intel汇编省略了指示大小的后缀 比如AT&T 在实现mov指令时 会有类似movb这一指令
2.intel汇编省略了寄存器名字前面的 "%"
3.intel汇编表示内存位置的方式不同
4.二者操作数的顺序相反
基本汇编指令
数据传送指令
作用:在寄存器和内存中进行数据交互
操作码:mov
栈
栈的存储方式就是从高地址往低地址,低地址放的是栈顶,栈底是高地址
操作:push、pop
算术逻辑运算单元(ALU)
1.加法指令 add ax,1
2.减法指令 sub eax,ecx
3.乘法指令 imul edx,ecx
4.异或指令 xor eax,eax 对两个相同的寄存器进行 xor 操作,其实就是对寄存器存的值清零,效率要比 mov eax,0高
5.或指令 or eax,ebx
6.与指令 and eax,ebx
移位指令
逻辑左移:SHL
逻辑右移:SHR
算术左移:SAL
算术右移:SAR (负数最高位右移动 补1哦)
标志寄存器(条件码)
CF 进位/借位标志位 (针对无符号数算术运算)
ZF 零标志
SF 符号标志
OF 溢出标志(针对有符号数)
cmp/jxx指令
cmp指令跟sub指令类似,只不过一个cmp指令不把结果写回,改变的是标志寄存器位
处理器基本结构
控制寄存器
PC(程序计数器):包含被读取指令的地址
IR(指令寄存器):包含最近被读取的指令
MAR(内存地址寄存器):包含一个内存位置的地址
MDR(内存数据寄存器):包含要写入内存的数据或者要从内存读的数据
总线
1.控制总线
2.数据总线
3.地址总线
注意内部总线(ALU和寄存器之间的线)和系统总线(外部)的区别!
指令周期
1.取指
2.执行
3.中断
数据流
取指周期
中断周期
间接周期
处理器基本组成
主要组成部分:数据通路(处理器中执行算术操作的部分)和控制器(处理器中根据程序的指令指挥数据通路、存储器和I/O设备的部分)
可以理解为 数据通路指肌肉,控制器相当于处理器的大脑
内部总线的分类
单总线方式:每个周期传一个数据
多总线方式:多条车道
专用数据通路:类似于急救通道只能通120
流水段
取指
根据程序计数器(PC)中的地址,从内存/cache中取出指令,然后更新PC
PS:指令一般放在 内存中
译码阶段
根据指令集中定义的指令格式,从寄存器文件中取出相关寄存器的值
执行阶段
根据指令形式,执行算术或者逻辑操作
PS:注意算术和逻辑操作还会设置条件码/标志位
当访问内存的指令,需要计算内存地址(带偏移量那种)时,需要用到ALU
PS:注意此类操作不会更新条件码/标志位
访存阶段
根据地址,从内存/数据cache读取数据或者写入数据
PS:不是所有指令都需要访存
比如一条指令是:
add ax,bx
就是直接在寄存器里面操作完毕,不需要访存
写回阶段
将ALU的结算结果或者从内存读出的数据写入到寄存器文件
PS:注意:
跳转(jmp)指令更新PC的值的时候需要判断标志位的情况!
ret返回指令 更新PC的时候需要从栈中弹出指令地址
流水线冒险
就是在流水线期间不会取到正确的数据进行操作
旁路和转发(解决数据冒险)
控制冒险(jmp 和 ret指令)
弊端: 不知道跳转到哪一条指令去执行
只能在访存阶段才能取到指令
总线
分类:
片内总线(是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连线)
系统总线:计算机系统各个功能部件(CPU、主存、IO接口)之间相互连接的总线
外部总线:计算机系统中设备之间互联,有时也称通信总线,例如UBS、RS232\IEEE488
总线宽度
概念:一次总线操作中通过总线传送的数据位数,一般有8位、16位、32位、64位
总线带宽
概念:每秒钟可以传输多少个字节的数据,单位B/s
公式:
总线带宽 = 总线工作频率 * (总线宽度 / 8)
总线事务/总线周期
一次总线事务:一般是先把地址发送给总线,然后进行一次数据传输
PS:突发式总线事务:一次总线事务中可以连续传多个数据
总线结构
单总线结构
双总线结构
多总线结构
总线周期
信息传输的步骤:
1.请求总线阶段
2.总线仲裁阶段
3.寻址阶段
4.消息传送阶段
5.结束阶段
总线定时
概念:总线通信双方在交换数据的过程中,需要在时间上进行配合从而协调各个操作的先后顺序所采用的控制方法
方式:
同步定时方式(传输频率比较高,适用于总线长度较短)
异步定时方式(通信方式:不互锁、半互锁、全互锁)
半同步通信方式
分离事务通信方式
输入输出系统
I/O 接口/端口
I/O接口:连接主机和外部设备的桥梁
I/O端口:指I/O接口电路中可以进行读/写的寄存器
PS:端口类型:数据端口、控制端口、状态端口
I/O端口编制方式: 统一编址方式(外设端口与主存单元的地址是统一编址的)、独立编址方式
查询方式
中断方式(消除不必要的等待)
不可屏蔽(只有几个危机事件才引起)/可屏蔽中断(IO设备发出的所有中断请求)
中断响应判优
中断优先级:中断响应优先级和中断处理优先级
中断处理
需要硬件和软件紧密配合
硬件处理
CPU响应中断处理流程:
1.关闭中断
2.保存断电和程序状态
断电:返回地址要么是 当前指令,要么是下一条指令
3.识别中断源,引出中断服务程序
软件处理
1.保存现场,比如通用寄存器的值
2.中断处理程序执行
3.恢复现场
4.打开中断
5.中断返回
中断/异常的区别
中断来自处理器芯片外部
异常来自处理器内部
异常包括:陷阱和系统调用、故障(缺页故障(为什么是在CPU里呢?是因为MMU在CPU内部)、缺页异常)、终止
DMA
Data-Memory-Access,直接内存访问
挂起的形式
1.单周期,独立DMA
2.单总线,集成DMA-IO
3.DMA挂在IO总线
DMA传送过程
1.DMA预处理(CPU完成DMA传送之前需要准备工作,包括对DMAC的初始化)
2.DMA传送(DMAC直接控制数据传输,不占用CPU时间)
3.DMA后处理(DMA操作结束后,CPU响应DMA控制器的中断请求,转去执行DMA结束处理工作)
通道
类型:
1.字节多路通道(用于连接和管理多台低速设备)
2.数组多路通道
3.选择通道
磁盘
结构:一个盘片上有很多个磁道,磁道中有可以分成很多的扇区
PS:一个扇区通常是512字节
Taccess = Tseek(寻找磁道) + T(旋转时间) 算的是平均旋转时间+ T(转移时间)
2074

被折叠的 条评论
为什么被折叠?



