计算机的总线
总线的概述
举个栗子:
USB-> Universal Serial Bus(通用串行总线)
- 提供了对外连接的接口
- 不同设备可以通过USB接口进行连接
- 连接的标准,促使外围设备接口的统一
总线除了上面的USB,还有PCI总线,ISA总线,THunderbolt总线等等
在没有总线时候,每个设备之间要互相连接,非常复杂
出现总线之后:
总线的分类
片内总线
高集成度芯片内部的信息传输线
- 芯片内部的总线
- 寄存器与寄存器之间
- 寄存器与控制器、运算器之间
系统总线
CPU、主内存、IO设备、各组件之间的信息传输线
数据总线
一般与CPU位数相同(32位,64位)
- 双向传输各个部件的数据信息
- 数据总线的位数(总线宽度)是数据总线的重要参数
地址总线
地址总线位数=n,寻址范围:0~$2^n$
- 指定源数据或目的数据在内存中的地址
- 地址总线的位数与存储单元有关
控制总线
- 控制总线是用来发出各种控制信号的传输线
控制信号经由控制总线从一个组件发给另外一个组件
- 比如从CPU发送到键盘
- 控制总线可以监视不同组件之间的状态(就绪/未就绪)
总线的仲裁
仲裁就是为了解决不同设备使用总线的先后冲突问题
我们有以下几种方法:
链式查询
假设设备2需要使用总线,就像仲裁控制器发送请求,得到请求后,会先发给设备1,看他用不用,他不用,就到接下来给设备2,发现设备2使用。同理,设备1和2同时发送,设备1先获取资格。
好处: 电路复杂度低,仲裁方式简单(串联的方式)
坏处: 优先级低的设备难以获得总线使用权
计时器定时查询
- 仲裁控制器对设备编号并使用计数器累计计数
- 接收到仲裁信号后,往所有设备发出计数值
- 计数值与设备编号一致则获得总线使用权
设备3要使用,顺着仲裁控制线请求,控制器收到后同时给3个设备发1,设备1没有使用,继续+1,设备2没有使用,继续+1,设备3使用,获得总线的使用权,(每次+1,都给这几个设备发送)
独立请求
- 每个设备均有总线独立连接仲裁器
- 设备可单独向仲裁器发送请求和接收请求
- 当同时收到多个请求信号,仲裁器有权按优先级分配使用权
好处:响应速度快,优先顺序可动态改变
坏处:设备连线多,总线控制复杂
计算机的输入输出设备
常见的输入输出设备
字符输入设备
键盘
薄膜键盘
机械键盘
黑轴
红轴
青轴
茶轴
图像输入设备
鼠标
数位板
扫描仪
图像输出设备
显示器
打印机
投影仪
输入输出接口的通用设计
数据线
是I/O设备与主机之间进行数据交换的传送线
单向传输数据线
双向传输数据线
状态线
- IO设备状态向主机报告的信号线
- 查询设备是否已经正常连接并就绪
- 查询设备是否已经被占用
命令线
- CPU向设备发送命令的信号线
- 发送读写信号
- 发送启动停止信号
设备选择线
- 主机选择l/O设备进行操作的信号线
- 对连在总线上的设备进行选择
例如对U盘进行操作
CPU与IO设备的通信
CPU速度与IO设备速度不一致
程序中断
提供低速设备通知CPU的一种异步的方式
CPU可以高速运转同时兼顾低速设备的响应
- 当外围IO设备就绪时,向CPU发出中断信号
- CPU有专门的电路响应中断信号
注意:响应中断不一定是及时的。
DMA(直接存储器访问)
DMA直接连接主存与lO设备
DMA工作时不需要CPU的参与
当主存与IO设备交换信息时,不需要中断CPU,可以提高CPU的效率
硬盘,显卡都使用
计算机存储器
存储器的分类
按存储介质分类:
半导体存储器
内存,U盘,固态硬盘
磁存储器
磁带,磁盘
_
按存取方式分类:
随机存储器(RAM)
随机读取
与位置无关
串行存储器
与位置有关
按顺序查找
只读存储器(ROM)
只读不写
存储器的层次结构
读写速度↑,存储容量↑,价格↓
容量+价格 => 位价:每比特位价格
容量从上到下增加
主存是上面提到的RAM与ROM
缓存-主存层次
原理:局部性原理
实现:在CPU与主存之间增加一层速度快(容量小)的Cache
目的:解决主存速度不足的问题
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
主存-辅存层次
原理:局部性原理
实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)
目的:解决主存容量不足的问题
你有20G游戏,但是只有8G主存,根据局部性原理,把游戏当前需要的数据放在主存里,不需要的放在辅存里
主存储器
就是内存
- RAM(随机存取存储器:Random Access Memory
- RAM通过电容存储数据,必须隔一段时间刷新一次
- 如果掉电,那么一段时间后将丢失所有数据
32位系统,$2^(32)$=4GB
64位系统,$2^(64)$=$2^(34)$GB
辅助存储器
磁盘
- 表面是可磁化的硬磁特性材料
- 移动磁头径向运动读取磁道信息
磁盘调度算法
我们举下面的例子,看看磁道是怎么移动的。
先来先服务算法
按顺序访问进程的磁道读写需求
1->4->2->3->1->5
最短寻道时间优先
与磁头当前位置有关
优先访问离磁头最近的磁道
4->5->3->2->1->1
4->3->2->1->1->5
扫描算法(电梯算法)
每次只往一个方向移动
到达一个方向需要服务的尽头再反方向移动
4->3->2->1->1->5
循环扫描算法
只能往一个方向读取
4->5->1->1->2->3
计算机的高速缓存
工作原理
先介绍以下概念:
字:是指存放在一个存储单元中的二进制代码组合
字块:存储在连续的存储单元中而被看作是一个单元的一组字
一个字有32位
一个字块共B个字
主存共M个字块
$B*M$=主存总字数
$B*M*32$=主存总容量(bits)
字的地址包含两个部分
前m位指定字块的地址
后b位指定字在字块中的地址
我们有$2^m=M$ $2^b=B$
因为m是字块的地址,这么多的m位,共组成了M个字块,b是字在字块里的地址,那么一个字块,就有 $2^b=B$个字。
将主存对比缓存,我们发现:
- 存储的逻辑结构类似
- 缓存的容量较小
- 缓存的速度更快
- 缓存就是主存某些字块的复制
一个字有32位
一个字块共B个字
缓存共C个字块
CPU与缓存的关系:
- CPU需要的数据在缓存里
- CPU需要的数据不在缓存里
不在缓存的数据需要去主存拿
如何衡量CPU在缓存取成功的几率呢?
就有了命中率
访问主存次数:Nm
访问Cache次数:Nc
命中率$h=Nc/Nc+Nm$
工作原理:
- 命中率是衡量缓存的重要性能指标
- 理论上CPU每次都能从高速缓存取数据的时候,命中率为1
除了命中率,还有访问效率
针对命中率和访问效率,为了他们更高,所以需要性能良好的缓存替换策略
高速缓存替换策略
当高速缓存里没有数据,就需要从主存载入所需数据
随机算法
随机选取
先进先出算法(FIFO)
把高速缓存看做是一个先进先出的队列
优先替换最先进入队列的字块
最不经常使用算法(LFU)
优先淘汰最不经常使用的字块
需要额外的空间记录字块的使用频率
使用频率?访问一次就加1
最近最少使用算法(LRU)
优先淘汰一段时间内没有使用的字块
有多种实现方法,一般使用双向链表
把当前访问节点置于链表前面(保证链表头部节点是最近使用的)
计算机的指令系统
机器指令的形式
组成部分:操作码和地址码
|操作码字段|地址码字段|
操作码
- 操作码指明指令所要完成的操作
- 操作码的位数反映了机器的操作种类
地址码
- 地址码直接给出操作数或者操作数的地址(指定数据的地址,使得cpu可以运算)
- 分三地址指令、二地址指令和一地址指令
三地址指令
addr3通常是存储addr1和addr2的运算结果的
(addr1) OP (addr2) -> addr3
二地址指令
(addr1) OP (addr2) -> (addr1)或(addr2)
结果存储addr1或addr2
一地址指令
(addr1)OP->(addr1) 自己对自己操作
(addr1)OP(ACC) -> (addr1) 自增行为
零地址指令
- 在机器指令中无地址码
- 空操作、停机操作、中断返回操作等
机器指令的操作类型
数据传输
- 寄存器之间、寄存器与存储单元、存储单元之间传送
- 数据读写、交换地址数据、清零置一等操作
算术逻辑操作
- 操作数之间的加减乘除运算
- 操作数的与或非等逻辑位运算
移位操作
- 数据左移(乘2)、数据右移(除2)
- 完成数据在算术逻辑单元的必要操作
控制指令
等待指令、停机指令、空操作指令、中断指令等
机器指令的寻址方式
指令寻址
顺序寻址、跳跃寻址
顺序寻址:正常执行,从101开始
跳跃寻址:到105这又跳跃到102
数据寻址
立即寻址
- 指令直接获得操作数
- 无需访问存储器
比如说这个6直接放在操作数里
直接寻址
- 直接给出操作数在主存的地址
- 寻找操作数简单,无需计算数据地址
间接寻址
指令地址码给出的是操作数地址的地址
需要访问一次或多次主存来获取操作数
计算机的控制器
控制器是协调和控制计算机运行的。
程序计数器
- 程序计数器用来存储下一条指令的地址
- 循环从程序计数器中拿出指令
- 当指令被拿出时,指向下一条指令
时序发生器
- 电气工程领域,用于发送时序脉冲
- CPU依据不同的时序脉冲有节奏的进行工作
指令译码器
- 指令译码器是控制器的主要部件之一
- 计算机指令由操作码和地址码组成
- 翻译操作码对应的操作以及控制传输地址码对应的数据
指令寄存器
- 指令寄存器也是控制器的主要部件之一
- 从主存或高速缓存取计算机指令
主存地址寄存器
保存当前CPU正要访问的内存单元的地址
使用地址总线与主存进行通信。
主存数据寄存器
保存当前CPU正要读或写的主存数据
使用数据总线与主存进行通信。
通用寄存器
- 用于暂时存放或传送数据或指令
- 可保存ALU的运算中间结果
- 容量比一-般专用寄存器要大
计算机的运算器
运算器是用来进行数据运算加工的
数据缓冲器
- 分为输入缓冲和输出缓冲
- 输入缓冲暂时存放外设送过来的数据
- 输出缓冲暂时存放送往外设的数据
ALU
- ALU: 算术逻辑单元,是运算器的主要组成
- 常见的位运算(左右移、与或非等)
- 算术运算(加减乘除等)
注:A,B是输入,F是输出,K是n个控制器
状态字寄存器
- 存放运算状态(条件码、进位、溢出、结果正负等)
- 存放运算控制信息(调试跟踪标记位、允许中断位等)
通用寄存器
- 用于暂时存放或传送数据或指令
- 可保存ALU的运算 中间结果
- 容量比一般专用寄存器要大
计算机指令的执行过程
指令执行过程
取指令和分析指令,是CPU在工作,执行指令是运算器在工作,这说明运算器和控制器不能同时工作,导致CPU的综合利用率并不高
CPU的流水线设计
- 类似工厂的装配线
- 工厂的装配线使得多个产品可以同时被加工
- 在同一个时刻,不同产品均位于不同的加工阶段
变为