Key point:
冯诺依曼计算机的特点:
计算机是如何区分存储器中的指令和数据的:
- 时间层面:在取指周期(或运行取指微程序)内,由 PC 提供访存地址,取来的即为指令;在执行周期(或运行执行周期相对应的微程序段)内,由指令的地址码部分提供访存地址,取来的即为操作数,也就是数据
- 空间层面:取来的机器指令应存放在指令寄存器,而取来的数据(或操作数)则应该存放在以累加器为代表的通用寄存器内。
现代计算机可以认为由三大部分组成:CPU 、I/O 设备及主存储器。其中,CPU 与主存储器合起来,称为主机,I/O 设备又可称为外部设备。
Key point:
存储器使用带宽衡量速度,带宽指单位时间内存储器存取的信息量。需要注意
计算机进行数据处理时,一次存取、加工和传送的数据长度称为字。一个字通常由多个字节组成。字长又称作“机器字长”,顾名思义,就是字的长度,这里的长度用位来表示。
在信息处理中,一群字作为一个单元来处理的称为“字块”.也称“字组”。
Big endian(大端,高位字节地址作为字地址) 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。
按存取方式分类:
叠瓦盘的最顶和最底部的两个盘面是不用的,例如10个盘片只有18个有效盘面。
按照作用进行分类:
RAM中:静态RAM更快,集成度更高,成本更高(详见下面”DRAM与SRAM“)。
根据原始数据的进入方式,ROM被分成了几类:
Flash:使用半导体结构模拟磁盘结构,逻辑上和磁盘一样。
DRAM的行列地址按先后顺序传送,相比SRAM减少了引脚。
需要刷新的原因有两点:
因此需要按照一定周期进行刷新,通常这个时间为 ,称为刷新周期或再生周期。刷新是一行行进行的。刷新方式有三种:
三级存储体系:
图中所示的缓存是一个片外缓存,也就是CPU外部的缓存,位于主板上。通常来讲,我们所讨论的都是CPU内的缓存。
高速缓存用于解决主存和CPU之间IO能力的差异,显然,当CPU的访问命中率高的时候缓存可以有效拉高访问效率。
存储系统的层次主要体现在:
主存与 Cache 之间的数据调度是由硬件自动完成的,对程序员是透明的。而主存—辅存之间的数据调度,是由硬件和操作系统(采用虚拟存储技术)共同完成的。
存储器扩展有三种方式:
太简单,没有考过
字扩展一定需要译码器辅助转换地址。通常将高位地址接到译码器输入,输出接到片选线上。
基本思想是在不提高存储器速率、不扩展数据通路位数的前提下,通过存储芯片的交叉组织,提高CPU单位时间内访问的数据量,从而缓解 快速的CPU与慢速的主存之间的速度差异。
一个4体低位交叉的存储器,假设存取周期为 T,CPU 每隔 1/4 存取周期启动一个存储体,试问依次访问 64 个字需多少个存取周期?
需要的存储周期数:,存取周期数取整,为 17 个。
Cache的出现建立在程序访问的局部性上。一般Cache 采用高速的 SRAM 制作, 其价格比主存费,但因其容量远小于主存,因此能很好地解决速度和成本的矛盾。
以全相联映射技术为例,说明在带有 Cache 的存储系统中,“读”操作是怎样完成的:
当 CPU 发出主存地址后,地址映射机构按照全相联映射方式将主存地址标记与 Cache 所有字块的标记进行比较,以判断出所访主存字(主存地址的内容)是否已在 Cache 中。若命中,直接访问 Cache,将该字送至 CPU;若未命中,一方面要访问主存,将该字传送给 CPU,与此同时,要按照全相联映射方式转换的 Cache 地址将该字所在的主存块装入 Cache,如果此时 Cache 已装满,就要执行替换算法,腾出空位才能将新的主存块调入。
Cache的操作对用户是零感知的,自动进行读写。
将 位的低位作为一个字块,所有操作都以字块为最小单位。因为主存地址空间大于Cache地址空间,所以Cache需要一部分空间作为“标记”区分具体是哪一块主存字块。
Cache主要需要三个部分:
Cache的读操作很简单,但写操作比较复杂,因为对 Cache 块内写人的信息,必须与被映射的主存块内的信息完全一致。当程序运行过程中需对菜个单元进行写操作时,会出现如何使 Cache 与主存内容保特一致的问题。日前主要采用以下几种方法。
设主存容量为 1MB,采用直接映射方式的 Cache 容量为 16KB,块长为 4,每字 32 位。试问主存地址为 ABCDEH 的存储单元在 Cache 中的什么位置?
主存地址 ABCDEH,Cache 的地址为 14 位,其中字块内地址为 4 位,Cache 字块地址为 10 位。采用直接映射方式,只要将主存地址后 14 位地址与 Cache的 14 位地址相同就行了。因此:
ABCDEH = 1010 1011 1100 1101 1110B
,其中,后 14 位地址为11 1100 1101 1110
,用十六进制描述为3CDEH
,这就是指定的主存单元在 Cache 中的位置。
可以理解为通过编组将直接映射的Cache块减少;对于一组内的字块按照全相联方式进行动态的映射。
Key point:
输入输出系统由I/O软件和I/O硬件两部分组成。
I/O软件的主要任务为:
I/O软件包括I/O指令和通道指令。
I/O指令是机器指令的一类,由操作码、命令码、设备码组成。其中,命令码体现I/O设备的具体操作,例如:
通道指令是具有通道的I/O系统专门设置的指令。
在带有接口的I/O系统,其I/O硬件一般包括接口模块及I/O设备两大部分。
根据是否在主存地址空间内编入I/O设备地址,可以区分为:
I/O采用统一编址,进行输入输出操作的指令是访存指令;I/O采用不统一编制,进行输入输出操作指令是输入输出指令。
根据设备码即可得到设备号。
传送方式可以分为:
当I/O设备与主机距离很远时,采用串行传送较为合适。
立即响应方式:
对于十分缓慢的设备,当其与CPU联系时往往已经处于等待状态,因此只要指令一到就可以响应。
异步工作采用应答信号联络:
在工作速度不匹配的情况下按照异步方式工作。
对于串行信号,往往使用“Ready”和“Strobe”信号来进行应答工作。
并行信号则需要设定一组特殊标记,用“起始”和“终止”来建立联系。
同步工作采用同步时标联络:
同步工作场景下要求CPU和I/O设备速度完全同步,此时需要专门的同步时标控制。
包括辐射式和总线式。
I/O 设备与主机交换信息时,共有 5 种控制方式:程序查询方式、程序中断
方式、DMA 方式、I/O 通道方式和 I/O 处理机方式。其中前 3 种方式是基本的且广泛应用的控制方式。
三种方式的工作特点:
项目 | 程序中断方式 | DMA方式 |
---|---|---|
数据传送 | 程序传送 | 硬件传送 |
CPU响应时间 | 一条指令结束时响应 | 指令周期内的任一存取周期结束时 |
处理异常 | 可以 | 不可以 |
是否中断现行程序 | 是(需要保护现场) | 否 |
优先级 | 低 | 高 |
DMA方式主要用于大批数据的传送,例如读写磁盘、图像处理、高速数据采集系统,提高系统吞吐量。
CPU 通过程序不断查询 I/O 设备是否已做好准备,若设备未准备就绪,就继续查询,直到查得设备准备就绪,就将数据从 IO 接口送至 CPU。这种方式下 CPU 和 IO 设备处于串行工作状态,在反复的查询过程中 CPU 不能执行原程序,相当于原地踏步,工作效率不高。程序查询方式中,CPU与设备串行工作,传送与主程序串行工作。
CPU 启动 I/O 设备后,继续执行自身程序,只是当 I/O 设备准备就绪并向CPU 发出中断请求后才子以响应。这种方式解决了 CPU 原地踏步的问题。CPU与设备并行工作,传送与主程序串行工作。
主存与 IO 设备之问有一条数据通路,不需要调用中断服务程序就可以直接访问主存。当这种访问与 CPU 访问主存发生冲突时,CPU 总是将总线占有权让给DMA,通常这个时长是一个读取周期,此时称为窃取周期。
总线方式的 I/O 接口包括:数据线+设备选择线+命令线+状态线
接口的功能和组成:
接口按照不同的标准可以分为不同的类型,包括:
程序查询方式的核心问题在于每时每刻不断查询 IO 设备是否准备就绪。
根据例题的计算,程序查询方式对于鼠标的响应还算可以,但频繁的查询完全无法应对磁盘IO。
在I/O设备与主机交换信息时,由于设备本身机电特性的影响,其工作速度较低,与 CPU 无法匹配,因此,CPU 启动设备后,,往往需要等待一段时间才能实现主机与I/O设备之间的信息交换。如果在设备准备的同时,CPU 不作无谓的等待,而继续执行现行程序,只有当I/O设备备就绪向 CPU 提出请求后,再暂时中断 CPU 现行程序转I/O服务程序,这便产生了IO中断。
程序中断的响应条件可以归纳为三条:
EINT = 1
为了实现I/O中断,其接口电路中需要配置相关的硬件:
向量地址和中断服务程序的入口地址是两个不同的概念
CPU 总是在统一的时间,即每条指令执行阶段的最后时刻,查询所有的设备是否有中断请求
大致可以划分为如下阶段:
大致可以划为如下几个阶段:
根据能否在中断中处理新的中断可以划分为多重中断(中断嵌套)和单重终端,二者处理关中断的时机有区别。
DMA方式下主存与I/O设备之问有一条数据通路不需要调用中断服务程序就可以直接访问主存。
由于DMA接口和CPU共享主存,这有可能导致访问的冲突,为此有三种解决方法:
因此DMA可以设置一个小存储器,先将数据写入小存储器,再和主存交换数据,提高单次传输的数据吞吐。
应该指出,I/O设备每挪用一个主存周期都要申请总线控制权、建立总线控制权和归还总线控制权。因此,尽管传送一个字对主存而言只占用一个主存周期,但对 DMA 接口而言,实质上要占2-5个主存周期(由逻辑线路的延迟特性而定)。因此周期挪用的方法比较适合于I/O设备的读/写周期大于主存周期的情况。
DMA 方式能取代程序中断方式吗?请说明理由。
不能。因为:
- DMA 只能用于高速外设与主存之间的简单数据传输,却不能像中断方式那样处理复杂的随机事件
- 在DMA方式的数据传送过程中,本身需要利用中断方式来完成DMA传送的后处理。
DMA 接口的功能:
DMA接口中也有一系列硬件提供支持,例如:
DMA的工作划分为三个阶段:
以硬盘读写为例,说明在主机和外设之间进行数据传送,为什么需要采用DMA方式?
一些高速外设,如硬盘、光盘等I/O设备,经常需要和主存进行大批量的数据交换;若采用程序查询方式或程序中断方式来完成,即通过CPU执行程序来完成数据交换,数据交换都是以字或字节为单位,速度较慢,极可能造成数据的丢失,因而不能满足批量数据的高速传递需求。因此,需要借助于硬件,比如DMA控制器来实现主存和高速外设之间的直接数据传送。
Key point:
设为真值,为绝对值,说明能否成立?
当为真值,为绝对值时,不能成立。的结论只在时成立。当时,由于是一个负值,而是一个正值,因此此时不等于。
讨论若,是否有?
若,不一定有。 时 的结论只在 ,及 时成立。当时,有,但由于负数补码的符号位为1,则。同样,当时,有,但。
注意:
什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采取什么机器数形式?
机器零指机器数所表示的零的形式,它与真值零的区别是:机器零在数轴上表示为“0”点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”,而真零对应数轴上的一点(0点)。若要求用“全0”表示浮点机器零,则浮点数的阶码应用移码、尾数用补码表示(此时阶码为最小阶、尾数为零,而移码的最小码值正好为“0”,补码的零的形式也为“0”,拼起来正好为一串0的形式)。
规格化数的定义为:
基数不同,规格化形式不同(指原码或真值):
对于补码,要求的是符号位和第一数位不同
基数 越大,所能表示的浮点数范围越大,但精度越低。
详细比较参照该表:
S>0 | 规格化形式 | S<0 | 规格化形式 |
---|---|---|---|
真值 | 0.1xxxxx |
真值 | -0.1xxxxx |
原码 | 0.1xxxxx |
原码 | 1.1xxxxx |
补码 | 0.1xxxxx |
补码 | 1.0xxxxx |
反码 | 0.1xxxxx |
反码 | 1.0xxxxx |
有两个特例:
逻辑移位和算术移位的区别:
连同符号位一起相加,符号位产生的进位自然丢掉。
小数加法示例:
var A = "0.1011", B = "-0.0101"
// 求A+B的补码
var A_ = "0.1011", B_ = "1.1011"
0.1011
+ 1.1011
//------
10.0110
// A+B的补码为0.0110
// A+B就为0.0110
整数加法示例:
var A = -9, B = -5
A = "1,1001", B = "1,0101"
A_ = "1,0111", B = "1,1011"
1,0111
+ 1,1011
//------
11,0010
// 所以A+B的补码为1,0010
// A+B= 1,1110 = -14
由于数的表示能力有限,有时会出现符号位溢出的情况,有两种判断溢出的方式:
最高有效位的进位和符号位的进位进行异或,若为1,则为溢出
乘法运算可用加和移位实现,若位数,就是加 4 次,移 4 次。
由乘数的末位决定被乘数是否与原部分积相加,然后右移 1 位形成新的部分积,同时乘数右移1 位(末位移丢),空出高位存放部分积的低位。被乘数只与部分积的高位相加。
用**移位的次数(n次)**判断乘法是否结束。
乘积的符号位单独处理,数值部分为绝对值相乘。移位为逻辑移位。
已知,求:
部分积 | 乘数 | 说明 |
---|---|---|
0.0000 | !1101 | 部分积一开始为0 |
+0.1110 | 乘数最后一位为1,加被乘数 | |
0.1110 | ||
0.0111 | 0!110 | 右移一位 |
+0.0000 | 乘数最后一位为0,不加被乘数 | |
0.0111 | 0! | |
0.0011 | 10!11 | 右移一位 |
+0.1110 | ||
1.0001 | 10! | |
0.1000 | 110!1 | 右移一位 |
+0.1110 | ||
1.0110 | 110! | |
0.1011 | 0110! | 右移一位,结束 |
Booth算法不是唯一的补码乘法算法。
Booth算法的计算步骤主要依靠判断的关系,可以总结为下表:
操作 | ||
---|---|---|
00 |
0 |
右移一位 |
01 |
1 |
,右移一位 |
10 |
-1 |
,右移一位 |
11 |
0 |
右移一位 |
已知,求:
先计算补码,得到。
部分积 | 乘数 | 操作 |
---|---|---|
00.0000 | 1.01010 | 最后一个0是补充上去的 |
+11.1101 | 乘数最后两位为10 , |
|
11.1101 | ||
11.1110 | 1!1.0101 | 右移一位(1/4) |
+00.0011 | 乘数最后两位为01 , |
|
00.0001 | 1! | |
00.0000 | 11!1.010 | 右移一位(2/4) |
+11.1101 | 乘数最后两位为10 , |
|
11.1101 | 11! | |
11.1110 | 111!1.01 | 右移一位(3/4) |
+00.0011 | 乘数最后两位为01 , |
|
00.0001 | 111! | |
00.0000 | 1111!1.0 | 右移一位(4/4) |
+11.1101 | 乘数最后两位为10 , |
|
11.1101 | 1111! | 结束 |
余数为正(够减),上商”1“,;余数为负,上商“0”,。
已知,求:
先计算需要的补码:。
余数 | 商 | 操作 |
---|---|---|
0.1011 | 0.0000 | |
+1.0011 | 余数为正, | |
1.1110 | 0 | 余数为负,上0 |
1.1100 | 0 | 左移一位 |
+0.1101 | 余数为负, | |
0.1001 | 01 | 余数为正,上1 |
1.0010 | 01 | 左移一位 |
+1.0011 | 余数为正, | |
0.0101 | 011 | 余数为正,上1 |
0.1010 | 011 | 左移一位 |
+1.0011 | 余数为正, | |
1.1101 | 0110 | 余数为负,上0 |
1.1010 | 0110 | 左移一位 |
+0.1101 | 余数为负, | |
0.0111 | 01101 | 余数为正,上1 |
根据余数和的符号位判断上商和计算新余数:
商 | 新余数 | |
---|---|---|
同号 | 1 | |
异号 | 0 |
已知,求:
计算出
余数 | 商 | 操作 |
---|---|---|
1.0101 | 0.0000 | |
+0.1101 | 异号,做加法 | |
0.0010 | 1 | 同号上1 |
0.0100 | 1 | 左移一位 |
+1.0011 | 同号,做减法 | |
1.0111 | 10 | 异号,上0 |
0.1110 | 10 | 左移一位 |
+0.1101 | 异号,做加法 | |
1.1011 | 100 | 异号,上0 |
1.0110 | 100 | 左移一位 |
+0.1101 | 异号,做加法 | |
0.0011 | 1001 | 同号上1 |
0.0110 | 10011 | 末位恒置1 |
浮点加减法分两步:
Key point:
指令是计算机执行某种操作的命令,也就是常说的机器指令。一台机器中所有机器指令的集合,称这台计算机的指令系统。指令由操作码和地址码构成,其中操作码的长度可以是固定的也可以是变化的。通常使用扩展操作码技术,使操作码的长度随地址数的减少而增加。
例如以 为一段的地址码,每少一个地址就会多出 个空的状态,这些状态就可以保存新的指令;但是,需要注意在扩展操作码方式下,例如 个状态只能使用其中的 个,另一个状态需要用来留作标识是否启用低位的扩展操作码。
地址码的变化可以用如下表格来归纳:
第一地址 | 第二地址 | 第三地址 | 第四地址 | 特点 | |
---|---|---|---|---|---|
四地址指令 | 第一操作数地址 | 第二操作数地址 | 结果地址 | 下个指令地址 | 共需要四次访存 |
三地址指令 | 第一操作数地址 | 第二操作数地址 | 结果地址 | -- | 使用PC指向下一个指令的地址 |
二地址指令 | 第一操作数地址 | 第二操作数地址 | -- | -- | 使用CPU内寄存器保存中间结果,减少一次访存操作 |
一地址指令 | -- | 第二操作数地址 | -- | -- | 其中一个操作数地址隐含在寄存器内 |
零地址指令 | -- | -- | -- | -- | 空操作等指令,或者隐藏在堆栈指针中 |
通过使用硬件资源(PC、ACC寄存器)可以减少访存次数,扩大寻址空间。
设指令字长为 16 位,采用扩展操作码技术,每个操作数的地址为 6 位。如果定义了 13 条二地址指令,试问还可安排多少条一地址指令?
另一个题:
某机指令字长 16 位,每个操作数的地址码为 6 位,设操作码长度固定,指令分为零地址、一地址和二地址三种格式。若零地址指令有 M 种,一地址指令有 N 种,则二地址指令最多有几种?若操作码位数可变,则二地址指令最多允许有几种?
操作码定长:二地址指令条数=16-M-N
操作码变长(采用操作码扩展技术):
设二地址指令有 种,则有如下的等式:则 ,其中 M/212+ N/26 取上整数。
在早期计算机中,指令字长、存储字长和机器字长往往是相等的;现在一台机器的指令系统可以采用位数不同的指令,即指令系统是可以变长的。
指令寻址比较简单,分为顺序寻址和跳跃寻址,其中跳跃寻址通过转移类指令实现。
指令字中有专门的一段用来标识寻址方式,通常指令字中的地址也并不是真实地址,被称为形式地址(用表示),通过寻址方式确定的地址为有效地址(用表示)。
寻址方式 | 寻址特点 | 地址关系 |
---|---|---|
立即(数)寻址 | A就是操作数本身,使用补码格式 | -- |
直接寻址 | A就是EA | |
隐含寻址 | 操作数地址隐藏在操作码或某个寄存器里 | -- |
间接寻址 | 形式地址为保存有效地址的字的地址 | |
寄存器寻址 | ||
寄存器间接寻址 | ||
基址寻址 | ||
变址寻址 | ||
相对寻址 | ||
堆栈寻址 |
形式地址本身就是操作数,使用补码表示。
形式地址本身就是有效地址。
隐含寻址是指指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。例如,一地址格式的加法指令只给出一个操作数的地址,另一个操作数隱含在累加器 ACC 中,这样累加器 ACC 成了另一个数的地址。
指令字中的形式地址不直接指出操作数的地址,而足指出探作数有效地址所在的存储单元地址,也就是说,有效地址是由形式地址间接提供的
对于一个指令字长为16位的指令,一次间接寻址的寻址范围为
字,也就是说间接取了一个完整的16位作为地址;多次间址的寻址范围为字,因为其中一个被用来表示是否为最后一次间址。
在奇存器寻址的指令宇中,地址码字段直接指出了奇存器的编号。其操作数在由R,所指的寄存器内。由于操作数不在主存中,故寄存器寻址在指令执行阶段无需访存,减少了执行时间。
因有效地址不足存放在仔储单元中,而是存放在寄存器中,故称其为寄存器间接寻址,它比间接寻址少访存一次。
基址寻址需设有基址寄存器 BR。其操作数的有效地址 EA 等于指令字中的形式地址与基址寄存器中的内容(称为基地址)相加。
基址奇存器可采用隐式的和显式的两种。
基址寻址可以扩大操作数的导址范国,因基址寄存器的位数可以大于形式地址 A 的位数。
当主存容量较大时,若采用直接寻址,因受A的位数限制,无法对主存所有单元进行访问,但采用基址寻址便可实现对主存空间的更大范国寻访。例如,将主存空间分为若干段,每段首地址存于基址奇存器中,段内的位移量由指令字中形式地址 A指出,这样操作数的有效地址就等于基址奇存器内容与段内位移量之和,只要对基址寄存器的内容作修改,便可访问主存的任一单元。
基址寻址在多道程序中极为有用。用户可不必考虑自己的程序存于主存的哪一空间区域。完全可由操作系统或管理程序根据主存的使用状况,赋予基址寄存器内一个初始值(即基地址),便可将用户程序的逻辑地址转化为主存的物理地址(实际地址),把用户程序安置于主存的某一空间区域。
例如,对于一个具有多个寄存器的机器来说,用户只黹指出哪一个寄存器作为基址寄存器即可,至于这个基址寄存器应斌子何值,完全由操作系统或管理程序根据主存空间状况来确定。在程序认行过程中,用户不知道自己的程序在主存的哪个空间,用户也不可終改基址寄存器的内容,以确保系统安全可岸地运行。
变址寻址与基址寻址的有效地址形成过程极为相似。由于两者的应用场合不同,因此从本质来认识,它们还是有较大的区别。
变址寻址主要用于处理数组问题,在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器1的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
比较基址寻址和变址寻址:
相对寻址的有效地址是将程序计数器PC 的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成。
相对寻址常被用于转移类指令,转移后的目标地址与当前指令有一段距离,称为相对位移量,它由指令字的形式地址 A 给出,故A 又称位移量。位移量A可正可负,通常用补码表示。
可被视为一种隐含寻址。
Key point:
CPU包括控制器和运算器。
控制器的基本功能:
CPU的结构包括:
寄存器可以大致分为几类:
其中四个寄存器非常重要,分别用于:
CPU取出并执行完一个指令的全部时间被称为一个指令周期。指令周期的长度取决于指令,并不是固定的,并且指令周期的子周期也不固定,可以包括取指周期、间址周期、执行周期、中断周期。为了区分这四个周期,CPU内设置了相应的标志触发器。
指令周期的长度固定吗?
不固定。由于计算机中各种指令执行所需的时间差异很大,因此为了提高 CPU运行效率,即使在同步控制的机器中,不同指令的指令周期长度都是不一致的,也就是说指令周期对于不同的指令来说不是一个固定值。
指令周期长度不一致的根本原因在于设计人员,为了提高CPU运行效率而这样安排的,指令功能不同,需完成的微操作复杂程度亦不同,因此,不同指令的指令周期也不同。
子周期 | 访存目的 | 标志触发器 | 触发条件 | 功能 |
---|---|---|---|---|
取值周期 | 取指令 | FE | 总是 | 取出指令 |
间址周期 | 获取有效地址 | IND | 当使用间接方式寻址时 | 取出有效地址 |
执行周期 | 取操作数 | EX | 绝大多数指令 | 执行指令内容 |
中断周期 | 保存程序断点 | INT | 有中断请求且处于开中断 | 处理中断 |
在中断周期中,CPU应完成关中断、保存断点和转中断服务程序入口三个操作
引起中断的各种因素:
能引起中断的各个因素都被称为中断源,中断源包括:
在完整设置的中断系统下,需要满足中断请求&没有屏蔽&允许中断的条件才能响应中断。
中断周期的操作由中断隐指令(也就是硬件自动完成)完成,包括三箱操作:
计算机为了管理中断,在硬件上通常有哪些设置:
当INT=1时,进入中断周期,执行中断隐指令的操作
采用程序中断技术时,指令系统中往往需要有相关指令支持,例如开中断、关中断和中断返回。
单重中断和多重中断主要区别在“开中断”的时间,单重中断在中断服务程序的最后中断返回时才开中断,多重中断在进入中断服务程序完成保护现场后就开中断。
为了判断中断源,需要为每个中断源设置中断请求(标记)触发器,INTR。若干个INTR组合到一起,设置在CPU内可以构成一个中断请求标记寄存器。INTR也可以不设置在CPU内,而是各个中断源内,例如I/O设备的中断就是在各个接口电路内的。
任何中断系统都需要保证在一个时刻只响应一个中断源的请求,这就需要对中断请求进行判优,可以通过硬件排队和软件排队实现。
硬件排队也分为两种,分贝时链式排队器和CPU内的排队器。
入口地址的寻找也可以分别通过硬件向量法和软件查询法实现,绝大多数情况下使用硬件向量法实现。
硬件向量法的实现有包括两种,分别是:
通常来讲,CPU固定在指令周期的最后处理中断请求。但是在一些情况下,一个指令周期可能很长,导致一些中断请求会被错过,这时可以在指令执行过程中添加一系列“查询断点”。
CPU进入中断周期时,需要进行保护程序断点、寻找中断服务程序的入口地址和关中断的操作,这是由一条中断隐指令实现的。中断隐指令是计算机指令系统中没有的指令,他是CPU在中断周期内有硬件自动完成的一条指令。
中断屏蔽技术适用于解决多重中断的场景。
要实现多重中断,需要确保两个条件:
为了保证这一点,引入了屏蔽技术
为了实现屏蔽,设备需要配备抓们的屏蔽触发器MASK。将若干屏蔽触发器组合在一起构成的也就是一个屏蔽寄存器,其中保存的内容被称为屏蔽字。通过在中断服务恒旭中设置适当的屏蔽字,能够对优先级别不同的中断源起到屏蔽作用。
严格来讲,优先级包括响应优先级和处理优先级。其中响应优先级是由排队器上的物理连接顺序决定的,屏蔽字可以改变的是处理优先级。
因此,在中断服务程序的相应位置还需要进行“置屏蔽字”和“恢复屏蔽字”的操作。
Key point:
三种周期:
指令周期常常用若干个机器周期数来表示,机器周期也叫 CPU 周期;而一个机器周期又包含若干个时钟周期。
机器周期是所有指令执行过程中的一个基准时间,机器周期取决于指令的功能及组件的速度。通常,以访问一次存储器的时间定为基准时间比较合适。
在一个周期里又可以完成若干个微操作,每个微操作也需要一定的时间。通过时钟发生器,可以产生时钟信号,通过节拍发生器就可以产生节拍,一个节拍的宽度就是一个时钟周期。在一个节拍内可以完成一个或几个同时执行的操作。节拍是计算机操作的最小时间单位。
总的来讲,一个指令完成的指令周期内包含若干个机器周期,每个机器周期包含若干时钟周期(节拍)。
取值周期:
间址周期:
此处指令寄存器的数据地址字段比 MDR 的长度要小,这样写会有错误,此处是为了突出间址
控制单元具有发出各种微操作命令(即控制信号)序列的功能。
Key point:
试比较组合逻辑控制器和微程序控制器的特点:
说明组合逻辑控制器和微程序控制器在组成和原理上的异同:
使用组合电路涉及的 CU 会十分复杂,因此我们将CPU内的各个控制信号组合成一条条微指令,每个微指令包括若干微操作命令,这些微操作命令通过改变CPU的状态来实现一个指令。
微程序控制器的基本工作原理:将控制器所需要的微操作命令,以微代码的形式编成微指令,存在专门的控制存储器中,CPU执行机器指令时,从控制存储器中取出微指令,对微指令中的操作控制字段进行解释,即产生执行机器指令所需的微操作命令序列。其具体的工作过程如下:
微程序的实现核心是一个只读的高速存储器,并针对每一个指令编写对应的微程序,微程序保存到存储器上,包含了若干条微操作命令。
说明微程序控制器的基本工作原理:
将控制器所需要的微操作命令,以微代码的形式编成微指令,存在专门的控制存储器中。CPU执行机器指令时,从控制存储器中取出微指令,对微指令中的操作控制字段进行解释,即产生执行机器指令所需的微操作命令序列
一条微指令包含两个字段,分别是操作控制字段和顺序控制字段(指出下条微指令的地址)
多种形成方式,前两种为主:
一个CU内也可以通过多路选择器配合外部的状态来实现多种方式的选择。
微指令格式与微指令的编码方式有关,通常分为水平型微指令和垂直型微指令。
微命令在微指令中的位置也会有区别: