1 point;

第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

<!-- page: 308 -->

系统互连及输入输出组织
设置计数值
设置内存缓冲区首址
读接口状态
否
是否就绪?
是
传送一个数据
启动外设
否
修改内存地址
修改计数值
是否完成?
是
结束
图8.11 独占查询程序流程
到外设完成任务而使接口满足条件为止。这里“就绪”的含义,对于输入设备而言,意味着设
备已将数据送入接口中的数据缓冲器,CPU可以从接口取数据;对于输出设备而言,意味着
数据缓冲器已空,CPU可以将数据送到接口中。
打印机的输出控制方式可采用这种查询方式。假定一个用户进程P中使用了某个1/O
函数,请求在打印机上打印一个具有n个字符的字符串。显然,P可通过执行open系统调
用来打开打印机。若打印机空闲,则P可正常使用打印机,因而可通过write系统调用对打
印机进行写操作。执行 write系统调用后,会陷入操作系统内核进行字符串打印。
操作系统内核通常将用户进程缓冲区中的字符串首先复制到内核空间,然后查看打印
机是否“就绪”。如果“就绪”,则将内核空间缓冲区中的一个字符输出到打印控制器的数据
端口中,并发出“启动打印”命令,以控制打印机打印数据端口中的字符;如果打印机“未就
绪”,则等待直到其“就绪”。上述过程循环执行,直到字符串中所有字符打印结束。图8.12
中的程序段大致描述了操作系统内核采用查询方式进行打印控制的过程。
copy_string_to_kernel(strbuf,kernelbuf,n);
for(i=0; i<n;1++){
while(printer_status!-READY);
*printer_data_port=kernelbuf[i];
*printer_control_port=START;
}
return();
//将字符审复制到内核缓冲区
//对于每个打印字符循环执行
//等待直到打印机状态为“就绪”
//向数据端口输出一个字符
//发送“启动打印”命令
//返回
图8.12 程序直接控制1/O的一个例子
程序查询I/O方式的特点是简单、易控制、外围接口控制逻辑少。但是,CPU需要从外
设接口读取状态,并在外设未就绪时一直处于忙等待。由于外设速度比处理器慢得多,所
以,在CPU等待外设完成任务的过程中浪费了许多处理器时间。
8.4.2中断控制I/O 方式
1.中断控制 I/O 的基本思想
在程序查询I/O方式中,由于CPU和外设采用串行工作方式,使大量的处理器时间花
第8章
291


<!-- page: 309 -->

计算机组成与系统结构(第3版)
费在等待慢速的外设上。为避免CPU长时间等待外设,提出了中断控制I/O方式。
292
中断控制I/O的基本思想是,当进程 P1需要进行一个I/O操作时,它会先启动外设进
行第一个数据的I/O操作,并挂起执行I/O操作的进程 P1使其被阻塞,然后从就绪队列中
选择另一个进程P2执行,此时,外设在准备 P1所需的数据,CPU在执行P2,因此外设和
CPU并行工作。当外设完成I/O操作,便向CPU发中断请求。CPU 响应请求后,就中止
正在执行的用户进程 P2,转入一个中断服务程序,在中断服务程序中再启动随后数据的
I/O传送任务。中断服务程序执行完后,返回原被中止的用户进程 P2的断点处继续执行。
此时,外设和CPU又开始并行工作。
例如,对于上述请求打印字符串的用户进程 P1的例子,如果采用中断控制I/O方式,
则操作系统处理1/O 的过程如图8.13 所示。
copy_string_to_kernel(strbuf,kernelbuf,n);
enable_interrupts();
while(printer_status!-READY);
*printer_data_port=kernbuf[i];
*printer_control_port=START;
scheduler();
//将字符串复制到内核缓冲区
//开中断,允许外设发出中断请求
//等待直到打印机状态为“就绪”
//向数据端口输出第一个字符
//发送“启动打印”命令
//阻塞用户进程P1,调度进程P2执行
(a)“字符打印”系统调用服务例程
if(n==0)(
unblock_user();
)else{
*printer_data_port=kernelbuf[i];
*printer_control_port=START;
n=n-1
i=i+1;
)
acknowledge_interrupt();
return_from_interrupt();
//若字符串打印完,则
//进程P1解除阻塞并进入就绪队列
//向数据端口输出一个字符
//发送“启动打印”命令
//未打印字符数减1
//下一个打印字符指针加1
//中断回答(清除中断请求)
//中断返回
(b)“字符打印”中断服务程序
图8.13 中断控制1/O的一个例子
从图8.13(a)可以看出,在“字符打印”系统调用服务例程中启动打印机后,它就调用处
理器调度程序 scheduler 来调出进程 P2执行,而将用户进程P1阻塞。在CPU执行进程P2
的同时,打印机在进行打印操作,CPU和打印机并行工作。若打印机打印一个字符需要
5ms,则在打印一个字符期间,其他进程可以在CPU上执行5ms的时间。对于程序直接控
制I/O方式,CPU在这5ms的时间内只是不断地查询打印机状态,因而整个系统的效率
很低。
中断控制1/O方式下,一旦外设完成任务,就会向CPU发中断请求。对于图8.13中的
例子,当打印机完成一个字符的打印后,就会给 CPU发中断请求,然后CPU暂停正在执行
的进程 P2,调出“字符打印”中断服务程序来执行。如图8.13(b)所示,中断服务程序首先判
断是否已完成字符串中所有字符的打印,若是,则将用户进程P1解除阻塞,使其进入就绪
队列;否则,就向数据端口送出下一个欲打印字符,并启动打印,将未打印字符数减1和下一
个打印字符指针加1后,执行中断返回,回到被打断的进程 P2继续执行。


<!-- page: 310 -->

系统互连及输入输出组织
图8.14和图8.15描述了中断控制I/O的整个过程。
执行启动I/O的指令
外设被启动-
CPU运行其他进程
请求VO的用户进程解除
阻塞,进入就绪队列
是
中断请求
是否完成?
否
CPU读IO状态
外设工作
外设完成任务
出错处理-
是
是否出错?
否
从数据端口读一个字到CPU或写一个字到数据端口
执行启动IO的指令
清中断并中断返回
图8.14 中断控制I/O 过程
外设
工作
完成
工作
完成
工作
CPU
启动
启动
请求响应
返回
请求响应
图8.15 CPU与外设并行工作
启动
现代计算机系统中都配有完善的异常和中断处理系统,CPU的数据通路中有相应的异
常和中断的检测和响应逻辑,在外设接口中有相应的中断请求和控制逻辑,操作系统中有相
应的中断服务程序。这些中断硬件线路和中断服务程序有机结合,共同完成异常和中断的
处理过程。
中断I/O方式通过让处理器执行相应的中断服务程序来完成输入/输出的任务,所以
也称为程序中断I/O方式。
2.中断系统的基本职能
现代计算机的中断处理功能相当丰富,没有配置中断系统的计算机是令人无法想象的。
每个计算机系统的中断功能可能不完全相同,但其基本功能不外乎以下几方面。
(1)及时记录各种中断请求信号。通常用一个中断请求寄存器来保存。
(2)自动响应中断请求。CPU在每条指令执行完、下条指令取出前,会自动检测中断
请求引脚,发现有中断请求时,则根据情况决定是否响应和响应哪个中断请求。
(3)自动判优。在有多个中断请求同时产生时,能够判断出哪个中断的优先级高,以选
择优先级高的中断先响应。
(4)保护被中断程序的断点和现场。因为中断响应后要转去执行中断服务程序,而执
第8章
293


<!-- page: 311 -->

计算机组成与系统结构(第3版)
294
行完中断服务程序后,还要回到原来的程序继续运行。所以原程序被中止处的指令地址和
原程序的程序状态和各寄存器的内容等必须被保存,以便能正确回到原被中止处继续执行。
(5)中断屏蔽。通过中断屏蔽实现多重中断的嵌套执行,中断屏蔽功能通过一个中断
屏蔽字寄存器来实现。
在中断处理(即执行中断服务程序)过程中,若又有新的优先级更高的中断请求发生,
CPU可以立即暂停正在执行的中断服务程序,转去处理新的中断,新中断处理结束后,再回
到原被暂停的中断服务程序继续执行,这被称为多重中断或中断嵌套。
现代计算机大多采用中断嵌套技术。也就是说,中断系统允许CPU在执行某个中断
服务程序时被新的中断请求打断。但是并不是所有的中断处理都可被新的中断打断,对于
一些重要的紧急事件的处理,就要设置成不可被其他新中断事件打断,这就是中断屏蔽的概
念。中断系统中要有中断屏蔽机制,使得每个中断可以设置它允许被哪些中断打断,不允许
被哪些中断打断。这个功能主要通过在中断系统中设置中断屏蔽字来实现。屏蔽字中的每
一位对应某一个中断源,用1表示允许中断,0表示不允许中断(即屏蔽中断)。CPU 还可
以通过在程序中执行相应的特权指令来修改屏蔽字的内容,从而动态地改变中断处理的先
后次序。
3.中断控制器的基本结构
中断系统中的中断控制器基本结构如图8.16 所示。
广中断类型
编码器
中断请求信号
中断判优电路
中断查流
中断屏蔽字寄存器
中断请求寄存器
IRQ。IRQ?
图8.16 中断控制器的基本结构
IRQ?
从图8.16可以看出,每个能够发出中断请求的外设都通过IRQ线发出中断请求,来自
设备i的中断请求信号(IRQ)记录在中断请求寄存器中的对应位;每个中断源有各自对应
的中断屏蔽字,在进行相应的中断处理之前它被送到中断屏蔽字寄存器中。在 CPU运行
程序时,每当CPU完成当前指令的执行、取出下一条指令之前,就会通过采样中断请求信
号引脚来自动查看有无中断请求信号。若有,则会发出一个相应的中断回答信号,以启动图
中的“中断查询”信号,在该信号的作用下,所有未被屏蔽的中断请求信号一起送到一个中断
判优电路中,判优电路根据中断响应优先级选择一个优先级最高的中断源,然后用一个编码
器对该中断源进行编码,得到对应的中断设备类型号(即中断源的标识信息,称为中断类
型)。CPU取得中断类型后,经过相应的转换,就可得到对应的中断服务程序首地址,在下


<!-- page: 312 -->

系统互连及输入输出组织
一个 CPU 时钟周期开始,CPU 执行相应的中断服务程序。
Intel 架构计算机中的中断控制器是可编程的,称为可编程中断控制器(programmable
interrupt controller,PIC)。图8.17给出了 Intel 可编程中断控制器8259A 的内部结构示
意图。
D?~D
数据总线
缓冲器
RD
WR-
A?-
Cs-
CAS
CAS
CAS?
读/写
电路
级联缓冲器/
比较器
SP/EN
ICW
ICW?
初始化
命令
Icw? 寄存器组
ICW?
内部总
INTA
INT
控制逻辑
中断
服务
寄存器
(ISR)
优先级
分析器
中断
请求
寄存器
(IRR)
中断屏蔽寄存器(IMR)
-OCW,
OCW?
OCW?
操作命令
寄存器组
-IR?
IR
IR,
图8.17 Intel 8259A内部结构
Intel 8259A 中断控制器的基本功能如下。
(1)中断请求锁存、中断屏蔽、中断优先级排队、中断源标识信息的生成等。
(2)既可支持程序查询式中断,又可支持向量式中断。
(3)支持8级优先权,通过多片级联,最多可构成64级中断。
(4)各种中断功能可通过编程来设定和更改。
8259A通过IR。~IR,接收各路中断请求,存放于中断请求寄存器中,并汇集成一个公
共的中断请求信号INT,送往 CPU。CPU响应中断后,发出中断响应信号INTA回送给
8259A。优先级分析器中的中断判优电路经过中断优先级比较,把最高优先级的中断类型
号经数据总线送给 CPU。在CPU内经简单变换,形成向量地址,据此访问中断向量表,取
出中断服务程序入口地址后,转相应中断服务程序执行。
8259A 中断屏蔽寄存器(IMR)中的屏蔽字会送到优先级分析器,使得只有未被屏蔽的
中断请求才会进行优先级排队,从而实现中断嵌套,图8.18是中断嵌套过程的示意图。
如图8.18所示,假定在执行用户程序时,发生了1#中断请求,因为用户程序不屏蔽任
何中断,所以就响应1#中断,将用户程序的断点 K1+1和程序状态字PSW1保存在栈中,
然后调出1#中断服务程序执行,而在执行1#中断的过程中,又发生了2#中断,而2#中
断的处理优先级比1#高,即在1#中断的屏蔽字中2#中断对应的位为1(允许中断),此
时,CPU中止1#中断的处理,把1#中断的断点 K2+1和程序状态字PSW2 保存在栈中,
第8章
295


<!-- page: 313 -->

计算机组成与系统结构(第3版)
用户程序
1#中断
服务程序
2#中断
服务程序
3#中断
服务程序
栈
296
响应,
响应,
响应
Kl.
1#请求
K2
K3
2#请求;
3#请求;
K2+
K1+1|
K3+1]
返回
“返回
返回
PSW3
K3+1
PSW2
K2+1
PSWI
K1+1
图8.18 中断嵌套过程
然后响应2#中断,调出2#中断的中断服务程序执行。在2#中断处理过程中,如果发生
3#中断,且3#中断的处理优先级比2#更高(即2#中断的屏蔽字中3#中断对应的位为
1),则CPU在栈中保存2#中断的断点K3+1和程序状态字PSW3,然后转3#中断服务程
序执行。当3#中断处理完返回时,CPU从栈顶取出断点K3+1和PSW3,回到2#中断的
断点处执行;2#中断处理完后,回到1#中断的断点K2+1处执行;1#中断处理完后,回到
用户程序的断点K1+1处执行。由此可见,利用栈能正确实现中断嵌套。
从上面描述的过程来看,中断系统中存在两种中断优先级:一种是中断响应优先级,另
一种是中断处理优先级。中断响应优先级是由查询程序或中断判优电路决定的,它反映的
是多个中断同时请求时选择哪个先被响应。中断处理优先级通过在每个中断服务程序中设
置对应的中断屏蔽字实现,反映了本中断与其他所有中断之间的处理优先关系。在多重中
断系统中通常用中断屏蔽字对中断处理优先权进行动态分配。
下面举例说明中断嵌套过程中,在特定的中断响应优先级和中断处理优先级下,处理器
执行程序的轨迹。
例8.3 假定中断系统有4个中断源,分别记为1#、2#、3#和4#,其响应优先级为
1#>2#>3#>4#。假定CPU在执行用户程序(主程序)时,中断源1#、3#和4#同时
发生了中断请求,而在执行3#中断对应的中断服务程序过程中,2#中断又发生了中断请
求。分别写出处理优先级为1#>2#>3#>4#和1#>4#>3#>2#时各中断源对应
的中断屏蔽字,并分别给出CPU完成中断服务程序的过程。
解:中断处理优先级为1#>2#>3#>4#时的中断屏蔽字如表8.1所示。根据题
意,在执行用户程序时同时发生了1#,3#和4#中断请求,由于响应优先级为1#>2#>
3#>4#,所以应先响应1#中断,1#中断的屏蔽字为1000,所以在1#中断处理过程中不
响应其他任何中断,直到1#中断处理完回到用户程序。此时,还有3#和4#中断未处理。
根据响应优先级,应先响应3#中断,调出3#中断服务程序执行,在处理3#中断的过程
中,出现了2#中断请求,因为3#中断的屏蔽字为1110,对2#中断开放,对4#中断屏蔽,
所以2#中断被响应,打断了3#中断的处理。2#中断处理过程中没有出现比它的处理优
先级更高的中断请求,所以2#中断能一直处理完,然后回到被打断的3#中断服务程序继
续执行,执行完后回到用户程序,最后响应4#中断,处理完4#中断后,再回到用户程序。
其CPU执行程序的轨迹如图8.19所示。


<!-- page: 314 -->

系统互连及输入输出组织
表8.1 处理优先级为1#>2#>3#>4#
时的屏蔽字
中断源
中断屏蔽字
1#
2#
3#
4#
1#中断源
1
0
0
0
2#中断源
1
1
0
0
3#中断源
1
1
1
0
4#中断源
1
1
1
1
中断服务程序
4#-
3#
2#
1#
主程序
1#
34
2#
(假定0是屏蔽,1是开放)
图8.19 处理优先级为1#>2#>3#>4#时
CPU 运动轨迹
表8.2给出了中断处理优先级为1#>4#>3#>2#时的屏蔽字。在执行用户程序时
同时发生1#、3#和4#中断,根据响应优先级,应先响应1#中断,1#中断的屏蔽字为
1000,所以在执行1#中断的过程中,不响应其他任何中断,直到1#中断处理完回到用户程
序。此时,还有3#和4#中断未被处理,根据响应优先级,应先响应3#中断,调出3#中断
服务程序执行。在处理3#中断的过程中,出现了2#中断请求,同时在执行用户程序时发
生的4#中断请求还未被响应,因为3#中断的屏蔽字为1011,即对2#中断屏蔽而对4#中
断开放,此时,响应优先级排队电路中,只有4#中断请求被排队判优,显然,4#中断请求被
响应,因此,CPU中止3#中断的处理,调出4#中断来处理。4#中断处理过程中没有出现
比它的处理优先级更高的中断请求,因此,一直到它处理完,再回到被打断的3#中断进行
处理。CPU继续执行3#中断服务程序,执行完后,回到用户程序。最后响应2#中断,处
理完 2#中断后,再回到用户程序。其CPU执行程序的轨迹如图8.20所示。
表 8.2 处理优先级为1#>4#>3#>2#
时的屏蔽字
中断源
中断屏蔽字
1#
2#
3#
4#
1#中断源
1
0
0
0
2#中断源
1
1
1
1
3#中断源
1
0
1
1
4#中断源
1
0
0
1
(假定0是屏蔽,1是开放)
中断服务程序
4#-.
3#-
2#
2#·
1#-
主程序·
1#
3#
4#
图8.20 处理优先级为1#>4#>3#>2#时
CPU运动轨迹
4.中断响应过程
中断过程主要包括两个阶段:中断响应和中断处理。中断响应阶段由硬件实现,而中
断处理阶段则由CPU执行中断服务程序来完成,所以中断处理是由软件实现的。
中断响应是指CPU发现中断请求开始到调出中断服务程序这一过程。在此过程中
CPU完成以下3个任务。
(1)保存被中断程序的返回地址和程序状态信息。
第8章
297


<!-- page: 315 -->

计算机组成与系统结构(第3版)
298
为了保证从中断服务程序返回后被中断程序在断点处能继续正确执行下去,有两类信
息不能被中断服务程序破坏。一类是用户可见的通用寄存器的内容,这些寄存器存放着被
中断程序执行到断点处的现行值,一般把这类信息称为现场;另一类是断点处的程序计数器
(PC)和程序状态字寄存器(PSWR)中的内容,前者是中断返回地址,后者是机器状态信息,
一般把这类信息称为断点和状态信息。对于现场信息,因为是用指令可直接访问的,所以通
常在中断服务程序中通过指令把它们保存到栈中,即由软件实现保存;而对于断点和状态信
息,因为必须将中断服务程序的首地址和初始程序状态字装入PC和PSWR中后,才能转到
中断服务程序执行,所以,原来在PC和PSWR中的断点和状态信息应在CPU响应中断过
程中先由硬件自动保存到某个特定的地方(栈或专门寄存器)。
(2)识别中断源并根据中断响应优先级进行判优。
中断响应的结果是调出相应的中断服务程序来执行,因此,在中断响应过程中,CPU 必
须能够识别出哪些中断有请求,并且在有多个中断请求出现的情况下,选择响应优先级最高
的中断。
(3)调出中断服务程序。
CPU通过相应步骤得到所响应的中断源对应的中断服务程序首地址和初始程序状态
字,并把它们分别送PC和PSWR。这样,在中断响应结束后的下一个时钟周期,CPU 就转
入相应的中断服务程序执行。
CPU响应中断的时间越短越好。中断响应时间是中断系统设计时需考虑的一个重要
指标,它反映了计算机系统的灵敏度。显然,中断响应时间与断点和状态信息保存时间、中
断源识别和判优的速度以及获得中断服务程序首地址和初始状态的时间都有关系。不同的
中断响应处理机制,得到的中断响应时间不同。例如,MIPS处理器采用一种简单的响应机
制,断点(即当前PC中的内容)直接保存在特殊寄存器 EPC中,而不需要访问内存来存取
栈,中断源的识别和判优处理也由软件进行,CPU只要把进行中断源识别和判优处理的中
断查询程序的首地址送 PC即可完成中断响应过程。因此,MIPS处理器的中断响应时间
很短。
很显然,在保护断点、机器状态和现场的过程中,如果又有新的中断被响应,则原被保存
的断点、状态和现场等信息就会被破坏,因而,需要有一种机制能保证断点和现场等的保护
过程不被新的中断请求打断。通常,用一个“中断允许”位来实现控制。5.4.1节中介绍过,
当CPU中的“中断允许”位为1时,CPU处于“中断允许”状态或“开中断”状态,否则就是
“禁止中断”或“关中断”状态。CPU只有在“中断允许”状态时,才有可能响应新的中断
请求。
因此,中断响应的条件有以下3个。
(1)CPU处于“开中断”状态。
(2)至少要有一个未被屏蔽的中断请求。
(3)当前指令刚执行完。
当 CPU同时满足上述3个条件时,就响应中断,进入中断响应周期。在中断响应周期
中,通过执行一条隐指令,完成以下几个操作。
(1)关中断。将中断允许标志置为禁止(“关中断”)状态,这时将屏蔽掉所有可屏蔽中
断的请求。


<!-- page: 316 -->

系统互连及输入输出组织
(2)保护断点和程序状态。将当前PC和PSWR中的断点和状态信息送入栈中或特殊
寄存器保存。
(3)识别中断源并转中断服务程序。通过某种方式获得优先级最高的中断源所对应的
中断服务程序的首地址和初始程序状态,并分别送 PC和 PSWR。
5.中断识别和判优方法
中断源的识别和中断判优方法可分为软件查询和硬件判优两大类。
1)采用软件查询方法
图8.21给出了软件查询方式下中断查询程序的结构和中断接口硬件结构。如图8.21(b)
所示,中断接口的硬件结构很简单,只要一根中断请求线 IRQ和一个中断请求寄存器
(IRR),IRR中记录了各设备的I/O中断请求状态。当CPU检测到IRQ线上有中断请求
时,通过中断响应自动转到中断查询程序执行。中断查询程序按中断优先顺序依次查询
IRR中记录了哪个设备有I/O中断请求,并转到第一个查询到有请求的中断服务程序去执
行。这种方式可通过改变中断查询顺序来改变中断响应优先级,因而比较灵活。但软件查
询速度慢,可能导致中断请求无法得到实时响应。
中断处理程序
保护现场
读中断请求状态
是
1#I/O 请求
1#I/O服务程序
数据
CPU
否
地址
是
2#I/O 请求
2#I/O 服务程序
控制
否
IRQ
中断接口
中断请求寄存器(IRR)
是
n#I/O 请求
#I/O 服务程序
否
恢复现场
1#/O
2#/O
n#VO
中断返回
(a)中断查询程序的结构
(b)软件查询中断的硬件结构
图8.21 软件查询中断方式下的程序结构和硬件结构
2)采用硬件判优方法
硬件判优不同于软件查询中断识别技术,而是一种向量中断方式。它根据中断控制器
接口(如 PIC)中的中断判优电路和编码器等,得到当前所有未被屏蔽的中断请求中具有最
高响应优先权的中断类型(即中断源标识信息)。例如,图8.16中的IRQ,中的i就是中断
源标识信息,通过编码器输出的i最终被送到CPU中,CPU根据i的值找到对应的中断服
务程序的首地址 PC和初始 PSW。
在向量中断方式下,通常把中断服务程序的首地址 PC 和初始 PSW称为中断向量 IV
第8章
299


<!-- page: 317 -->

计算机组成与系统结构(第3版)
300
(interrupt vector)。所有中断向量存放在一个中断向量表(也称中断入口地址表)中,中断
向量所在的地址称为向量地址VA(vector address),如图8.22所示。每个中断向量在中断
向量表中的位置可以用对应表项的编号来得到,这个编号称为中断类型号。图8.23给出了
Intel8086/8088的中断向量表,它位于主存地址0000H~03FFH中,共256个表项,每个表
项占4字节,记录对应中断服务程序的首地址 CS:IP。向量地址由中断类型号乘4得到。
例如,除法错的中断类型号为0,故其向量地址为0;不可屏蔽中断NMI的中断类型号为2,
故其向量地址为8;外部I/O中断IRQ,的中断类型号为32+i。
VA?
PCI
PSW1
VA?
PC2
PSW2
VA,[
PC,
PSW
V?
JIv?
Iv,
CS:IP (除法错)
CS:IP (单步)
CS:IP (NMI)
CS:IP
CS:IP
00-03
04~07
08-0B
3FC~3FF
图 8.22 中断向量表
图8.23 8086/8088的中断向量表
现代计算机系统大多采用向量中断方式,在中断控制器中有相应的中断判优电路和编
码器。各个中断请求信号和对应的中断屏蔽位进行“与”操作后,送到判优电路选择优先级
最高的未被屏蔽的中断源,最后通过编码器输出对应的中断类型号,即中断源标识信息。这
种方式的中断响应速度快。如果是可编程的中断控制器,则响应优先级可灵活设置。
例8.4 假定一个字长为32位的CPU的主频为500MHz,即CPU每秒钟产生 500×
10?个时钟周期。硬盘使用中断I/O方式进行数据传送,其传输速率为4MB/s,每次中断传
输一个16字节的数据,要求没有任何数据传输被错过。每次中断的开销(包括用于中断响
应和中断处理的时间)是500个时钟周期。如果硬盘仅有5??时间进行数据传送,那么,
CPU 用于硬盘数据传送的时间占整个 CPU时间的百分比为多少?
解:由题意知,每次准备好一个16字节的数据,就会发出一次中断请求。为保证没有
任何数据传输被错过,CPU每秒钟应至少执行4MB/16B=250k 次中断,因此,每秒钟内用
于硬盘数据传送的时钟周期数为250k×500=125×10°,故 CPU 用于硬盘数据传送的时间
占125×10*/(500×10*)=25??
也可以从以下角度来考虑。由题意知,硬盘准备一个数据(16B)的时间为16B/4MB=
4μs,CPU 用于一个数据I/O的时间(包括中断响应并处理的时间)是500个时钟周期,相当
于500/500M=1μs。假定硬盘一直在工作,则硬盘每隔4μs申请一次中断,每次中断 CPU
花1μs进行硬盘数据传送,因此,CPU花在硬盘数据传送的时间占整个CPU时间的1/4,
即 25??
假定硬盘并不是一直在操作,而是仅有5??时间在工作,则CPU用于硬盘数据传送
的时间占整个 CPU 时间的百分比为25?5?.25??
对于程序查询方式,在外设准备数据时,由于CPU一直在等待外设完成,所以CPU在
这段时间100??I/O服务。对于中断I/O方式,在外设准备数据时,CPU 被安排执行其
他程序,外设和CPU并行工作,因而CPU在外设准备数据时没有开销,只有响应和处理中


<!-- page: 318 -->

系统互连及输入输出组织
断来进行数据传送时 CPU才需要花费时间为I/O服务。这就是中断I/O方式相对于程序
查询方式的优点。
对于硬盘这种高速外设的数据传送,若采用中断I/O方式,则CPU 用于I/O 的开销是
无法忽视的。高速外设速度快,因而中断请求频率高,导致 CPU 被频繁打断,而且,由于
CPU需要保存断点和程序状态以及现场信息、开中断/关中断、设置中断屏蔽字等,使得中
断响应和中断处理的额外开销很大,因此,在高速外设情况下,采用中断I/O方式传送数据
是不合适的,通常采用下面介绍的 DMA方式。