第一章:概述
传统冯诺依曼结构:
- 输入设备
- 输出设备
- 存储器
- 主存:地址寄存器MAR、数据寄存器MDR
- 辅存
- 运算器
- 算术逻辑单元ALU
- 程序状态寄存器PSW
- 累加器、乘商寄存器、操作数寄存器、变址寄存器…
- 控制器
- 程序计数器PC:存放当前欲执行指令的地址,可以自动加一生成下一条指令地址。
- 指令寄存器IR:存放当前指令
- 控制单元CU:分析来自IR的数据,发出微操作指令
语言分类:
-
机器语言
-
汇编语言
-
高级语言
编译程序:一次全部翻译,然后执行。 编译之后形成可执行文件.exe
解释程序:翻译一条执行,然后再翻译。 翻译不生成目标代码。
计算机性能指标:
- 机器字长:计算机进行一次整数运算可处理的二进制位数
- 指令字长:一个指令字中的二进制位数
- 存储字长:一个存储单元存储的二进制代码长度
第二章:数据的表示和运算
2.1、进制转换
- 二进制转换为八进制/十六进制:把二进制的3/4位 编为一组
- 八进制 与 十六进制相互转换:先转化为二进制
- 任意进制转换为十进制:数码与权值相乘,乘积相加
- 十进制转换为任意进制:
- 整数部分:除基取余
- 小数部分:乘积取整
2.2、定点数
**原码:**最高位为符号位,其余各位表示数的绝对值
- -127 ~127
反码:
- 正数:反码与原码相同
- 负数:数值位全部取反
- -127~127
补码:
- 正数:补码与原码相同
- 负数:反码末位加1
- -128~127
移码:
- 补码的基础上,将符号位取反
移位运算:
- 算术移位
- 逻辑移位
- 循环移位
加减运算:
- 加法:[A+B]补 = [A]补 + [B]补
- 减法:[A-B]补 = [A]补 + [-B]补
乘除运算:
2.3、浮点数
浮点数的表示:
- 阶符 | 阶码数值部分 | 数符 | 数码数值部分
IEEE754:
- 隐含数值最高位
浮点数的加减运算:
- 对阶
- 尾数求和
- 规格化
- 舍入:0舍1入法、恒置1法、直接舍入法
- 溢出判断
数据的大端方式和小端方式:
- 大端方式:主观上认为的方式;高位字节存放在低地址
- 小端方式:低位字节存放在低地址,高位字节存放在高地址。
第三章:存储器
3.1、概述
分类:
按存储介质分:
- 磁表面存储器:磁盘、磁带
- 半导体存储器:主存、cache
- 光存储器:光盘(CD-ROM)
按存取方式分:
- RAM随机存储器:随机存取
- ROM只读存储器:只能随即读出,而不能写入;ROM所存数据,一般是装入整机前事先写好的
- 串行访问存储器:对存储单元读写时,要按其物理位置的先后顺序访址
RAM与ROM ?
RAM为易失性存储器,ROM为非易失性存储器。
分类。。。
信息可保存性:
- 易失性存储器:断电后,存储信息丢失(主存、cache)
- 非易失性存储器:断电后信息仍保持(ROM)
读出类型:
- 破坏性读出:读出后需对存储信息再生(DRAM)
- 非破坏性读出:不会对原存储信息破坏(SRAM)
存储器的层次化结构:
- CPU
- 寄存器
- cache
- 主存
- 磁盘
- 磁带、光盘
主存-辅存:虚拟存储系统,解决了主存容量不足的问题
**主存-cache:**解决CPU与主存速度不匹配的问题
3.2、SRAM与DRAM
存放一个二进制位的物理器件称为存储元,地址码相同的多个存储元构成一个存储单元,若干存储单元的集合构成存储体。
SRAM 静态随机存储器
- 存储元是用双稳态触发器来记忆信息(MOS管)
- 非破坏性读出
- 存储速度快,但集成度低,成本高,功耗大
**DRAM 动态随机存储器 **
- 即主存,但目前的主存通常采用SDRAM
- 采用栅极电容来存储信息
- 破坏性读出,必须刷新
- 存储速度慢,但集成度高,成本低,功耗低,容量大
- **刷新:**DRAM上电荷只能维持1~2ms,每隔一段时间必须刷新
- 集中刷新:在一个刷新周期内,利用一段固定时间,对存储器的所有行进行刷新,存在死区时间
- 分散刷新:把对每行的刷新分散到各个工作周期,每个工作周期前半部分用于读写,后半部分用于刷新,没有死区时间
- 异步刷新:刷新周期除以行数,得到一个时间间隔 t,则每隔时间 t 刷新一次。缩短了死区时间
- 透明刷新:刷新安排在译码阶段,不存在死时间。
两者核心区别:
-
存储元不同
-
双稳态触发器, 采用MOS管, 非破坏性读出,读写速度快
-
栅极电容,放电,是破坏性读出,需重写(再生),读写速度慢
-
3.3、ROM
特点:
- 非易失性存储器
- 结构简单,位密度比可读写存储器高
- 主板上的BIOS芯片(ROM)存储自举装入程序,也是主存的一部分
类型:
- MROM 掩膜式只读存储器:生产过程中写入,写入后无法改变内容
- PROM 一次性可编程只读存储器:允许用户用专门设备读入内容,内容一旦写入就无法改变
- EPROM 可擦除可编程只读存储器:可以写入信息,可以对内容多西修改,但修改次数有限
- UVEPROM:紫外线照射,擦除所有信息
- EEPROM:“电擦除”特定的字
- Flash 闪速存储器:U盘,SD卡。长期保存信息,读比写快
- SSD 固态硬盘:由Flash芯片组成快速擦除与重写,读写速度快。
3.4、主存和CPU的连接
主存通过数据总线、地址总线、控制总线与CPU连接。
主存容量的扩展:
- 位扩展:增加存储字长,增加数据总线数
- 字扩展:增加字的数量,
- 字位同时扩展:同时增加存储字的数量和存储字的长度
存储器芯片的地址分配和片选:
- 线选法:n条线–》n个选片信号,电路简单;地址空间不连续
- 译码片选法:n条线–》2的n次方个片选信号,电路复杂,地址空间可连续
3.5、双端口RAM和多模块存储器
目的:
- CPU与主存的速度差异,主存恢复时间长(DRAM存取时间后有一段恢复时间)
- 为了提高CPU访问存储器的速度,可采用双端口RAM(空间并行)、多模块存储器(时间并行)等技术。
双端口RAM:
- 一个存储器有左右两个独立端口,分别具有两组独立的数据线、地址线、读写控制线
- 允许两端异步的访问存储单元
- tip:不能同时对同一地址写,不能同时对同一地址一个写一个读。
多模块存储器:
- 单体多字存储器:每个存储单元存储多个字,总线宽度也为多个字,一次并行读出多个字。
- 优点:增大了带宽,提高了单体存储器工作速度。
- 缺点:每次同时取出多个字,因此指令和数据在内存内必须连续存放。
- 多体并行存储器:由多个模块组成,可理解为多根内存条。
- 高位交叉编址:
- 竖着编址,按顺序访问存储模块。
- 不能很好的满足程序局部性原理。
- 低位交叉编制:(俗称:双通道)
- 横着编码,程序放在相邻模块,采用流水线存取。
- 满足程序的局部性
- 连续存储n个字,耗时:T + ( n - 1 ) r
- 高位交叉编址:
内存条插入:
- 相同颜色,采用低位交叉编址。
- 不同颜色,采用高位交叉编址。
3.6、高速缓冲存储器
引入:
- 双端口RAM和多模块存储器,提高了存储器的工作速度,但优化后CPU与存储器速度差异仍然很大
- ==》更高速的存储单元设计
- ==》价格 ↑ ,容量 ↓ ==》cache
- ==》结合程序访问的局部性原理
- ==》Cache - 主存
程序访问的局部性原理
- 时间局部性:现在被引用的信息,一段时间后还会被引用。多用在循环结构。
- 空间局部性:正在被引用的信息,其附近位置的信息将来也会被引用。多用在数组结构。
Cache工作的基本原理:
- Cache和主存都被划分相等的块;
- CPU发出请求时,若访存地址在Cache中,则直接访问;
- 若Cache未命中,则仍需访问主存,将用到的块调入Cache
- tip:
- CPU与Cache交换的基本单位是字,Cache与主存交换的基本单位是块。
- 为什么划分成块? :基于局部性原理,当前访存地址周围的字也放入Cache
分块中的问题 ?
- 如何区分Cache与主存的数据块对应关系? =======》 Cache与主存的映射方式
- Cache满了怎么办? **=========》**Cache中的替换算法
- CPU修改了Cache中的数据副本,如何保持数据一致性? **============》**Cache写策略
1、Cache与主存的映射方式:
按照某种规则将主存的信息存入Cache
-
直接映射:放固定的位置
-
标记 Cache行号 块内地址
-
主存块号 % Cache块数 = Cache行号
-
CPU根据Cache行号,找到Cache对应行,,若其标记为1,则根据块内地址存取信息;若标记为0,则在内存中找到对应的块调入Cache,并标记为1。
-
-
全相联映射:随意放
- 主存数据块放在Cache中的任意位置,用主存地址的高位做标记
- 访存过程:CPU访存遍历Cache,对照标记看Cache内是否命中。
-
组相联映射:放特定的组
- 将Cache分为不同的组,组间采用直接映射,组内采用全相联映射
- 标记 Cache组号 块内地址
- 访存过程:先找到对应的Cache组,将对应组中的每个标记与主存地址的高位比较,若相等且有效位为1就命中。
2、Cache中的替换算法
- 随机算法:随机决定替换的Cache。
- 先进先出算法:替换最早调入的。
- 近期最少使用算法:替换近期最久没有访问过的,用计数器记录每个块多久没被访问。
- 最不经常使用算法:替换一段时间内访问次数最少的,用计数器记录每个块被访问过几次。
3、Cache写策略
- 写命中:
- 全写法:对数据写命中后,把数据同时写入Cache和主存
- 写回法:写命中后,只修改Cache内容,被换出时才写回主存。
- 写不命中:
- 写分配法:加载主存中的块到Cache中,然后更新Cache块
- 非写分配法:只写入主存,不进行调块
写回法与写分配法搭配;全写法与非写分配法搭配
3.7、虚拟存储器
将主存或辅存的地址空间统一编址称为虚地址,主存地址空间是实地址。
页式虚拟存储器:
- 虚页号 + 页内地址
- 虚拟地址转化为物理地址:页表基址寄存器得到页表基址,结合虚页号在页表中找到对应的实页号,实页号和页内地址一起组成物理地址。
块表TLB:
- 根据局部性原理,将一些经常访问的页放入高速缓冲器构成快表,
段式虚拟存储器:
- 按照程序的逻辑结构划分
- 段号 + 段内地址
- 根据段号和段表基址得到对应的段表行,从段表中读出该段的起始地址,与段内地址相加得到实地址。
段页式虚拟存储器:
- 段号 + 段内页号 + 页内地址
- 根据段号和段表基址得到段表地址,从段表中取出页表起始地址,结合段内页号得到页表地址,从页表中读出实页号,与页内地址组成实地址。
3.8、虚拟存储器与Cache
相同:
- 为了提高系统性能
- 以块作为数据传输单位
- 按照局部性原理,将活跃的数据放在高速部件中。
不同:
- Cache主要解决系统速度问题,虚拟存储器主要解决容量问题
- Cache全部由硬件实现,是硬件存储器;虚拟存储器由操作系统和硬件共同实现,是逻辑上的存储器
- Cache硬件,因此对所有程序员透明;虚拟存储器对应用程序员透明,对系统程序员不透明。
第四章:指令系统
4.1、指令格式
结构:
- 操作码 + 地址码
- 执行什么功能? 被操作信息的地址。
长度分类:
- 单字长指令
- 双字长指令
- 半字长指令
操作数地址码数分类:
- 零地址指令
- 一地址指令
- 二地址指令
- 三地址指令
- 四地址指令
定长操作码
- 简化硬件设计,提高指令译码和识别速度
**扩展操作码指令格式:**操作码位数不固定
-
**目的:**在指令字长有限的前提下,保持比较丰富的指令种类,
-
增加了指令译码和分析的难度,硬件设计变复杂。
-
**tip:**短码不能是长码的前缀
4.2、寻址方式
指令寻址
- 顺序寻址: PC + 1
- 跳跃寻址:转移类指令
数据寻址 (操作码 + 寻址特征 + 形式地址A)
- 隐含寻址:在指令中隐含操作数地址规定累加器作为操作数地址,操作数隐含在ACC中,最后又被写回ACC
- 立即数寻址:地址字段给出的不是操作数地址,而是操作数本身
- 直接寻址:指令字中的形式地址就是真实地址
- 间接寻址:指令字中的形式地址是存储信息的地址(类似于套娃)
- 寄存器寻址:指令字给出操作数所在的寄存器编号
- 寄存器间接寻址:操作数给出寄存器编号,寄存器中给出操作数所在主存单元的地址
- 相对寻址:PC的内容加上形式地址形成操作数的有效地址。
- 基址寻址:基址寄存器加上形式地址形成操作数有效地址
- 变址寻址:变址寄存器加上形式地址。。。
- 堆栈寻址:
- 堆栈是存储区或寄存器组中一块按先进先出原则管理的存储区
- 硬堆栈:寄存器够成的堆栈
- 软堆栈:主存划分出的区域
- 大部分指令表现为无操作数,操作数地址隐含使用SP。
4.3、CISC和RISC
CISC:复杂指令系统计算机 、 RISC:精简指令系统计算机
CISC | RISC | |
---|---|---|
控制方式 | 微程序控制 | 组合逻辑控制,硬布线使用少 |
架构 | X86架构 | ARM架构 |
指令 | 指令复杂、庞大,指令数目多 | 指令简单、精简、指令数目少 |
指令流水线 | 可以实现 | 必须实现 |
特点 | 有利于编译程序代码优化 |
第五章:中央处理器
5.1、CPU的功能和基本结构
功能
- 指令控制、操作控制…
结构
- 运算器:
- ALU、ACC、PSW、…
- 控制器:
- PC、IR、MAR、MDR…
5.2、指令执行过程
取址周期
- 根据PC的内容从主存中取出指令代码并放在IR中
间址周期
- 取出操作数的有效地址
执行周期
- 执行指令
中断周期
- 处理中断请求
5.3、数据通路
**概念:**数据在功能部件之间传送的路径
功能:实现CPU内部的运算器和寄存器之间的数据交换。
基本结构:
- CPU内部单总线方式
- CP内部三总线方式
- 专用数据通路方式
数据传送:
- 寄存器之间
- 主存与CPU之间
5.4、控制器
**结构:**PC、IR、MAR、MDR、指令译码器
**功能:**取指令,对指令译码,指挥并控制CPU、主存、输入输出设备之间的数据流动
硬布线控制器
- 根据指令要求、当前时序、以及外部和内部的状态产生一系列微操作控制信号。
- 由复杂的组合逻辑门电路和一些触发器构成,因此又称为组合逻辑控制器。
微程序控制器
采用逻辑存储实现,也就是把微操作信号代码化,使每条机器指令转化成为一段微程序并存入一个专门的存储器(控制存储器)中,微操作控制信号由微指令产生。
设计思想:将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令;微程序存放在控制存储器中,用寻址机器指令的方法来寻址。
基本概念
- 微命令与微操作:微命令是微操作的控制信号,微操作是微命令的执行过程
- …
硬布线控制器 | 微程序控制器 | |
---|---|---|
工作原理 | 组合逻辑电路根据当前指令码、状态和时序产生微操作控制信号 | 微操作信号以微程序的形式存放在控制存储器中,执行指令时读出 |
执行速度 | 快 | 慢 |
应用场合 | RISC(ARM架构) | CISC(x86架构) |
易扩充性 | 不易扩充 | 易扩充修改 |
5.5、指令流水线
特点:
- 一个任务分解成多个任务,并依靠多个功能部件并行工作来缩短程序执行时间。
- 每个功能部件后要有一个锁存器,保存本流水段的结果
- 流水线各功能段的时间应尽量相等
影响流水线的因素:
- 结构相关:
- 同一时刻争抢同一资源
- 解决:冲突的指令之间插入暂停周期
- 数据相关:
- 一个指令的执行要等待前一个指令的结果;写后读
- 解决:1、对相应指令进行阻塞 2、数据旁路:直接把前一条指令的计算结果作为输入
- 控制相关:
- 出现转移指令或者其他改变PC值的指令造成断流
- 分支预测,尽早生成转移目标地址、…
第六章:总线
早期大多采用分散连接,不易实现增减外部设备,为了更好解决IO设备和主机之间连接的灵活性,从分散连接发展为总线连接。
6.1、概述
分类:
- 片内总线
- 芯片内部,CPU内部寄存器与寄存器之间,寄存器与ALU之间的公共连接线
- 系统总线
- 各个功能部件之间(CPU、主存、外设)
- 数据总线、地址总线、控制总线
- 通信总线
- 计算机系统之间或与其他系统之间
- 也被称为“外部总线”
6.2、总线仲裁
如何解决设备争用总线的问题 ? -----》总线仲裁
集中仲裁方式
1、链式查询方式
- 主设备发出总线请求信号
- 由总线控制器判优,仲裁逻辑按一定优先等级确定谁使用总线,发出请求响应
- 主设备开始传送数据
2、计数器定时查询方式
- 总线控制器收到总线请求信号时,计数器开始计数
- 计数值通过设备地址线发向各个设备,计数器的数值与设备地址一致时,该设备获得总线控制权
3、独立请求方式
- 需要利用排队器
- 设备发送总线请求,总线请求信号在总线控制器中排队
- 总线控制器按照一定的优先次序决定哪个设备获得总线使用权。
分布仲裁方式:
不需要中央仲裁器,每个潜在主模块都有自己的仲裁号和仲裁器,然后进行仲裁号比较,获胜者仲裁号保存在仲裁总线。
6.3、总线操作和定时
总线传输
- 申请分配阶段
- 寻址阶段
- 传输阶段
- 结束阶段
传输方式:
-
同步定时传输
- 采用统一的时钟信号协调发送方和接收方的传送定时关系
-
异步定时传输
- 没有统一的时钟信号,完全按照传送双方相互制约的握手信号实现控制
-
半同步通信
- 同步和异步相结合
-
分离式通信
- 充分发挥系统总线的潜力,各模块准备数据时不占用总线,总线利用率提高
第七章:输入输出系统
磁盘阵列
- RAID指将多个物理磁盘组成一个独立的逻辑磁盘,数据在多个物理盘上交叉存储,并行访问,具有更好的存储性能、可靠性、安全性
RAID分级:
- RAID0:无冗余无校验磁盘阵列,没有备份,没有容错能力,提升了读写速度
- RAID1:镜像磁盘阵列,有备份,有容错
- …