计算机组成原理
计算机系统:硬件+软件
硬件的发展:
第一代:电子管
第二代:晶体管
第三代:中小规模集成电路时代
第四代:大规模,超大规模集成电路时代
目前发展趋势:更微型,多用途,更巨型,超高速
硬件基本组成
五大部分:
输入设备
输出设备
主存储器
运算器
控制器
冯诺依曼首次提出存储程序概念,以运算器为中心
现代计算机结构以存储器为中心,CPU=运算器+控制器
各硬件部分
主存包括:
存储体:存储元,存储单元,存储字,存储字长,地址
MAR(Memory Address Register )地址寄存器,用于指明要读写哪个存储单元。其位数反映存储单元数量
MDR(Memory Data Register )数据寄存器,用于暂存要读写的数据,位数=存储字长
运算器包括
ACC累加计数器,存放操作数,运算结果
MQ乘商寄存器,进行乘除
X通用寄存器,存放操作数
ALU算数逻辑单元,用于电路实现各种算数运算,逻辑运算
控制器包括
PC程序计数器,存放下一条指令的地址
IR指令寄存器,存放当前执行的指令
CU控制单元,分析指令,给出控制信号。
计算机系统的层次结构
五层
M4:高级语言机器(执行高级语言)
M3:汇编语言机器(执行汇编语言)
M2:操作系统机器(向上提供广义指令)
M1:传统机器(执行机器语言指令)
M0:微程序机器(执行微指令)
三个级别的语言
高级语言,汇编语言,机器语言
编译程序——将高级语言一次全部翻译为汇编语言,或直接翻译为机器语言
汇编程序——将汇编语言翻译为机器语言
解释程序——高级语言翻译为机器语言
性能指标
时钟周期:CPU中最小的时间单位,每个动作至少要1个时钟周期
主频(时钟频率):单位Hz
CPI(Clock cycle Per Instruction)执行一条指令所需的时钟周期数
CPU执行时间=(指令数*CPI)/主频
IPS(Instruction Per Second)每年执行的指令条数=主频/平均CPI
FLOPS(Floating-point Operations Per Second )每秒执行多少次浮点运算
• BCD(Binary -Coded Decimal) • 8421码 • 余3码 • 2421码
用二进制编码的十进制
奇偶校验
• 检验原理
• 码字间的距离:两个码字之间有几个位不同
• 码距:一个编码方案中,合法码字间的最小距离
• 若码距=2,有校错能力,若码距=3可能还会有纠错能力
• 奇偶校验
• 在信息位的首部或尾部添加一个奇偶校验位
• 奇校验:整个校验码(信息位和校验位)中1的个数为奇数
• 偶校验:整个校验码(信息位和校验位)中1的个数为偶数
• 奇偶校验码的码距=2,仅能检测出奇数位错误,无纠错能力
• 异或运算(模二加)二者不同为1
汉明码
• 基本思想:分组偶校验,多个校验位可反映出错位置
• 求解步骤:确定校验位个数(k个校验位,n个信息位)
• 确定校验位分布,p 1,p 2,p3分别在1,2,4,8,空出来的其他位置依次填入信息位
• 求校验位
• 补充
• 海明码有1位纠错,2位校错能力
• 为了区分1位错和2位错,还需添加全校验位对整体进行偶校验
•
0/1→正/负
原码
反码:中间态
补码:负数的补码,符号位不变,按位取反再➕1,补码为了解决ALU中不设置减法寄存器,因为减法的硬件难度设计高
移码:在补码的基础上把符号位取反,注意,移码只能用于表示整数
移码=真值+偏置值
定点数移位运算
• 算术移位:用于做乘法运算 • 原码:符号位不参与移位。左移右移都补0 • 反码:符号位不参与移位。左移右移都补0 • 补码: • 负数补码最右边的1及其右边与原码相同,最右边的1的左边与反码相同 • 符号位不参与移位。左移补0,右移补1 • 逻辑移位:RGB,左移右移都补0,移出的位舍弃 • 循环移位: • 不带进位位:用移出的位补上空缺 • 带进位位:移出的位放到进位位,原进位位补上空缺
注意:原,反,补码位数有限,有时算数移位不能精确等效乘除
• 强制类型转换 • 长整型变短整型 • 高位截断,低位保留 • 短整型变长整型 • 符号扩展
浮点数表示
阶码:常用补码或移码表示的定点整数
阶码E反映浮点数的表示范围及小数点的实际位置;
尾数:常用原码或补码表示的定点小数
尾数M的数值部分的位数n反映浮点数的精度
规格化浮点数:规定尾数的最高数值位必须是一个有效值
左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减一
右规:当浮点数运算的结果尾数出现溢出时,将尾数算数右移一位,阶码加一
半导体存储芯片的结构
1. 存储矩阵:由大量相同的位存储单元阵列构成
2. 译码驱动:将来自地址总线的地址信号翻译成对应存储单元的选通信号,该信号在读写电路的配合下完成对被选中单元的读写操作
3. 读写电路:包括读出放大器和写入电路,用来完成读写操作
4. 读写控制线:决定芯片进行读写操作
5. 片选线:确定哪个存储芯片被选中,可用于容量扩充
6. 地址线:单向输入,位数与存储字的个数有关
7. 数据线:双向的,位数与读出写入的数据位数有关。
8. 数据线数和地址线数共同反映存储芯片容量的大小
SRAM DRAM
存储信息 触发器,双稳态 电容,充放电 读出后需要重新充电
破坏性读出 非 读:查看触发器状态 写:改变触发器状态 是 读:连接电容,检测电流变化 写:给电容充放电
需要刷新 不要,能保持两种稳定的状态 需要,电容电荷只能维持2ms
送行列地址 同时送 分两次送,地址线复用,线数减少一半
运行速度 快 慢
集成度 低 高
发热量 大 小
存储成本 高 低
用途 常用作Cache 常用作主存
DRAM刷新(Dynamic Radom Access Memory )
1. 多久需要刷新一次?一般2ms
2. 每次刷新多少存储单元?以行为单位,每次刷新一行存储单元
3. 为什么要用行列地址?减少选通线的数量
4. 如何刷新?有硬件支持,读出一行的信息后重新写入,占用1个读写周期
5. 何时刷新?
1. 每次读写完都刷新一行(分散刷新)
2. 2ms内集中安排时间全部刷新(集中刷新)
3. 2ms内每行刷新1次即可(异步刷新)
ROM(Read-Only Memory)
1. 掩膜式只读存储器(MROM)存储内容由半导体制药厂按用户提出的要求在芯片的生产过程中直接写入,无法修改
2. 一次可编程只读存储器(PROM)存储内容由用户用专门的设备一次性写入,之后无法修改
3. 可擦除可编程只读存储器(EPROM)修改次数有限,写入时间长
1. 紫外线擦除(UVEPROM)
2. 电擦除(EEPROM)
4. 闪速存储器(Flash Memory)如U盘,写入速度较快
5. 固态硬盘(Solid State Drivers)控制单元+FLASH芯片
Cache 基本工作原理
1. 主存中的块放到Cache 中的哪个位置?
1. 空位随意放:全相联映射
2. 对号入座:直接映射
3. 按号分组,组内随意放,组相联映射
2. 对于1,Cache 满了如何处理?对于2,3对应位置被占用如何处理?
1. 随机(RAND)算法,先进先出(FIFO)算法,最近最少使用算法,最不经常使用(LFU)算法
3. 修改Cache 中的内容后,如何保持主存中相应内容的一致性?
1. 命中:
1. 全写法(write-through)
2. 写回法(write-back )
2. 不命中:
1. 写分配法(write-allocate)
2. 非写分配法(not-write-allocate)
指令系统
• 指令系统 • 指令格式 • 定长指令字格式与变长指令字格式 • 操作码 • 定长操作码与扩展操作码 • 操作类型 • 地址码 • 指令寻址方式 • 给出下一条指令的地址 • 给出要操作的对象的地址 • CISC 和 RISC
操作码:指出指令的功能
地址码:给出操作的信息的地址
操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
操作码是识别指令,了解指令功能与区分操作数地址内容的组成和使用方法等关键信息
操作码分类:
⁃ 定长操作码:在指令字的最高部分分配固定的若干位(定长)表示操作码
⁃ 一般n位操作码字段的指令系统最大能够表示2^n条指令
⁃ 优点:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利
⁃ 缺点:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限
• 扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上
• 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效缩短指令字长
• 优点:在指令字长有限的前提下仍保持比较丰富的指令种类
• 缺点:增加了指令译码和分析的难度,使控制器的设计复杂化
操作类型
1. 数据传送
1. LOAD,把存储器中的数据放到寄存器中
2. STORE,把寄存器中的数据放到存储器中
2. 算数逻辑操作
3. 移位操作:算数移位,逻辑移位,循环移位
4. 转移操作
1. 无条件转移JMP
2. 条件转移 JZ:结果为0;JO:结果溢出;JC:结果有进位
3. 调用和返回 CALL RETURN
4. 陷入指令(trap)
5. IO输入输出操作
指令寻址
按字编址:每个字存储单元对应一个地址编号
按字地址寻址:给出一个字地址,可以取出长度为一个字的数据
按字节编址:每个字节存储单元都有一个地址编号
按字节寻址:给出一个字节地址,可以取出长度为一个字节的数据
机器字长:CPU一次能处理的二进制数据的位数
指令字长:一个指令字长中包含二进制代码的位数
存储字长:一个存储单元存储二进制代码的长度
寻址方式
立即寻址
• 形式地址A就是操作数本身,又称为立即数,一般采用补码形式。
• 优点:指令执行阶段不访问主存,指令执行时间最短
• 缺点:A的位数限制了立即数的范围。
• 一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果,共访存1次
直接寻址
• 指令字中的形式地址A就是操作数的真实地址EA
• 优点:简单,指令执行阶段仅访问一次主存,不需要专门计算操作数的地址
• 缺点:A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改
• 一条指令的执行:取指令访存1次,执行指令访存1次,共访存2次
间接寻址
• 指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元地址,也就是操作数地址的地址
• 优点:可扩大寻址范围,用于编制程序
• 缺点:指令在执行阶段要多次访存
寄存器寻址
• 寄存器中给出的不是一个操作数,而是操作数所在主存单元的地址
• 特点:比一般间接寻址速度快,但指令的执行阶段需要访问主存
• 一条指令的执行:取指令访存1次,执行指令访存1次,共访存2次
隐含寻址
• 不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址
• 优点:有利于缩短指令字长,扩大寻址范围
• 缺点:需增加存储操作数或隐含地址的硬件
偏移寻址方式
• 基址寻址 • 将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A • 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变,形式地址可变(偏移量) • 当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但内容仍由操作系统确定 • 优点:扩大寻址范围,用户不必考虑程序存在外存的哪个空间区域,有利于多道程序设计 • 变址寻址 • 有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=(IX)+A,其中IX为变址寄存器 • 变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址) • 可扩大寻址范围,在数组处理过程中,设定A为数组的首地址,不断改变IX的内容,适用于循环程序 • 相对寻址 • 把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A ,A是位移量,可正可负,用补码表示 • 操作数的地址不是固定,随PC值的变化而变化,并且与指令地址之间总是差一个固定值,便于程序浮动 • 广泛应用于转移指令 • 堆栈寻址 • 操作数存放在堆栈中,隐含使用堆栈指针(SP, Stack Point )作为操作数地址。 • 堆栈是存储器中一特定的按后进先出(LIFO)原则管理的存储区,该存储区中被读写单元地址是用一个特定的寄存器给出的,称为堆栈指针
指令系统
• CISC (Complex Instruction Set Computer) • 设计思路:一条指令完成一个复杂的基本功能 • 代表:x86架构,主要用于笔记本,台式机 • 80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令 • 比如:设计一套能输出单词的指令集 • CISC思路,每个单词的输出由一条指令完成,采用存储程序的设计思想,由一个比较通用的电路配合存储部件完成一条指令 • RISC(Reduced Instruction Set Computer) • 设计思路:一条指令完成一个基本动作,多条指令组合完成一个复杂的基本功能。 • 代表:ARM架构,主要用于手机,平板 • 采用并行,流水线的方式 CISC RISC
指令系统 复杂,庞大 简单,精简
指令数目 一般大于200条 一般小于100条
指令字长 不固定 定长
可访存指令 不加限制 只有Load/Store
各种指令执行时间 相差较大 绝大多数在一个周期内完成
各种指令使用频度 相差很大 都比较常用
通用寄存器数量 较少 多
目标代码 难以用优化编译生成高效的目标代码程序 采用优化的编译程序,生成代码较为高效
控制方式 绝大多数为微程序控制 绝大多数为组合逻辑控制
指令流水线 可以通过一定方式实现 必须实现
中央处理器
• CPU的功能和结构 • 需要提供哪些功能? • 对应这些功能需要有哪些结构? • 指令执行过程 • 指令周期的概念:一条指令的执行分为不同阶段 • 数据流:不同阶段要求依次访问的数据序列 • 指令执行方案:如何安排多条指令的执行? • 数据通路的功能和基本结构 • 如何设置部件之间的连接路径? • 描述指令执行过程中信号和数据在这些路径上的传输 • 控制器的功能和工作原理 • 控制器如何指挥整个系统的工作? • 控制器的设计 • 硬布线 • 微程序 • 指令流水线 • 为什么引入流水线的结构? • 有哪些结构? • 会产生什么问题?
CPU的功能
1. 指令控制。完成取指令,分析指令和执行指令的操作,即程序的顺序控制
2. 操作控制。一条指令的功能往往是由若干操作信号,把各种信号送往相应的部件,从而控制这些部件按指令的要求进行动作
3. 时间控制。对各种操作加上时间的控制。时间控制要为每条指令按时间顺序提供对应的控制信号
4. 数据加工。对数据进行算数和逻辑运算
5. 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
运算器和控制器的功能
• 运算器
• 对数据进行加工
• 控制器
• 协调并控制计算机各部件执行程序的指令序列
• 取指令:自动形成指令地址,自动发出取指令的命令。
• 分析指令:操作码译码,产生操作数的有效地址
• 执行指令:根据分析指令得到的操作命令和操作数地址形成操作信号控制序列,控制运算器,存储器,IO设备完成相应的操作。
• 中断处理:管理总线及输入输出,处理异常情况和特殊请求
运算器基本结构
1. 算术逻辑单元:主要功能是进行算术逻辑运算
2. 通用寄存器组,用于存放操作数(源操作数,目的操作数及中间结果)和各种地址信息
3. 暂存寄存器:用于暂存从主存读出来的数据,这个数据不能存放在通用寄存器中,否则会破坏原有内容。
4. 累加寄存器:是一个通用寄存器,用于暂存ALU运算的结果信息,用于实现加法运算
5. 程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)符号标志(SF)零标志(ZF)进位标志(CF)PSW中这些位参与并决定微操作的形成
6. 移位器:对运算结果进行移位运算
7. 计数器:控制乘除运算的操作步数
• 专用数据通路方式:根据指令执行过程中的数据和地址流动方向安排连接线路。 • 如果直接用导线连接,相当于多个寄存器同时并且一直向ALU传输数据 • 解决办法1:使用多路选择器,根据控制信号选择一路输出 • 解决办法2:使用三态门电路可以控制每一路是否输出 • 性能高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现 • CPU内部单总线方式 • 将所有寄存器的输入输出都连接到一条公共通路上 • 结构简单,容易实现,但数据传输存在较多冲突的现象,性能低
控制器的基本结构
1. 程序计数器:用于指出下一条指令在主存中的存放地址。CPU根据PC内容去主存中取指令。因为程序中指令是顺序执行的,所以PC有自增功能 2. 指令寄存器:用于保存当前正在执行的那条指令 3. 指令译码器:仅对操作字段进行译码,向控制器提供特定的操作信号 4. 微操作信号发生器:根据IR的指令,PSW的状态信息和时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型 5. 时序系统:用于产生各种时序信号,由统一时钟CLOCK 分频得到。 6. 存储器地址寄存器:用于存放所要访问的主存单元地址 7. 存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息
指令周期的数据流
• 指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。
• 指令周期常常用若干机器周期表示,机器周期又叫CPU周期。
• 一个机器周期又包含若干时钟周期(它是CPU操作的最基本单位)
• 每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等
• 取指周期
• 当前指令地址送至存储器地址寄存器
• CPU发出控制信号,经控制总线传到主存,
• 将MAR所指主存中的内容经数据总线送到MDR
• 将MDR中的内容送入IR
• CU发出控制信号,形成下一条指令地址
• 间址周期
• 将指令的地址码IR送到MAR
• CU发出控制信号,启动主存,读操作
• 将MAR所指主存中的内容经数据总线送到MDR
• 中断周期
• 为了能恢复当前任务,需保存断点,一般用堆栈来保存断点,SP表示栈顶地址,进栈操作是先修改指针,后存入数据
• CU控制将SP减1⃣️,修改后的地址送入MAR,本质上是将断点存入某个存储单元
• CU发出控制信号,启动主存写操作
• 将断点送到MDR,
• CU控制将中断服务程序的入口地址送到PC
• 执行方案 • 单指令周期 • 所有指令周期选用相同的执行时间,指令间串行 • 多指令周期 • 不同类型指令选用不同的执行步骤,指令间串行 • 流水线方案 • 隔一段时间启动一条指令,多条指令处于不同阶段,同时运行
CPU控制方式:产生不同微操作命令序列所用的时序控制方式
1. 同步控制方式
1. 整个系统所有的控制信号都来自一个统一的时钟信号。
2. 通常以最长的微操作序列和最烦琐的微操作为标准,采取完全统一的,具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令
3. 同步控制方式的优点,是控制电路简单,缺点是运行速度慢
2. 异步控制方式
1. 不存在基准时标信号
2. 各部件按自身固有的速度工作,通过应答方式进行联络。
3. 优点是运行速度快,缺点是控制电路比较复杂
3. 联合控制方式
微操作指令
非访存指令
1. CLA(clear)清零
2. COM(complement)取反
3. SHR(shift right)算术右移
4. CSL(cyclic shift left)循环左移
5. STP(stop)停机
访存指令
1. ADD(add)
2. STA(store)存数
3. LDA(load)取数
4. JMP(jump)无条件转移
5. BAN(branch negative)条件转移
中断周期原则
1. 微操作的先后顺序不得随意更改
2. 被控对象不同的微操作尽量安排在一个节拍内完成
3. 占用时间较短的微操作,尽量安排在一个节拍内完成,允许有先后顺序
中断隐指令:中断隐指令不是一条指令,而是指一条指令的中断周期由硬件完成的一系列操作
中断的三个任务
1. 保存断点
2. 形成中断服务程序的入口地址
3. 关中断