一、计算机系统概述
1.1 计算机系统组成
1.1.1 计算机的硬件系统结构
硬件系统由运算器、存储器、控制器、输入设备和输出设备5个部件组成。
五大部件的基本功能:
- 运算器: 完成算术和逻辑运算;
- 控制器: 用来控制、执行程序;
- 存储器: 存放数据和程序;
- 输入设备: 将信息输入到计算机中,转换为计算机能识别的形式;
- 输出设备: 将机器的运算结果转换为人可识别的信息。
机器以运算器为中心,输入/输出设备与存储器之间的数据传送通过运算器完成。
1.1.2 计算机系统组成
计算机系统 = 硬件系统 + 软件系统
-
计算机系统由硬件和软件组成;
-
计算机硬件系统由CPU、外设和主存组成;
-
计算机主机由运算器、控制器和主存储器组成。
计算机系统 = 硬件系统 + 软件系统
计算机硬件系统 = 主机 + 外设
主机 = CPU + 主存储器
CPU = 运算器 + 控制器
外围设备 = 输入设备 + 输出设备
1.1.3 计算机系统的层次结构
- 下层是上层的基础,上层是下层的扩展;
- 上下层可以分割,没有上层,只有下层也是可以的;
- 硬件和软件的分界面是操作系统;
- 软硬件的逻辑等效性:某一功能既可以用软件实现,也可以用硬件实现。
1.2 计算机的基本工作过程
存储器地址寄存器(MAR) 中存放的是CPU读写存储单元的地址;
程序计数器(PC) 中存放的下一条要执行的指令在内存中的地址。
工作过程:
- 根据
PC
的值访问存储器,取出指令; - 将指令暂存至指令寄存器IR中;
- 通过指令译码器ID分析指令;
- 通过ID产生操作控制信号;
- 控制信号作用于功能部件;
- 功能部件执行指令产生动作。
指令的执行过程包括:取值、分析、执行三部分
一段程序是由若干条指令组成的;
当一条指令执行完毕后,
(PC)+1→PC
顺序执行;这里的+1是一个逻辑的+1,表示的是一条指令
如果是跳转指令、调子指令等,PC的值由指令中给出的自标地址决定跳转执行;
当所有指令执行完毕,表示程序执行完毕,程序功能得以实现,即程序控制。
-
将“存储程序“和“程序控制”两个概念合起来, 就是“存储程序控制”(存储程序)。
-
“存储程序控制(存储程序)”是“冯·诺依曼”计算机的核心思想。
简述存储程序控制的思想(简述冯诺依曼计算机的基本思想)
存储程序控制(存储程序):包含存储程序和程序控制两个概念。存储程序是将程序和数据以二进制的形式存储在存储器中;
程序控制是程序输入到计算机中,存储在内存储器中,在运行时,控制器按地址顺序取出存放在内存储器中的指令(按地址顺序访问指令),然后分析指令,执行指令的功能,遇到转移指令时,则转移到转移地址,再按地址顺序访问指令。
简述“冯·诺依曼计算机”的主要特点
- 采用“存储程序”的工作方式;
- 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成;
- 指令和数据以二进制代码的形式存储在存储器中;
- 指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址;
- 指令在存储器内按顺序存放,通常指令是按顺序执行的,在特定条件下,可根据运算结果或设定的条件改变执行顺序;
- 机器以运算器为中心, 输入/输出设备与存储器之间的数据传送通过运算器完成。
按照冯·诺依曼原理,计算机应该具备哪些功能?冯诺依曼计算机有哪些局限性?
按照冯·诺依曼原理,现代计算机应该具有如下功能:
- 输入/输出功能:计算机必须有能力把原始数据和解题步骤输入给计算机,计算结果以及计算过程中出现的情况输出给使用者;
- 记忆功能:能够存储记忆数据、过程及结果;
- 计算功能:能够进行基本计算,并利用基本计算功能完成人们所需要的一切运算;
- 判断功能:计算机在操作前,应能够选择操作方案;
- 自我控制功能:計算机应能够保证程序执行的正确性和各那件之间的协调性。
冯·诺依曼结构计算机的局限性在于它的并行性有限,不适合于人工智能和模式识别等应用场合。
计算机中指令和数据都用二进制表示,形式上无差别,如何区分?
时间上:对指令的访问只有在取指阶段)而对数据的访问是在分析和执行阶段的。 所以可以从时间上进行区分;
空间上:放置的位置不同,取指令和取数据时地址的来源不同。指令地址来源于程序计数器PC,数据地址来源于地址形成部件或指令的地址码字段。
在CPU中,跟踪下一条要执行的指令的地址的寄存器是PC,用来指明操作数在存储器中的地址的寄存器是MAR;
程序的功能是通过CPU指令实现的,程序执行前,指令和数据需要预先存放在存储器中。
1.3 程序在计算机中的执行过程
一个高级语言编写的程序在计算机中的执行过程:
即将源程序转换为可执行目标文件的过程分为预处理、编译、汇编、链接四个阶段。
- 高级语言:更接近人类语言习惯的计算机语言;
- 汇编语言:用英文单词或其缩写(助记符)代替二进制的指令代码;
- 机器语言:二进制代码语言,是计算机唯一可以直接识别和执行的语言。
解释程序:一行一行翻译
编译程序:翻译转换为目标代码
汇编程序:把汇编语言转换为机器语言
1.4 计算机的主要技术指标
1.4.1 机器字长
-
机器字: 计算机中二进制表示的数据或指令;CPU一次能直接处理的二进制数据。
-
机器字长: 机器字的长度,机器字中包含的二进制数的位数。
-
机器字长,简称字长,字长越长,数据的表示范围越大,计算精度越高;
运算器的位数 = 通用寄存器的宽度 = 数据总线宽度 = 机器字长
注意是数据总线宽度不是地址总线宽度
-
机器字长通常为字节的整数倍,现代计算机为32位、64位。
1.4.2 存储字长&存储容量
存储元: 存放一位二进制数的物理器件,是存储器的最基本构件。
存储单元: 由地址码相同的多个存储元构成;是CPU对存储器进行读写操作的基本单位。
存储单元中记录数据或指令
- 存储器中能存储的最大信息量,一般用
M × N
表示,M表示单元数,N表示每个存储单元的存储的工进制位数。
某存储器容量为1K × 4,则共有1024个单元,每个存储单元字长4位,共有4096个二进制位
1.4.3 指令字长
指令字长: 一条机器指令中包含的二进制代码的位数。
单字长指令:指令字长=机器字长;
半字长指令:指令字长=半个机器字长;
双字长指令:指令字长=两个机器字长
1.4.4 字与字长
- 存储单元
- 字节存储单元:每个存储单元存放一个字节对应的存储字长就是8位对应的存储字长就等于机器字长;
- 字存储单元:每个存储单元存放一个机器字。
- 存储单元的地址存储单元的地址和存储单元的内容都是用二进制数表示,但是其含义完全不同, 存储单元的地址是用无符号二进制数表示;
- 机器字长、存储字长、指令字长可以相等, 也可以不相等;
- 计算机主存储器(内存)的最小单位是二进制位(存储元),按字节编码的内存储器, 每次”读/写“包含8位二进制位;
- 计算机存储器的地址可以以字为单位,称为字地址;也可以以字节为地址,称为字节地址。
1.4.5 时间指标
主频: 机器内部主时钟的频率,常用单位是H,MHz,用f
表示;
时钟周期: 是CPU中最小的时间单位,常用单位是s,ms,ns,用T
表示。
且 T = f -1
用时钟周期数来表示计算机中时间的长短
CPI: 执行一条指令所需的时钟周期数;
指令周期: 取出并执行一条指令所需的全部时间。
指令周期 = 时钟周期数(CPI) × 时钟周期
若一个指令周期包含n个机器周期(等长),一个机器周期又包含 m个时钟周期,
则机器周期 = m × T ,指令周期 = n × m × T
上图中,有2个机器周期,每个机器周期有4个时钟周期,机器周期= 4 × 2s = 8s
实际考题中,很少是对一条指令,通常是对一段程序、或者某台机器进行。
-
平均CPI:某段程序或者某个机器, 平均每条指令所包含的时钟周期数
平均CPI = 执行某段程序所需的时钟周期总数 / 程序中所包含的指令条数
-
平均CPI = [ Σi(Ii)(Ci)] / Σ(I*Ci)
Ii
是指令类型;i
的指令数目,Ci
是该指令类型的时钟周期数,Σi(I*Ci)
是总指令数 -
平均CPI = Σi(Pi)(Ci)
Pi
是指类型i
所占百分比;Ci
是指该类型指令的CPI数 -
平均指令周期:对一段程序或者一个机器而言,平均一条指令的执行时间
平均指令周期 = 平均CPI × 时钟周期
-
CPU执行时间(程序执行时间):指运行一个程序所花费的时间
CPU执行时间(程序执行时间) = CPU时钟周期数 时钟周期 = (指令条数 × 平均CPI) × 时钟周期 = 指令条数 × 平均指令周期
1.4.6 速度指标
- MIPS: 每秒执行多少百万条指令。
MIPS = 指令条数(百万条) / CPU执行时间(s) = 指令条数(条) × 10 -6 / CPU执行时间(s) = 指令条数(条) / (CPU执行时间(s) × 10 6) = 指令条数(条) / (指令条数(条) × 平均CPI × 时钟周期(s) × 10 6) = 时钟频率(Hz) / (平均CPI × 10 6) = 时钟频率(Hz) / [(平均指令周期 / 时钟周期) × 10 6] = 1 / (平均指令周期 × 10 6)
- 若机器M的主频为1.5GHz,P的平均CPI为1.2,则P在M上的指令执行速度多少?
MIPS = 时钟频率 / (平均CPI × 10 6) = 1.5 × 10 9 / (1.2 × 10 6) = 1250 MIPS
二、运算器
(略)
三、存储系统
3.1 存储系统概述
3.1.1 存储系统层次结构
- 主要包括缓存-主存和主存-辅存两个存储层次;
- CPU和缓存、主存直接交换信息,辅存和CPU不能直接交换信息,只能和主存交换信息;
- Cache是硬件管理,虚拟存储器是硬件和软件管理;
- Cache对程序员是透明的,虚拟存储器对程序员是不透明的;
- 设置目的:解决存储器大容量、低价格、高速度三者之间的矛盾关系。
寄存器和存储器都用来存放信息, 有何不同?
寄存器在CPU中,速度快、价格高、容量小,主要用来暂存指令运行时的操作数和结果。
主存储器在CPU之外,速度没有寄存器快,价格比寄存器便宜,容量大,用来存放已被启动的程序代码和数据。
3.1.2 存储器的分类
- 半导体存储器主要包括随机访问存储器RAM、只读存储器ROM;
- 静态RAM是易失性的,主要用于Cache,不需要刷新;
- 动态RAM也是易失性的,主要用于主存储器,需要刷新;
- 只读存储器是非易失性的,主要用于主存储器;
- PROM是可编程的ROM,EPROM是可擦除、可编程的ROM,EEPROM(E2PROM)是可电擦除、可编程的ROM;
- 磁盘是磁介质存储器,是直接存取存储器,非易失性的;
- 光盘CD-ROM是光介质存储器,是只读存储器,非易失性的;
- FLASH ROM(闪存)是非易失性的,可电擦除、可编程,集合了ROM和RAM的长处。
SDRAM:同步动态随机存储器,数据的读写需要时钟来同步,易失性;
单数据率同步动态随机存SDR SDRAM:易失性;
DDR SDRAM:双倍数据率同步动态随机存取存储器,一个时钟读写两次数据,使得数据传输速度加倍,速度较快。
3.1.3 存储器性能指标
存储容量
存储器能够存放的二进制位数的总和
存储容量 = 存储字数 × 字长
其中:存储字数表示存储器地址空间大小,即存储器的存储单元数目;字长(存储字长), 表示一次存储操作的二进制数据位数。
某存储器的容量为1K×8,则表示该存储器有1K(1024)个存储单元;存储单元的地址则需要10(210=1024)位二进制数表示;即地址空间大小为1K,需要10根地址线进行访问,存储字长为8位,一个存储单元的位数为8位。
存取时间Ta
指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间与写入时间。
存取周期Tm
指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔。
即存取时间 ≠ 存取周期
主存带宽Bm
又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒(B/s)或位/秒(b/s)
主存带宽(数据传输率) = 数据的宽度 / 存储周期
3.2 数据的存放
3.2.1 编址方式
存储器的编址方式指在存储器中如何对存储单元进行地址编址,也是访问存储器的方式。
例如: 某32位计算机,”字”就是32位。
按字节编址: 每个字节给一个地址存储字长是8位;
按半字编址: 半字为16位,每16位,也就是两个字节给个地址,存储字长是16位;
按字编址: 一个字为32位,每32位,也就是4个字节给一个地址,存储字长是32位。
- 编址方式:常用的编址方式有:按字节编址、按字编址、按半字编址、按双字编址等;
- 按()编址就是编址的最小单位是(),换句话说就是一个()给一个地址;
- 编址方式不同,对于存储容量确定的存储器,其寻址范围就不同,需要的地址线也不同;
- 字指一个机器字。
某计算机字长32位其存储容量为4GB:
- 按字节编址,寻址范围4G(4GB / B = 232);地址线32根(A0到A31)。
- 按字编址,寻址范围1G(4GB / 4B = 230);地址线30根(A0到A29)。
- 按双字编址,寻址范围0.5G(4GB / 8B = 229);地址线32根(A0到A28)。
- 按半字编址,寻址范围2G(4GB / 2B = 231);地址线32根(A0到A30)。
3.2.2 大端&小端存放
即多字节的数据在存储器中的排列存储顺序。
一个32位数( 0A0B0C0D )16 。
3.2.3 边界对齐
边界对齐是使存储多字节值的起始单元刚好是某个多字节读取模块的开始单元。
- 8位数据:占用1个字节单元,其地址
x…xxxx(任意)
- 16位数据:占用2个字节单元,其地址
x…xxx0(2的整倍)
- 32位数据:占用4个字节单元,其地址
x…xx00(4的整倍数)
- 64位数据:占用8个字节单元,其地址
x…x000(8的整倍数)
对于存放某长度为m字节的数据,存放地址需在m字节的整数倍存放,目的在于避免CPU和内存的一个数据交换需要跨越多个存储单元并且进行多次访问才能完成。
假如一个32位的系统,按字节编址,读取数据时存储字长是32位或者4个字节。有4个变量,分别是int i(32位),short k(16位),double x(64位),char c(8位)。
边界对齐:
读取变量x时,只需要读取2次。
边界不对齐:
因为CPU一次读取是32位,如果边界不对器,读取变量x时需要读取3次。
3.3 半导体存储器
-
静态随机存储器(SRAM)
SRAM是六管静态MOS存储单元组成的双稳态电路利用触发器来保存信息;
半导体RAM信息可读可写,是易失性的存储器;
存取速度快、集成度低、功耗大、价格昂贵,一般用于高速缓冲存储器。
-
动态随机存储器(DRAM)
DRAM是利用栅极电容上的电荷来存储信息;
易于集成、位价低、容量大、低功耗,速度慢,一般用于大容量的主存储器;
地址通过行地址锁存器和列地址锁存器将行地址和列地址分时传送,实现地址复用。(分时复用)
某一DRAM芯片,采用地址复用技术,其容量为1024x8位,除电源和接地端外,该芯片的引脚数最少是多少?(读写控制线为两根)
容量1024×8,可寻址的存储空间范围是1024B = 210B,按字节寻址,地址复用,分行、列两次传送地址信号,行地址 = 列地址 = 5,数据线 = 8,行选通 = 1,列选通 = 1,读写控制线 = 2,所以最少需要5 + 8 + 1 + 1 + 2 = 17。
3.4 DRAM的刷新
DRAM是利用栅极电容上的电荷存储信息的。读操作是破坏性的,会使电容上的电荷流失,同时未读写的存储元由于漏电流的存在电荷会逐渐泄漏而减少,为了及时补充漏掉的电荷,避免存储信息丢失,需要定时地给栅极电容补充电荷,通常把这种操作称作刷新。
常用的刷新方式:
- 集中刷新
- 分散刷新
- 异步刷新
刷新以行为单位,由芯片内部自行生成行地址。
刷新类似与读操作,是读出后按原样写入。
刷新操作不需要片选,整个存储器的所有芯片同时被刷新。
通常情况下,一般在2ms内必须要刷新一次;若题目中没有明确给出刷新的具体操作,刷新一行所需的时间一般是一个存储周期。
刷新地址由刷新地址计数器给出;
分散式刷新不存在死时间。
3.4.1 集中式刷新
在规定的一个刷新周期内对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。
刷新时间 = 存储矩阵行数 × 存储周期
集中式刷新中存在“死时间”,是集中刷新的那段时间,这段时间不能进行读/写操作。
死时间率 = 死时间 / 刷新间隔 × 100%
有1Kx4位的DRAM芯片,内部结构由64*64构成,设存储器的存储周期为0.5us,如果最大刷新间隔2ms;如果采用集中刷新方式, 则存储器刷新一遍最少用多少个存储周期?“死区”占多少时间?“死时间率”为多少?
采用集中刷新方式,存储器刷新一遍需要64个存储周期;一个刷新周期中的存储周期数:2ms / 0.5μs = 4000;存储周期为0.5μs,所以刷新周期也为0.5μs;死区时间= 0.5μs × 64 = 32us;死时间率=32μs / 2000μs= 1.6%。
3.4.2 分散式刷新
分散式刷新指把刷新操作分散到每个存储周期内进行。
在分散式刷新中,可以将存储周期理解为:存储周期 = 读/写周期 + 刷新一行的时间。
其中:刷新一行时间等于存储周期的
通常情况下认为分散式刷新没有死时间。
有1Kx4位的DRAM芯片,内部结构由64*64构成,设存储器的存储周期为0.5us,如果最大刷新间隔2ms;如果采用分散式刷新,整个芯片刷新一遍需要多少时间?
64×64矩阵;
芯片的存储周期为0.5μs;
刷新周期为0.5μs;
整个芯片刷新一遍需要64μs。
3.4.3 异步式刷新
异步式刷新是把存储阵列的每行分散到2ms内刷新,但不集中刷新,是平均分配。
相邻两行的刷新间隔=最大刷新间隔时间 / 行数
“死时间”就是一个读写周期,读写操作相对集中,缩短了死时间。
有1Kx4位的DRAM芯片,内部结构由64*64构成,设存储器的存储周期为0.5us,如果最大刷新间隔2ms;如果采用集中刷新方式, 则存储器刷新一遍最少用多少个存储周期?“死区”占多少时间?“死时间率”为多少?
采用异步刷新方式,最大刷新间隔为2ms,每个芯片内部有64行;
需要在2ms内对64行刷新一遍;
相邻两行的刷新间隔= 2ms / 64 = 31.25μs
3.5 地址译码方式
3.5.1 单址译码(字选法)
- 仅有一个地址译码器;
- 若输入线位k,输出线为2k;
- 2k 条字线对应2k 个存储单元;
- 字选线中每个存储单元的位数为B位。
3.5.2 双译码方式(重合法)
- 通常把K位地址线分成接近相等的两段,一段用于水平方向作X地址线,一段用于垂直方向作Y地址线。
- 有两个地址译码器,X方向(行)和方向(列)。
- X方向输入线为nx,Y方向输入线为ny,则n=nx+ ny。
- 每个存储单元由一条X方向和一条Y方向驱动线选择
3.6 主存储器与CPU连接
3.6.1 位扩展
存储芯片的数据总线位宽小于CPU数据总线尾款。
用 64K×8 的芯片设计 64K×32 的存储器。
位扩展
64K×32 / 64K×8 = 1×4,则需要4片64K×8的芯片进行位扩展。
设计
地址线:CPU - A0到A15,芯片 - A0到A15(64K = 216);
数据线:CPU - D0到D31,芯片 - D0到D7;
读写控制线:R/W;
片选信号线:CS。
3.6.2 字扩展
存储芯片的存储容量不能满足系统对存储容量的要求。
用16K×8的芯片设计64K×8的存储器。
字扩展
64K×8 / 16K×8 = 4×1,则需要4片16K×8的芯片进行字扩展。
设计
地址线:CPU - A0到A13,芯片 - A0到A13(64K = 216,16K = 214);
数据线:CPU - D0到D7,芯片 - D0到D7;
读写控制线:RW;
片选信号线:A15,A14。
3.6.3 字位同时扩展
存储芯片的数据位宽和存储容量都不能满足系统的需求。
用16K×4的芯片设计64K×8的存储器。
字扩展
64K×8 / 16K×4 = 4×2,则需要4组芯片进行字扩展,且每组芯片需要2片16K×4的芯片进行位扩展。
设计
地址线:CPU - A0到A13,芯片 - A0到A13(64K = 216,16K = 214);
数据线:CPU - D0到D7,芯片 - D0到D3;
读写控制线:RW;
片选信号线:A15,A14。
在一个容量为128KB的SRAM存储器上,按字长32位编制,其地址访问可以从0000H到多少?
容量128KB,按32位编址,地址范围 = 128KB / 4B = 32K;32K需要15位地址,A14 ~ A0 的变化范围;
即000,0000,0000,0000到111,1111,1111,1111;即0000H到7FFFH。
若内存地址空间为4000H~43FFH,每个存储单元可存储16位二进制数,该内存区域用4片存储器芯片构成,构成该内存所用的存储芯片的容量是多少?
内存地址空间0000H~43FFH;即0100,0000,0000,0000到0100,0011,1111,1111共计1K,则系统容量为1K×16。
用4片芯片构成:
若是16位,则是字扩展,字数为256;
若是8位,则是字位同时扩展,字数为512。
3.7 高速缓冲存储器
3.7.1 程序局部性原理
定义:CPU从主存取指令或数据时,在一定时间内,只是对主存局部地址区域进行访问。
- 时间局部性(Temporal Locality)在一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用。
时间局部性程序结构体现循环结构
- 空间局部性(Spatial Locality)如果一个内存位置被引用了个内存位置那么程序很可能在不远的将来引用附近的。
空间局部性程序结构体现:顺序结构
程序局部性:在一个相对短的时间内,处理器对内存的访问集中在比较固定的区域
3.7.2 Cache
Cache是一个是由硬件自动管理的,容量较小、速度较快的SRAM的存储器,位于CPU和主存之间。
主存和CPU的数据交换可以直接进行也可以通过Cache进行。
Cache设置的目的是解决CPU和存储器速度差的矛盾。
Cache的设置是基于程序局部性原理。
Cache的存储是将当前CPU访问最活跃的信息从主存复制到Cache中。
CPU与Cache之间以字为单位进行交换,主存和Cache之间以块为单位进行交换。
一个块是由若干个字组成,是定长的
- CPU访问主存时,会将地址同时送给Cache和主存;
- 若此字在Cache中,立即传给CPU;
- 若不在,用主存读周期把此字所在的块送到Cache。
3.7.3 访问参数
命中率:
-
命中:当CPU访问主存某内容时,先检查该内容是否在Cache中,若在,则为命中;
-
未命中:当CPU访问主存某内容时,若不在Cache,则为未命中,需要将要访问的单元所在块的所有字读入Cache中,以便下次访问。
-
命中率:CPU访问Cache的次数占总访问次数的比例
-
h = NC / (NC + NM)
其中:h为命中率;NC 表示Cache完成存取的总次数;NM表示主存完成存取的总次数。
假设CPU执行某段程序时,命中Cache2000次,非命中50次
Cache的命中率 = 2000 / (2000+50) = 97%
平均访问时间:
设tc表示命中时的Cache访问时间,tm表示未命中时的主存访问时间,则Cache/主存系统的平均访问时间ta为:
ta = h * tc + (1-h)tm
访问效率:
用e表示访问效率
若设:r = tm / tc,则有:
e = tc / ta= 1 / ( r + ( 1 - r )h )
假设CPU执行某段程序时,命中Cache2000次,非命中50次,Cache的存储周期为50ns,主存的存储周期为200ns。
平均访问时间:
ta = h * tc + (1-h)tm = 0.97 × 50ns+ (1-0.97) × 200ns = 54.5ns
访问效率:
e = tc / ta= 50 /54.5 = 91.7%
3.7.4 主存和Cache的编制
主存的地址编址
主存:主存的数据块称为“块”,用Bj表示,j= 0,1,2,…,M-1,共有M块;将主存分成M块,M=2m,每块包含B字,则B = 2b。
Cache的地址编址
Cache的数据块称为“行(或“块”)”,用Li表示,i= 0,1,2,…,C-1,共有C行;把Cache分成C行,C=2c
块大小=行大小=2b
即主存的大小和Cache的大小是相当的。
存储系统的容量指的是主存容量,不包含Cache的容量。
3.8 地址映射
地址映射:将CPU送来的全存地址转换为Cache地址。
地址变换主要是主存块号与Cache行号之间的转换。
地址映射有三种方式:直接映射、全相联映射、组相联映射。
3.8.1 直接映射
映射思路:一个主存块只能复制到Cache的一个特定行中;
映射关系:假设主存的块号为j,Cache的行号为 i,则地址映射函数为:i = j mod C(其中C表示Cache的行数)。
优点:实现简单;
缺点:不够灵活,利用率不高,冲突概率高。
主存地址结构:
主存地址的长度 = m + b;
主存的块数M = 2m;
Cache的行数C = 2C;
标记t = m - c;
块大小 = 行大小 = 2b。
假设主存容量为512KB,Cache容量为4KB,每个字块为16个字,每个字32位,按字节编址。
主存容量为512KB,地址位数19位,m+b=19
每个字块为16个字,每个字32位,4个字节,每个字块一共64B,b=6
主存的块数 = 512KB / 64B = 8KB,m = 13位
Cache的容量为4KB,Cache的行数C = 4KB / 64B = 64 = 26,c=6
标记t=m-c=13-6=7
3.8.2 全相联映射
映射思路:主存中的每一个块映射到Cache中的任何一个行中。
标记存放的是该行内容的主存块的块号。
标记的位数=主存块号的位数m
优点:提高命中率,利用率,减少冲突率;
缺点:标记位数增加,需要将主存的块和Cache的块全部进行比较,一般用相联存储器完成。
主存地址结构:
主存地址的长度 = m + b;
主存的块数M = 2m;
Cache的行数C = 2c;
块大小 = 行大小 = 2;
标记位数 = m。
假设主存容量为512Kx16位,Cache容量为4Kx16位,块长为4个16位的字,按字编址。
主存容量为512K×16位,地址位数为19位,m+b=19
块长4个字,b=2,(512K主存块数 = 512K / 4 = 128K,m = 17
3.8.3 组相联映射
映射思路:组间直接映射,组内全相联映射。
将Cache分为Q组,Q=2q,每组R行,R=2r;
Cache行数C =Q × R;
函数关系:i = j mod Q(其中:i为Cache组号,j为主存块号);
主存块存放在组位置是固定的,存到组中的行位置是任意的;
组相联也被称为R路组相联。
主存地址结构:
主存地址长度 = m + b,块大小 = 行大小 = 2b个字;
主存的块数M = 2m;
Cache的行数C = 2c,Cache的行数C = Q × R;
Cache的组数Q = 2q,每组的行数R = 2r;
Cache的组号位数q = c - r;
主存字块的标记t = m - q。
假设主存容量为512Kx16位,Cache容量为4Kx16位,块长为4个16位的字,按字编址。
主存容量为512K×16位,地址位数为19位,m+b=19
块长4个字,b=2,主存块数 = 512K/4 = 128K,m= 17
Cache容量为4Kx16位,Cache的行数C = 4K/4 = 1K,C=10
若是二路组相联映射下,R=2,r=1,组数Q=512,q=9,则:
若是四路组相联映射下,R=4,r=2,组数Q = 1K / 4=256,q=8,则:
当Cache大小、主存块大小一定时:
- 直接映射命中率最低,全相联映射的命中率最高;
- 直接映射的判断开销最小、所需时间最短,,全相联映射的判断开销最大、所需时间最长;
- Cache要为每一块数据增加一个标记项,来指明它是主存中哪一块的副本;
- cache行的位数=cache行标记顶位数=cache块位数。
当组相联只有一组时,就等同于全相联映射;当每组只有一块时,就等同于直接映射。
四、指令系统
4.1 指令系统概述
机器指令:由机器语言编写的指令,称为机器指令。
指令系统:全部机器指令的集合称为机器的指令系统。
指令(字)长度:一条指令中所包含的二进制代码的位数。
- 指令长度和机器字长没有固定关系;
- 单字长指令、半字长指令、双字长指令。
4.1.1 指令格式
一条指令由操作码和地址码两部分组成。
-
操作码:指出执行什么性质的操作;
-
地址码:给出被操作的信息(指令或者数据)的地址。
根据指令中操作数地址码的数量不同,可以分为:
-
零地址指令:
-
一地址指令:
-
二地址指令:
-
三地址指令:
4.1.2 指令类型
-
数据传输类指令:包括寄存器之间的传送、从内存中的读出以及向内存的写入等。
MOV,LDA …
-
算术和逻辑运算类指令:包括加、减、比较、乘、除、加1、减1等算术运算和与、或、非、异或等逻辑运算指令。
ADD,SUB,INC,AND …
-
移位操作类指令:包括算术移位、逻辑移位和循环移位等。
SHR …
-
转移类指令:包括无条件转移、有条件转移、子程序调用、返回和陷阱等。
LOOP,JC,JNC,JZ,JNZ,JMP …
-
输入输出类指令:用于和外围设备之间交换数据或传送命令及状态信息。
IN,OUT …
4.1.3 操作码的扩展
操作码的长度分为定长操作码和可变长操作码。
- 定长操作码:操作码的位数是固定的n位操作码最大可以表示2n条指令;
- 可变长操作码:全部指令的操作码字段的位数不固定。
最常见的变长操作码方法是扩展操作码,即操作码的位数随地址数的减少而增加。(扩展操作码的前提是保证指令字的长度不变)
假设某指令系统的指令字长是16 位,操作码4位,最多可以有3个地址段,每个地址字段占4位。
若固定操作码,则只能有16条三地址指令每个地址段4位,如果是3个地址段, 共12位。
一共扩展为61条,各指令的操作码一定不能重复;
不允许短操作码与长操作码的前面部分的代码相同。
4.2 寻址方式
4.2.1 指令寻址
即寻址下一条指令地址的方法
顺序寻址
通过程序计数器(PC)加1,自动形成下一条指令的地址。
跳转寻址
需要通过程序转移类指令实现转移地址可以通过直接寻址、相对寻址和间接寻址形成。
4.2.2 数据寻址
即寻址操作数的方法。
隐含寻址
即不明显给出操作数的地址,在指令中隐含操作数的地址。
乘法指令(以Intel X86为例):
MUL reg/mem8:8位操作数与AL寄存器的乘法;
MUL reg/mem16:16位操作数与AX寄存器的乘法;
MUL reg/mem32:32位操作数与EAX寄存器的乘法;
在这三条指令中,AL 寄存器、AX寄存器、EAX寄存器都是隐含寻址方式。
立即寻址
即在地址字段直接给出操作数。(获取操作数最快)。
MOV AX, 6666H
将6666H传送到寄存器AX中;
MOV AL, 55H
将数据55H传送到寄存器AL中;指令中的6666H、55H都是立即(数)寻址。
直接寻址
即指令中给出的地址就是操作数的地址。
- EA=A(
EA
有效地址,A
形式地址或直接地址); - D = (A) (
D
操作数,A
形式地址或直接地址)。
MOV AX, [1234H]
将内存地址为1234H的存储单元的内容送到AX寄存器中。
间接寻址
即指令中给出的是操作数地址的地址。
- EA=(A)(
EA
有效地址,A
形式地址或直接地址)
指令格式:
若寻址特征I = 0,表示直接寻址,这时的有效地址 EA = A;
若I = 1,则表示间接寻址,这时的有效地址 EA = (A)。
寄存器寻址
即指令中给出的是寄存器的编号操作数在寄存器中。(非访内存寻址方式)
所需要的地址码较短,有利于缩短指令字的长度节省存储空间。
- EA = R;
MOV reg,reg;
MOV mem,reg;
MOV reg, mem;
MOV reg,imm;
其中的reg都是寄存器寻址方式。
寄存器间接寻址
即寄存器中给出的不是操作数是操作数的地址。
- EA =(Ri)
MOV AL,[ESI],若(ESI) = 2000H,(2000H) = 0AH;
则执行后:(AL)=0AH。
访内寻址方式,一次访存,比间接寻址少访问一次内存;
可减少主存的访问次数,既提高了灵活性, 又扩充了寻址范围。
相对寻址
即有效地址是PC的内容加上形式地址,相对寻址是相对于下一条指令的偏移。
- EA = (PC) + A
**强调:**由于在取指过程中,PC的值会变化为PC+1,也就是下一条要执行的指令的地址值,所以实际的有效地址EA=PC+1+A。这是因为操作数的有效地址是在指令译码分析或者执行阶段完成的(这里的1是1条指令的长度)。
在多道程序设计中,多用相对寻址,便于实现程序浮动;
相对寻址多用于分支转移类指令,实现相对跳转转移。
基址寻址
即有效地址是基址寄存器的内容加上形式地址。
- EA = (BR) + A
变址寻址
即有效地址是变址寄存器的内容加上形式地址。
- EA = (IX) + A
变址寄存器既可用专用寄存器,又可用通用寄存器;
变址寻址便于处理数组问题。
堆栈寻址
即对堆栈进行操作的寻址方式,操作数的地址隐含使用堆栈指针SP。
堆栈指针(SP):是存储器中一块特定的、按后进先出(LIFO)原则管理的存储器。
-
数据进栈:PUSH指令,将数据压入栈顶地址,堆栈指示器减1;
-
数据出栈:POP指令,将数据从栈顶地址弹出,堆栈指示器加1。
各种寻址方式比较:
五、中央处理器
5.1 CPU的功能组成
5.1.1 CPU的组成
中央处理器简称CPU,主要包括:
- 运算器:完成算术运算和逻辑运算;
- 控制器:控制、指挥程序和数据的输入、运行以及处理运算结果。
CPU中的主要寄存器:
- 通用寄存器(组):可由程序员指定其功能,可以用来存放操作数和地址;
- 标志寄存器(PSWR):用于保存状态标志的寄存器;
- 程序计数器(PC):存放下一条要执行的指令在内存中的地址;
通用寄存器(组)、PSWR、PC为用户可见的寄存器。
- 指令寄存器(IR):用来存放当前正在执行的指令;
- 存储器地址寄存器(MAR):用来存放将被访问的内存单元的地址;
- 存储器数据寄存器(MDR):用来存放CPU和存储器进行交换的数据。
IR、MAR、MDR为用户不可见的寄存器。
通用寄存器和标志寄存器属于运算器,其它属于控制器。
5.1.2 CPU的功能
- 指令控制:保证机器按规定的顺序执行指令;
- 操作控制:一条指令的功能往往是由若干个操作的组合来实现的,因此CPU必须管理这些操作并产生完成这些操作所需的控制信号;
- 时间控制:对各种操作实施时间上的控制;
- 数据加工:对数据进行算术运算和逻辑运算处理;(完成数据的加工处理,这是CPU的根本的任务)
- 中断控制:对计算机运行过程中出现的异常情况和特殊请求进行处理。
5.1.3 控制器的功能及其组成
- 指令部件(上图橘黄色部分):主要完成取指令并执行指令;
- 时序部件(上图的深蓝色部分):产生一定的时房信号,保证机器的各个功能部件有节奏的进行信息传送、加工和信息存储;
- 微操作信号发生器(上图的浅蓝色部分):根据指令操作码的译码和时序信号,产生各种微操作控制信号;
- 中断逻辑控制(上图的紫色部分):对中断进行处理。
计算机实现具体功能的顺序:
重要步骤:
- 取出指令;
- 分析指令执行所需要的控制信号,并确定顺序;
- 功能部件在正确信号的控制下产生正确的动作,功能实现。
控制器的主要功能:
控制器主要控制指令的执行,负责协调并控制计算机各部件执行程序的指令序列,基本功能是取指令、分析指令和执行指令;
- 从主存中取出一条指令并指出下一条指令在主存中的位置;
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作;
- 指挥并控制CPU、主存、输入和输输出设备之间的数据流动方向。
所有的操作控制信号都必须和时钟进行配合。
5.2 时序系统
5.2.1 时序部件组成
时序信号产生器:
时钟脉冲源:由石英晶体振荡器组成,用来为环形脉冲发生器提供频率稳定且电平匹配的方波时钟脉冲信号;
环形脉冲发生器:产生一组有序的间隔相等或不等的脉冲序列;
启停控制逻辑:产生节拍每个节拍的宽度正好对应一个时钟周期。
5.2.2 多级时序
- CPU的主频:时钟信号的频率;
- 时钟周期:CPU主频的倒数;
- 每个节拍的宽度正好等于一个时钟周期;
- 一个机器周期中包含若干个时钟周期,或者若干个节拍;
- 在每个节拍内可以完成一个或几个可以同时执行的操作。
上图中,一个机器周期中包含了4个节拍T0,T1,T2,T3。
-
指令周期:CPU从主存中取出并执行一条指令的时间。
-
一个指令周期包含若干个机器周期(也称CPU周期)。
-
每个指令周期内的机器周期可以不等,每个机器周期内的节拍数也可以不等。
定长的机器周期:
不定长的机器周期:
5.2.3 控制方式
-
同步控制方式:固定时序控制方式,各项操作由统一的时序信号控制。
-
异步控制方式:可变时序控制方式,各项操作不采用统一的时序控制信号。
一般用于速度差异比较大的设备之间,例如主机于I/O间的传送控制。
-
联合控制方式:是同步控制和异步控制结合的方式。
通常在CPU内部采用同步方式,CPU通过总线访问主存或者外设时采用异步控制方式。
5.3 指令的执行
5.3.1 指令的执行过程
条指令的执行包括取指、分析和执行三个阶段。
5.3.2 取值周期
按PC的内容取出指令,并将PC内容递增。
确定指令所在的存储单元并取出指令;形成下一条要执行的指令的地址。
-
PC→MAR →地址总线一主存;
-
CPU发出读命令→控制总线→主存;
-
主存→数据总线→MDR →IR;
-
CPU发出控制信号→PC内容加1。
这是一个公操作,对所有指令都一样。
5.3.3 取操作数周期
按照寻址方式计算操作数的有效地址。
- Ad(IR)(或MAR)→MAR地址总线→主存;
- CU发出读命令→控制总线→主存;
- 主存→数据总线→MDR。
5.4 数据通路
即数据在功能部件之间传送的路径。
-
单总线结构:将所有部件的输入端和输出端都连接在一条公共通路上。
一次只能传输一个数据
-
双总线结构:将所有部件的输入端和输出端连接到两条公共通路上。
双总线及以上结构数据的传输可以同时进行
-
三总线结构:将所有部件的输入端和输出端连接到多条公共通路上。
根据具体的数据通路确定指令执行过程的方法。(微操作级别)
-
注意数据的流动方向、控制线的方向, 即注意所有线条的箭头
-
注意每个功能部件的所有操作控制信号
-
准确分析指令每一个CPU周期中执行的操作及其控制信号,安排微操作节拍时必须注意微操作的先后顺序
-
微操作节拍的安排:
- 凡是被控制对象不同的微操作,若能在一个节拍内执行, 应尽可能安排在同一个节拍内以节省时间;
- 如果微操作所占的时间不长,应尽力安排在一个节拍内完成;
- 在一个节拍,总线上只能有一个数据。
5.4.1 主存与CPU之间的数据传送
CPU从主存读取指令:
- PC →内部总线→MAR,(PCout,MARin);
- 读内存,(MemR);
- 主存→MDR,(MDRin);
- MDR →内部总线→IR,(MDRoutIRin)。
1和2为一个节拍,3和4为一个节拍
5.4.2 寄存器之间的数据传送
把R0的内容送到R1:
- R0→内部总线 (R0out);
- 内部总线→R1 (R1in )。
1和2为一个节拍
5.4.3 执行算术或逻辑运算
累加器AC的内容和指令中操作数相加:
- Ad(IR)→内部总线→MAR(MARin);
- 读内存,(MemR);
- 主存→ MDR,(MDRin);
- MDR→内部总线→A, ( MDRout,Ain );
- AC →ALU,(ACout);
- 执行加法→AC,(ADD,ACin)。
1和2为一个节拍,3和4为一个节拍,5为一个节拍,6为一个节拍
5.4.4 用方框图语言表示指令周期
-
公操作用
~
表示,指一条指令执行完毕后,开始的一系列公共操作; -
CPU周期:用“方框”表示,方框中的内容表示数据通路的操作或某种控制操作;
-
判别或测试,用“萎形框”表示,依附于紧接着它的前面的一个方框。
一数据通路如图。
指令ADD R2,R0;指令SUB R1,R3:
下图是一个简化的CPU与主存连接结构示意图(图中省略了所有的多路选择器)。其中有一个累加个状态数据寄存器(ACC)和其他4个寄存器:主存地址寄存器(MAR)、主存数据寄存器寄存器(MDR)、程序寄存器(PC)和指令寄存器(IR),各元件及其之间的连线表示数据通路,箭头表示信息传递方向。
- 请写出图中a、b、c、d四个寄存器的名称。
a是MDR,b是IR,c是MAR,d是PC
- 简述图中取指令的数据通路。
PC→MAR→主存→MDR→IR
- 简述数据在运算器和主存之间进行存/取访问的数据通路(假设地址已在MAR中)。
读:主存→MDR→ALU→ACC
写:ACC→MDR→主存
- 简述完成指令LDAX的数据通路(X为主存地址,LDA的功能为(X)→ACC)。
X→MAR→主存→MDR→ALU→ACC
- 简述完成指令ADDY的数据通路(Y为主存地址,ADD的功能为(ACC)+(Y)→ACC)。
Y→MAR→主存→MDR
ALU→ACC
- 简述完成指令STAZ的数据通路(2为主存地址,STA的功能为(ACC)→Z。
Z→MAR,ACC→MDR→主存
要对计算机中主要的组成部件以及主要寄存器非常熟悉,特别是每类寄存器的作用以及通常放置的位置;
要特别注意各个器件之间的连线,以及连线的方向,数据线是双向的,地址线是单向的,比CPU发出,控制线是单向的’’
具体来说, MAR存放的是存储地址,必须和地址线以及存储器相连;
MDR存放的是数据必须和数据线以及存储器相连;
PC存放的是地址,一般和MAR相连;
IR存放的是指令,般和MDR相连;
累加器ACC以及PSW应在运算器中。
按照给定的数据通路,分析指令的执行过程并绘制指令流程图。
认真读图,依然是特别注意各个器件之间的连线;
牢记指令的执行过程:取指、分析、执行;
注意微操作、微命令的顺序及节拍安排;
特别注意寻址方式。
5.5 微程序控制器
5.5.1 设计思想
微操作信号发生器也叫CU。
- 计算机的功能就是执行程序;
- 程序的执行是由控制器控制的;
- 控制器的核心部件就是控制单元。
-
输入信号:包括时钟、指令寄存器、标志等;
-
输出信号:控制信号,作用在计算机的功能部件上。
控制单元有两种结构:微程序控制器和组合逻辑控制器
每一个控制信号用1位二进制数表示
- 将微操作控制信号进行编码转换成一串二进制数;
- 假设操作信号有效用“1”表示,无效用“0”表示;
- 在不同的CPU周期,就得到不同的二进制数串这就是一条“微指令“;
- 因为一条指令包含若干个CPU周期,所以就包含若干条微指令,这些微指令就构成了一段微程序;所以,一条机器指令对应一段“微程序”;
- 将所有的机器指令对应的微程序都放在控制存储器(CM)中。
一个指令系统有n条指令
假设一个指令系统中共包含n条机器指令:
- 在控存中存放有n段微程序;
- 一条机器指令对应一段微程序;
- 一条机器指令的执行就转化为一段微程序的执行。
5.5.2 基本概念
微命令:控制部件通过控制线向执行部件发出各种控制命令;
微操作:执行部件接受微命令后所进行的操作;
微指令:在机器的一个CPU周期中,一组实现一定操作功能的微命令的组合,构成一条微指。
微指令格式:
-
操作控制字段:又称微操作码字段, 用以产生某一步操作所需的微操作控制信号;
-
顺序控制字段::又称微地址码字段,用以控制产生下一条要执行的微指令地址。
微指令字长:一条微指令所包含的二进制位数;
微指令周期:一条微指令的执行时间;
微程序:微指令序列为微程序;
控制存储器:用来存放微程序的高速存储器;
微地址:控存的一个单元的内容即控制字,代表了某一个节拍的一组微操作控制信号的信息而把控存单元的地址称为“微地址”。
5.5.3 基本工作过程
-
从控存中取出一段“取机器指令”用的微程序称为取指微程序,该微程序完成从主存中读取机器指令并送往指令寄存器;
-
机器指令操作码通过微地址形成部件,产生对应的微程序入口地址,并送入微地址寄存器;
-
逐条取出对应的微指令,每一条微指令提供一个微命令序列,控制有关的微操作;
-
执行完对应于一条机器指令的一段微程序后,返回到取指微程序的入口,以便取出下一条机器指令。不断重复,直至程序执行完毕。
5.5.4 微命令的编码
微命令的编码又称微指令的控制方式。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
-
直接表示法(直接控制)方式:操作控制字段中每一位代表一个微命令。
某机器的微指令格式:
假设某条指令的取指周期中RD’、LDIR’、LDDR’、LDAR’、PC+1信号有效,PP为10,下址为1010
对应的微指令为:把这条指令的每个机器周期对应的微指令都写出来, 就构成了这条指令对应的微程序。
字段直接编码方式:把一组直斥性的微命令信号组成一个小组,通过译码器对每一个微命令信号进行译码。
-
互斥的微命令是不能同时有效的微命令;
-
互斥性微命令分在同一段内,相容性微命令分在不同的段中;
-
每个小段中包含的信息位不能太多;
-
一般每个小段还要留一个状态,表示不发出任何微命令。
字段间接编码方式:一个字段的某些微命令需由另一个字段中的某些微命令来解释。
5.5.5 微命令的格式
水平型微指令:一次能定义并执行多个并行操作微命令的微指令。
垂直型微指令:微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能。
混合型微指令:在垂直型的基础上增加一些不太复杂的并行操作。
总结:
性质 | 水平型 | 垂直型 |
---|---|---|
并行性 | 好 | 不好 |
执行指令需要的微指令数 | 少 | 多 |
和机器指令的相似度 | 差别很大 | 相似 |
总体描述 | 用较短的微程序结构换取较长的微指令结构 | 用较长的微程序结构换取较短的微指令结构 |
5.5.6 微指令的形成
微地址的形成分为两种情况:入口地址和后继地址。
-
微程序的入口地址:由机器指令的操作码字段指出各个微程序的入口地址。
- 操作码+n位二进制数构成;
- 2n=相邻两个微程序的入口地址相差的单元数。
-
微程序的后继地址
后继微地址的形成有两种方法:
-
计数器法。
- 计数器法:在顺序执行微程序时,后继微地址由先行微地址加上一个增量来产生;在非顺序执行微指令时,由微指令的顺序控制字段产生转移地址。
- 优点:微指令的顺序控制字段比较短,微地址的产生机构简单;
- 缺点:不能实现两路上的并行微程序转移。
-
断定方式.
- 后继微地址是由微程序设计者指定,或是根据微指令所规定的测试结果直接决定后继微地址的全部或部分值。
- 优点:灵活性好,速度快;
- 缺点:地址产生机构复杂。
示例:
断定方式,下一条微指令的地址为
1010
。
-
六、总线系统
6.1 概念&分类
总线是构成计算机系统的互连机构,是一组能为多个部件分时共享的公共信息传送线路 。
分类1:
- 内部总线:CPU内部连接各寄存器及运算部件之间的总线;
- 系统总线:CPU同计算机系统的其他高速功能部件互相连接的总线;
- I/O总线:中、低速I/O设备之间互相连接的总线;
- 通信总线:用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线。
分类2:
- 数据总线:用来传输各功能部件之间的数据信息,双向、位数与机器字长和存储字长有关;
- 地址总线:用来指出数据总线上源数据或目的数据所在的主存单元或I/O端口的地址,单向,位数与主存地址空间的大小有关;
- 控制总线:传输的是控制信息,包括CPU送出控制命令和主存(外设)返回CPU的反馈信号。
6.2 总线的特性
- 机械特性:尺寸、形状;
- 电气特性:传输方向和有效的电平范围;
- 功能特性:每根传输线的功能是地址、数据还是控制信号;
- 时间特性:信号的时序关系,在什么时间内有效。
6.3 总线种类
6.4 PCI总线
-
PCI总线是一个与处理器无关的高速外围总线;
-
PCI总线采用同步时序协议和集中式仲裁策略,并具有自动配置能力;
-
PCI总线的基本传输机制是无限猝发式传送,不存在DMA,利用桥可以实现总线间额猝发式传送;
-
系统中允许有多条PCI总线,可以使用HOST桥与HOST桥,也可以使用PCI/PCI桥与已和HOST总线相连的PCI相连;
-
以桥连接的PCI总线结构具有很好的扩充性和兼容性允许多条总线并行工作。
6.5 总线结构
6.5.1 单总线结构
单总线结构: 是将CPD、主存、I/O设备都连接在一组总线上。
特点: 由于I/O设备与主存共用一组地址线,因此主存和I/O设备是统一编址的,CPU就可以像访问内存一样访问外部设备。
6.5.2 双总线结构
双总线结构: 有两条总线,一条是主存总线,另一条是I/O总线。
- 主存总线:用于在CPU、主存和通道之间传送数据。
- I/O总线:用于在多个外部设备与通道之间传送数据。
特点: 将低速设备从单总线上分离出来,需要增加通道等硬件设备。
6.5.3 三总线结构
三总线结构: 增加一条DMA总线,专门用于I/O高速设备与主存之间的信息交换。
特点: 主存总线与DMA总线不能同时对主存进行存取,I/O总线只有在CPU执行I/O指令时才能用到。
6.5.4 多总线结构
多总线结构: 总线桥是一种具有缓存、转换、控制功能的逻辑电路。
-
桥是一种具有缓冲、转换控制功能的逻辑电路。
-
局部总线通常是连接高速的北桥芯片,用于连接很多重要的硬件部件(如显卡、声卡等)。
-
设备总线、通信总线通常由南桥芯片控制,用于连接计算机与计算机,或连接计算机与外部I/O设备。
6.6 总线的性能指标
- 总线传输周期:指一次总线操作所需的时间包括申请阶段、寻址阶段、传输阶段和结束阶段。总线传输周期通常由若干总线时钟周期构成。
- 总线时钟周期:即机器的时钟周期。
- 总线工作频率:总线上各种操作的频率,为总线周期的倒数。实际上指1秒内传送几次数据。
若总线周期 = N个时钟周期,则总线的工作频率 = 时钟频率 / N
- 总线时钟频率:即机器的时钟频率,它为时钟周期的倒数。
- 总线宽度:又称总线位宽,它是总线上同时能够传输的数据位数。
- 总线带宽:总线的最大数据传输率,即单位时间内总线上最多可传输数据的位数,通常用每秒传送信息的字节数来衡量,单位可用字节/秒(B/s)表示。
总线带宽 = 总线工作频率 × (总线宽度/8)
6.7 总线仲裁
总线仲裁是以某种方式选择一个主设备优先获得总线的控制权。
仲裁方式:
-
集中式仲裁方式:需要总线控制器,每个功能模块有两条线连到总线控制器,一条是请求线,一条是应答线。
- 链式查询方式;
- 计数器定时查询方式;
- 独立请求方式。
-
分布式仲裁:不需要急线控制器每个功能模块具有自己的仲裁号和仲裁器。
6.8 总线事务
总线事务指从请求总线到完成总线使用的操作序列。
- 请求阶段:主设备(CPU或DMA)发出总线传输请求,并且获得总线控制权;
- 仲裁阶段:总线机构决定将下一个传输周期的总线使用权授予某个申请者;
- 寻址阶段:主设备通过总线给出要访问的从设备地址及有关命令,启动从模块;
- 传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送;
- 释放阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权。
6.9 总线的定时方式及控制
6.9.1 总线的定时方式
同步定时方式: 是指系统采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。
使用场合: 适用于总线长度较短及总线所接部件的存取时间比较接近的系统。
6.9.2 总线的定时控制
异步定时方式: 没有统一的时钟也没有固定的时间间隔,完全依靠传送双方相互制约的“握手”信号来实现定时控制。
异步定时方式又分为以下3种类型:
-
不互锁方式。
主模块的请求信号和从模块的回答信号没有互相制约关系。
-
半互锁方式。
主模块的请求信号和从模块的回答信号有简单的制约关系。
-
全互锁方式。
主模块的请求信号和从模块的回答信号有完全互相制约关系。
异步通信可用于并行传送或串行传送.
七、输入输出系统
7.1 输入输出系统概述
7.1.1 基本概念
输入输出系统:对各种形式的信息进行输入和输出控制的系统。
- I/O软件:包括驱动程序、用户程序和管理程序等;
- I/O硬件:包括外部设备、设备控制器、接口和I/0总线等。
I/O的功能:
- 为了得到高效可靠的数据传输,选择输入输出设备;
- 在选定的输入输出设备和CPU之间进行数据交换。
7.1.2 I/O接口
I/O的接口:
接口是由半导体元件构成的逻辑电路。
作为一个转换器,保证外部设备发送或接收的信息符合计算机系统特性所要求的形式。
接口的主要功能:
- 进行地址译码和设备选择;
- 实现主机和外设的通信联络控制;
- 实现数据缓冲和交换;
- 信号格式的转换传送控制命令和状态信息。
端口:在接口内部设置的可以被CPU直接访问的寄存器,可分为命令口、状态口、数据口等。
按数据传送方式可分为并行接口和串行接口:
- 并行接口:一字节或者一个字的所有位同时传送;
- 串行接口:一位一位地传送。
7.1.3 I/O编址方式
统一编址方式
-
输入输出设备接口中的控制寄存器、数据寄存器、状态寄存器等和内存单元一样看待,他们和内存单元联合在一起编排地址。
-
不需要专门的I/O指令组。
内存地址是从0000H~2000H,输入输出的地址是2001H~4000H。
MOV AX,[1800H]
;从内存1800H的单元的内容送到AX中。
MOV AX,[2800H]
;从输入输出2800H端口的内容送到AX中。
独立编址方式
- 内存地址和I/0设备地址是分开的,访问内存和访问I/O设备使用不同的指令,有专门的访问I/0的指令。
内存地址是从0000H~2000H输入输出的地址是0000H~2000H。
MOV AX,[1800H]
;从内存1800H的单元的内容送到AX中。
IN AX,[1800H]
;从输入输出1800H端口的内容送到AX中。
7.2. 程序查询方式
- 完全由CPU执行程序,来控制主机与外设之间的信息传送;
- 工作过程:先由主机通过启动指令启动外设工作,启动后主机用测试指令不断查询外设工作是否完成,一旦外设工作完成,就可进行数据传送。
- 特点:控制简单,但是主机和外设是串行工作的。当外设速度很慢时,主机大量时间被消耗在测试等待中,使主机不能充分发挥效率。
7.3 程序中断方式
7.3.1 基本概念
中断:是指CPU中止现行程序的执行,转而执行另一个更紧迫事件的程序,一旦处理完毕,自动返回原来被中断的程序。
中断的功能:
- 实现CPU与I/O设备的并行工作;
- 处理硬件故障和软件错误
- 实现人机交互,用户干预机器需要用到中断系统;
- 实现多道程序、分时操作,多道程序的切换需借助于中断系统;
- 实时处理需要借助中断系统来实现快速响应;
- 实现应用程序和操作系统(管态程序)的切换称为“软中断”;
- 多处理器系统中各处理器之间的信息交流和任务切换。
7.3.2 中断的工作过程
中断请求:
- 中断源:引起中断的事件,即发出中断请求的来源。
- 中断源的种类:
- 外中断:I/O设备、定时中等来自外部设备的中断;
- 内中断:处理器硬件故障或程序“出错”引起的中断;
- 软中断:由Trap指令产生,是在程序中预先安排好的。
- 中断触发器:当中断触发器为1时)向CPU发出“中断请求”信号。
- 非屏蔽中断(不可屏蔽中断):即使在关中断的情况下也会被响应内中断和严重的外中断;
- 可屏蔽中断:可通过中断请求标记触发器控制,且受中断标志位的影响,在关中断情况下不接受中断请求。
中断判优:
- 中断优先权:有多个中断同时发生时,对各个中断响应的优先次序。
- 中断响应判优:
- 中断响应优先级:CPU响应中断请求的先后顺序;
- 中断判优逻辑是通过硬件排队器实现的。
常规的优先级别:
- 不可屏蔽中断>内部异常>可屏蔽中断硬件故障 >软件中断;
- DMA中断请求优先于I/O设备传送的中断;
- 请求高速设备优先于低速设备;
- 输入设备优先于输出设备。
中断响应:
-
CPU响应中断的条件
- 中断源有中断请求;
- CPU允许中断及开中断;
- 一条指令执行完毕。
-
中断允许触发器
通过”开中断”或“关中断”指令进行置位和复位,只有触发器状态为1时,才允许响应中断。 -
中断屏蔽触发器
为每个中断源设置一个中断屏蔽触发器,屏蔽此设备的中断请求,各个设备的中断屏蔽触发器组成中断屏蔽寄存器。
中断响应条件满足后, 转入中断服务程序,进行中断处理。
中断处理:
-
中断处理过程
-
关中断: 进入不可再次响应中断的状态;
-
保存断点和现场: 把当前的PC值、程序状态字、中断屏蔽寄存器等保存起来;
1和2为中断隐指令
-
判断中断源,转尚中断服务程序: 根据中断源,转入相应的中断服务程序;
-
开中断: 允许更高级的中断请求得到响应,实现中断嵌套;
-
执行中断服务程序: 执行实际有效的中断处理工作;
-
关中断: 再次进入不可中断的状态,准备退回源程序、恢复断点、恢复现场;
-
开中断、中断返回: 中断程序执行完毕,开中断,返回原程序执行。
-
中断返回:
- 中断返回
**开中断、中断返回:**中断程序执行完毕,开中断,返回原程序执行。
7.4 直接内存访问
**DMA数据传送方式:**DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而是直接在内存和I/0设备之间进行。
7.4.1 DMA的特点
- 它使主存与CPU的固定联系脱构、主存既可被CPU访问又可被外设访问;
- 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现;
- 主存中要开成专用缓冲区,及时供给和接收外设的数据;
- DMA传送速度快,CPU和外设并行工作提高了系统效率;
- DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
7.4.2 DMA的传送方式
停止CPU访问(成组联系传送方式):
CPU响应DMA请求后,让出存储总线,直到一组数据传送完毕后,DMA控制器才把总线控制权交还给CPU。这种方法适合于存储速度较快的山容量存储器。
周期挪用方式(单字传送方式、周期窃取方式):
当I/Q和CPU同时请求访问主存时,就会出现访问冲突,此时,CPU暂时放弃总线占有权,由I/O挪用一个或几个存储周期,CPU暂停工作。
透明DMA方式(DMA与CPU交替操作方式,总线周期分时方式):
标准DMA工作方式,如果DMA和CPU同时需要访问存储总线,则DMA的优先级高于CPU。
7.4.3 DMA的数据传送过程
DMA的传送过程分为预处理、数据传送和后处理3个阶段。
7.4.5 DMA方式和中断方式的区别
-
中断方式是程序的切换,需要保护和恢复现场而DMA方式除了预处理和后处理,其他时候不占用CPU的任何资源;
-
对中断请求的响应只能发生在每条指令执行完毕时(即指令的执行周期后);而对DMA请求的响应可以发生在每个机器周期结束时(在取指周期、间址周期、执行周期后均可),只要CPU不占用总线就可被响应;
-
中断传送过程需要CPU的干预;而DMA传送过程不需要CPU的干预;
-
DMA请求的优先级高于中断请求;
-
中断方式具有对异常事件的处理能力,而DMA方式仅局限于传送数据块的I/O操作;
-
从数据传送来看,中断方式靠程序传送DMA方式靠硬件传送。
—— writing by Pan Qifan(潘琦藩) ——