1.3_2 中断和异常

文章目录

  • 1.3_2 中断和异常
    • (一)中断的作用
    • (二)中断的类型
      • 1、内中断
      • 2、外中断
      • 3、中断分类总结
    • (三)中断机制的基本原理
  • 总结

1.3_2 中断和异常

(一)中断的作用

  CPU上会运行两种程序,一种是操作系统内核程序(是整个系统的管理者),一种是应用程序

  在合适的情况下(详见第二章进程管理),操作系统内核会把CPU的使用权主动让给应用程序。

  “中断”是让操作系统内核夺回CPU使用权的唯一途径。

  一旦发生中断,就会让CPU停止当前执行的应用程序,转而去执行相应的操作系统内核程序。

  即,“中断”会使CPU由用户态变为内核态,使操作系统重新夺回对CPU的控制权。

  如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。

  而如果CPU一直执行同一个应用程序,又何来“多道程序并发”这件事情呢?

  所以,没有中断技术,就没办法实现“并发”。甚至可以说,没有中断技术,就没有操作系统。

  1)内核态 —> 用户态:执行一条特权指令——修改PSW标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权。

  2)用户态 —> 内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权。

(二)中断的类型

  • 内中断:与当前执行的指令有关,中断信号来源于CPU内部
  • 外中断:与当前执行的指令无关,中断信号来源于CPU外部

1、内中断

例子1:应用程序执行特权指令

image-20240219135722380

  如果应用程序中被植入了一条特权指令,那么,当CPU执行到这条特权指令时,会因指令非法而触发中断信号,CPU会拒绝执行这一条特权指令。

  接下来,CPU会自动地转变为内核态,并且会开始执行“处理中断信号”相关的内核程序。

image-20240219135921228

  这就是一个内中断的典型例子。应用程序执行非法指令,从而引起CPU重新接管控制权。

例子2:应用程序执行非特权指令(除法指令,但除数为0)

  除了这种情况(用户态下执行特权指令),也有非特权指令引起的内中断,例如:执行除法指令时发现除数为0。

  总之,若当前执行的指令是非法的(指令本身是非法的,或者指令中的一些参数非法),则会引发一个中断信号。

例子3:应用程序主动请求操作系统接管(陷入指令)

  有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号。

image-20240219140613370

image-20240219140639894

  执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。“系统调用”就是通过陷入指令完成的。

  注意:“陷入指令”是一种特殊的指令,但绝对不是特权指令。“陷入指令”是在用户态下执行的一条指令(并没有被CPU拒绝执行),既然如此,“陷入指令”肯定不是特权指令。

2、外中断

例子1:时钟中断(由时钟部件发来的中断信号)

时钟部件:每隔一个时间片(如50ms),会给CPU发送一个时钟中断信号。

image-20240219142404555

  例如,有两个应用程序。当应用程序1的指令1、指令2执行之后,时间已经达到50ms,因此时钟部件发送一个时钟中断信号。

image-20240219142034601

  无论是内中断还是外中断,都是中断。既然是中断,那么CPU遇到它时,就会变为内核态,转而执行对应的“处理中断的内核程序”。在此处是“处理时钟中断的内核程序”。

image-20240219142410752

  当“处理时钟中断的内核程序”执行完毕后,又要回归用户态,去继续执行应用程序了。

  那么,此时是继续执行应用程序1的后续指令,还是执行应用程序2?

  由于刚才应用程序1已经用了一个时间片了,接下来,公平起见,它会让应用程序2上CPU运行。

  操作系统内核决定接下来让另一个应用程序上CPU运行。

  应用程序2的执行同理,在一个时间片后,进行时钟中断,并在接下来转而执行应用程序1……

**注:**由上述过程可以得知,两个应用程序是如何依靠时钟中断实现并发运行、相互切换的。可见,“中断”在计算机当中有多大的作用。

例子2:I/O中断——由输入/输出设备发来的中断信号

  例如,有的应用程序会请求打印机的打印服务。在打印机打印完毕后,打印机会向CPU发送中断信号,用来通知CPU:它的输入/输出任务已经完成了,可以去进行其他操作了。

  同理,这也是一个中断,因此CPU会执行相应的“处理中断的内核程序”,在此处叫做“处理I/O中断的内核程序”。

  总之,上述两个例子中,中断信号都来自于CPU外部,与当前执行的指令内容没有关系。

注:CPU在每一条指令执行结束时,都会例行检查是否有外中断信号。


3、中断分类总结

中断的分类

1)内中断(也称:异常、例外)

  与当前执行的指令有关,中断信号来自CPU内部。

  a.陷阱、陷入(trap):由陷入指令引发。实际上,这是应用程序”故意“引发的,用来请求操作系统提供相应服务。

  b.故障(fault):由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU的使用权还给应用程序,让它继续执行下去。如:缺页故障(详见第三章)。

  c.终止(abort):由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。如:除数为0、非法使用特权指令。

例如除数为0,这是程序本身的bug,内核程序当然没办法修复它,只能把它干掉。

2)外中断(也称:中断)

  与当前执行的指令无关,中断信号来自CPU外部。

  a.时钟中断

  b.I/O中断请求

注意:

  内中断、外中断这两个名称,可以很形象地理解两者的本质区别。

  但实际上在很多教材、考试中,内中断也称“异常、例外”,而外中断则直接称为“中断”。

  因此,在教材中、考试中,很多时候遇到的“中断”就是一种狭义的中断——特指外中断。

  而本节中提到的“中断”是广义的中断——包括内中断、外中断。

  总之:大多数的教材、试卷中,“中断”特指狭义的中断,即外中断,而内中断一般称为“异常”。

(三)中断机制的基本原理

  这么多的中断类型,不可能用同一种中断处理程序来处理。所以,CPU要根据中断类型的不同,去找到相对应的中断处理程序。

  不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。

image-20240219150346985

  显然,中断处理程序一定是内核程序,需要运行在“内核态”。

具体细节见计组这门课,对于操作系统,理解到此即可。

总结

image-20240219150701387

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云香港轻量应用服务器网络线路cn2?

阿里云香港轻量应用服务器是什么线路?不是cn2。 阿里云香港轻量服务器是cn2吗?香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器,通过mtr traceroute测试了一下,最后一跳是202.97开头的ip,1…

ssh连接服务器需要子网掩码吗?

IP寻址需要同时知道IP地址和子网掩码,但是在通过ssh连接服务器时,只需要知道IP地址和端口号就可以了,ssh通讯为什么不需要子网掩码呢。在不知道子网掩码的前提下,可以正确找到IP对应的主机吗? 不需要,SSH&a…

【C++】中类的6个默认成员函数 取地址及const成员函数 学习运算符重载 【实现一个日期类】

文章目录 一、【C】赋值运算符重载1.1 运算符重载【引入】1.2 运算符重载1.3 赋值运算符重载1.4 赋值 二、日期类的实现2.1 判断小于2.2 判断等于2.3 判断小于等于2.4 判断大于2.5 判断大于等于2.6 判断不等于2.7 日期加等天数2.8 获取月份天数2.9 日期加天数2.9.1 日期减等天数…

LeetCode 0590. N 叉树的后序遍历:深度优先搜索(DFS)

【LetMeFly】590.N 叉树的后序遍历:深度优先搜索(DFS) 力扣题目链接:https://leetcode.cn/problems/n-ary-tree-postorder-traversal/ 给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进行序列化表…

C语言字符串函数strtok

注意: 该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记 ‘\0’ 。由于该函数需要更改字符串 str,因此 str 指向的内存必须是可写的。首次调用时 str 指向原始字符串,此后每次调用 str 用 NULL 代替。示例&#…

Ubuntu本地安装code-server结合内网穿透实现安卓平板远程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

Leetcode 283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […

来了解AI自动直播带货新玩法!普通人也能轻松上手!

抖捧AI实景自动直播系统,以低成本常态化高效率的直播方式,为进入直播间的用户打造了更真实的体验,更帮助了大量的实体商家降低自播的成本,实现降本增效,接下来看看抖捧最新的餐饮休娱案例及玩法,每天直播八…

实用工具推荐

可以提高你工作效率的工具 SnipasteSnipaste Snipaste Snipaste

数字化商品管理:革新鞋服零售模式,引领智能商业新时代

随着科技的快速发展,数字化浪潮席卷各行各业,鞋服零售企业亦不例外。在这个新时代,数字化商品管理不仅成为鞋服零售企业革新的关键,更是其引领智能商业浪潮的重要引擎。本文将围绕数字化商品管理如何深刻影响鞋服零售模式&#xf…

HashCat报错

HashCat执行命令 hashcat -a 3 -m 17225 -2 ?l?u $pkzip2$3*1*1*0*0*24*143c*4917*4bfe891c40b54ed8a613dc05c1a5a5c6df68da07f2a00e55d705a5bc04f3c149a53ab891*1*0*8*24*2e57*490e*028de43f9edfed13437c0964625b78391e2876248d3362b240c2bbfd7dbc3ff022ef2e07*2*0*67*5b*d6…

建立流行病预警指数体系并优化传染病模型:对公共卫生突发事件监测数据的分析

应对紧急情况造成的损害的能力是紧急能力现代化的重要象征。 在应对紧急情况时,政府机构和决策者需要更多信息来源,以更有效地估计灾难可能的演变。 这篇论文提出了一个预测COVID-19动态演变的优化模型,该模型将系统动力学的传播算法与预警指…

css pointer-events 多层鼠标点击事件

threejs 无法滑动视角,菜单界面覆盖threejs操作事件。 pointer-events /* Keyword values */ pointer-events: auto; pointer-events: none; pointer-events: visiblePainted; /* SVG only */ pointer-events: visibleFill; /* SVG only */ pointer-events: visib…

【vue+leaflet】vue项目中使用leaflet绘制室内平面图、leaflet.pm在平面图中绘制点、线、面图层(一)

效果图: 一,插件安装 npm i leaflet --save // 我的版本^1.9.4 npm i leaflet.pm --save // 我的版本^2.2.0附官网链接: leaflet官网: https://leafletjs.com/index.html leaflet.pm官网: https://www.npmjs.com/package/leaflet.pm?activeTabreadme 二,模块引入 因为我…

OLMo论文里的模型结构的小白解析

模型参数量 以7B为例,隐藏层为4086,attention heads为32 训练的token量为2.46T 训练策略 超参数 在我们的硬件上优化训练吞吐量,同时最小化损失峰值和缓慢发散的风险来选择超参数 损失峰值:在机器学习中,"损失峰…

lazada、速卖通卖家如何掌握自养号测评技巧打造高评价产品?

做跨境电商卖家都知道,国外的买家购物比较理性,也喜欢货比三家,所以店铺想要留住客户,就需要一些优质的产品来吸引他们。产品评价是卖家获取买家信任的重要途径,评价越高的产品,销量也就越好。 尤其是 Shop…

猫多喝水好吗?可以促进猫咪多喝水的主食分享

猫咪多喝水确实是有益的。适量的饮水对于猫咪的健康至关重要,有助于维持体液平衡、促进消化、减少便秘的风险,并对泌尿系统的健康起到保护作用。正常情况下,建议每公斤体重的猫每天摄入60-80毫升的水,除了与体重相关外&#xff0c…

RabbitMQ消息可靠性投递与ACK确认机制

1.RabbitMQ的消息可靠性投递 什么是消息的可靠性投递 保证消息百分百发送到消息队列中去保证MQ节点成功接收消息消息发送端需要接收到MQ服务端接收到消息的确认应答完善的消息补偿机制,发送失败的消息可以再感知并二次处理 RabbitMQ消息投递路径 生产者–>交换机…

碳化硅模块使用烧结银双面散热DSC封装的优势与实现方法

碳化硅模块使用烧结银双面散热DSC封装的优势与实现方法 新能源车的大多数最先进 (SOTA) 电动汽车的牵引逆变器体积功率密度范围从基于 SSC-IGBT 的逆变器的 <10 kW/L 到基于 SSC-SiC 的逆变器的约 25 kW/L。100 kW/L 代表了这一关键指标的巨大飞跃。 当然&#xff0c;随着新…

GaiaDB-X 获选北京国家金融科技认证中心「数据领域首批专项示范与先行单位」

2023 年 12 月 21 日至 22 日&#xff0c;「2023北京国际金融安全论坛暨金融科技标准认证生态大会」在北京金融安全产业园举办。百度智能云分布式数据库 GaiaDB-X 产品荣登「数据领域首批专项示范与先行单位」名单&#xff0c;并获得了由北京国家金融科技认证中心颁发的「数据产…
最新文章