计算机组成原理
概述篇
计算机发展的四个阶段
-
电子管计算机
- 集成度小,空间占用大
- 功耗高,运行速度慢
- 操作复杂,更换程序需要接线
- 晶体管计算机
贝尔实验室科学家发现晶体管
- 集成度相对较高,空间占用相对小
- 功耗相对低,运行速度较快
- 操作相对简单,交互更加方便
- 集成电路(IC)计算机
计算机具备了进入千家万户的条件
该阶段出现操作系统的雏形,IBM推出的System/360
- 超大规模集成电路计算机
- 一个芯片集成了上百万的晶体管
- 速度更快,体积更小,价格更低
- 用途丰富:文本处理,表格处理,高交互游戏
微型计算机的发展历史
微型计算机从第三阶段开始
计算机的分类
- 超级计算机
- 功能最强,运算速度最快,存储容量最大的计算机
- 多用于国家高科技领域和尖端技术研究
- 单位是TFlop/s(每秒一万亿次浮点运算)
- 大型计算机
- 具有高性能,可处理大量数据与复杂的运算
- 在大型机市场领域,IBM占据着很大的份额
- COBOL编程语言(大型机中的编程语言,但不是绝对)
- 迷你计算机
- 也称小型机,普通服务器
- 不需要特殊的空调场所
- 具备不错的算力,可以完成较复杂的运算
- 工作站
- 高端的通用型微型计算机,提供比个人计算机更强大的性能
- 类似于普通台式电脑,体积较大,但性能强劲
- 个人计算机/微机/微型计算机
- 本质上讲,个人计算机与前面的分类无异
冯诺依曼体系
将程序指令和数据一起存储的计算机设计概念结构
- 必须有一个存储器
- 必须有一个控制器
- 必须有一个运算器
- 必须有输入设备
- 必须有输出设备
现代计算机都是冯诺依曼机
- 特点
- 能够把需要的程序和数据送至计算机中
- 能够长期记忆程序,数据,中间结果以及最终运算结果的能力
- 能偶具备算术,逻辑运算和数据传送等数据加工处理的能力
- 能够按照要求将处理结果输出给用户
- 冯诺依曼瓶颈
如图九可知,CPU和存储器是分开的,这样会导致一些问题;例如:冯诺依曼瓶颈,
CPU和存储器速率之间的问题无法调和,cpu经常空转等待数据传输
现代计算机的结构
现代计算机的结构以存储器为核心的结构
- 现代计算机在冯诺依曼体系结构基础上进行修改
- 主要为了解决CPU与存储设备之间的性能差异问题
存储器广义上说,包含磁带,硬盘等能存储信息的设备,但是此次只针对围绕CPU的更高速的设备(CPU寄存器,内存等)
程序翻译与解释
- 程序翻译
例如:C/C++ OC
- 程序解释
例如:js php python
- 计算机执行的指令都是L0
- 翻译过程生成新的L0程序,解释过程不生成新的L0程序
- 解释过程由L0编写的解释器去解释L1程序
- 翻译加解析
例如:java和C#
计算机的层次与编程语言
- 实际机器
- 硬件逻辑层
- 门,触发器等逻辑电路组成
- 属于电子工程的领域
- 微程序机器层
- 编程语言是微指令集
- 微指令所组成的微程序直接交由硬件执行
- 传统机器层
- 编程语言是CPU指令集(机器指令)
- 编程语言和硬件直接相关
- 不同架构的CPU使用不同的CPU指令集
一条机器指令对应一个微程序
一个微程序对应一组微指令
- 硬件逻辑层
- 虚拟机器
- 系统软件
- 操作系统层
- 向上提供了简易的操作界面
- 向下对接了指令系统,管理硬件资源
- 操作系统是位于软件和硬件之间的适配系统
- 汇编语言层
- 编程语言是汇编语言
- 汇编语言可以翻译成可直接执行的机器语言
- 完成翻译的过程的程序就是
汇编器
- 高级语言层
- 顾名思义,java,python,c等
- 操作系统层
- 应用软件
- 应用层
- word,qq等
- 应用层
- 系统软件
计算机的单位
-
容量单位
- 速度单位
- 网络速度
- 100M/S=100Mbps=100Mbit/s
- 100Mbit/s=(100/8)MB/s=12.5MB/s
- 存在字节到比特位的转换关系
- CPU频率
- CPU的速度一般体现为CPU的时钟频率
- CPU的时钟频率的单位一般是赫兹(Hz)
-
Hz其实就是秒分之一(每秒钟的周期性变动重复次数的计量)
- 网络速度
编码补充
- Unicode:统一码,万国码,单一码
- Unicode定义了世界通用的符号集,UTF-*实现了编码
- UTF-8以字节为单位对Unicode进行编码
- Unicode兼容全球
组成篇
计算机的总线和IO设备
总线
解决不同设备之间的通信问题
- 总线概述
- 提供了对外连接的接口
- 不同设备可以通过USB(通用串行总线)接口进行连接
- 连接的标准,促使外围设别接口的统一
- 常见总线
- USB
- PCI总线
- ISA总线
- Thunderbolt总线
- 总线分类
- 片内总线
- 芯片内部总线
- 寄存器与寄存器之间
- 寄存器与控制器、运算器、高速缓存、中断系统之间
- 高集成度芯片内部的信息传输线
- 系统总线(
CPU、主内存、IO设备、各组件之间的信息传输线
)- 数据总线(
一般与CPU位数相同,32/64位
)- 双向传输各个部件的数据信息
- 数据总线的位数(总线宽度)是数据总线的重要参数
- 32位代表一次可以传输32位4个字节的数据,64同理
- 地址总线(
地址总线位数=n,寻址范围:0-2的n次方
)- 指定源数据或目的数据在内存中的地址(寻址)
- 地址总线的位数与存储单元有关
- 控制总线
- 控制总线是用来发出各种控制信号的传输线
- 控制信号经由控制总线从一个组件发给另外一个组件
- 控制总线可以监视不同组件之间的状态(就绪/未就绪)
- 数据总线(
- 片内总线
总线的仲裁
为了解决总线使用权的冲突问题
,例如CPU硬盘都准备好了,但是分别使用哪些总线
-
仲裁方式
- 链式查询
- 好处:电路复杂度低,仲裁方式简单
- 坏处:优先级低的设备难以获得总线使用权(都申请的时候)
- 坏处:对电路故障敏感
- 链式查询
-
计时器定时查询
- 仲裁控制器对设备编号并使用计数器累计计数
- 接收到仲裁信号后,往所有设备发出计数值(累加过后的)
-
计数值与设备编号一致则获得总线使用权
-
独立请求
- 每个设备均有总线独立连接仲裁器
- 设备科单独向仲裁器发送请求和接收请求
- 当同时受到多个请求信号,仲裁器有权按优先级分配使用权
- 前面两种都是共用总线连接仲裁器
- 好处:响应速度快,优先顺序可动态改变
-
设备连接线,总线控制复杂
IO设备
-
常见的输入输出设备
- 字符输入设备
- 键盘
- 图形输入设备
- 鼠标
- 数位板
- 扫描仪
- 图像输出设备
- 显示器
- 打印机
- 投影仪
- 字符输入设备
-
输入输出接口的通用设计
- 数据线
- IO设备与主机之间进行数据交换的传送线
- 单向传输数据线
- 双向传输数据线
- 状态线
- IO设备状态向主机报告的信号线
- 查询设备是否已经正常连接并就绪
- 查询设备是否已经被占用
- 命令线
- CPU向设备发送命令的信号线
- 发送读写信号
- 发送启动停止信号
- 设备选择线
- 主机选择IO设备进行操作的信号线
- 对连接在总线上的设备进行选择(例如多U盘判断)
- 数据线
-
CPU与IO设备的通信(
CPU速度和IO设备速度不一致
)-
程序中断
- 当外围IO设备就绪时,向CPU发出中断信号
- CPU有专门的电路相应中断信号,完成IO操作之后继续进行之前工作
- 提供低速设备通知CPU的一种异步的方式
-
CPU可以高速运转同时兼顾低速设备的响应
-
DMA(直接存储器访问)
- DMA直接连接主存与IO设备
- DMA工作时不需要CPU的参与
-
一般硬盘和显卡中都有DMA设备
-
计算机的存储器
在CPU与主存之间增加一层速度快容量小的Cache,解决主存速度不足的问题
存储器的分类
- 按照存储介质分类
- 半导体存储器
- 内存
- U盘
- 固态硬盘
- 磁存储器
- 磁带
- 磁盘
- 半导体存储器
- 按照存取方式分类
- 随机存储器(RAM)
- 随机读取
- 与位置无关
- 串行存储器
- 与位置有关
- 按顺序查找
- 只读存储器(ROM)
- BIOS
- 只读不写(或者很少更改)
- 随机存储器(RAM)
-
存储器的层次结构
缓存:CPU内部寄存器和高速缓存
-
主存(RAM):一般指内存
- RAM通过电容存储数据,必须每隔一段时间刷新一次
- 如果掉电,那么一段时间后将丢失所有数据
-
和系统有关,32位系统中地址总线寻址范围(2的32次方)大约4GB
-
辅存:硬盘等
- 表面是可词话的硬磁特性材料
-
移动磁头径向运动读取磁道信息
- 辅存算法
- 先来先服务算法
- 会从1磁道到4磁道再到2....
- 最短寻道时间优先算法
- 与磁头当前位置有关系
- 优先访问离磁头最近的磁道
- 4,5/3因为相邻,此处加入当作5,3,2,1,1
- 扫描算法(电梯算法)
- 每次只往一个方向运动
- 到达一个方向需要服务的尽头再反方向移动
- 4,5,3,2,1/或者初始反向
- 循环扫描算法
- 4,5,1,1,2,3
- 可知,假如由外向内到5之后,或直接回到1,在重新来,相对更公平,某种程度上说只有单向移动
- 先来先服务算法
- 局部性原理
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中,这是层级结构划分的依据。例如:程序经常访问的内存,只需要把这段内存置换至缓存即可。
- 高速缓存
- 高速缓存的工作原理
- 字
- 是指存在放一个存储单元中的二进制代码组合
- 字的地址包含两个部分
- 前M位指定字块的地址
- 后b位指定字在字块中的地址
- 字块
- 存储在连续的存储单元中而被看作是一个单元的一组字
-
字和字块在主存和缓存都适用,只是容量大小的区分
- 字
- 高速缓存的工作原理
(
如图只是假设的位数说明,理解即可
)
- 命中率是衡量缓存的重要性能指标
- 理论上CPU每次都能从高速缓存取数据的时候,命中率为1
- 高速缓存的替换策略(`主存和高速缓存的替换`)
- 随机算法
- 先进先出算法(FIFO)
- 把高速缓存看作是一个先进先出的队列
- 优先替换最先进入队列的字块
- 最不经常使用算法(LFU)
- 优先淘汰最不经常使用的字块
- 需要额外的空间记录字块的使用频率
- 最近最少使用算法(LRU)
- 优先淘汰一段时间内没有使用的字块
- 有多种实现方法,一般使用双向链表
- 把当前访问节点置于链表前面(保证链表头部节点是最近使用的)
计算机的指令系统
- 机器指令主要由两部分组成:操作码、地址码
- 操作码指明所要完成的操作
- 操作码的位数反映了机器的操作种类
- 地址码直接给出操作数或者操作数的地址
-
分三地址指令,二地址指令和一地址指令
机器指令的操作类型
- 寄存器之间,寄存器与存储单元,存储单元之间传送
- 数据读写,交换地址数据,清零置一等操作
- 操作数之间的加减乘除运算
- 操作数的与或非等逻辑运算
- 数据左移,右移
- 完成数据在算术逻辑单元的必要操作
- 等待指令,停机指令,空操作指令,中断指令
机器指令的寻址方式
-
指令寻址
- 顺序寻址
-
跳跃寻址
例如105指令就是跳跃到102执行,其实就是跳跃寻址
-
数据寻址
- 立即寻址
- 速度快
- 地址码位数限制操作数表示范围
- 直接寻址
- 寻找操作数简单
- 地址码位数限制操作数表示范围
- 间接寻址
- 操作数寻址范围大
-
速度较慢
- 立即寻址
计算机CPU
计算机的控制器
程序计数器
- 程序计数器用来存储下一条指令的地址
- 循环从程序计数器中拿出指令
- 当指令被拿出时,指向下一条指令
时序发生器
- 电气工程领域,用于发送时序脉冲
- CPU依据不同的时序脉冲有节奏的进行工作
指令译码器
- 指令译码器是控制器的主要部件之一
- 计算机指令由操作码和地址码组成
- 翻译操作码对应的操作以及控制传输地址码对应的数据
指令寄存器
- 指令寄存器也是控制器的主要部件之一
- 从主存或高速缓存取计算机指令
主存地址寄存器
- 保存当前CPU正要访问的内存单元的地址
主存数据寄存器
- 保存当前CPU正要读或写的主存数据
通用寄存器
- 用于暂时存放或传送数据或指令
- 可保存ALU的运算中间结果
- 容量比一般专用寄存器要大
计算器的运算器
数据缓冲器
- 分为输入缓冲和输出缓冲
- 输入缓冲暂时存放外设送过来的数据
- 输出缓冲暂时存放送往外设的数据
ALU
- ALU:算术逻辑单元,是运算器的主要组成
- 常见的位运算
- 算术运算
状态字寄存器
- 存放运算状态(条件码、进位、溢出、结果正负等)
- 存放运算控制信息(调试跟踪标记位,允许中断位等)
通用寄存器
- 用于暂时存放或传送数据或指令
- 可保存ALU的运算中间结果
- 容量比一般专用寄存器要大
指令执行过程
graph LR
取指令-->分析指令
分析指令--> 执行指令
如上图可知,指令是顺序执行,控制器和计算器不能同时工作,CPU利用率低下,解决方案如下图 CPU的流水线设计
效率大概可以提升三倍
进制和浮点数
如上图可知,之所以产生补码是因为0表示有歧义,例如正0负0;还有减法运算复杂;而反码产生的原因是因为补码中计算也有减法;可以直接原码按位取反得到反码,然后+1得到补码,计算机存储的都是补码。