导学
- 这部分从具体的硬件组成入手,了解计算机的工作流程:
计算机总线
- 总线对于计算机类似于人体的血管,在各个设备和组件之间传输数据
- 统一说法:设备包括不同计算机、输入输出设备(IO)、内部组件,具体是哪部分还要看场景
概述
- 总线的作用:解决不同设备之间的通信问题
- 可以分两类:外部总线和内部总线
- 外部总线:
- 包括PCI总线(外设插槽)、USB(通用串行总线)、ISA总线等
- USB是计算机对外连接的接口,不同的设备可以通过此接口连接,也就促使了外围接口的标准统一
- 内部总线:
- 片内总线:
- 芯片内部的总线(CPU)
- 寄存器之间、寄存器和控制运算器传输数据
- 系统总线
- 计算机各设备之间传递数据,包括数据、地址、控制总线
- 数据总线
- 双向传输各个部件的数据信息
- 总线位数(宽度):32位/64位;是关键参数
- 地址总线
- 存储器(内存)寻址
- 地址总线的位数与存储单元大小(例如32比特)有关,决定了寻址范围
- 控制总线
- 组件间发出各种控制信号(指令)
- 计算机各设备之间传递数据,包括数据、地址、控制总线
仲裁
- 解决不同设备之间争夺总线资源的问题
- 仲裁方法
- 链式查询:
- 所有设备通过一根请求线(BR)连接仲裁控制器,使用总线时发出申请
- 总线空闲时,允许线(BG)会链式查询设备,将总线分配给优先级最高的设备
- 总线分配后,会通过忙线(BS)将请求忙发送给总线,标志总线被占用
- 电路复杂度低,仲裁方式简单
- 缺点:优先级低(离控制器远)的设备难以获得使用权
- 计时器定时查询
- 仲裁控制器对设备编号,并使用计数器累计计数
- 接收到仲裁信号(申请)后,通过设备地址线往所有设备发出计数值
- 计数值与设备编号一致,则获得使用权
- 如图:经过几次查询,此时计数器为3,设备3发起申请时会获得使用权
- 注:计数从上一次的终点开始,优先级相等;计数从头开始,优先级同链式查询
- 独立请求
- 每个设备均有BR和BG总线独立连接仲裁器,可单独发送/接收信号
- 仲裁器按优先级分配使用权
- 优点:响应速度快,优先顺序可动态改变
- 缺点:连线多,控制复杂
- 小结一下:
- 注:“总线忙”信号的建立者是获得总线控制权的那个设备
- 链式查询:
输入输出设备
- 字符输入设备:键盘
- 图像输入设备:鼠标、数位板、扫描仪
- 图像输出设备:显示器、打印机、投影仪
- 当然,上面的并不重要,关键在于如何设计通用的输入输出接口?
- 是否已连接?
- 是否已启动?
- 如何向设备发送数据?
- 如何读取数据?
- 设备是否被占用?
- 基于上面的问题,现今的设计方案如下:
- 布线:数据线、状态线、命令线、设备选择线
- 数据线:IO设备与主机交换数据
- 状态线:IO状态向主机报告(连接和占用情况)
- 命令线:CPU向设备发送命令(读写、启停)
- 选择线:主机选择IO设备(选择地址)
- CPU与IO的通信方法
- 程序中断:外围IO设备就绪时,向CPU发出中断信号,CPU有专门电路响应
- DMA(直接存储器访问):
- 直接连接内存与IO设备、存储器之间,批量传输数据
- 工作时无需CPU参与控制
- 当然,需要DMA提出总线接管请求和发出结束信号(CPU让出总线)
- 目的是不变的:解决CPU和IO速度不匹配的问题,尽量提高CPU效率
- 程序中断:外围IO设备就绪时,向CPU发出中断信号,CPU有专门电路响应
存储器概览
- 存储器的分类和结构
分类
- 按存储介质分:半导体存储器和磁存储器
- 按存储方式分类:RAM(随机存储器)、ROM(只读)、串行存储器
层次结构
- 一般考虑如下因素:
- 读写速度:例如5400转/分钟(r/min)
- 存储容量:例如2T
- 价格:位价(每比特位价格)
- 这些直接影响着存储结构的设计
- 存储器层次结构:
- 也可表示为:缓存-主存和主存-辅存层次
- 缓存是为了解决CPU与内存(主存)速度不匹配的问题
- 辅存是为了解决主存容量不足的问题(虚拟内存),主要是磁盘
- 局部性原理
- CPU访问存储器时,无论是存取指令还是数据,所访问的存储单元都趋于聚集在一个较小的连续区域中
主存
- 主存一般指内存,由RAM(Random Access Memory)组成
- RAM通过电容存储数据,每隔一段时间必须刷新一次
- 如果掉电,所有数据会丢失
- 主存的组成、数据的读写通路如下图:
- 不同操作系统的差别:
辅存
- 主要是磁盘,实物和示意图:
- 表面是可磁化的硬磁特性材料
- 磁头径向运动读取信息
- 磁头的调度有特定的算法:
- 规定:最外层磁道编号为1,向内递增
- 先来先服务算法:
- 顾名思义,按照进程的访问顺序依次读取磁道
- 最短寻道时间优先算法:
- 每次找到距当前磁头最近的磁道
- 扫描算法(电梯算法):
- 磁头每次只往一个方向运动,到达尽头再反向移动
- 靠后的磁道先访问,不公平
- 循环扫描算法:
- 只往一个方向运动(外向内),到达最内层后回到最外层,再开始访问
高速缓存
- 基本概念
- 字:存放在一个存储单元中的二进制代码组合
- 字块:存储在连续存储单元中的一组字(一个单元)
- 字地址:前m位指定字块的地址,后b位指定字在字块中的地址;2m=M,2b=B
- 计组的一些内容有很细节的概念,不理清楚越学越糊涂;还要注意问题的一般场景,例如我们一般先知道MB再求mb,不要无端的给自己找麻烦
- 上面是主存的划分,缓存同理,用C代表其块数;和主存M的主要区别是C很小,B保持一致是为了方便以块为单位缓存
- 问题场景
- CPU需要的数据在缓存
- CPU需要的数据不在缓存(不在缓存的要去主存拿)
- 工作原理
- 命中率:取一波数据时访问Cache的次数(Nc)和总次数(Nc+Nm)之比,定为h
- 访问主存时间(tm)和访问缓存时间(tc)
- 访问Cache-主存系统平均时间:ta=htc+(1-h)tm
- 看个例子:
- 访问效率:
- 平均访问时间:
- 为了尽可能的使用缓存,需要合适的缓存替换策略
- 先进先出算法(FIFO)
- 优先替换掉最先进入缓存字块
- 最不经常使用算法(LFU)
- 淘汰掉最不经常使用的字块(计数器)
- 因此需要额外空间记录字块使用频率
- 最近最少使用算法(LRU)
- 优先淘汰一段时间内没有使用的字块
- 关键在实现方法,得到最近最少使用块
- 一般使用双向链表,每次新插入数据到链表的头部,每次缓存命中(即数据被访问),则将数据移到链表头部;那么当链表满的时候,就将链表尾部的数据丢弃
- 常借助甘特图推算
- 先进先出算法(FIFO)
指令系统
- 机器指令形式:操作码+地址码
- 操作码:指明指令所要完成的操作,操作码的位数决定了操作种类数
- 地址码:给出操作数或操作数的地址,分三地址、二地址和一地址指令
- 还有零地址指令:无地址码,一般是空操作、停机操作、中断返回操作等
- 指令类型(操作码决定)
- 数据传输
- 寄存器之间、寄存器与存储单元之间、存储单元之间
- 数据读写、交换地址、清零置一等
- 算术逻辑
- 加减乘除、与非
- 移位操作
- 数据左移(x2)、右移(/2)
- 控制指令
- 中断、空操作、停机等
- 数据传输
- 指令寻址方式(是整个指令;也要区别指令和数据)
- 顺序寻址:按指令存放顺序依次执行
- 跳跃寻址:遇到JMP指令时
- 操作数寻址(地址码)
- 立即寻址:指令中带着操作数
- 直接寻址:直接给出操作数所在主存地址
- 简介寻址:地址码给出的是操作数地址的地址:
- 这部分常考,对比如下:
CPU控制器
- 控制器是协调和控制计算机运行的
- 程序计数器
- 存储下一条指令的地址
- 一般情况下,指令被拿出时,自动+1(这里的1是一个指令字长)
- 时序发生器
- 发送时序脉冲
- CPU依据不同的时序脉冲有节奏的工作
- 指令译码器
- 翻译操作码,转换成对应的控制信号
- 控制传输地址码对应的数据
- 这是机器指令—>微指令—>微操作的关键
- 指令寄存器
- 从主存或高速缓存取指令
- 主存地址寄存器
- 保存当前要访问的内存地址
- 主存数据寄存器
- 当前要读写的数据
- 通用寄存器
- 暂存指令和数据
- 保存ALU中间结果
- 容量比一般寄存器大
运算器
- 进行数据加工运算
- 数据缓冲器
- 输入缓冲暂存外设送来的数据
- 输出缓冲暂存送往外设的数据
- ALU(算术逻辑单元)
- 位运算(与或非、移位)
- 算术运算
- 这部分很重要(常考),后面的计算中还会介绍
- 状态字寄存器(PSW)
- 存放运算状态:条件码、进位、溢出、正负
- 存放运算控制信息:跟踪标记位、允许中断位
指令执行过程
- 包括三个步骤:取、分析、执行
- 取指令:指令和数据取出后放在缓存(不是缓冲)
- 分析指令:译码器分析指令发出控制信号(微操作)
- 执行指令:装载数据,ALU处理,记录运算状态,输出结果
- 为了让控制器和运算器同时工作,产生了**CPU流水线设计**
- 应用了时分复用思想,不用等当前指令结束,释放的控制器可分析下一条指令
- 应用了时分复用思想,不用等当前指令结束,释放的控制器可分析下一条指令
- 有时会考察计算流水线设计的时间性能
- 假设时间片为t,且认为三个阶段的耗时大致相同:
- 假设时间片为t,且认为三个阶段的耗时大致相同:
小结
- 这一篇从计算机的组成部件入手,主要了解了总线、存储器和指令的执行流程
- 有些具体的细节可以在熟悉整个工作流程之后再探究,提纲挈领很重要!
- 下一篇详细了解数据运算的基本知识