第二章 计算机组成原理之组成篇
计算机的总线
总线的概述
USB = Universal Serial Bus,即通用串行总线,提供了对外连接的接口,不同设备可以通过USB接口进行连接。其连接的标准,促使外围设备接口的统一。
以及还有其他的总线,PCI总线、ISA总线、Thunderbolt总线(苹果电脑的)等。总线解决了不同设备之间的通信问题。
总线可以分为片内总线和系统总线。
片内总线就是芯片内部的总线,可以连接寄存器和寄存器以及寄存器和控制器、运算器之间等,总而言之,片内总线就是高集成度芯片内部的信息传输线。
系统总线可以分为数据总线、地址总线和控制总线三类。
数据总线一般和CPU的位数相同(一般为32或64位),可以双向传输各个部件的数据信息,数据总线的位数(总线宽度)是数据总线的重要参数。
地址总线指定源数据或目的数据在内存中的地址,地址总线的位数与存储单元有关。
控制总线是用来发出各种控制信号的传输线,控制信号经由控制总线从一个组件发给另一个组件。控制总线可以监视不同组件之间的状态(就绪/未就绪)。
总线的仲裁
总线的仲裁是为了解决总线使用权的冲突问题。总线的仲裁方法有链式查询、计时器定时查询和独立请求。
链式查询
例如设备2向仲裁控制器发出使用请求,仲裁控制器会判断设备1是否需要使用总线,如果不需要则允许设备2使用。
链式查询的好处是电路复杂度低,仲裁方式简单,但坏处是优先级低的设备难以获得总线使用权,且对于电路故障敏感。
计时器定时查询
仲裁控制器对设备编号并使用计数器累计计数,接收到仲裁信号后,往所有设备发出计数值,计数值与编号一致则获得总线使用权。
独立请求
每个设备均有总线独立连接仲裁器,设备可单独向仲裁器发送请求和接收请求,当同时收到多个请求信号,仲裁器有权按优先级分配使用权。
好处是响应速度快,优先顺序可动态改变,但缺点是设备连线多,总线控制复杂。
常见的输入输出设备
字符输入设备 —— 键盘
键盘可分为薄膜键盘、机械键盘和电容键盘。
薄膜键盘内部是有一个有弹性的薄膜连接起来的。
机械键盘每一个按键都是有一个独立的轴。按照轴的段落感、声音、压力和键程,可以分为黑轴、红轴、青轴和茶轴。
电容键盘全称无接点静电电容式键盘(Capacitive Keyboard)此类型键盘少见且昂贵,特色是你拆开也会看到一片绿绿的电路板,上头有电路,但按键上并没有任何机械式元件"焊"在对应的电路版上。触感用橡胶、弹簧等创造。switch的开与关靠静电容量感应来决定,因此要高技术力才能作的精准,少见。
输入输出接口的通用设计
接口主要由数据线、状态线、命令线和设备选择线组成。
数据线是I/O设备与主机之间进行数据交换的传送线。可分为单向传输数据线和双向传输数据线。
状态线是IO设备状态向主机报告的信号线,可查询设备是否已经正常连接并就绪,并查询设备是否已经被占用。
命令线是用于CPU向设备发送命令的信号线,如发送读写信号或发送启动停止信号。
设备选择线是主机选择I/O设备进行操作的信号线,对连在总线上的设备进行选择。
CPU与IO设备的通信方法
程序中断
当外围IO设备就绪时,向CPU发出中断信号,CPU中有专门的电路响应中断信号。其实就是提供低速设备通知CPU的一种异步的方式。因为有了程序中断,CPU可以在高速运转的同时兼顾低速设备的响应。但不断打断CPU不是一个好的方法,会降低CPU的效率。
DMA(直接存储器访问)
DMA直接连接主存与IO设备,DMA工作时不需要CPU的参与。在硬盘和外置显卡等地方都有DMA。
计算机存储器概览
存储器的分配
存储器按存储介质分类可分为半导体存储器和磁存储器。内存、U盘和固态硬盘都是属于半导体存储器,磁带和磁盘等属于磁存储器。
存储器按存取方式分类可分为随机存储器(RAM)、串行存储器和只读存储器(ROM)。BIOS(Basic Input Output System)和手机固件(固化的软件)等都是存储在只读存储器中。
存储器的层次结构
存储器的优劣判断标准可以是读写速度、存储容量和价格。其中与存储容量和价格有关的一个概念是位价,即每比特位的价格。
存储器的层次结构可划分为缓存、主存和辅存。缓存速度快位价高,主存速度适中、位价适中,辅存速度慢、位价低。
缓存-主存层次
原理:局部性原理。局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。因为有局部性原理的存在,所以缓存-主存层次才得以生效并高效的运行在计算机之中。
实现:在CPU和主存之间增加一层速度快容量小的高速缓存(Cache)
目的:解决主存速度不足的问题。
主存-辅存层次
原理:局部性原理
实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)
目的:解决主存容量不足的问题
计算机的主存储器与辅助存储器
主存储器 —— 内存
RAM(随机存取存储器),RAM通过电容存储数据,必须每隔一段时间刷新一次,如果断电,那么一段时间后将丢失所有数据。
【图 主存结构示意图】
【图 主存与CPU进行交互的示意图】
主存即内存与操作系统的位数有一定的关系
32位系统最多支持 232 = 4 × 230 = 4GB 的内存
所以对于32位系统,即便装再大的内存也是没用的,寻址范围只有4GB的大小。
64位系统最多支持 264 = 234 × 230 = 234GB 的内存
辅助存储器 —— 磁盘
【图 磁盘示意图】
【图 磁盘平面示意图】
磁盘表面是可磁化的硬磁特性材料,移动磁头径向运动读取磁道信息。
磁盘的调度算法有先来先服务算法、最短寻道时间优先算法、扫描算法(电梯算法)和循环扫描算法等。
计算机的高速缓存
高速缓存是为了解决CPU与主存的速度不匹配的问题。
高速缓存的工作原理
字:是指存放在一个存储单元中的二进制代码组合
字块:存储在连续的存储单元中而被看作是一个单元的一组字
【图 字和字块概念的示意图】
字的地址包含两个部分,前m位指定字块的地址,后b位指定字在字块中的地址。
【图 字和字块概念例题】
缓存命中率是衡量缓存的重要性能指标,理论上CPU每次都能从高速缓存取数据的时候,命中率为1。但因为高速缓存的容量不及主存,且高速缓存的存储内容只是主存的部分复制,故该命中率基本不可能为1。设访问主存的次数为 Nm ,访问Cache的次数为 Nc ,那么缓存命中率 h = Nc / ( Nc + Nm )
除了缓存命中率,还有一个指标可以衡量缓存的性能即访问效率 e。设访问主存的时间为 tm ,访问缓存的时间为 tc ,那么访问Cache-主存系统的平均时间 ta = h tc + ( 1 - h ) tm ,访问效率 e = tc / ta
高速缓存的替换策略
为了让CPU运行的效率更高,我们希望让缓存命中率越高越好,即需要一个性能良好的缓存替换策略。
有四种基本的算法,即 随机算法 、 先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)。
先进先出算法(FIFO)
【图 先进先出算法示意图】
最不经常使用算法(LFU)
优先淘汰最不经常使用的字块,需要额外的空间记录字块的使用频率。
最近最少使用算法(LRU)
优先淘汰一段时间内没有使用的字块,有多种实现方法,一般使用双向链表,把当前访问节点置于链表前面(保证链表头部节点是最近使用的)。
计算机的指令系统
机器指令的形式
机器指令主要由两部分组成:操作码字段 、 地址码字段
【图 机器指令示意图】
操作码字段指明指令所要完成的操作
操作码字段的位数反映了机器的操作种类
地址码字段直接给出操作数或者操作数的地址
按照地址码字段的不同可以分为三地址指令、二地址指令、一地址指令和零地址指令。
三地址指令
三地址指令一般是把第一个地址和第二个地址的操作结果给第三个地址,即(addr1)OP(addr2)→(addr3)
【图 三地址指令示意图】
二地址指令
二地址指令一般是把第一个地址和第二个地址的操作结果给第一个地址或第二个地址,即 (addr1)OP(addr2)→(addr1)或(addr2)
【图 二地址指令示意图】
一地址指令
一地址指令一般就是把操作该地址的结果给该地址,即 (addr1)OP→(addr1)
【一地址指令示意图】
零地址指令
在机器指令中无地址码,一般是空操作、停机操作、中断返回操作等。
机器指令的操作类型
数据传输类型的操作可以发生在寄存器之间、寄存器与存储单元、存储单元之间。数据传输类型的操作包括数据读写、交换地址数据、清零置一等。
算术逻辑类型的操作可以是操作数之间的加减乘除运算、操作数的与或非等逻辑位运算。
移位类型的操作可以是数据位的左右移动,完成数据在算术逻辑单元的必要操作。
控制指令类型的操作可以是等待指令、停机指令、空操作指令和中断指令等。
机器指令的寻址方式
指令寻址主要有两种方法,即 顺序寻址 和 跳跃寻址。
数据寻址主要有三种方法,即 立即寻址 、 直接寻址 和 间接寻址。
立即寻址指令可直接获得操作数,即指令里面包含了操作数,无需访问存储器
直接寻址,直接给出操作数在主存的地址,寻找操作数简单,无需计算数据地址。
间接寻址,指令地址码给出的是操作数地址的地址,需要访问一次或多次主存来获取操作数。
寻址方式 | 优点 | 缺点 |
---|---|---|
立即寻址 | 速度快 | 地址码位数限制操作数表示范围 |
直接寻址 | 寻找操作数简单 | 地址码位数限制操作数寻址范围 |
间接寻址 | 操作数寻址范围大 | 速度较慢 |
计算机的控制器
控制器是协调和控制计算机运行的
【图 计算机的控制器结构示意图】
程序计数器
程序计数器用来存储下一条指令的地址,当CPU工作时会循环不断地从程序计数器中拿出指令,当指令被拿出时,指向下一条指令。
时序发生器
电气工程领域,用于发送时序脉冲,CPU依据不同的时序脉冲有节奏的进行工作。
指令译码器
指令译码器是控制器的主要部件之一,计算机指令由操作码和地址码组成。翻译操作码对应的操作以及控制传输地址码对应的数据。
指令寄存器
从主存或高速缓存取计算机指令
主存地址寄存器
保存当前CPU正要访问的内存单元的地址
主存数据寄存器
保存当前CPU正要读或写的主存数据
通用寄存器
用于暂时存放或传送数据或指令,可保存ALU(算数逻辑单元)的运算中间结果,容量比一般寄存器大。
计算机的运算器
运算器是用来进行数据运算加工的
【图 计算机的运算器示意图】
数据缓冲器
数据缓冲器分为输入缓冲和输出缓冲,输入缓冲暂时存放外设送过来的数据,输出缓冲暂时存放送外设的数据
ALU(算数逻辑单元)
可以完成常见的位运算和算术运算等。
状态字寄存器
存放运算状态(条件码、进位、溢出、结果正负等),存放运算控制信息(调试跟踪标记位、允许中断位等)
通用寄存器
用于暂时存放或传输数据或指令,可保存ALU的运算中间结果,容量比一般寄存器大。
计算机指令的执行过程
指令执行过程
取指令 → 分析指令 → 执行指令
取指令:从缓存中取出指令,把指令送到程序计数器
分析指令:将程序计数器中的指令地址取出交给指令译码器译码,发出控制信号,程序计数器+1以指向下一条指令
执行指令:装载数据到寄存器,ALU处理数据,记录运算状态,送出运算结果
【图 计算机指令的执行过程示意图1】
【图 计算机指令的执行过程示意图2】
指令的执行过程存在一个问题,取指令和分析指令主要由控制器工作,执行指令主要由运算器工作,导致控制器和运算器无法同时工作,导致CPU的综合利用率不高。
CPU的流水线设计
CPU的流水线设计类似工厂的装配线,工厂的装配线使得多个产品可以同时被加工,在同一时刻,不同产品均位于不同的加工阶段。
【图 没有应用CPU的流水线设计的指令执行示意图】
【图 应用了CPU的流水线设计的指令执行的示意图】
串行执行m条指令所用的时间: T1 = 3t × m
流水线执行m条指令所用的时间:T2 = t × ( m +2 )
H = T2 / T1 = 1/3 + 1/(3m) ≈ 1/3