博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机组成原理——程序中断方式
阅读量:5238 次
发布时间:2019-06-14

本文共 2409 字,大约阅读时间需要 8 分钟。

中断的基本概念:

程序中断是指在计算机执行实现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。

中断系统是计算机实现中断功能的软、硬件总称。在CPU一侧配置了中断机构,在设备一侧配置了中断控制接口,在软件上设计了相应的中断服务程序。

 

一个完整的中断过程包括:

中断请求:是指中断源(引起中断的事件或设备)向CPU

 发出的请求中断的要求。
中断判优:当有多个中断源发出请求时,需要通过适当的办法决定先处理哪个中断请求;
中断响应:指CPU中止现行程序转至中断服务程序的过程;
中断处理:就是指CPU执行中断服务程序;
中断返回:   执行完中断服务程序后,返回到被中断的程序

 

中断的作用:

(1)CPU与I/O设备并行工作

(2)硬件故障处理
(3)实现人机联系:在计算机工作过程中,如果用户要干预机器,如查看计算的中间结果,了解机器的工作状态,给机器下达临时性的命令等。在没有中断系统的计算机里这些功能几乎是无法实现的。
(4)实现多道程序和分时操作
(5)实现实时处理
(6)实现应用程序和操作系统的联系
(7)多处理机系统各处理机间的联系

中断的产生和相应的概念

(1)中断源:

引起中断的事件,即发出中断请求的来源。

  ■外中断:I/O设备等来自主机外部设备的中断。(通常所说的中断就是外中断)
  ■内中断:处理器硬件故障或程序出错引起的中断。(也叫异常)
  ■软中断:由“Trap”指令产生的软中断,这是在程序中预先安排好的     
中断触发器:每个中断源的接口电路中都有一个“中断触发器”,用于保存中断源向CPU的中断请求信号。多个中断触发器构成中断寄存器。

 主要上图所示的中断分类将CPU内部的异常、例外、陷入都有归为了内中断的行列中,不去区分是硬件引起还是软件引起的了。

 

(2)中断的分级与中断优先权 

在设计中断系统时,要把全部中断源按中断性质和处理的轻重缓急进行排队并给予优先权。

(3)禁止中断和中断屏蔽

a、禁止中断:

产生中断源后,由于某种条件的存在,CPU不能中止现行程序的执行,称为禁止中断
一般在CPU的内部设置一个“中断允许”触发器,只有该触发器为“1”时,才允许处理机响应中断,反之,则不响应所有中断源的中断请求。
“中断允许”触发器可以通过“开中断”和“关中断”指令来置位和复位。
b、中断屏蔽
当产生中断请求时,用程序方式有选择地封锁部分中断,而允许其余部分的中断仍能得到响应。
实现的方法是为每个中断源设置一个中断屏蔽触发器来屏蔽该设备的中断请求。各个设备的中断屏蔽触发器构成中断屏蔽寄存器。
当然有些中断源的中断请求是不可屏蔽的。所以中断又分为可屏蔽中断和非屏蔽中断。

中断处理

 

中断处理过程:

 

(1)关中断

 进入不可再次响应中断的状态,由硬件自动实现。在保存现场过程中,即使有更高级的中断源申请中断,CPU也不应该响应。否则,如果现场保存不完整,在中断服务程序结束之后,也就不能正确地恢复现场并继续执行现行程序。
(2)保存断点和现场
  现场信息一般指的是程序状态字,中断屏蔽寄存器和CPU中某些寄存器的内容。
(3)判别中断源,转向中断服务程序。
 在多个中断源同时请求中断的情况下。本次实际响应的只能是优先权最高的那个中断源、所以,需进一步判别中断源,并转入相应的中断服务程序入口。
(4)开中断。接下去就要执行中断服务程序,开中断将允许更高级中断请求得到响应。实现中断嵌套。
(5)执行中断服务程序。
(6)退出中断。在退出时,又应进入不可中断状态,即关中断,恢复现场、恢复断点,然后开中断,返回原程序执行
   进入中断时执行的关中断、保存断点等操作一般是由硬件实现的,它类似于一条指令,但它与一般的指令不同,不能被编写在程序中。因此,常常称为‘中断隐指令’。

判别中断源

判别中断源可以用软件和硬件两种方法来判优。

 (1)查询法(软件法)
由测试程序按一定优先排队次序检查各个设备的“中断触发器”。当遇到第一个‘1’标志时,即找到了优先进行处理的中断源,通常取出其设备码,根据设备码转入相应的中断服务程序。
(2)串行排队链法(硬件判优)
由硬件确定中断源。

问题:找到优先级最高的中断请求后,如何转入其中断服务程序?

一般采用中断向量法:
向量中断方式是为每一个中断源设置一个中断向量(就是中断服务程序的入口地址),所有的中断向量存放在主存的某个固定位置(中断向量表)。CPU响应某个中断源的中断请求时,根据设备提供的中断类型码,访问中断向量表,就可以找到该中断源的中断服务程序的入口地址。

中断向量表,也称中断入口地址表(或异常表),位于0000H~03FFH。共256组,每组占四个字节 CS:IP  。向量地址=中断类型号x4

8086/8088的中断向量表

中断向量表(异常表)中每一项是对应异常处理程序的入口地址,被称为中断向量(Interrupt Vector)

有了中断类型号,就可得到中断向量,从而转到中断服务程序执行。
但是,中断类型号怎么得到呢?

通过中断类型号形成电路。

 

 

多重中断处理——中断嵌套

在处理某一个中断的过程中又发生了新的更高级中断源的中断申请,且CUP又处于开中断状态下,CPU就要中断该服务程序的执行,转去进行新的中断处理服务程序。一般情况下与它同级的或比它低级的新中断请求,CPU不能响应其请求。

中断优先级的响应次序由硬件排队线路决定。一旦设计完成,系统的优先级别就决定了,缺乏改变优先权级别的灵活性。
在有优先级中断屏蔽码控制的条件下,可以不改变系统排队线路,使其中断响应次序不同。

中断屏蔽技术

例题:

 

转载于:https://www.cnblogs.com/wkfvawl/p/10957080.html

你可能感兴趣的文章
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
GIT笔记:将项目发布到码云
查看>>
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
查看>>
JavaScript 鸭子模型
查看>>
SQL Server 如何查询表定义的列和索引信息
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
【练习】使用事务和锁定语句
查看>>