查缺补漏----I/O中断处理过程

news2024/10/4 15:05:07

中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变。处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。下面来看他们如何运用在中断处理过程中:

中断控制器位于CPU和外设之间,用于处理I/O中断请求。以下是一个简化的中断控制器:

现在有A,B,C三个中断源。中断响应优先级:A>B>C,中断处理优先级:C>B>A

根据图来看,CPU响应中断应该具备3个条件:

① 在 CPU 内部设置的中断屏蔽寄存器(触发器)必须是开放的。

② 外设有中断请求时,中断请求寄存器(触发器)必须处于“1”状态,保持中断请求信号。

③ 外设(接口)中断允许触发器必须为“1”,这样才能把外设中断请求送至 CPU。

具备上述三个条件时,CPU 在现行指令结束的最后一个状态周期响应中断。

假设CPU正在处理A中断源的中断请求,此时B,C同时发出了中断请求,CPU执行完当前指令后,会检查INTR(中断请求信号寄存器)是否有效(INTR高电平有效)。

怎么看INTR是否有效,那就要看屏蔽寄存器是否会将信号屏蔽,由于中断处理优先级C>B>A,所以屏蔽寄存器不会屏蔽中断信号,INTR会接收到中断请求,变为有效。

CPU是否能检测到中断请求信号有效,是由中断处理优先级决定的,而不是中断响应优先级。

由于现在B,C的处理优先级都大于A,所以都要被送到判优电路当有多个中断源的中断请求到达判优电路时,就由中断响应优先级来决定CPU应该响应哪一个。响应优先级B>C,所以向量地址形成线路会形成中断源B的中断类型号(也就是下图的送中断向量的过程)。

CPU响应B中断源的中断请求,执行B的中断服务程序,程序会设置新的中断屏蔽字(每个中断源对应一个屏蔽字,其中1越多,优先级越高),并且保存现场,并且开中断。

由于C的中断请求还没有被处理,并且处理优先级C>B,所以B的中断服务程序又会响应C中断源发来的中断请求。当C的中断服务程序执行完后,返回到B,B的服务程序再返回到A。所以,完成顺序C>B>A,响应顺序B>C。

总结(非常重要):

中断优先级包括响应优先级和处理优先级,中断屏蔽标志改变的是处理优先级。中断响应优先级是由中断查询程序或中断判优电路决定的,它反映的是多个中断同时请求时哪个先被响应即中断服务程序开始执行的顺序。在多重中断系统中,中断处理优先级决定了本中断是否能打断正在执行的中断服务程序,决定了多个中断服务程序执行完的次序

注:

中断类型号是通过数据线传给CPU的,一定要记得地址线是单向的(地址只能从 CPU 传向外部存储器或 I/O 端口)。中断类型号用于指出中断向量的地址,CPU响应某个外部中断后,就从数据总线上获取该中断源的中断类型号,然后据此计算对应中断向量的地址,再根据该地址从中断向量表中取出中断服务程序入口地址,即中断向量。

② 只有每条指令执行的最后一个操作控制信号CPU才会检测INTR是否有中断请求信号CPU采样到INT信号有效,则进入中断响应周期。

③ CPU检测到信号有效,进入中断响应周期,隔一段固定的时间就会发出中断查询信号,也就是在中断响应过程中,发出中断查询信号(中断回答信号)。由这个信号,所有未被屏蔽的信号就会进入判优电路,由判优线路决定是否响应。

到这里就可以更清楚地理解中断响应的条件:

① CPU处于开中断状态        ② 一条指令执行完        ③ 至少要有一个未被屏蔽的中断请求

中断响应的时间点和异常处理的时间点是不一样的,中断一定是在一条指令执行结束后开始查询有无中断请求,有的话立即响应,所以一定是在指令执行完时响应中断,而异常发生在指令执行过程中,异常的处理是在指令执行中进行的。

中断处理的过程:

中断响应:

中断响应是硬件完成的,也就是从总线上取中断地址,CPU会做三件事:

① 关中断;② 保护断点和程序状态;③ 识别中断源:取得中断服务程序的首地址和初始PSW送PC和PSWR

执行中断服务:

(1)准备阶段:

① 保护现场(比如一些通用寄存器的内容)及旧屏蔽字(比如B打断A的中断服务程序后,要保存A的中断屏蔽字,以便中断返回时恢复旧的屏蔽字)

② 查明原因(软件识别中断时才会用到)

③ 设置新屏蔽字 ④ 开中断

注:对于保存屏蔽字,设置新的屏蔽字以及开中断,都是针对多级中断的,因为可能会有多个中断请求,所以需要设置屏蔽字和开中断。

(2)进行具体的中断处理

(3)恢复阶段:
① 关中断 ② 恢复现场及旧屏蔽字 ③ 清除中断标志(清除该中断源的中断请求,否则CPU又检测到中断,又会反复进入中断)④ 开中断 ⑤ 中断返回

注:这里为什么又要开中断了呢?这个开中断是对应中断响应的关中断的,如果这里不开中断就没有办法响应新的中断请求了。

所以:

对于单级中断:

中断响应:

① 关中断        ② 保存断点和程序状态        ③ 寻找中断程序入口地址

中断服务:

① 保存现场        ② 处理中断事件       ③ 恢复现场        ④ 开中断        ⑤ 中断返回

对于多级中断:

中断响应:

① 关中断        ② 保存断点和程序状态        ③ 寻找中断程序入口地址

中断服务:

① 保存现场和屏蔽字        ②开中断        ③ 处理中断事件       ④ 关中断        ③ 恢复现场和屏蔽字        ④ 开中断        ⑤ 中断返回

(1)1号中断源:11111 2号:01100 3号:00100 4号:01111 5号: 01101

① 先响应2的中断请求,即保存现场,保存中断屏蔽字,设置新的中断屏蔽字,开中断。一旦开中断,就会立马响应4,因为4的中断处理优先级大于2。

② 处理完4的中断服务程序后,会回到2继续执行其中断服务程序。

③ 中断处理优先级1>5>2>3,所以当1,3,5同时发出中断请求,2能屏蔽3。

④ 中断响应优先级1>5,所以先执行1,并且1的中断处理优先级也是最高的,所以1不会被5打断。(如果这里1的中断处理优先级小于5,则1中断服务程序执行过程中会响应5的中断请求)

⑤ 1处理完后,返回2,由于5的中断处理优先级大于2,所以5会被响应。

⑥ 由于2的处理优先级大于3,所以3号中断源被2号屏蔽,只有当2号执行完后,并且返回用户程序(因为2号的中断屏蔽字决定了2号是检测不到3号的中断请求的),再执行3号中断请求

例题:

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

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

相关文章

SpringBoot开发:古典舞在线交流平台的架构与实现

第三章 系统分析 3.1 可行性分析 需要使用大部分精力开发的古典舞在线交流平台为了充分降低开发风险,特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度,经济角度,还有操作角度等进行综合阐述。 3.1.1技术可行…

排序01 多目标模型

引入 使用机器学习方法对指标做预估,再对预估分数做融合。融合方法:加权和方法给不同指标赋予不同的权重,权重是做A/B test调试得到的。还有更好地融合方法。 多目标模型 排序模型的输入是各种各样的特征,用户特征主要是用户id和…

易趋(EasyTrack)资深顾问唐颖受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 易趋(EasyTrack)资深顾问唐颖女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾,演讲议题为“隐形翅膀——数字化项目管理助力项目经理鹏程万里”。大会将于10月26-…

古典舞在线互动:SpringBoot平台设计与功能实现

第三章 系统分析 3.1 可行性分析 需要使用大部分精力开发的古典舞在线交流平台为了充分降低开发风险,特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度,经济角度,还有操作角度等进行综合阐述。 3.1.1技术可行…

Prometheus之Pushgateway使用

Pushgateway属于整个架构图的这一部分 The Pushgateway is an intermediary service which allows you to push metrics from jobs which cannot be scraped. The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. S…

扩散引导语言建模(DGLM):一种可控且高效的AI对齐方法

随着大型语言模型(LLMs)的迅速普及,如何有效地引导它们生成安全、适合特定应用和目标受众的内容成为一个关键挑战。例如,我们可能希望语言模型在与幼儿园孩子互动时使用不同的语言,或在撰写喜剧小品、提供法律支持或总结新闻文章时采用不同的风格。 目前,最成功的LLM范式是训练…

使用python基于DeepLabv3实现对图片进行语义分割

DeepLabv3 介绍 DeepLabv3 是一种先进的语义分割模型,由 Google Research 团队提出。它在 DeepLab 系列模型的基础上进行了改进,旨在提高图像中像素级分类的准确性。以下是 DeepLabv3 的详细介绍: 概述DeepLabv3 是 DeepLab 系列中的第三代…

无人机控制和飞行、路径规划技术分析

无人机控制和飞行、路径规划技术是现代无人机技术的核心组成部分,它们共同决定了无人机的性能和应用范围。以下是对这些技术的详细分析: 一、无人机控制技术 无人机控制技术主要涉及飞行控制系统的设计、传感器数据的处理以及指令的发送与执行。飞行控…

新闻推荐系统开发:Spring Boot实践指南

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

厂商资源分享网站

新华三(H3C)是一家中国知名的网络设备供应商,提供网络设备、网络解决方案和云计算服务。公司成立于2003年,是华为公司和惠普公司合资的企业,总部位于中国深圳。 华为(Huawei)是一家全球知名的电…

本地运行LLama 3.2的三种方法

大型语言模型(LLMs)已经彻底改变了AI领域,小型模型也在崛起。因此,即使是在旧的PC和智能手机上运行先进的LLMs也成为了可能。为了给大家一个起点,我们将探索三种不同的方法来本地与LLama 3.2进行交互。 先决条件 在我…

【2022工业3D异常检测文献】AST: 基于归一化流的双射性产生不对称学生-教师异常检测方法

Asymmetric Student-Teacher Networks for Industrial Anomaly Detection 1、Background 所谓的学生-教师网络,首先,对教师进行训练,以学习语义嵌入的辅助性训练任务;其次,训练学生以匹配教师的输出。主要目的是让学生…

YOLOv11改进 | Conv篇 | YOLOv11引入SAConv模块

1. SAConv介绍 1.1 摘要: 许多现代物体检测器通过使用三思而后行的机制表现出出色的性能。 在本文中,我们在目标检测的主干设计中探索了这种机制。 在宏观层面,我们提出了递归特征金字塔,它将特征金字塔网络的额外反馈连接合并到自下而上的骨干层中。 在微观层面,我们提出…

LabVIEW提高开发效率技巧----属性节点优化

在LabVIEW开发中,优化代码的效率和性能是非常重要的,尤其是在涉及前面板控件的属性节点时。频繁使用属性节点可能会导致程序执行速度的明显下降,特别是在处理大量数据或高频率操作时。下面详细介绍一些在LabVIEW开发中优化属性节点使用的技巧…

Vue3常用API总结

因为这个月的月初给自己定了个小目标,学完Vue3的基本使用,并使用Vue3亲手做一个小项目(稍微透露一下,我制作的是一个小工具,现在已经完成了90%了,这个月月底之前会通过博客的形式向大家展示&…

如何提高游戏本地化的质量使用QE门户网站Logrus IT

高质量的游戏本地化是全球市场成功的关键。这尤其适用于AAA和AA级别的游戏,玩家在这些游戏中投入了大量资金,并期望从中获得完美的游戏体验。尽管公司做出了努力,但传统的质量控制方法并不总是能够防止所有错误和本地化不准确。让我们更详细地…

【深度学习】交叉熵

交叉熵(Cross-Entropy)是信息论中的一个重要概念,也是在机器学习和深度学习中用于分类任务的常见损失函数。它衡量的是两个概率分布之间的差异,特别是模型的预测概率分布与真实分布的差异。 交叉熵最初是从信息论引入的&#xff0…

检查jar冲突,查找存在相同class的jar

写在前面 本文看下如何查找jar冲突,即查找哪些jar包中存在相同的class。如果是存在相同jar的不同版本,基本一眼就能看出来,然后结合maven的依赖关系将其剔除掉即可,但是当你遇到了有人手动拷贝某些class到jar包中导致冲突的情况时…

【高频SQL基础50题】21-25

我又回来了。 目录 1.删除重复的电子邮箱 2.文章浏览 I 3.上升的温度 4.各赛事的用户注册率 5.超过 5 名学生的课 1.删除重复的电子邮箱 高级字符串检索题。 使用自连接的方式,面对上亿级别数据,效率也可以很高。 # Write your MySQL query st…

【算法】链表:92.反转链表(medium)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法 (双指针) 4、代码 是 206. 反转链表 - 力扣(LeetCode)的类型题,且难度提升,可以先完成206,然后参照206的…