计算机组成原理总结
计算机组成原理
第一章 计算机系统概述
-
计算机的四代变化:电子管—晶体管—中小规模集成电路时代—超大规模集成电路时代
-
机器字长:计算机一次可以计算的位数 32位,64位
-
存储字长:一个存储单元中存放二进制代码的位数
-
指令字长:一般为存储字长的整数倍,若指令字长是存储字长的N倍则需要n个机器周期
-
时钟周期<机器周期<取指周期
-
机器周期=存取周期
-
计算机按指令流和数据流:
a) 单指令流和单数据流----冯诺依曼体系
b) 单指令流和多数据流----阵列处理器和向量处理系统
c) 多指令流和单数据流----实际不存在
d) 多指令流和多数据流----多处理器和多计算机系统 -
计算机系统的组成
a) 计算机硬件:运算器、存储器、控制器、输入输出设备
b) 指令和数据按同等的地位存储在存储器中,按址寻访
c) 指令和数据均用二进制表示
d) 指令由操作码和地址码组成
e) 按序存储
f) 早期的冯诺依曼体系以运算为主,通过运算器与存储器传送数据;现代计算机以存储为主,I/O操作尽可能地避开CPU -
运算器和控制器合并为CPU
-
存储器分为主存储器和辅存储器。主存按地址存取,相连存储器按内容存储。
主存由地址寄存器(MAR)、存储体和数据寄存器(MDR)构成,MAR用于寻址,位数代表存储单元个数,MDR的长度等于存储字长 -
运算器:算术逻辑单元ALU,通用寄存器(累加器ACC,操作数寄存器X,变址寄存器IX,基址寄存器BR)用于暂存操作数和中间结果、程序状态寄存器PSW 黄色表示程序员可见,红色表示不可见即透明
-
控制器:程序计数器PC、指令寄存器IR、控制单元CU
-
机器语言(计算机唯一可以识别和执行)<------汇编语言<------高级语言
-
C程序:源程序-------汇编程序--------目标程序-------可执行程序
-
计算机性能指标:
a) 机器字长:字长越长、结果越精确
b) 数据通路带宽:数据总线一次可以并行传送信息的位数
c) 主存容量:用字节衡量,字数字长。MAR反应存储单元个数,MAR的位数表示寻址范围的最大值
d) 运算速度:吞吐量:系统在单位时间内处理请求的数量
响应时间:CPU时间和等待时间
CPU时钟周期:每个动作至少需要1个时钟周期
主频:一个时钟周期内可以完成的动作次数
CPI: 执行一条指令所需要的时钟周期数
CPU执行时间=CPU时钟周期数/主频=指令条数CPI/主频
CPU性能取决于主频、指令条数、CPI
MIPS(每秒执行多少百万条指令)、MFLOPS(每秒执行多少百万次浮点数运算)、GFLOPS(每秒执行多少十亿次浮点数运算)、TFLOPS(每秒执行多少万亿次浮点运算) -
翻译程序:将高级语言源程序翻译成机器语言程序。翻译程序有两种,分别为编译程序和解释程序。编译程序时将整个源文件一次翻译成机器语言程序,解释程序是翻译一句执行一句。从高级语言到机器语言或者汇编语言叫编译程序;从汇编语言到机器语言叫汇编。
第二章 数据的表示 -
任何一个二进制的小数都可以转化为10进制小数,但是有些10进制小数无法精确的用二进制表示。
-
BCD码(二进制编码的十进制数)采用4位二进制数来表示一位0-9的数。但是由于4位可以表示16个数,所以有6个状态是冗余的。
a) 8421码。它表示的十进制数D=8b3+4b2+2b1+b0。表示范围(0000)-(1001),若两个8421码相加的和大于等于10,则需要加6进位。如6+9=15,15已经超过1001所以1111+0110=0001,0101。相当于一位十进制位用4位8421码表示。
b) 余3码:在8421码的基础上加3表示。
c) 2421码:表示范围0-2+4+2+1=9。如果表示的数大于等于5则最高位为1,如6表示为1100,而不是0110。 -
定点数的表示:(最高位表示符号,1表示正,0表示负)
a) 原码。纯整数表示范围 ,小数表示范围
b) 补码。纯整数的表示范围 ,小数表示范围
c) 反码。正数的反码不动,负数,符号不变,数值取反
d) 移码。用于表示浮点数,只可以表示整数。
e) 0的补码和移码表示唯一 -
运算
a) 算术移位
码 填补代码
正数 原码、补码、反码 0
负数 原码 0
补码 左移添0
右移添1
反码 1
b) 逻辑位移
将操作数视为无符号数,左移时,高位丢弃,低位补0,右移时,低位丢弃,高位补0。
c) 循环位移
不带进位位的循环右移、带进位位的循环右移、不带进位位的循环左移、带进位位的循环左移。 -
溢出
a) 运算结果位数超过了机器数的表示范围,大于最大值为上溢,小于最小值为下溢。
b) 当两个符号相同的数相加或者两个符号相异的数相减时才可能产生溢出
c) 定点数加减运算时产生的溢出说明结果时错的 -
溢出的判别方法
a) 采用一位符号法
设A的符号为a, B的符号为b,运算结果S的符号位s,
,若v=1表示溢出,v=0表示无溢出
b) 采用双符号位
00表示正数,无溢出
10表示负溢出
01表示正溢出
11表示负数 -
C语言中的整数类型和转化:注意区分有符号数和无符号数
-
浮点数类型的转化:
a) Char—>int–>long–>double
b) Float–>double
c) Int—>float, float、double—>int,会舍去小数点以后的,精确度下降
d) Double—>float可能发生溢出,还会丢失有效位 -
浮点数的表示:
a) 一般格式:阶符+阶码+数符+尾数。阶符用于控制是否溢出,阶码表示大小,数符表示浮点数的符号,尾数表示精度
b) IEEE 754:数符+阶码+尾数,阶码用移码表示。尾数存在一个隐含的1
类型 数符 阶码 尾数 总位数 偏置
短浮点数 1 8 23 32 127
长浮点数 1 11 52 64 1023
临时浮点数 1 15 64 80 16383 -
一般浮点数的计算方式
a) 对阶,小阶向大阶变化,同时尾数右移
b) 尾数求和
c) 规格化。正数的规格化形式为00.1xxx,负数为11.0xxxx。通过左移或右移尾数。(取决于模n,前log2n位不全为1或0)
d) 舍入。舍0入1:尾数右移时,被移除的数值最高位为0,直接舍去,最高位为1,则末尾加1;恒置1:不论丢弃的时0,还是1,末位都置为1。 -
浮点数转化为IEEE 754:1)将其转化为2进制,2)小数点左移变成1.xxxx的形式,阶码就为2^n,3)n+偏置值得到真正的阶码。尾数用原码表示
-
数据按边界对齐方式存储。
错题
2.1.6 1、7、13、15、17
2.2.5 20、25、28、31、32、33、35、36、39、40、42、54
2.3.3 29、30、32
注意移码和反码的概念,海明码纠错过程,奇偶校验问题
当采用进位位来判断溢出时,当最高有效位进位和符号位进位的值不相同时才产生溢出
第三章 存储系统
- 存储器的分类
-
性能指标:存储容量=字长×存储字数、单位成本=总成本/总容量、传输率=宽度/存储周期。存储周期:读写周期,访存周期。连续两次独立访问存储器操作之间所需要的最小时间间隔。
-
Cache用于解决cpu与主存速度不匹配问题,主存与Cache之间的数据调动是硬件自动完成,主存与辅存之间的数据调动是硬件和操作系统共同完成,对程序员透明。
-
有关Cache的计算:
a) 设cache命中率为x,cache存取时间为t1,主存存取时间为t2,平均访问时间为xt1+(1-x)t2
b) 命中率=cache命中次数/(cache命中次数+主存访存次数)
c) Cache主存系统效率=cache时间/平均访存时间 -
DRAM的刷新(对CPU是透明的)
a) 集中刷新。利用固定的时间在一个存储周期内对所有行刷新,刷新期间内不可读写,成为“死时间”。刷新周期=行数×存储周期。默认为2ms。死时间率=刷新周期/刷新时间间隔。
b) 分散刷新。读一行刷一行,降低了系统的速度。存储周期=2×读/写周期
c) 异步刷新。平均分配刷新时间。2ms内刷新n行。 -
RAM属于易失性半导体
-
译码驱动电路
a) 线选法。N行矩阵需要log2n条地址线
b) 重合法。对m×n的存储矩阵需要log2n+log2m条 -
只读存储器
a) E表示可擦除
b) P表示可编程
c) 闪存结合了ROM和RAM可写、不易失的长处 -
CPU与主存的连接
a) 字扩充:增加地址线
b) 位扩充:增加数据线 -
双端口RAM和多模块存储器
用于提高CPU访问储存器的速度,前者为空间并行,后者为时间并行。
双端口RAM允许两个独立的控制器同时异步的访问存储单元。
四种情况:
a) 两个端口不同时对一个地址单元存取数据(OK)
b) 两个端口同时对一个地址单元读数据(OK)
c) 两个端口同时对一个地址单元写数据(出现写入错误)
d) 两个端口同时对一个地址单元分别执行读、写操作(出现读错误) -
多模块存储器用于cpu可以同时取指令
单模块存储器:只有一个存储体,每个存储单元存储m个字,总线宽度也为m,一次并行的读出m个字,地址必须顺序排列并处于同一地址单元。
缺点:指令和数据在主存内必须连续存放,一旦遇到转移指令,或者操作数不能连续存放,这种方法就不明显。
多体并行存储器:
高位交叉编址模块体号在前,体内地址在后,仍然要按顺序读出,存取方式是串行,顺序存储器
低位交叉编址模块体号在后,体内地址在前,所以可以并行读出连续的地址,提高带宽。
12. 低位交叉编址流水线存取
设模块字长等于带宽,模块存取周期为T,总线传达周期为r,存储器交叉模块数应大于等于T/r
13. 局部性原理
时间局部性:未来最近的时间可能会用到的信息
空间局部性:最近要用到的信息是连续存储的
14. Cache工作原理
CPU发出请求,若访存在Cache中命中,将地址转化成Cache地址,直接对Cache进行操作,与主存无关,若不命中,则从主存中将整个块调入Cache中,若Cache已满,则采用置换算法。
15. Cache与CPU之间交换数据的单位是字,Cache与主存之间交换数据的单位是块。
16. Cache与主存之间映射方式
标记 块号 块内地址
a) 直接映射
标记 块内地址
b) 全相联映射
标记 组号 组内地址
c) 组相联映射
标记由脏位、有效位、替换控制位等组成,具体根据题意判断标志位数。
17. Cache容量=块数×(块内地址所占位数+有效位+脏位+替换控制位)
18. Cache写回策略:
a) 全写法(写直通法)修改一行写回一行,Cache和主存同时修改
b) 写回法:只修改Cache不修改主存,设置脏位,当块决定写回时才写入主存
19. 虚拟存储器的特点
逻辑模型,实际不存在,主存和辅存共同构成
Cache对操作系统透明,虚拟存储器对应用程序透明,二者都对用户透明
Cache由硬件实现,虚拟存储器由OS和硬件共同实现
若虚拟存储器不命中对系统性能的影响更大
20. 分类
a) 段式存储器:段号+段内地址 特点:逻辑独立性,易管理、修改、保护,段长度可变
b) 页式存储器:虚页号+业内地址 特点:页面长度不变,页表简单调入,最后一页的零头造成浪费
c) 段页式存储器:段号+页号+页内地址 特点:结合了段式和页式的优点,以页为单位,每段由固定的页组成,段的长度必须为页的整数倍
21. TLB快表
a) 对于经常访问的页,将这些页表项放于cache组成的快表中,提高效率。
b) 采用全相联或者组相联
c) 快表与慢表同时进行,快表按内容指定地址
22. TLB、Cache、页表访问未命中的情况
a) TLB命中,页表一定命中,但Cache不一定命中
b) TLB命中与否与Cache无必然联系
c) 页的范围>主存>cache
d) 页不命中,TLB一定不命中
e) Cache命中,主存一定命中
f) 虚拟地址-主存地址—-> Cache
g) 访问顺序:TLB页表—>cache主存
23. 在大题中,若TLB也采用类似Cache的映射方式,则取虚页号的低n位表示组号,其余高位继续作为标记,与TLB表中的标记进行对比,若有效位为1则命中。
物理地址的低n位与虚拟地址低n位表示页内地址。
24. 计算cache容量时,要注意增加一位有效位,另外根据题意增加相应的位数,比如采用LRU算法需要增加一位,采用写回法,也要增加1位脏位(修改位)。
25. 页面失效率:一般第一次访问的都是未命中。若访问变量不是连续存放大多数情况命中率为0。
26. 访存次数最少问题:当cache命中时,访问为0,若采用直写法最少访存次数为1,采用写回法访存次数为0。
27. 页框号对应物理地址高n位,也就是实页号。
第四章 指令系统
- 指令是计算机运行的最小功能单位。
- 指令各式:操作码+地址码(操作数对应的地址)
- 指令字长必须为字节、字、半字等的整数倍
- 指令分类:
a) 零地址指令:不需要操作数,零地址的运算类指令仅用在堆栈计算机中。空操作指令、停机指令、关中断指令。
b) 一地址指令:(1)只有目的操作数和操作码,(2)隐含目的地址,(3)不一定只有一个操作数,比如(ACC)OP(A1)->ACC
c) 二地址指令:OP+A1+A2->A2
d) 三地址指令:OP+A1+A2->A3
e) 四地址指令:OP+A1+A2->A3,取A4 - 访存次数:取指令一次,取操作数n次,存放结果m次,一共是m+n+1
- 设计扩展码的目的是为了保持指令长度不变的情况下,增加指令熟练在设计扩展码的时候,短码的指令不可以是长码的前缀。
- 几个符号的说明:A—形式地址;(A)----形式地址所指的实际地址;EA----有效地址;(EA)----操作数
- 寻址方式----指令寻址
a) 顺序寻址:通过程序计数器加1自动生成下一条指令的地址
b) 跳跃寻址:通过转移指令jmp实现。跳跃的下一条指令不由PC给出,而是由本条指令给出,所以跳跃的结果为当前指令修改PC值,下一跳还是由pc给出。并且还受程序状态寄存器和操作数的控制。 - JMP指令的特点为每取出一个单位的数据就+1,具体加多少要看按什么寻址,按字节寻址就每取出一个字节加1,按字寻址就每取出一个字加1。
- 数据寻址
寻址方式 有效地址 用途 访存次数
隐含 程序指定 缩短指令长度 0
立即 A是操作数 寄存器赋初值,不访存,执行时间最短 0
直接 EA=A 1
间接 EA=(A) 扩大寻址范围,利于程序返回 2
寄存器 EA=Ri 指令字短,执行速度快 0
寄存器间接 EA=(Ri) 扩大范围,适合多道程序,程序式数据分配空间 1
相对 EA=(PC)+A 转移指令和程序浮动 1
基址(面向os) EA=(BR)+A 扩大寻址范围 1
变址(面向user) EA=(IX)+A 扩大寻址范围,处理数组问题 1
堆栈 遵循栈的原则 - CISC与RISC
CISC RISC
指令系统 复杂,庞大 简单,精简
指令数目 >200 <100
指令字长 不固定 定长
可访存指令 不加限制 只有load/store
各指令执行时间 相差大 绝大多数一个周期内可以完成
各指令使用频率 大 常用
通用寄存器数量 少 多
目标代码 难以用优化编译生成高效目标代码程序 采用优化编译生成代码高效
控制方式 微程序控制 绝大多数为组合逻辑
指令流水线 可以通过一定方式实现 必须实现
第五章 CPU
-
CPU由运算器和控制器组成,运算器对数据操作,控制器对指令操作。
-
CPU功能:(1)指令控制:取指令、分析指令、执行指令。程序的顺序控制。
(2)操作控制:将操作信号送往相应的部件控制部件按要求完成操作。
(3)时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
(4)数据加工
(5)中断处理:对异常情况和请求作处理 -
运算器的组成
a)算术逻辑单元(ALU)
b)暂存寄存器:该寄存器用于暂时存储主存读来的数据,不可以放入通用寄存器中。对程序员透明
c)累加寄存器(ACC)用于暂时存放ALU的结果、
d)通用寄存器:AX,BX,CX,SP等,用于存放操作数
e)程序状态字寄存器(PSW),包括溢出标志(OF),符号标志(SF),零标志(ZF),进位标志(CF)
4.控制器的组成
a) 程序计数器(PC)指出下一条指令在主存中存放地址
b) 指令寄存器(IR)保存当前执行的指令
c) 指令译码器 对操作码字段进行译码,向控制器提供特定的操作信号
d) 存储器地址寄存器(MAR)存放要访问的主存单元的地址
e) 存储器数据寄存器(MDR)存放要向主存中写入的数据
f) 时序系统。产生各种时序信号,由统一时钟CLOCK分频
g) 微操作信号发生器 根据IR、PSW及时序信号产生控制整个计算机的信号 -
指令数据流
(1)取值周期
PC->MAR->地址总线->主存
Cu发出控制信号->控制总线->主存
主存->数据总线->MDR->IR(存放指令)
CU发出控制信号->pc+1
(2)间址周期(无PC)
(MDR)或AD(IR)->MAR->地址总线->主存
CU发出控制命令->控制总线->主存
主存->数据总线->MDR
(3)中断操作(无IR)
CU控制sp-1,SP->MAR->地址总线->主存
Cu发出写命令->控制总线->主存
Pc->MDR->数据总线->主存(程序断点写入内存)
CU发送中断服务程序的入口地址->PC
MAR只能通过地址线单向指向内存,MDR通过数据线和内存相互传送数据。MAR不可以指向IR。
(PC)+1->PC不要忘记!!!!! -
指令执行方案
a)单指令周期 每条指令都在固定的时间内完成
b)多指令周期 不同的指令采用不同的周期完成
c)流水线 同一个周期内争取执行多条指令 -
数据通路:数据在功能部件之间传送的路径
-
基本结构:CPU内部单总线、CPU内部多总线、专用数据通路
-
寄存器之间的数据传送
(PC)->BUS PCout有效,pc内容到总线
Bus->MAR MARin有效,总线内容送MAR
10.主存与CPU之间的数据传送
PC->BUS->MAR PCout和MARin有效
1->R CU发出读命令
M(MAR)->MDR MDRin有效
MDR->BUS->IR MDRout有效,IRin有效 -
执行算术或逻辑运算
Ad(IR)->BUS->MAR MDRout和MARin有效
1->R CU发出读命令
M(MAR)->MDR MDRin有效
MDR->BUS->Y MDRout和Yin有效,操作数->Y
(ACC)+(Y)->Z ACCout ALUin有效,CU发送加命令,结果->z
Z->ACC Zout和ACCin有效,结果->ACC
(Z)->MDR
(MDR)->M(MAR) 结果放回主存中 -
(Ro)表示操作数的地址在RO中,所以要去主存中寻找操作数,RI表示操作数就在RI中,#表示立即数,直接计算。
-
专用数据通路(无总线)
-
ADD A B 将A+B的结果写回到A中,A表示不在主存中,(A)表示要写回主存
-
描述数据通路
a) 运算器在主存中访问 M(MAR)->MDR,(MDR)->ALU->ACC
b) LDA X ((X)->ACC) 将主存中x地址的内容读到acc中
(X)->MAR, M(MAR)->MDR, (MDR)->ALU->ACC
c) ADD Y (ACC)+(Y)->ACC (Y)->MAR M(MAR)->MDR,(MDR)->ALU,ACC->ALU,ALU->ACC
d) STA Z (ACC)->Z (Z)->MAR, (ACC)->MDR, (MDR)->M(MAR) -
使用单总线就要使用暂存器,防止ALU两端读到的数据一样
17.控制器
输入信号:时钟、指令寄存器、标志、总线
输出信号:CPU数据传输、送至 总线的信号
18. 硬布线控制器由复杂的组合逻辑门电路和一些触发器构成,因此又称为组合逻辑控制器。
工作原理:由组合逻辑电路根据当前的指令码、状态和时序即时产生
19. CPU控制方式
a) 同步控制方式 具有统一时钟,所有信号来自时钟信号,优点:控制简单,缺点:运行速度慢
b) 异步控制 不存在基准时标信号,各部件有自己的固有速度工作。优点:运行速度快,缺点控制电路复杂
c) 联合控制方式 大部分同步控制,小部分异步控制
20. 微程序控制器
将每一条机器指令编写成一个微程序,每条机器指令由多个微操作命令组成。微命令是控制序列的最小单位。
21. 同一时间可以同时产生和完成的微命令成为相容性微命令,否则为互斥性微命令
22. 微指令的格式:操作控制+顺序控制
23. 微程序控制器的组成:
a) 控制存储器(CM),用于存放各指令对应的微程序,由ROM构成
b) 微指令寄存器(CMDR\UIR) 用于存放从CM中取出的微指令,位数等于微指令字长
c) 微地址形成部件 用于产生初始微地址和后继微地址,以保证微指令的连续执行
d) 微地址寄存器CMAR 接受微地址形成部件送来的微地址
e) 地址译码器 将地址码转化为存储单元控制信号。
24. 工作过程
机器指令的操作码->微地址形成部件->顺寻逻辑(控制微指令序列)->CMAR->地址译码->CM,取出地址->CMDR,根据下地址->顺序逻辑确定下一条指令的地址->CPU内部、
-
控制存储器中包括了 取值周期微程序,间址周期微程序、中断周期微程序、对LDA操作的微程序、对STA操作的微程序。
-
间址周期的最后要转到执行周期微程序,中断周期的最后转到取值周期
-
取指周期
1 M->CMAR 微程序包括多条指令,将第一条地址送入CMAR
2 CM(CMAR)->CMDR 取微指令
3 (PC)->MAR,1->R 产生操作信号
4 AD(CMDR)->CMAR 形成下一条微指令 送入CMAR
5 CM(CMAR)->CMDR 将对应控制存储器M+1的地址单元的指令放入到CMDR
6 M(MAR)->MDR
重复执行4、5、6直到最后一条指令取出 -
微指令的编码方式
a) 直接编码 操作控制码中的每一位都对应一个微操作命令 1表示有效
优点:简单直观 执行速度快,并行性好 缺点:有n个微命令就要有n位,造成位数过长
b) 字段直接编码 将微指令的控制字段分成若干段 每段译码以后发出控制信号。互斥命令放入同一段,相容微命令放入不同段,每段中信息位不能多,每段留出一个状态不进行任何操作,最多表示2^n-1个命令。
c) 字段间接编码 -
微指令的格式
a) 水平型微指令 一次能定义并执行多个并行操作 操作控制+顺序控制
优点:程序短 速度快,缺点:微指令长 编写麻烦
b) 垂直型微指令 类似机器指令 只能执行一次微指令 微操作码+目的地址+源地址
优点:微指令短、简单,便于编写微程序 缺点:微程序长,执行速度慢,效率低
c) 混合型 在垂直的基础上加一些不复杂的并行操作 微指令短便于编写,微程序也不太长 执行速度加快 -
微程序与硬布线控制器的比较