8.4-中断系统

【README】

1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;

2.采用一问一答的方式对中断进行总结(中断7问题),refer2

8.4-中断系统小结(cpu响应中断)_PacosonSWJTU的博客-CSDN博客_cpu响应中断的步骤【README】本文转自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;【1】中断系统1)作用:用中断系统实现了外设数据的输入输出; 还可以用于程序调试,计算机系统的异常事件,都可以用中断系统来处理;2)中断因素人为设置的中断;程序性事故,如java异常;硬件故障,如硬盘坏道;Io设备,如数据输入输出;外部事件,如键盘中断按钮,调试程序;3)中断系统需要解决的问题序号问题1https://blog.csdn.net/PacosonSWJTU/article/details/1235392163.本文首先给出中断全流程


【1】概述

【1.1】引起中断的各种因素

0)中断系统作用
第5章,我们用中断系统实现了数据的输入输出上;还可以用于程序调试,计算机系统的异常事件,都可以用中断系统来处理;

1)引起中断的各种因素

  1. 人为设置的中断;
  2. 程序性事故,如java异常;
  3. 硬件故障,如硬盘坏道;
  4. Io设备,如数据输入输出;
  5. 外部事件,如键盘中断按钮,调试程序;

【1.2】中断系统需解决的问题

序号

问题

1

各中断源如何向cpu提出请求?

2

各中断源同时提出请求,怎么办?

3

Cpu在什么条件,什么时间,以什么方式响应中断?

4

如何保护现场

5

如何寻找入口地址?

6

如何恢复现场,如何返回?

7

处理中断的过程中又出现新的中断 怎么办?


【2】中断请求标记和中断判优逻辑

【2.1】中断请求标记

 【问题1】多个中断源如何提出中断请求
给每一个中断源设置一个触发器,用触发器来标记这个中断源是否提出了中断请求;
(一个中断源对应一个中断请求触发器INTR)多个触发器组成了中断请求标记寄存器;

中断触发器可以做在中断源的接口电路,或做在cpu内部;


【2.2】中断判优逻辑

【问题2】多个中断源同时提出中断请求,怎么办
Cpu如何响应,响应对系统影响最大的中断源;

对中断源进行分级;响应优先级最高的中断源(对中断源的级别进行排队)

排队器可以在中断源接口电路,或在cpu内部;
上图由硬件实现的排队器;也可以软件实现排队器;如下


【3】 中断服务程序入口地址的寻找

【3.1】硬件向量法

  排队器输出:只有1根线是高电平1,其他全部为低电平0;
向量地址形成部件:根据排队器输出,确定需要响应的中断源,从而确定执行哪一个中断服务程序(通过中断向量地址确定);

【问题3】如何寻找中断服务程序的入口地址?(硬件向量法,或软件查询法)

用硬件查找中断服务程序入口地址有两种方法

  • 方法1: 在中断向量地址的存储单元中存放一条跳转指令 如 jmp 200,则200就是中断服务程序的入口地址;
  • 方法2: 在中断向量地址的存储单元中存放的就是中断服务程序的入口地址,如中断向量地址12H,其保存的入口地址200;

【3.2】软件查找法

用软件如何查找中断服务程序入口地址?
通过执行中断识别程序,进行查找;
利用软件方法更加灵活;

中断识别程序查询步骤:

步骤

指令

说明

1

SKP DZ 1#

SKP表示跳过下一条指令;

指令功能:查询第1号中断源的完成触发器D;看触发器是等于0还是等于1;

  1. 若等于1,说明中断源已经准备好了,提出了中断请求,cpu就要去执行响应的中断服务程序(步骤2)
  2. 若等于0,说明1号中断源没有准备好,则跳过指令2,进入2号中断源的查询(步骤3)

2

JMP 1#SR

执行中断服务程序

3

SKP DZ 2

……

4

JMP 2SR

……


 【4】中断响应 

 【问题4】Cpu在什么条件,什么时间,以什么方式响应中断

1)cpu在什么条件下响应中断请求 ?

  • 为了表示cpu是否响应中断请求,有一个允许中断触发器EINT,值=1表示允许cpu响应中断源发出的中断请求;

2)cpu在什么时间响应中断请求 ?
通常情况下,cpu只有在指令的执行阶段结束以后,才能够响应中断请求;
但cpu的某些指令的执行阶段比较长,这种情况就允许cpu在指令执行过程中,响应中断请求;
问题: 为什么cpu要把响应中断的时间放在指令执行阶段以后呢?

3)cpu响应中断过程:

  • 在指令执行以后,cpu发送查询信号到中断源的中断请求触发器;查询信号把中断请求触发器的输出端设置为1,把中断请求信号发送到排队电路;

【4.3】中断隐指令

1)中断隐指令:说的是保存程序断点,寻找中断服务程序入口地址,关中断这3个步骤是计算机硬件来完成的,并不是在某一条具体指令的驱动下完成的;即,中断隐指令并不是指令集中的指令;但在响应中断过程中,这些硬件操作都要执行;  

EINT,允许中断的R-S触发器; (值为1,表示允许中断)
INT,中断标记的R-S触发器;(值为1,表示相应中断;只要INT设置为1,EINT就要被设置为0) 

 【4.3.1】中断响应过程中要解决的3个问题

问题1)保护程序断点: 断点就是中断服务程序执行完成后,返回执行的指令;

  • 方法1:断点存到特定地址(0号地址)内;
  • 方法2:断点进栈;

问题2) 寻找中断服务程序入口地址;

  • 方法1)采用硬件向量法:把中断向量地址发送到PC寄存器;PC中保存了向量地址,这个向量地址保存了中断服务程序的入口地址,或跳转指令,该指令会跳转到中断服务程序;
  • 方法2)软件查询法:中断识别程序的入口地址发送到PC寄存器;计算机执行中断识别程序来查找中断服务程序的入口地址;

问题3)硬件关中断(把中断允许触发器的值设置为0);

  • 关中断的目的:避免在单重中断的机器中,在执行中断服务程序的过程中,有新的中断源会打断当前的中断服务程序的执行;

另外,即使在多重中断的cpu中,采用关中断的方式,也是为了保存程序断点,保存程序现场的一个过程;


【4.3.2】中断响应步骤

步骤

描述

1

Cpu完成指令执行阶段后,通过硬件向量法查找中断源;各个中断源的信号送入排队器;

2

排队器把中断源信号(只有一根线为1)送给中断标记触发器,从而把INT设置为1,而EINT设置为0;

3

此外,排队器还要把中断信号送给向量地址形成部件,这个向量地址送给PC,为执行中断服务程序做准备;(向量地址保存了中断服务程序的入口地址)


【5】保护现场与恢复现场

1)保护现场

  • 1.1 )保存断点:由中断隐指令(硬件)来做,包括3个步骤(保存断点,形成中断服务程序的入口地址,硬件关中断) ;
  • 1.2)保存寄存器内容(由中断服务程序来做,软件):cpu当中的一些寄存器在执行中断服务程序的时候需要用到;这些寄存器的内容也要进行保存 ;因为这些内容将来中断返回的时候,主程序还要用到;

2)恢复现场

  • 2.1)由中断服务程序完成;因为中断服务程序在保存现场的时候,可以吧寄存器内容压入到堆栈中;在中断服务程序恢复现场时,可以出栈;

3)中断服务程序的工作内容包括

  1. 保护现场;push指令;
  2. 其他服务程序(中断服务程序剩余部分);
  3. 恢复现场;pop指令;
  4. 中断返回;IRET指令;

【6】 多重中断

【6.1】多重中断概念

【问题7】处理中断的过程中又出现新的中断,怎么办
再问:如果新的中断源的优先级,高于当前正在处理的中断源的优先级,又要如何处理?处理过程如下

  • 处理中断1时,发生了中断2,且中断2优先级大于中断1,则停止中断1的服务程序,转而执行中断2的服务程序;
  • 处理中断2时,发生了中断3,且中断3优先级大于中断2,则停止中断2的服务程序,转而执行中断3的服务程序;
  • 上图中: 产生了3次中断,和3个断点,分别是 k+1, l+1, m+1 ;

【6.2】实现多重中断的条件

1)要允许cpu在执行某个中断服务程序时,响应新的中断请求;就要提前打开 EINT允许中断触发器(设置 EINT=1);

2)是不是任何一个新的中断请求都能打断当前正在执行的中断服务?不是的;
只有高优先级的中断源才可以打断低优先级中断源;

3)中断过程如下:

时间

中断

请求

主程序

中断服务程序(优先级降序)

A

B

C

D

1

BC

2

保存主程序断点

3

转到中断服务程序B

执行

4

B中恢复到主程序断点

5

保存主程序断点

6

D

转到中断服务程序C

执行

7

从C中恢复到主程序断点

8

保存主程序断点

9

A

转到中断服务程序D

执行

10

保存中断服务程序D的断点

11

转到中断服务程序A

执行

12

从A恢复到中断服务程序D断点继续执行

13

从D种恢复继续执行

详细步骤解析如下:

  • 1)    主程序在运行时,中断源BC请求中断;
  • 2)    又B优先级高于C,则主程序响应B中断,保存主程序中断断点,执行B的中断服务程序;
  • 3)    恢复现场到主程序;
  • 4)    主程序响应中断C,保存主程序的中断断点,执行C的中断服务程序;
  • 5)    在执行C的中断服务程序过程中,中断D请求中断;由C的优先级高于D,所以cpu不会理会D,而是继续执行中断C;
  • 6)    恢复现场到主程序;
  • 7)    主程序响应中断D,保存主程序的断点,执行D的中断服务程序;
  • 8)    在执行D的过程中,中断源A请求中断;
  • 9)    又A的优先级高于D;所以保存D的中断服务程序为断点,转而响应中断A,执行A的中断服务程序;
  • 10)    恢复现场到D的中断服务程序;执行D的中断服务程序;
  • 11)    恢复到主程序;

【补充】 中断谁就要返回到谁的执行现场


【6.3】中断屏蔽技术

refer2  中断屏蔽技术_PacosonSWJTU的博客-CSDN博客


【6.4】多重中断的断点保护

1)断点保护有2个方法

  • 方法1:断点进栈;由中断隐指令来完成;
  • 方法2:断点存入0号或某个内存地址,由中断隐指令来完成;

2)在中断周期中,需要保存断点;如断点保存到0地址

  • 步骤1:把0地址送入MAR,主存地址寄存器;
  • 步骤2:命令存储器写操作;
  • 步骤3:把PC保存的断点值写入MDR,主存数据寄存器;之前把断点(下一条指令地址)写入0地址,断点在PC寄存器中,因为PC寄存器存储了下一条要执行的指令的地址(下一条指的是主程序或当前正在执行的程序的下一条);
  • 步骤4:把MDR的数据送入到MAR指向的内存单元中;

3)有个问题:中断周期的保存断点阶段,如果都把断点地址保存到0地址,那遇到多种中断,下一个中断周期的断点地址就会把上一个中断的断点给覆盖掉;
如何保证断点内容不丢失呢


【6.4.3】程序断点存入0地址的断点保护

上述指令列表的执行步骤如下:

向量地址

内容

说明

0

断点内容

保存程序断点到0地址;

5

JMP SERVE

serve 是中断服务程序的入口地址;

中断向量形成部件把向量地址5送入pc寄存器;

SERVE

STA SERVE

保存现场;

如保存acc寄存器的内容到SERVE指向的内存单元中;

LDA 0

把0地址的内存单元数据取出来放入acc寄存器;

0地址的内存就是程序断点;

STA RETURN

通过STA指令,把程序断点保存在RETURN单元;

(通过转存把程序断点保护起来)

置屏蔽字

设置中断屏蔽字在开中断之前;

ENI

开中断

LDA SAVE

恢复程序现场;把SAVE内存单元的内容送入acc寄存器;

恢复中断屏蔽字

在返回中断之前,要恢复中断屏蔽字;

JMP @ RETURN

通过一条间接跳转指令(间址寻址);

跳转到RETURN内存单元保存的那个地址(程序断点);

SAVE

XXX

存放ACC内容

RETURN

XXX

转存0地址内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core的配置(1):读取配置信息

提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两个文件之中。到了.NET Core的时候,很多我们…

EL调用java方法

一、jstl函数 jstl函数自定义二、调用方法的值成变量 第一种使用request对象 <% request.setAttribute(“isOperate”,isShowOperate()); %> 第二种使用标签变量 <c:set var"isOperate" value"<%isShowOperate()%>" />转换成变量使用<…

wordcloud python3.7_[原创]win7/64位系统+python3.7.2下安装wordcloud库失败之解决——一个莫名其妙的方法...

当前环境&#xff1a;win7/64位系统python3.7.2pip-19.2.1使用pip install wordcould安装时出现错误&#xff0c;提示&#xff1a;尝试方法①&#xff1a;考虑更换其他安装源提示没有变化&#xff0c;仍然提示没有找到分发版本-----------强行插入的分割线-------------------(…

1-计算机系统概论

【README】 本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1.1】计算机软硬件概念 【1.2】计算机层次结构 【2】计算机基本组成 【2.1】冯诺依曼计算机特点&#xff08;重要*&#…

JetBrains 加入 .NET 基金会

在 BUILD 大会上&#xff0c;微软正式对外宣布&#xff0c;JetBrains 已经加入 .NET 基金会&#xff0c;详细情况可以查看 .NET Foundation 博客。 JetBrains 因为用户推荐、ReSharpe、ReSharper Ultimate 套件等原因&#xff0c;在 .NET 平台投入大量资源。而现在&#xff0c…

jstl中添加自定义的函数

转载自 jstl中添加自定义的函数由于jstl中提供的函数未必能够满足我们的要求&#xff0c;而我们又希望能够像jstl提供的函数那样能够轻松方便使用&#xff0c;那么可以通过自定义函数补充jsltl函数。给jstl添加自定义函数需要以下步骤&#xff1a;定义一个static的public的方…

多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏

大家好&#xff0c;今天我们来介绍基于多智能体强化学习主宰星际争霸游戏这篇论文Grandmaster level in StarCraft II using multi-agent reinforcement learning​doi.org从Alphastar以后 利用强化学习的方法进行星际争霸2AI的又一大突破。Part1 前言游戏介绍(Introduction to…

2-计算机发展及应用

【README】 本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】计算机发展史 【1.1】计算机的产生和发展 【1.2】微型计算机的出现与发展 芯片上的晶体管的数量 与 cpu速度间 有没有关…

ASP.NET Core的配置(2):配置模型详解

在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式&#xff0c;其中涉及到三个重要的对象&#xff0c;它们分别是承载结构化配置信息的Configuration&#xff0c;提供原始配置源数据的ConfigurationProvider&#xff0c;以及作为“中间人”的ConfigurationBuilder。…

Mysql的安装与远程登录

一、安装 &#xff08;1&#xff09;linux版A.linux普通版http://www.jb51.net/article/104107.htmB.ubuntu版 1.安装 sudo apt-get install mysql-server apt-get isntall mysql-client sudo apt-get install libmysqlclient-dev2.设置密码cd /etc/mysql vi debian.cnf ,得…

sqlserver如何定义一个静态变量_[Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库...

1 前言2 自定义规则实现2.1 规则功能2.2 实现规则的理论基础2.3 规则代码实现3 总结4 参考资料1 前言为了实现如标题所述的将多个静态库合并为一个动态库&#xff0c;内置的 Bazel 规则是没有这个功能的&#xff0c;Bazel C/C 相关的内置规则有&#xff1a;cc_binary &#xff…

(转)base64编码(严格说来,base64不算作加解密算法)

【README】 1.本文转自&#xff1a; Java base64加密解密 - xuwc - 博客园参考&#xff1a; https://www.cnblogs.com/luguo3000/p/3940197.html https://blog.csdn.net/jiahao1186/article/detailhttps://www.cnblogs.com/xuwc/p/14058183.htmlhttps://zh.wikipedia.org/wik…

JavaWeb的web.xml标签元素(一)

普通信息标签 &#xff08;1&#xff09;display-name 定义了WEB应用的名字,在servletContextConfig display-name* XML语法&#xff1a;<display-name>AppName</display-name> &#xff08;2&#xff09;description 可以使用description元素来提供有关部署描述符…

python3多线程第三方库_Python3 多线程

Python3 多线程多线程类似于同时执行多个不同程序&#xff0c;多线程运行有如下优点&#xff1a;使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人&#xff0c;比如用户点击了一个按钮去触发某些事件的处理&#xff0c;可以弹出一个进度条来显示…

采用MiniProfiler监控EF与.NET MVC项目

今天来说说EF与MVC项目的性能检测和监控&#xff0c;相对本篇文章&#xff0c;更推荐大家使用另一个类似组件 NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC MiniProfiler是Stack Ove…

(转)公钥,私钥和数字签名这样最好理解

转自&#xff1a; 公钥&#xff0c;私钥和数字签名这样最好理解_21aspnet的博客-CSDN博客_公钥签名还是私钥签名一、公钥加密 假设一下&#xff0c;我找了两个数字&#xff0c;一个是1&#xff0c;一个是2。我喜欢2这个数字&#xff0c;就保留起来&#xff0c;不告诉你们(私钥…

JavaWeb的web.xml标签元素(二)

JavaWeb的web.xml标签元素&#xff08;一&#xff09; 九、session-config为Web应用中的javax.servlet.http.HttpSession对象定义参数 session-config-session-timeout?session-timeout元素用来指定默认的会话超时时间间隔&#xff0c;以分钟为单位。该元素值必须为整数。如果…

登录系统 提示框_实物资产管理软件操作手册(职员和系统用户)

一、职员和系统用户“职员和系统用户”菜单提供了对公司人员信息进行维护的功能&#xff0c;可以自定义职员编码、 姓名、用户名等相关职员信息。注意&#xff1a;职员编码、用户名需唯一&#xff0c;且用户名一旦保存则不可修改。根据要求可以将“用户类型”分为“职员”和“系…

HoloLens开发手记-凝视 Gaze

凝视 Gaze 在全息应用中&#xff0c;凝视是第一种输入形式&#xff0c;被用于定位物体&#xff08;功能和PC的光标指针类似&#xff09;。凝视告诉你用户正在看向世界中的位置&#xff0c;让你能够确定他们的意图。在现实世界中&#xff0c;你通常会盯着你打算与之交互的物体。…

摘要算法与加密(以MD5算法为例)

【README】 部分内容总结自&#xff1a; 摘要与加密的区别&#xff08;以MD5算法为例&#xff09; - 掘金https://juejin.cn/post/6844903561478799368 【1】摘要算法与加密区别 【1.1】摘要算法&#xff08;不可逆&#xff09; 1&#xff09;摘要算法&#xff1a; 说白了…