计算机组成原理
计算机组成原理
- 适用:软考-中级-软件设计师
计算机系统概述
一、计算机发展历程
- 第一代计算机-电子管时代
- 第二代计算机-晶体管时代
- 第三代计算机-中小规模集成电路时代
- 第四代计算机-超大规模集成电路时代
- 第五代计算机-智能计算机
- 第六代计算机-生物计算机与量子计算机
二、计算机系统基本组成
-
存储器
-
运算器:实现算数运算和逻辑运算
-
控制器
-
程序计数器(PC):具有寄存信息和计数功能
-
指令寄存器(IR):当前正在执行指令
-
控制单元(CU)
-
-
输入输出设备(IO设备)
其他补充说明:
- 运算器+控制器=CPU;
- CPU+主存储器=主机;
- IO设备又称为外部设备
Ⅰ、冯诺依曼计算机特点
- 计算机由运算器、存储器、控制器、输入\输出设备组成
- 指令和数据可以同时保存在存储器中,可以按地址访问存储器
- 指令和数据均用二进制表示
- 指令由操作码和地址码组成
- 指令在存储器中按顺序存放
- 机器以运算器为中心,IO设备与存储器之间的数据传送通过运算器完成
CPU如何区分数据还是指令:
-
指令周期不同阶段
-
CPU完成一个指令可以分为取指令阶段和执行阶段
取指令阶段:CPU从存储器中取出指令
执行阶段:CPU从存储器中取出数据
Ⅱ、单位换算
$bit(比特,位,b)\to B(字节)\to KB\to MB\to GB\to TB\to PB\to EB$
-
1B = 8bit(8位);
-
字与字节
字由多个字节组成,字的位位数叫字长,即CPU处理一次二进制数据的长度
64位计算机的字长为64bit
-
B(字节)是计算机最常用的单位
-
1个英文占1B;1个中文占2B
Ⅱ、寻址范围
已知计算机的字长为32位,存储器的容量为1MB,如果按照直接、半字、字、双字寻址,范围是多少
-
首先明确
-
公式:容量$\div$ 字长or字or字节
-
计算机字长位:32位(单位bit)
半字:计算机位数/2
字:计算机位数
-
存储器容量:$1M = 1M/B = 8M/bit(1M/B * 8)$
-
-
按字节寻址(1B = 8bit)
寻址范围:$1M = 8M/bit\div 8/bit = 1M$
-
按半字寻址(32位计算机,半字:32/2=16bit)
寻址范围:$1M=8M/bit\div 16/bit = 0.5M =512K$
-
按字寻址(32位计算机,字:32bit)
寻址范围:$1M = 8M/bit\div 32/bit = 0.25M =256K$
地址编码从80000H到BFFFFH且按字节编址的内存容量为()KB,使用16K*4bit的存储器,需要几片
-
BFFFFH-80000H = 3FFFFH = 0011 1111 1111 1111 1111B
-
总容量:0011 1111 1111 1111 1111B + 1= 0010 0000 0000 0000 0000B
-
换算:$010 0000 0000 0000 0000B =2^{18}B=2^8KB=256KB$ (只有单个1才可以数位数)
-
总容量/存储器容量 = 需要的内存个数
$(256KB\times 8bit) \div (16KB\times4bit) = 32片$
三、计算机的性能指标
-
吞吐量:信息的流入、处理的速率,取决于CPU
-
响应时间:响应时间越短,吞吐量越大
-
主频:机器内部的时钟频率
-
CPU周期:从内存读取一条指令的最短时间来定义
-
CPU时钟周期:主频的倒数
-
CPI:执行1条命令需要的时钟周期
-
IPC:CPU一个时钟周期执行的命令数
-
MIPS:每秒可执行百万条指令
8MIPS:每秒可执行8百万条指令
-
FLOPS:每秒执行的浮点数运算
MFLOPS、GFLOPS、TFLOPS、PFLOPS
都是每秒执行的浮点运算,就是数据量级不同
四、按功能划分计算机系统
- 硬联逻辑级:有计算机内核、门、触发器等逻辑电路组成
- 微程序级:机器语言是微指令集,由硬件直接执行
- 传统机器级:机器语言是指令集,由微程序解释执行
- 操作系统级:
- 汇编语言级:机器语言是汇编
- 高级语言级:机器语言是高级语言,编译程序用来翻译
- 应用语言级:计算机满足某种需求而设计
数据的表示和运算
一、进制转换
- 二进制转8进制:因为$2^3=8$,所以,二进制3位转换为1位8进制
- 二进制转16进制:因为$2^4=16$,所以,二进制4位转换为1位8进制
- 十六进制符号:H、Ox
- 八进制:0、1、2、3、4、5、6、7
- 十六进制:0、1、2、3、4、5、6、7、8、9、A(10)、B(11)、C(12)、D(13)、E(14)、F(15)
Ⅰ、二进制转换
$2^{10}$ | $2^9$ | $2^8$ | $2^7$ | $2^6$ | $2^5$ | $2^4$ | $2^3$ | $2^2$ | $2^1$ | $2^0$ | |
---|---|---|---|---|---|---|---|---|---|---|---|
位 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
值 | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
二进制数:10001.10,转换为十进制
- 位数从0开始,因为$2^0=1$
- $1\times2^4+1\times 2^0+1\times 2^{-1}=17.5$
十进制数:19,转换为2进制
- $19-2^4=3\to 1000 =2^4$
- $3-2^1=1\to 10 = 2^1$
- $1-2^0=0\to 1=2^0$
- $1000+10+1=1011$
二进制数:001 111 000 010,转换为8进制
- 001$\to$ 1;111$\to$ 7;000$\to$ 0;010$\to$ 2
- 所以得八进制数:1702
八进制数:251,转换为二进制
- 2$\to$ 010;5$\to$ 101;1$\to$ 001
- 所以得二进制数:010 101 001
Ⅱ、其他进制加减法
十六进制加法:3D + 25 = Ox62
- D+5 = 13+5=18;18超过16需要进位,18-16=2
- 3+2=5,再加上进位1,得6
十六进制减法:3D25 - 05C3 = Ox3762
- 5-3 =2
- 2-C = 2 - 12,需要向前一位借1,所以得16 + 2 - 12 = 6
- D-5,因为已经被借1,得C-5 = 12-5 = 7
- 3-0 =3
二、真值和机器数
-
原码:
内存中存储正数使用原码(正数三码相等)
-
补码:符号位不变,其余位取反后+1
- 内存中存储负数使用补码
- 补码可以简化计算机运算部件的设计
- 补码的 +0 与 -0 表示相同
- n位补码(包含符号位$n-1$数据位),可直接表示数值:$-2^{n-1}到 2^{n-1}-1$
-
反码:符号位不变,其他位取反
反码的“0” 有2种表示:+0 = 0000;-0 = 1111
-
移码:
只能表示整数
移码的 +0 与 -0 表示相同
例: 计算(-1)的补码、反码、补码
-
原码:$1=0 0001;-1 = 1 0001$ ;
原码保存负数,最左侧1位为符号位,符号位1,表示负数
-
反码:11110
除符号位外都取反
-
补码:11111
补码 = 反码 + 1;
补码 = ^原码 + 1;
-
移码:01111
补码的基础上,对符号位进行取反
若“2x”的补码是90H,则x的真值是 -556
-
判断符号位:0(原码、反码、补码不变);1(补码)
90H = 1001 0000(H是十六进制单位)
-
原码为: 1 111 0000
1 110 1111(最高位不变,其余位取反)
1 110 1111+1 = 1 111 0000
-
1110 0000 = -112;
-
2x=-112;x=-56
三、BCD码
四、校验码
- 检错编码:奇偶校验码和循环亢余校验码(CRC)
Ⅰ、奇偶校验
- 奇偶校验就是在信息码的基础上加一位校验码,可以加在信息码前或后面,
- 奇偶校验只能检验,不能纠错
检验方法
-
奇校验:保证数据得1为奇数
若原数据有奇数个1,则添加0
若原数据有偶数个1,则添加1
发送的数据为:1100010,经奇校验后得:1100010 0
-
偶校验:保证数据的1为偶数
Ⅱ、循环亢余检验码(CRC)
- 采用模二运算来构造校验位
- 数据位为K,校验位为R,则其格式为:K个数据位后有R个校验位
Ⅲ、海明码
- 利用多组的奇偶性来检错和纠错
- 海明码通过在数据中添加K位校验码,通过扩大码距实现检验和纠错
- 不光能检测错误,还能纠正错误
- 设数据位为N位,校验位是K位,则N和K的关系:$2^K-1\ge N+K$
已知数据信息位为16位,最少应附加_5_位的校验位,才能实现海明码校验
- 数据位为16$\to$ N=16;
- $2^K-1\ge 16+K \to 2^k\ge 16+1+k$
- K为5
五、定点数的表示和运算
- 小数点位固定的数
- 定点数表示的数,分为整数、定点数小数
- 定点数表示法中,小数点占一个存储位
六、浮点数的表示和运算
-
小数点位不固定的数
-
浮点数使用阶码、尾数表示
-
浮点数相加首先应统一阶码(小阶向大阶对齐,尾数向右移动n位)
-
浮点数的格式:$\fbox{阶符 码阶 数符 尾数}$ $N =2M\times R$ ($M:阶码;R^e:尾数$ )
阶码大,表示的数范围大;尾数长,精度高
例如:1 0001 0 0000000001;其中1为阶符,0001为补码(阶符),0为数符,0000000001为原码(尾数)
-
阶码:0001 = 1110 + 1 = 1111;
-
阶符:1表示负数,0表示正数
1 1111 = -15
-
尾数:$000 000 000 1 = 2^{10}$
-
数符:0表示负数,1表示正数(因为尾数是小数,所以与其他不同)
0 $000 000 000 1 = 2^{-10}$
-
结果为:$2^{-15}\times 2^{-10}$
-
-
浮点数通常表示为:$N =M\times R^e$
M:尾数(浮点数表示的精度);R:基数;e:阶码(表示浮点数表示范围);
例:$10.3\times 10^5 = 1030000$
七、算数逻辑单元
1、常用逻辑运算符
-
情况一,A B同真同假;&&与 的结果与AB相同 例:AB为真(1)则;A&&B=1
例:AB为假(0)则;A B=0 -
情况二,AB一真一假;&&与 的结果与符号相同(&&为0, 为1) 例:AB一真一假;A&&B=0
例:AB一真一假;A B=1
&& //两个数同时为真才为真
|| //有1个为真即为真
! // 取反
^ // 异或操作,相同为0不同为1
2、短路求值
-
&&为0, 为1 -
只看最左边第一个表达式的结果,表达式结果与逻辑运算符相同退出运算
情况1:&&(0),左边第一个表达式为0,退出运算
情况2: (1),左边第一个表达式为1,退出运算
// &&(0)逻辑与,如果第一个运算为假(0),退出运算(第2个运算短路)
(a = 0) && (b = 1); // a=0假, 退出运算(不执行b=1)
(a = 1) && (b = 1); // a=1真, 继续运算(执行b=1)
// || 逻辑或,如果第一个为真(1),退出运算(第2个运算短路)
(a = 1) || (b = 1); // a=1真, b=1(短路)
(a = 0) || (b = 1); // a=0, b=1, 先运行a=0,假,再运行b=1真,其整体结果为真,a,b都运行
存储器层次结构
一、基本概念
-
存储器应包括:主存储器、高速缓冲存储器、辅助存储器
-
主存储器(内存、主存):CPU可以直接访问
-
辅助存储器(辅存、外部存储器):数据需要加载到内存才能访问
-
存在CPU中的存储器
地址寄存器(MAR):存放访问地址
数据寄存器(MDR):暂存从主存读取的数据
-
-
随机存取存储器(RAM):随机存取存储器中的信息
优点:读写方便、使用灵活
缺点:断电丢失
静态RAM:常作为高速缓冲存储器
动态RAM:常作为主存
-
只读存储器(ROM)
-
ROM与RAM都可以随机存取
-
串行访问存储器:对存储器进行访问时要按照物理位置的先后顺序依次访问
-
计算机采用分层存储体系主要目的是:解决存储容量、价格和速度之间的矛盾
-
常用的虚拟内存使用主存-辅存组成
存储器分类-按位置分类
- 内存:程序当前运行的程序和数据
- 外存:当前不参与运行的程序和数据
存储器分类-按材料分类
-
磁盘存储器:用磁性介质做成
-
半导体存储器:
根据原件可分为双极型、MOS型
根据是否需要刷新可分为静态、动态
-
光存储器;
存储器分类-按工作方式
- 读写存储器RAM
- 只读存储器ROM
二、半导体随机存储器
Ⅰ、SRAM存储器
- 6晶体管存储
- 读写速度快、集成率高、功耗低等优点
- 适合缓存和高速缓存等快速反应的场合
Ⅱ、DRAM存储器
- 单电容结构存储
- 存储单元元件少,集成率比SRAM高,读写速度比SRAM慢
- 需要更高的功能,动态周期性刷新
- 计算机主存主要由DRAM构成
Ⅲ、只读存储器ROM
-
掩膜型只读存储器(MROM):制造时写入,之后只能读取;常见BIOS
-
可编程只读存储器(PROM):一次性写入存储器
-
可擦除可编程只读存储器(EPROM):使用紫外线擦除信息
-
电可擦除可编程只读存储器(EEPROM):使用电擦除
-
快速擦除读写存储器(Flash Memory):闪存
掉电后信息不丢失,属于非易失存储器
以块为单位进行删除
在嵌入式系统中可以使用flash替代ROM存储
-
光盘(CDROM)
三 、主存储器与CPU连接
四、高速缓存存储器Cache
- 空间局部性
- 时间局部性
- Cache是主存的一个复制,并没有扩大主存
- cache的地址映射是硬件自动完成的,并不是操作系统实现的
- cache即可存放数据也可存放程序
主存地址映射方法
-
直接映像:地址变换简单,灵活性差
-
相联存储器是按内容访问
-
全相联映像:主存的任意一块可转入cache的任意位置,只有装满才需要替换
发生块冲突次数最小
-
组相联映像:组间采用直接映像,组内采用全相联映像
按内容访问存储器
替换算法
- 随机替换算法(RAND):随机产生一个替换的块号,进行替换
- 先进先出(FIFO):最先进入的数据弹出
- 近期最少使用(LRU):近期最少使用的Cache替换出去
- 优化替换(OPT):先执行一次程序,统计cache使用情况,然后在替换
cache的使用性能
主存编址
内存地址从AC000H到C7FFFH,共有___K个地址单元,若该内存地址按字(16bit)编址,由28片存储器芯片构成,已知构成该内存芯片每片有16K个存储单元,则该芯片每个存储单元存储__位
-
共有多少地址单元
-
AC000H、C7FFFH都是十六进制数
A=10、B=11、C=12;7-C=7-12
C7FFFH - AC000H = 1BFFFH = 0001 1100 0000 0000 0000 B
-
总容量:0001 1100 0000 0000 0000 B + 1 = 0001 1100 0000 0000 0001 B
-
换算:0001 1100 0000 0000 0000B = 0001 1100 00 KB
-
0001 1100 00 KB = 112(转换为10进制)
共有112个地址单元
-
-
每个存储单元存储多少位
公式:$\frac{总的位数}{总的存储单元}$
$总的位数=地址单元 \times 地址编址 = 112K\times 16bit$
$总的存储单元 = 28\times 16K$
得:$\frac{112K\times 16bit}{28\times 16K} = 6b$
五、虚拟存储器
六、外存储器
- 格式化容量:$面数(磁道数/面数)(扇区数/道)*(字节数/扇区数)$
- 非格式化容量:$面数(磁道数/面数)内圆周长*最大位密度$
指令系统
一、指令格式
-
指令格式:$\fbox{操作码 地址码}$ - 操作码:定长操作码、不定长操作码;进行加减乘除等操作
- 地址码:要操作地址
二、指令寻址方式
Ⅰ、指令寻址
Ⅱ、数据寻址
-
立即寻址:操作数作为指令的一部分直接写在指令中(直接指出操作数本身地址方式)、
mov R1,#45(将数45传递到寄存器R1中)
-
直接寻址:操作数放在内存中
-
寄存器寻址:操作数都存放在寄存器中
mov R1,#45(将数45传递到寄存器R1中)
-
寄存器间接寻址:SI、DI、BX、BP这四个寄存器中
-
寄存器相对寻址:偏移量
-
基址加变址寻址方式:基址寄存器
-
相对基址加变址方式:基址寄存器+偏移量
三、CISC与RISC
-
RISC:精简指令集
-
指令长度固定、指令少、寻址方式少
-
少于100条指令数目
-
采用流水线技术
流水技术包括超流水线、超标量和超长指令字。
-
只有存数store(取数load)指令能访问存储器、其他指令都在寄存器完成
-
控制器采用组合逻辑控制
-
CPU中有多个通用寄存器,比CISC多
-
采用硬布线逻辑执行指令
-
-
CISC:复杂指令集
- 指令系统复杂
- 寻址方式多、指令长度不固定
- CISC采用微程序控制
-
RISC比CISC更能提高计算机的运行速度
-
RISC比CISC更便于设计、可降低成本,提高可靠性
-
RISC更能有效支持高级语言
中央处理器
一、CPU的功能
二、CPU的主要寄存器
Ⅰ、运算器中的寄存器
- 商乘寄存器(MQ):乘除运算中,用于存放操作数和运算结果
- 累加寄存器(ACC、AC):为ALU执行算数运算or逻辑运算,提供数据、保存/暂存运算结果
- 通用寄存器(X):存放操作数
- 算数逻辑单元(ALU):数算和逻辑运算
- 数据缓存寄存器(DR):数据缓存
- 状态条件寄存器(PSW):保存指令运行的标志
Ⅱ、控制器中的寄存器
-
程序寄存器(PC):具有寄存信息和计数功能
寄存信息:当前执行的下一条指令
为实现程序指令顺序执行,CPU中PC寄存器自动加1
-
指令寄存器(IR):当前正在执行指令
指令寄存器的位数取决于:指令字长
对用户完全透明、操作码、地址码都存入此
-
控制单元(CU):给出控制信号(控制器)
不仅要保证指令正确执行,还要能处理异常事件
-
地址寄存器(AR):保存CPU当前访问的地址
-
指令译码器(ID):对操作码进行分析、指令译码
-
其他存储器:
-
存储器数据寄存器(MDR)
-
存储器地址寄存器(MAR)
-
三、指令执行过程
四、数据通路
五、控制器的功能
六、指令流水线
- 指令控制方式:顺序方式、重叠方式、流水方式
- 流水方式可以提高单条指令执行速度
Ⅰ、流水线
流水方式:是并发和并行性嵌入计算机系统的一种形式
-
流水操作周期:取值、分析、执行最长的时间
-
1条指令执行时间 = 取值时间 + 分析时间 + 执行时间
-
流水线N条指令需要多少时间:
$1条指令执行时间+(指令条数-1)\times 流水操作周期$
指令流水的取指2ns、分析2ns、执行1ns,流水周期是多少,100条执行指令执行完毕需要多少时间
- 流水操作周期:2ns
- 流水线100条指令需要时间:$(1ns+2ns+2ns) + (100 -1)\times 2 = 203$
流水吞吐率(TP):单位时间内流水线完成的任务数量、或输出结果
- 公式:$TP = \frac{指令条数}{流水线执行时间}$
- 流水线执行时间:流水线n条指令需要时间
流水线加速比:$\frac{不使用流水线执行时间}{使用流水线执行时间}$
指令流水的取指2ns、分析2ns、执行1ns,执行100条,不使用流水执行时间
- 指令执行时间:$(2ns+2ns+1ns)\times 100$
Ⅱ、Flynn分类法
体系结构 | 结构 | 关键特征 | 代表 |
---|---|---|---|
单指令流单数据流SISD | 控制部分:1 处理器:1 主板模块:1 | 单处理器系统 | |
单指令流多数据流SIMD | 控制部分:1 处理器:n 主板模块:n | 处理器以异步的形式执行同一条指令 | 并列处理器、阵列处理机、超级向量处理机 |
多指令单数据流MISD | 控制部分:n 处理器:1 主板模块:n | 不可能实现 | 只有理论意义,不存在 |
多指令多数据流MIMD | 控制部分:n 处理器:n 主板模块:n | 业务指令同时进行 | 多处理机系统 |
七、终端系统
总线
一、总线基本概念
- PCI总线是并行内总线,SCSI总线是并行外总线
- 总线复用:减少总线中信号线的数量
总线宽度为 32bit,时钟频率为 200MHz,总线上每5个时钟传送一个32bit的字,总线带宽为__MB/s
- 公式:$时钟频率MHz\div 时钟个数\times(总线宽度bit\div 8) $
- $200MHz\div 5 \times (32bit\div 8) = 160MB/s $
二、总线分类
-
片内总线:CPU内部总线,连接寄存器
-
系统总线:计算机内部的总线,连接CPU、主存、硬盘
按照传输内容不同分类(三总线结构的计算机总线)
- 数据总线
- 地址总线
- 控制总线
-
通信总线
输入输出系统
一、I/O系统概念
- 计算机中采用总线结构,便于实现系统的积木化构造,减少信息传输线的数量
Ⅰ、CPU与外部设备数据传输方式
-
直接程序控制:由CPU直接控制
无条件传输方式:无条件和CPU进行交换数据
程序查询方式:CPU先查询外设状态,再交换数据
-
中断方式:
-
直接存储器存取方式(DMA):不需要CPU进行干预,完全由硬件完成的I/O操作方式
注意:这是主存与外设的信息交换
cpu在一个总线周期结束后响应DMA请求,
使用DMA传送数据,每传送1个数据就要占用一个存储周期
读/写的过程 | CPU干扰频率 | 数据传输单位 | 数据流向 | |
---|---|---|---|---|
程序直接控制方式 | CPU发出I/O命令后需要不断轮询 | 极高 | 字 | 设备→CPU→内存 内存→CPU→设备 |
中断驱动方式 | CPU发出I/O命令后可以做其他事 本次I/0完成后设备控制器发出中断信号 |
高 | 字 | 设备→CPU→内存 内存→CPU→设备 |
DMA方式 | CPU发出I/O命令后可以做其他事 本次I/0完成后 DMA控制器发出中断信号 |
中 | 块 | 设备→内存 内存→设备 |
通道控制方式 | CPU发出I/O命令后可以做其他事 本次I/0完成后通道发出中断信号 |
低 | 一组块 | 设备→内存 内存→设备 |
Ⅱ、可靠性
-
可靠性(可用性)是系统从开始运行到某个时间都可正常运行的概率,使用R表示
-
串联部件可靠性 = 各个部件的可靠性乘积
-
并联部件可靠性 = 各个(1 - 部件失效率)的乘积
部件失效率 = $(1-R)^n$ ;n为n个部件并联
部件可靠率 = $1-(1-R)^n$
某部件使用在2000台计算机中,运行1000小时后,其中有4台失效,则这部件的可靠性
- $(2000-4)\div2000 = 0.998$
二、I/O接口
- I/O接口与打印设备间的交换是异步传输方式
三、I/O方式
Ⅰ、中断
- 中断向量提供中断服务程序入口地址
- 多级中断嵌套,使用堆栈保护断点和现场
- 中断响应时间:发出中断请求开始,到进入中断服务程序
- 保存现场的目的:返回继续执行程序
- I/O设备的中断时可屏蔽中断,电源断电时不可屏蔽中断
- 直接存储器存储:CPU只需要在开始和结束时少量处理,无需干预数据传输过程