💻 计算机组成原理(PART D)
请注意,本文最近一次更新于:2022-07-25,文章内容可能已经不具有时效性,请谨慎参考
本文最后更新于:2022年7月25日星期一下午2点59分 +08:00
本系列的最后一篇文章了,就浅浅回顾一下我学到的东西吧。
序言
这学期已经结束了,虽然不想承认,但还是得说,感谢计原不是闭卷考试。怎么说呢,这学期的计原课其实挺新鲜的,从微机基础到中断系统这些章节都有在认真学,但直到后来开始疯狂讲述各种具体芯片的管脚功能时就跟不上了。自己的原因肯定是有的,毕竟本人从没想过要记忆这么多细致的玩意儿,这些难道不是用的时候查找手册就行了嘛😥。不过无论怎样,距离本系列的上一篇文章已经过去了快两个月了,也到了总结的时候了。本文不会按照上课的方式去梳理,也不是很全面,毕竟有些东西确实没会啊😥,就先说这么多吧,剧组开机!
- 微机系统基础
- 金字塔存储结构
- 指令系统
- 中央处理器
- I/O
Statement
The author USTC-elbitsiserri has no full ownership to the content of this article.This article is a reorganized and recreated work based on the original resources shared by Roselia
It is hereby declared and disclaimed
微机系统基础
计算机系统简史
- 世界上第一台数字电子计算机是1946年诞生于宾夕法尼亚大学的
ENIAC(埃尼阿克)
,它是基于电子管搭建,标志着电子管时代的到来(1946-1957) - 世界上第一台晶体管计算机是IBM公司于1958年推出的
IBM7090
,标志着晶体管时代的到来(1958-1964) - 1964年出现了集成电路计算机,标志着中小规模集成电路时代的到来(1965-1971)
- 1972年开始进入了大规模与超大规模集成电路时代,微处理器(CPU)开始出现,现代计算机一方面向着更微型、多用途发展;两一方面向着更巨型、超高速发展
Von-Neumann architecture
- 冯·诺伊曼计算机架构由五大部件组成,分别是
运算器
、存储器
、控制器
和I/O设备
- 冯·诺依曼计算机架构中,
指令和数据以同等地位
存储在存储器中,并可以按置寻访 - 指令与数据均有
二进制
表示 - 指令由
操作码
和地址码
组成 - 指令在存储器中
按顺序存放
- 冯·诺伊曼计算机架构以
运算器为核心
,这与现代计算机以存储器为核心
不同 - 运算器与控制器共同组成
中央处理器CPU
五大部件功能
- 存储器:存放程序和数据
主存储器包括存储体
、地址寄存器MAR
、数据寄存器MDR
,MAR和MDR通常存储与CPU重,MAR的位数反映寻址空间的大小
,MDR的位数反映机器字长
概念族:- 存储单元:是
CPU访问存储器的基本单位
,存储单元具有存储和读写数据的功能,以8位二进制
为一个存储单元,即一个字节。每个存储单元都有一个对应地址 - 存储字:是存储在一个存储单元中
二进制代码组合
- 存储字长:是一个存储单元可以存放的
最大二进制位数
,可以是8位、16位、32位等,位数一般等于MDR大小 - 存储字数:是存储器地址空间的大小,等价于存储单元的个数
- 存储容量:存储容量=存储字数×存储字长=存储单元数×存储字长
- 存储单元:是
- 运算器:执行算数逻辑运算
运算器包括算术逻辑单元ALU
、累加寄存器(ACC)
、乘商寄存器(MQ)
、通用寄存器(X)
、基址变址寄存器(BX,SI,DI)
、状态寄存器
等
概念族:- 算术逻辑单元:是CPU的执行单元和核心部件,由与门与非门构成,执行整数算数运算、位逻辑运算、移位运算
- 累加寄存器:用以存储计算产生的中间结果
- 乘商寄存器:负责数据的乘除法运算并保存结果
- 通用寄存器:可用于传送和暂存数据,可参与算术逻辑运算并保存结果,此外还具有一些特殊功能
- 16位CPU的通用寄存器有8个,即
AX,BX,CX,DX,BP,SP,SI,DI
- 8个寄存器都可以作为普通的数据寄存器使用
- 特殊用途:
AX为累加器
、CX为计数器
、BX,BP为基址寄存器
、SI,DI为变址寄存器
、BP为基指针
、SP为堆栈指针
- AX,BX,CX,DX可以进一步分割为8个独立寄存器(XL,XH),每个寄存器可以独立存储数据
- 寄存器AX,AL通常称为累加器,可以用于乘、除、I/O操作
- 寄存器BX称为基地址寄存器,可作为存储器指针使用
- 寄存器CX称为技术寄存器,在执行循环或字符串操作时,需要用CX来控制循环次数;在移位操作时,需要用CL知名移位位数
- 寄存器DX称为数据寄存器,在进行乘、除运算时,作为某人的操作数参与运算,也用于存放I/O端口地址
- 16位CPU的通用寄存器有8个,即
- 变址寄存器:
- 寄存器SI,DI称为变址寄存器(Index register),用于
存放存储单元在段内的偏移量
。作为通用寄存器,也用于存储算术逻辑运算的操作数与运算结果
- 寄存器SI,DI称为变址寄存器(Index register),用于
- 指针寄存器:
- 寄存器BP,SP称为指针寄存器,用于
存放堆栈内存储单元的偏移量
。作为通用寄存器,也用于存储算术逻辑运算的操作数与运算结果
- 寄存器BP,SP称为指针寄存器,用于
- 指令指针寄存器:
- 寄存器IP称为指令指针寄存器(Instructure pointer),用于
存放下次将执行的指令在代码段内的偏移量
- 寄存器IP称为指令指针寄存器(Instructure pointer),用于
- 状态寄存器:
- 状态寄存器又称
条件码寄存器
,用来存放两类信息:一类是当前指令执行结果的各种状态信息,比如进位、溢出、奇偶等;一类是控制信息,比如中断允许、单步跟踪等
- 状态寄存器又称
- 控制器:计算机的指挥中心
控制器包括控制单元CU
、程序计数器PC
、指令寄存器IR
- CU:``分析指令并给出相应的控制信号`
- IR:存放当前的指令
- PC:
存放下一条指令的地址
,取指令后自动加一 - 完成一条指令的过程:取指部件到PC指向的地址取出指令存放在IR中,CU分析IR中存放的指令后发出控制信号控制各部件的行为
计算机寻址方式
- 寻址方式:在指令中,指定操作数或操作数存放位置的方法称为寻址方式,常见的寻址方式有七种:
- 立即数寻址
- 直接寻址
- 寄存器寻址
- 寄存器间接寻址
- 寄存器相对寻址
- 基址变址寻址
- 相对基址变址寻址
- 立即数寻址:操作数为指令的一部分,跟在操作码存放在代码段中
- 直接寻址:指令所要的操作数
存放在内存
中,指令中直接给出操作数的有效地址(EA,即偏移地址)。在不使用段跨越前缀的情况下,操作数默认存放在数据段DS中
- 寄存器寻址:操作数存放在CPU内部的寄存器中,指令指定具体的寄存器号,无需访问存储器取得操作数
- 寄存器间接寻址:操作数存放在寄存器中,操作数的有效地址在SI、DI、BP、BX四个寄存器中。
在不使用段跨越前缀的情况下,如果有效地址存放在SI、DI、BX中,则以DS段寄存器为段地址;若存放在BP中,则以SS段寄存器为段地址
- 寄存器相对寻址:操作数的有效地址是一个基址寄存器或变址寄存器的内容加上指令中指定的位移量
- 基址变址寻址:操作数的有效地址由一个基址寄存器和一个变址寄存器构成
- 相对基址变址寻址:操作数的有效地址由一个基址寄存器、一个变址寄存器和指令给定的偏移量构成
计算机性能指标
存储器性能指标
一般用存储器总容量
衡量存储器性能
总容量=存储单元数×存储单元大小。存储单元数可由MAR的位数反映出存储单元最多的个数;存储单元大小等于存储字长,可有MDR的位数反映大小。例如16位的MAR和32位的MDR,则存储器总容量为$2^{16}\times 32bit=2^{21}bit=2^8KB=256KB$CPU性能指标
- 主频和CPU时钟周期:
时钟周期
是CPU最小的时间单位,每个动作至少需要一个时钟周期。主频是时钟周期的倒数。主频越高,指令执行速度越快,单位一般为GHZ
- 平均CPI:是执行一条指令的
平均时钟周期数
由上面两个指标可以计算得到CPU执行含有N条指令的程序所需要的时间t=N×(CPI×T)
此外,还有IPS(每秒执行的指令数)、FLOPS(每秒执行的浮点运算数)等指标- 主频和CPU时钟周期:
系统整体性能指标
- 几个字长
- 机器字长:
CPU能一次处理的二进制位数
,一般等于内部寄存器的位数大小 - 指令字长:一条指令包含的二进制代码长度
- 存储字长:一个存储单元能够存放的最大二进制代码长度
- 机器字长:
数据通路带宽
是指数据总线一次能够传输的数据位数
,它可能不等于CPU的机器字长吞吐量
是指单位时间内处理请求的数量,它主要取决于主存的存取周期
- 几个字长
计算机系统数据
进制转换
- 二进制、八进制、十六进制之间的转换:按幂指分组,不够补零即可,比如0101001011B=(0001)(0100)(1011)B=(14B)H
- 任意进制转换十进制:按权展开即可
- 十进制转换任意进制:基数乘除法————将整数部分和小数部分分开处理,整数除以进制基数取模,小数乘以进制基数取整。并非全部的十进制小数都能转换为二进制小数
码制——BDC码(Binary-Code-Decimal)
- BCD码是用二进制数码按照不同的码制来表示十进制数,常见的BCD码有
8421码
、2421码
、5421码
、余三码
、循环码
等。前三种码制是有权码,后两者是无权码- 8421码:从低到高的权值分别为1,2,4,8
- 2421码:从低到高的权值分别为1,2,4,2
- 5421码:从低到高的权值分别为1,2,4,5
- 余三码:起始编码为0011,在8421码的基础上依次加0011
- 循环码:相邻代码之间仅一位不同,减少了出错的几率,可由反射得到
原码、反码、补码各种码
真值
就是一个属的实际值机器码
就是将数的大小和符号
一起表示为二进制后的编码原码
就是用一位(首位)来代表符号位,其余位表示数值绝对值大小,正数符号位为0,负数符号位为1- 正数的
反码
和原码相同,负数的反码是将除符号位外的数值位按位取反
- 正数的
补码
与原码相同,负数的补码是在反码的基础上加1,也即保持符号位不同,依次取反原码数值位加一 移码
是在补码的基础上将符号位取反
,它只能表示整数ASCII
码是用八位二进制数来表示字符的一种编码,0-9的ASCII码为48-57;A-Z的ASCII码为65-90;a-z的ASCII码为97-122
存储系统
存储器分类
- 按照存储器在计算机中的
三级层次化结构
分类 从上到下,分别是寄存器、高速缓存、主存、辅存、外村
。其中能够和CPU直接交换信息的有高速缓存和主存。存储系统的两个主要层次为:Cache-主存层次
:主要解决CPU和主存速度不匹配的问题主存-辅存层次
:实现虚拟内存,主要解决主存容量不够的问题
- 按照存储介质分类: + 半导体存储器:主存、Cache + 磁表面存储器:磁盘、磁带、磁条 + 光存储器:光盘
- 按照信息的可保存性:根据断电后信息是否消失,分为
易失性存储器volatile memeory
和非易失性存储器non-volatile memory
;根据读出后信息是否被破坏,分为破坏性读出
和非破坏性读出
两种 - 按照存储方式分类: + 随机存储器RAM:每个存储单元的存取时间与其物理位置无关 + 串行访问存储器:包括顺序存储器(如磁带,从磁头开始顺序访问)和直接存取存储器(如机械硬盘,磁头先移动到一个区,在这个区内顺序存取) + 只读存储器ROM:内容只能随即读出而不能写入,通常用于存储固化的信息,如存放BIOS启动程序
存储器的基本组成和原理
存储器包括
存储体
、MAR
、MDR
。存储体就是一个矩阵结构,所以也被称为存储矩阵
- 存储矩阵的每
一行就是一个存储单元
,是存储器读写的基本单位 - 地址线的数据存储在MAR中,由译码器翻译为地址,从而控制对应存储单元与MDR的通断
- 控制电路的作用是对读写过程进行控制。一是用于指定读数据还是写数据,控制数据流向;二是控制各元件等到电压稳定后才进行下一步操作
- 内存条由多个存储器并联或串联组成,因此存在片选信号
- 存储矩阵的每
根据存储器的规格,可以计算出地址线和数据线的条数,例如对于16K×8位规格的存储器,可以知道地址线有14条,数据线有8条
存储器的行列地址
在上面的模型中,译码器输出端的输出线是2的指数倍,需要连接的选通线太多,不容易实现。所以,将存储器的存储单元在二维空间上排列,分为行地址和列地址,当行和列两根线都对这个存储单元选同时,才能对存储单元进行读和写。这样的做法可以显著减少译码器输出线的用量。例如有N条地址线的存储矩阵,对于一维排列,所需的译码器输出线为$2^N$条;对于二维排列,行数和列数都是$2^{\frac{N}{2}}$,总的输出线就为$2^{\frac{N}{2}+1}$条
SRAM & DRAM
- DRAM是动态随机存储器,用于制作主存,由于DRAM使用栅极电容来存储信息,每次从DRAM读取时会放电,原信息被破坏,所以读取结束后还需要充电进行再生
- SRAM是静态随机存储器,用于制作Cache,由于SRAM使用双稳态触发器来存储信息,能保持电压不变,所以读取后信息不会改变,无需进行恢复操作。但是它的电路较DRAM更复杂
存储芯片的扩展
主存一般包含多块存储芯片,且可由多个内存条组成,CPU通过地址总线找到主存中的存储单元,通过数据总线与主存进行数据传输,通过读写等信号控制主存行为。但是存储芯片可能和CPU出现不匹配的问题,这就包括寻址能力和寻址字长不匹配,这时就要对存储芯片进行位扩展和字扩展
,下图就生动形象地反映了这一问题
- 位扩展
CPU的数据线位数与存储芯片的数据位数不一定相等,必须对存储芯片进行位扩展,使其数据位数与数据线数相等
位扩展的方法是将多个存储芯片的地址端、片选端和I/O控制端并联,将数据端单独引出
。8个8K×1bit的存储芯片进行位扩展后可以视为一个8K×8bit的芯片 - 字扩展
字扩展是指增加存储器中字的数量,即可以寻址到的存储单元的数量。它的方式是将芯片的地址线、数据线和读写控制线并联
,通过片选信号来区分不同芯片的地址范围
Cache的原理
Cache利用局部性原理
,把程序中正在使用的部分存放在高速缓存中,CPU每次访问数据时先去缓存中找
局部性原理具体分为:
- 空间局部性:最近的未来要用到的信息,很可能与当前正在使用的信息在存储空间上是临近的,如数组
- 时间局部性:最近的未来要用到的信息,很可能就是当前正在使用的信息,如循环
CPU在缓存中寻找数据,存在找到和找不到两种情况,分别称为命中和没命中
。利用Cache高速缓存可以显著提高存储器性能
对于题中的思考题,是这么做的:
$$\begin{aligned}
T_{a}=0.95\times t+0.05\times 6t=1.25t\\
5t/1.25t=4
\end{aligned}$$
存储器性能提高到原来的4倍,即提高了3倍
Cache行 & 主存块
Cache会存储与当前使用的数据所在存储单元临近的数据,判断临近,采用的方式是将主存分块(分页)
,每次将数据所在的块送入到Cache中,Cache
中存储的块称为行
Cahce行和主存之间的映射关系
全相联映射
在全相联映射方式下,主存中的每个块都可以对应Cache中的任意行
。只要有空位就可以放,没有空位了就替换。而Cache的行要与主存的块建立映射关系,需要存储相应的主存块号
。主存块号计算方法
假设Cache行的大小为512B,主存中存储单元的数目为1MB,按字节编址,那么主存的地址总共有$2^{20}$个。主存块和Cache行大小相等
,均为512B,因此主存可以划分为$2^{11}$个块。主存的20位地址可以拆分为如下形式:Cache除了存储主存储块号外,还需要存储一个
有效位
来表示该存储单元是否有效全相联映射访问数据步骤:假设20位地址,如上
- 将该地址的高11位与Cache的标记进行对比(这个步骤是顺序访问的,查找比较耗时)
- 如果查命中且对应Cache行的有效位为1,那么直接通过地址低9位在行(块)内寻址即可
- 如果查不命中或有效位为0,直接去内存中访问
直接映射
直接映射通过模取的方式建立主存块和Cache行之间的映射关系,一个块只能放到Cache的某个行
。存取方法
这里取模的除数就是Cache的行数
,比如,如果Cache有8行,0%8=0,放到第一行,以此类推。由此可以发现,Cache的行与主存块是一对多的关系,要区分映射在同一个Cache行的不同主存块,依然需要存储标记
,但这时的标记不必存储整个主存块号
,这是因为存放在同一Cache行的主存块的主存块号二进制码的最后三位都是相等的,这三位就代表了Cache的行号 一般的,使用直接映射,主存地址划分如下:直接映射访问数据的步骤
- 使用块地址(高11位)的低3位得到Cache行(可以直接找到)
- 对比块地址的高8位和当前Cache行的标记
- 如果对比相等,且有效位为1,那么直接行内寻址
- 如果不相等或有效位为0,访问内存
组相联映射
全相联映射比较灵活,Cache的空间利用率高,但查找标记比较慢;直接映射可以直接找到Cache行,查找标记快,但空间利用率低。组相联映射介于二者之间:给Cache行分组,组间直接映射,组内全相联映射
特殊地,当组相联映射分组为1,就变成了全相联映射;当分组为Cache行数,就变成了直接映射存取方法
假设Cache共有8行,每组两行,分为四组,那么20位的地址就划分为:组相联映射访问数据的步骤
- 使用块地址(高11位)的低2位得到Cache组(可以直接找到)
- 在组内使用块地址的高9位进行查找
- 如果查命中,且有效位为1,那么直接行内寻址
- 如果查不命中或有效位为0,访问内存
Cache的替换算法
当Cache行存储满了,就涉及到替换问题
Cache的替换算法是针对全相联映射或组相联映射的,直接映射替换对应的内存单元即可。常用的替换算法有:
- 随机算法RAND:随即替换一个Cache行,实现简单
- 先进先出算法FIFO:替换最早调入的行,实现容易,按照行号顺序调入即可
- 近期最少使用算法LRU:
使用一个计数器来记录Cache行对应的主存块的使用情况,这个计数器的值称为LRU位
,它的位数和组的大小有关。计数器的变化规则如下:- 命中时,被访问的行计数器清零,
比其低的计数器值+1,其余不变
- 未命中且还有空闲时,
新装入行的计数器置0,其他行计数器+1
- 未命中且没有空闲时,
淘汰计数值为3的那一行的主存块,装入新块后置0,其余行的计数器+1
- 命中时,被访问的行计数器清零,
指令系统
指令系统又称为指令集ISA
,表示一台计算机所能执行的全部机器指令的集合
,由该计算机的CPU决定
。ISA是硬件设计的依据
指令格式的设计与原则
冯·诺伊曼结构的计算机采用存储程序
的思想,给出一个包含n个指令的程序,计算机能够自动执行这些命令。为了自动执行,一条指令必须明确或隐含包含的信息有:操作码OP、源操作数或地址、结果的地址、下一条指令的地址
据此,我们可以给指令分类,一下假设操作数都有两个
- 四地址指令
这种指令形式是最明确的,包含的地址有:两个源操作数地址、一个结果地址、下一条指令地址
分析访问内存的次数:取指令1次+取两个操作数2次+存放结果1次,总共访问四次 - 三地址指令
将下一条指令的地址隐含在程序计数器中,现在指令中包含的地址有:两个操作数的地址、结果的地址
分析访问内存的次数:根据PC的内容取指令1次+取两个操作数2次+存放结果1次,依然要访问四次 - 二地址指令
二地址是最常见的指令,指令中包含的地址有:两个操作数的地址。其中第一个操作数既作为源操作数地址,也作为结果的地址
分析访问内存的次数:根据PC的内容取指令1次+取两个操作数2次+存放结果1次,还是要访问四次 - 一地址指令
一地址指令用到了另一个寄存器:累加器ACC。ACC既提供一个源操作数(提供的是值而不是地址),又存放运算的结果
分析访问内存的次数:取值1次+取1个操作数,共计访问内存两次
减少指令中地址个数的目的是增加寻址范围,假设指令共32位:
- 四地址指令OP占8位,则地址各占6位,寻址范围是64个
- 三地址指令OP占8位,则地址各占8位,寻址范围书256个
- 二地址指令OP占8位,则地址各占12位,寻址范围是4K个
- 一地址指令OP占8位,则地址占24位,寻址范围是16M个
所以,指令系统的设计原则是:
- 指令要尽可能短,减少程序占用空间
- 操作码OP必须唯一,且要在指令中留足够的操作码位数,便于指令的扩充
- 指令长度应是字节的整数倍,因为
字节是内存的最小编址单位
- 地址字段的个数应该要合理选择
寻址方式再回顾
- 立即寻址:直接在字段中给出操作数的值,这样就不用访问内存了
- 直接寻址:直接给出操作数在内存中的地址,直接到内存中寻址即可(可能在Cache中就命中,更快)
- 间接寻址:给出存放操作数地址的地址,相当于指针。先找到存放的操作数地址,在根据操作数地址在内存中寻址
- 寄存器间接寻址:由于间接寻址访问两次内存太慢,所以使用寄存器避免多次访问内存
- 基址寻址:基址寄存器中存储的地址称为基址,同时在指令中给出一个偏移地址,以基址加上偏移地址作为有效地址从内存中取操作数
CISC & RISC
CISC即复杂指令系统计算机
,它通过不断向指令系统中增加更多更复杂的指令,以适应不同应用领域的需求。其特点是:
- 指令系统复杂庞大,指令数目一般200+
- 指令的长度不固定,指令格式多,寻址方式多
- 各指令的使用频率、执行时间都相差很大
- 由于优的指令复杂,不能采用硬布线的方式,所以大多采用微程序的方式来控制
- 难以优化编译以生成高效的目标程序
RISC即精简指令系统计算机
,它的中心思想是要求指令系统精简化以提升程序性能,其特点如下: - 只包含使用频率高的一些简单指令,复杂指令的功能由简单指令的组合实现
- 指令长度固定,指令格式种类少,寻址方式种类少
- 访问内存的只有
Load/Store(取数/存储)指令
,其余指令都是在寄存器之间进行
,所以很高效 - 以硬布线控制为主,少用微程序控制
- 重视编译优化工作,减少程序执行时间
中央处理器
CPU由运算器
、控制器
和寄存器
组成。运算器进行算术逻辑运算,控制器进行取指令、分析指令和执行指令
CPU的时序系统
早期计算机采用三级时序系统
一条指令包括一个或多个机器周期
,而一个机器周期需要执行多个微操作
,一个微操作需要一个时钟周期
(节拍)的时间,时钟周期(节拍)
是操作执行的最小时间单位。节拍可以由脉冲组合得到
现代计算机没有机器周期的概念,只存在时钟周期的概念
CPU数据通路分类
- 单总线数据通路哦
执行add R3,R1,R2
这样的算数运算指令,由于单总线只能同时传输一个数据,所以需要分两次获取操作数,把先获取到的操作数放在暂存器Y中;结果也要先存放在暂存器Z中,再送入目标寄存器。所以需要执行3个微操作,即3个时钟周期 - 三总线数据通路
两个操作数、1个结果分别用一条总线传输,这样执行上面的指令,一个时钟周期内即可完成
取指电路
设计分析:
- 什么时候取指令?时钟周期的开始处(上升沿)
- 在哪里取?去存储器里取,地址由PC给出
- 取回来后存储在哪里?无需存储,直接从指令存储器输出端读取即可
- PC的值如何修改?𝑃𝐶 ← 𝑃𝐶 + 4(当程序顺序执行时)
总线
总线的概念与组成
和CPU内部的总线(片内总线)不同,这里研究的总线是连接计算机内各部件,如CPU、主存和各种输入输出设备的总线,称为系统总线
。系统总线是一组能为多个部件分时共享的公共信息传输通路
共享是指多个设备共同使用同一个总线;分时是指某一时刻只允许一个设备向总线发送信息,但可以有多个接收方
总线存在于电脑的主板上。主板上刻印的线就是总线。此外提供了很多IO设备的接口
系统总线包括地址总线
、数据总线
和控制总线
,我们需要关注它们的传输方向:
- 地址总线是单向的(CPU->主存内的内存单元或I/O端口地址)
- 数据总线是双向的
- 控制总线
总体是双向的
。一根控制总线包含很多根线,每根线上传输不同的控制信号。就控制总线的某一根而言是单向的
总线的结构
总线分为单总线结构
、双总线结构
、三总线结构
、四总线结构
- 单总线结构
CPU、主存和IO设备都连接在同一个系统总线上。但是由于各设备频率相差很大
,所以有的时候效率很低 - 双总线结构
由于IO设备频率比CPU和主存慢很多,所以将IO设备单独用一个IO总线连接,通道就是IO总线与主存总线的桥梁
但是还是没有考虑到IO设备之间的区别。实际上,有的IO设备很快,如硬盘(磁盘);而有的很慢,如鼠标、键盘 - 三总线结构
DMA(Direct Memory Access)即直接内存访问总线
,它可以在内存和高速外设之间传送数据;而IO总线则用于CPU和低速的外设之间传送数据 - 四总线结构
现在实际采用的就是四总线结构。需要记住靠近CPU的是北桥芯片,远离CPU的是南桥芯片
。它们共同组成桥接器
,连接计算机的各部分
总线的性能指标
- 总线时钟频率:就是
机器/CPU的时钟频率
- 总线工作频率:总线的一次工作包括申请阶段、寻址阶段、传输阶段和结束阶段
- 总线宽度:一般指的是数据总线的宽度
- 总线带宽:即
单位时间内总线上可传输数据的位数
,公式为:总线带宽=总线工作频率×总线宽度
- 总线复用:如地址总线和数据总线共用一条总线,仍要求不能同时传输
- 传送方式:有
突发传送
和非突发传送
两种。非突发传输每次进行数据传输都是先传地址,再获得数据;突发传输则是先给出一个地址,接下来可以从连续的地传输成块的数据,相当于地址自动++
I/O系统
IO系统组成 & 常见外设
IO系统包括IO软件
和IO硬件
。软件包括驱动程序
、用户程序
、管理程序
等;硬件包括外部设备
、设备控制器和接口
、IO总线
等
常见的输入输出设备有:
- 输入设备(I):键盘、鼠标
- 输出设备(O):显示器、打印机
- 外存储器(IO):磁盘、光盘
磁盘存储器 & 性能指标
磁表面存储器利用N极和S极的朝向
来存储0或1.写入采用电生磁的原理,读取采用磁生电的原理。在自然状态下,由于磁性可以长期维持,所以磁盘是非易失性存储器
。
磁盘可以分为存储区域
和控制区域
- 存储区域:存储区域就是盘面这一块
一个硬盘有多个记录面
,每个记录面划分为若干磁道
,每条磁道又可以划分为若干扇区
。扇区(块)是磁盘读写的最小单位
- 控制区域
包括电机、旋臂、转轴等
磁盘有如下性能指标:
- 磁盘容量:e.g. 500GB, 2TB
- 记录密度:记录密度包括
道密度
和位密度
道密度就是沿半径方向单位长度的磁道数目
;位密度就是一个磁道上单位长度可以存储的比特是
由于内道和外道的容量是一样大的,因此内圈的 位密度更大
- 平均存取时间:一次存取时间包括寻道时间、旋转延时、传输时间三部分:
- 寻道时间就是旋臂将磁头转到对应磁道所需要的时间
- 旋转延时是磁头单位到要读写扇区所需要的时间
- 传输时间是转轴将磁道转到一个扇区需要的时间
I/O接口结构与功能
I/O接口是主机与外设之间进行信息交换的媒介,基本结构如下
I/O接口在主机侧通过I/O总线与内存、CPU相连:
- 通过数据总线,在数据缓冲寄存器实现外设与主机间的数据传送;同时控制寄存器中接收到控制命令;状态寄存器向CPU发送当前设备的状态信息
- 通过地址总线,控制要访问I/O接口中的寄存器端口
- 通过控制总线,接收主机发送过来的读写等控制信号。I/O控制逻辑还能对控制寄存器中的控制指令译码
I/O接口的主要功能有:
- 解决主机与外设时序配合问题,协调不同工作速度的外设和主机之间交换信息
- 进行地址译码和设备选择。一个I/O接口可以连接多个外设。CPU送来地址码后,I/O接口对地址进行译码并选择相应外设
- 实现数据缓冲。使用数据缓冲器暂存数据,避免因为速度不一致导致丢失数据
- 信号格式转换。如调电平、数据格式转换、串并转换等
- 向CPU进行反馈。如通过状态寄存器中的状态字向CPU反馈设备的工作状态,以及各种中断请求
I/O接口类型
按照主机访问I/O接口的方式,分为程序查询I/O方式
、中断I/O方式
、DMA方式
。相应地,I/O接口可以分为程序查询接口
、中断接口
、DMA接口
程序查询方式
- 主机进行IN操作时,先发出询问信号,从状态寄存器中读取设备状态并决定下一步是进行数据传送还是等待其准备就绪
- 主机进行OUT操作时,先发出询问信号,从状态寄存器中读取设备状态并决定下一步是进行数据传送还是等待其工作完毕
- 鼠标等设备的查询频率较低,所以对CPU的占用是可以忽略不记的;但是硬盘等设备的查询频率太高,会占用较多的CPU时间,影响系统的工作
中断I/O方式
程序查询方式的缺点是外设会独占CPU,使CPU的速度降到外设的水平,不能充分发挥CPU的性能。中断的概念是,当计算机执行当前程序时出现了一些特殊请求或异常情况,
CPU暂时终止现行程序,保存断点后
转去对特殊请求或异常进行处理,处理完后恢复现场
,继续执行原程序。它的好处是:- 实现
CPU与I/O设备的并行工作
,相当于外设有事了就戳CPU一下 - 实现多道程序分时操作。
多道程序的切换需要借助于中断系统
- 便于实现人机交互和用户对机器的干预
- 便于实时处理程序的实现
上图中,CPU在现行程序和中断服务程序之间切换,实现了CPU和外设的并行工作。但是中断I/O方式依然存在问题:①有多个外设同时发出中断请求的优先级判别②现行程序不想被中断如何处理
- 开中断和关中断:使用标志寄存器IF位,IF为1表示当前程序可以被中断,即
开中断
;IF为0表示为关中断
,即当前程序不能被可屏蔽中断
中断,但是不能屏蔽关机等硬件强制中断,即非屏蔽中断
- 中断判优:给不同的中断排个优先级。
故障中断优先级最高;高速设备优先于低速设备;非屏蔽中断优于可屏蔽中断
等。中断的优先级用中断屏蔽字来表示,屏蔽字为0表示可以被该中断源中断,为1表示不能被该中断源中断
- 实现
DMA方式
使用中断后,打印机等设备可以与CPU并行工作,但硬盘每次的读写仍需要CPU控制,依然会占用大量CPU时间。解决的方式是为硬盘再加一个精简版的CPU:DMA控制器
在DMA控制器的控制下进行数据的传输,无需处理器干涉。当传输完成时以中断方式通知CPU进行处理即可,这样就实现了CPU与DMA并行工作。需要注意的是DMA每次的读写也是
以块为单位
- 预处理阶段:DMAS控制器从CPU获取要访问的主存的起始地址、I/O设备的起始地址和需要传送的块的个数
- 数据传输阶段:主存和I/O设备每次一个块一个块地传输数据
- 结束处理阶段 :传输完毕,溢出信号为1,CPU执行中断服务程序作DMA结束处理
数据传输阶段,DMA控制器会占用系统总线与主存进行数据传输。DMA占用系统总线时,CPU就不能访问内存了,所以需要合理地选择
DMA的传送方式
- CPU停止法:DMA工作的一段时间内,系统总线的占用权都归DMA控制器。简单,但是CPU不能访问存储器,一定程度上违背了使用DMA的初心
- 交替分时访问法:总线周期交替地由CPU和DMA控制器使用。缺点是DMA对总线的使用时间不是固定的,而将总线时间交替划分会浪费很多,灵活性不够
- 周期挪移法:DMA控制器对系统总线占用的优先权>CPU。当二者同时请求占用总线时,DMA优先;当CPU正在占用总线时,DMA等待CPU占用结束。这种方法比较灵活
This is an identification card as an honored membership of FeynmanDirac
Happy to see you follow FeynmanDirac, enjoy science together
备用人机验证