CHS_02.1.3.2+中断和异常

CHS_02.1.3.2+中断和异常

  • 中断有哪些类型
  • 中断的作用
  • 中断有哪些种类型
    • 另一个内中段的例子
    • 外中段的例子
  • 中断的分类
  • 中断机制背后的基本原理
  • 回顾

在这个小节中 我们会学习中断和异常相关的知识点 那首先我们会介绍中断的作用 这其实在上小节当中也有提到过

只不过由于这个内容十分重要 所以还是愿意做一个复读机 另外 我们会介绍一下

中断有哪些类型

在这里插入图片描述

大致上可以分为内中断和外中断两种 内中断又可以称为异常 最后我们会简单的介绍一下中断这种机制 它实现的一个具体的原理

那首先来看下

中断的作用

在这里插入图片描述

在上小节中 我们已经学习到了 cpu上面其实会运行两种类型的程序 一种是操作系统的内核程序 一种是普通的应用程序

而内核程序 它是整个系统的管理者 它是一个管理者的角色 那我们的计算机在刚启动的时候 其实在上边跑的肯定是内核程序 只不过在时机合适的时候内核程序会把

cpu的使用权主动的让给应用程序 那这个部分是第二张进程管理当中我们会具体学习的内容 这儿暂且先不展开

总之 一个应用程序在上cpu运行之后 它就会一直运行下去 除非发生了中断

而一旦发生中断 就会让cpu立即停止此时正在执行的应用程序 转而执行相应的内核程序

所以中断是让这个管理者 也就是操作系统内核重新夺回cpu使用权的一个唯一的途径

而中断会使cpu由用户态变为内核碳 所以我们可以思考一下

假如说没有中断机制的话 那么一旦一个应用程序上cpu运行了 那么这个应用程序就可以一直的运行下去 那如果一个cpu一直在运行同一个应用程序的话 我们又怎么可能实现多到程序并发这个事情呢

所以 没有中断技术肯定就没办法实现得到程序并发 甚至可以说没有中断技术就没有操作系统

总之 操作系统内核 它是一个管理者 当他想要把cpu使用权让给应用程序的时候 那么他会自愿的用一个特权指令完成这个事情

但是当他想要把cpu的使用权重新给夺回来的时候 那么他也可以通过中断的这种方式来实现

那结合上一小节当中我们讲的例子 相信这个已经不难理解了 那接下我们要看的是

中断有哪些种类型

在这里插入图片描述

一种叫内中断 一种叫外中断 内中断的产生和当前执行的指令是有关系的 中断信号来源于cpu内部 而外中断恰恰相反

他和当前执行的指令无关 中断幸好来源于cpu的外部 那 首先 我们来看几个内中段的例子

也就是说 这种中断的产生和当前执行的指令有关 就比如说我们上一小节当中提到的这个例子
在这里插入图片描述

一个应用程序 它运行在用户台 然后cpu会依次处理它的这些指令

但是假如说有一个猥琐的黑客在这个应用程序当中尝试植入一条特权指令的话

那么 当cpu拿到这条特权指令的时候 他发现此时正在处于用户台 此时在运行的是应用程序

于是 这个非法的事件会触发一个中断信号 cpu会拒绝执行这一条特权指令

接下来 cpu会自动的转变为内核态 并且会开始执行处理这个中断信号相关的

内核程序 于是在发生了这样非法的事情之后 这个系统的管理者又重新夺回了cpu的控制权

所以这就是一个很典型的内中断的例子 cpu在执行当前的一条指令的时候 由这条指令引发了一个中断

有的时候 即使cpu执行的是非特权指令 也有可能会引发内中断

比如说cpu在执行一个除法指令的时候 他发现除数是零那在这种情况下肯定也不能让这个程序继续执行下去 所以这种情况也会引发一个内中断

总之 如果当前执行的这个指令本身是非法的 或者说指令的一些参数是非法的 那么这种情况下就会产生一个

内中段的信号 接下来再来看

另一个内中段的例子

在这里插入图片描述

一个应用程序运行在用户台

但是 有的时候 应用程序他是想要请求操作系统内核为他提供一些服务的

那在这种情况下 应用程序就会执行一条特殊的指令 叫做陷入指令

那这个指令会引发一个内部中断信号 接下来 cpu又会转向这个中断信号相应的处理程序进行这个中断信号的处理

所以可以看到 当一个应用程序执行了陷入指令的时候 就意味着这个应用程序主动的把cpu使用权还给操作系统内核

想让操作系统内核为他提供某些服务 那我们之前提到的所谓的系统调用其实就是用这个陷入指令来完成的

需要强调的一点是陷入指令 它是一个比较特殊的指令 但是它并不是特权指令

因为我们可以想一下这个应用程序 它是运行在用户态的吗 在用户态下可以执行这个现入指令的话 那这个信用指令肯定也不是特权指令了

总之 刚才提到的这个中断信号其实也和当前执行的这条指令是有关系的 这个中断信号是来自于cpu的内部

那接下来我们要看几个

外中段的例子

在这里插入图片描述

外中段和当前执行的指令无关

这个中断信号来自于cpu的外部来看 第一个例子叫做时钟中断 这种中断信号是由计算机当中的一个硬件叫做时钟部件来发出的

这个时间部件会每隔一段时间给cpu发一个中断信号 通过这个时钟中断信号就可以实现多到程序并发运行了

那我们来看一下这个故事是怎么样的 假设此时系统当中想要并发的运行两个应用程序

首先 应用程序一它运行在用户台 然后cpu会执行它的这些指令

然后 当他执行了两条应用程序一的指令的时候 这个时钟部件

发现此时已经过了50毫秒了 那么他会给cpu发送一个中断信号

注意 这个中断信号和当前执行的指令是没有关系的 它来自于cpu的外部

然后 根据我们之前学习到的知识 我们知道当cpu检测到一个中断信号的时候 他会先暂停此时正在运行的应用程序

然后转而执行一个相应的内核程序来处理这个终端信号 所以接下来cpu会对这个

时钟中断信号进行处理并且转为内核态 那在内核态下 cpu开始执行这个内核程序来处理刚才收到的中断信号

然后这个内核程序执行的过程当中发现 啊 应用程序一刚才已经用了50毫秒的这个时间了 所以接下来为了公平起见 我想让第二个应用程序上cpu运行 于是接下来这个内核程序会把cpu的使用权给

第二个应用程序接下来又切换回用户台 然后第二个应用程序开始上cpu运行

而当第二个应用程序执行了一系列的指令之后 又过了50毫秒 此时这个始终部件又会给cpu发送一个

来自于外部的中断信号 那同样的cpu还是会回去执行和这个中断信号相关的那个

处理程序 所以接下来他又会开始执行这个内核程序 那接下来这个操作系统内核发现程序二已经用了50毫秒了 所以接下来公平起见 我又想让程序一上去接着运行

于是他会把cpu的使用权让给应用程序一然后应用程序一就可以接着往下执行他之后的那一系列的指令了

所以刚才的这个故事中 我们就很清晰的看到了两个应用程序是如何在中断机制的支持下实现并发运行的

一直不断的相互切换 所以可以看到中断在现代的这个计算机当中到底有多大的作用

那除了这个时钟部件发出的中断信号之外 有时候还会有来自于设备 也就是input output 也就是输入输出设备发来的这种中断信号

比如说 某一个应用程序可能会请求打印机的打印服务 那打印机在打印输出完成了之后 会向cpu发送中断信号用来通知cpu我的任务已经完成了

接下来 cpu会用这个中断信号相对应的内核程序来对这个中断信号进行处理

总之呢 我们这儿提到的这两种中断 中断的信号都来自于cpu的外部 和当前执行的指令是没有关系的

cpu在每一个指令执行结束的时候 都会例行的检查一下是否有外部中断的信号需要我来处理

好的 那么刚才我们列举了一些内中断和外中断的例子 相信通过这些例子大家可以更直观的感受到中断这种机制它的一个强大的作用

中断的分类

在这里插入图片描述

那我们要分辨一个中断是内中断还是外中断 只需要判断这个中断信号的产生和当前执行的指令是否有关就可以了

那刚才我们讲解的过程中使用的是内中段和外中段这两个数据 因为内外这两个形容词可以让大家很形象的理解到他们俩之间的一个本质的区别

不过 其实在很多教材还有很多学校的考试当中 内中段一般会称为异常 外中段一般就直接称为中段

所以考试当中遇到的中断 一般来说是这个狭义的中断 它特指外中断 而我们这个小节当中之前一直在说的中断 其实指的是这种广义的中断

所以大家要理解他们的区别 可以用内 外这两种方式来理解 但是在做题的过程当中 更需要注意的是中断和异常这两个术语

那在接下来的讲解中 我们会经常使用到异常这个术语 大家需要知道 他其实指的就是内中断

那么 异常又可以进一步的划分为这样的三种 第一种叫做陷入trap

这个其实就是刚才我们所提到的 由陷入指令引发的那种异常

其实 这种异常是程序故意引发的 当一个程序想要请求操作系统的服务的时候 他就会故意的执行这一条指令

那其实这也是系统调用实现的一个原理 而系统调用的内容 我们会在下一小节在

继续展开 第二种异常称为故障故障 是一种由错误条件引起的

并且可能被内核程序修复的问题 内核程序修复故障之后 会把cpu的使用权还给应用程序 让他继续执行下去

比如说我们在第三章当中会学习到的缺液故障 那这个地方大家暂时理解不了 没有关系 等学完了第三章再回来细细品味

第三种异常叫做终止 终止是由致命的错误引起的

这种错误一般是内核程序无法修复的 所以一般来说 当发生了这种类型的异常之后

内核程序就不会再把cpu的使用权还给引发终止的那个应用应用程序

一般来说 会直接的把这个应用程序直接给干掉 让它终止掉 比如说 刚才我们提到两个例子

整数除以零这种错误 那其实就是程序bug 也不是操作系统能够修复的 那是程序本身的问题

或者非法的使用特权指令 那这样的程序也应该直接把它干掉 不应该再把cpu的使用权再还给他

所以这是第三种 终止那异常 或者说内中断的这三种分类方式 大家需要注意一下 曾经考过

那么 那么以上就是中断的一个分类 那么接下来我们要简单的介绍一下

中断机制背后的基本原理

在这里插入图片描述

刚才我们举了各种各样的中断的例子 有的中断是整数除以零有的中断是始终部件引起的

而有的中断又是应用程序自己引发的 那很显然这么多的中断的类型不可能用同一个程序来处理 所以cpu会根据中断信号的不同

来找到和这个中断信号相对应的中断处理程序 那具体的做法是 cpu在检测到中断信号之后 会根据这个中断信号的类型来查询中断限量表

然后通过这个中断向量表 找到各种类型的中断所对应的中断处理程序

很显然 我们之前讲了那么多例子 大家应该也能够想到中断处理程序 它其实就是一种内核程序 肯定是需要运行在内核态的

那么其实这就是中断机制的一个基本的实现原理 但是具体的硬件上应该怎么实现 这是计算机组成原理 那门课要教大家的

如果不考那门课的同学其实理解到这儿就差不多了 好的 那么这个小节当中 我们介绍了中断和异常

中断的作用十分重要 它是让cpu从用户态变回内核态的一种唯一的方式 它是让操作系统强行的夺回cpu控制权的一种方式

在引入了中断机制之后 才能让操作系统正常的工作 才能实现多道程序并发运行这个美好的事情

那中断的分类这个知识点大家可以在根据课后的习题进行巩固 最后我们简要的提了一下中断机制的基本实现原理

总之 分为这样的两个步骤 cpu首先会检查中断信号 那对于内中断信号来说 是cpu在执行指令的时候就会进行检查的

他会检查是否有异常的发生 而外中断信号的检查是在每个指令周期的末尾 也就是cpu每执行完一条指令之后 他都会例行的来检查是否有外部中断信号需要处理

而当cpu检测到一个中断信号之后 又会根据这个中断信号来查询中断向量表

然后找到这个类型的中断信号所对应的中断处理程序来进行处理

回顾

在这里插入图片描述

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

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

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

相关文章

如何为图片加水印?

如何为图片加水印?在许多情况下,图片的分享和传播已经变得非常普遍。然而,随着图片的广泛传播,也带来了一些问题,例如盗用、未经授权的使用以及信息的混淆。为了保护自己的照片版权,标识归属或增加品牌的可…

使用Java读取Excel文件,实现数据批处理

一、前言 通过编程方式读取Excel数据能实现数据导入、批量处理、数据比对和更新等任务的自动化。这不仅可以提高工作效率还能减少手动处理的错误风险。此外读取的Excel数据可以与其他系统进行交互或集成,实现数据的无缝传输和共享,满足特定项目的需求。…

OSPF基础

0x00 前言 本篇简述OSPF相关知识 0x01 正文 为什么需要动态路由协议 静态路由无法适应较大的网络无法动态的随着网络的变化而自动化,耗费人力 动态路由协议 什么是BGP协议 基于距离矢量算法修改后的算法形成协议,被称为路径矢量路由协议 BGP工作…

Windows高性能模式的开启

高性能模式的开启 在高性能电源模式下,系统会获得性能提升,得益于电脑中的硬件始终允许运行在较高的性能下,从而带动了系统性能,运行程序会更流畅一些。 如果是笔记本的话,屏幕的亮度也会在高亮度下显示,…

AI交互数字人怎么应用在展览展厅?

随着AIGC的迅速发展,AI交互数字人成为展览展厅的新流量密码。越来越多文旅品牌、博物馆展馆等通过部署AI交互数字人,开创全新的交互模式。 如山西博物馆上线的主题云展览《且听凤鸣》中,打破了常态展示模式,以“数字人小程序”的方…

Java字符串拼接常用方法总结

使用场景:用某个分隔符拼接字符串 下边是我使用过的几种方式废话不多说,直接上代码初始数据 1.使用流2.StringBuilder3.[StringJoiner](https://blog.csdn.net/qq_43417581/article/details/126076152?ops_request_misc%257B%2522request%255Fid%2522%2…

外汇天眼:澳大利亚金融投诉管理局在2023年收到了102,790宗投诉

在2023年,澳大利亚金融投诉管理局收到了来自消费者和无法与其金融公司直接解决争端的小企业的102,790宗投诉。 根据初步的数据快照,这相比于2022年增加了23%。 澳大利亚的金融纠纷解决方案首次在一个日历年内录得了100,000宗投诉。 “投诉升级到AFCA的…

ssm基于Vue的戏剧推广网站论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统戏剧推广信息管理难度大,容错率低&#xff0c…

IT行业下一个就业风口,鸿蒙开发者有多抢手?

2023年年尾,华为与各大应用厂商密集签约,使得鸿蒙操作系统再次引发关注。 2019年8月9日,华为消费者业务CEO余承东在华为开发者大会上发布了鸿蒙操作系统HarmonyOS,成为当年科技圈的爆炸性新闻。此后,HarmonyOS从1.0迭…

vite 搭建vue3 TS项目初始框架

目录 仓库地址: 一.搭建项目 1.安装 Vite: 2.创建 Vue 3 项目: 3.进入项目目录: 4.安装依赖: 5.运行项目: 6.流程实操 二.修改项目结构,显示自定义的页面 1.整理静态样式文件 1.1.在 sr…

从大到小输出三个数

写代码将三个整数数按从大到小输出。 例如&#xff1a; 输入&#xff1a;2 3 1 输出&#xff1a;3 2 1 #include <stdio.h> int main() {int a 2;int b 3;int c 1;scanf("%d%d%d",&a, &b,&c);//我们设定a最大&#xff0c;c最小if(a<b){…

用google colab t4部署phi2(公网可访问)

目录 1.打开google colab&#xff0c;配置GPU 2.ngrok获取authtoken 3.安装所需的包​编辑 4.运行推理服务&#xff0c;生成公网地址 5.client.py访问上述推理服务 6.gradio界面版 1.打开google colab&#xff0c;配置GPU 2.ngrok获取authtoken https://dashboard.ngrok…

小程序环境搭建

文章目录 小程序介绍开发环境准备注册账号获取APPID开发⼯具 第⼀个微信⼩程序打开微信开发者⼯具新建⼩程序项⽬填写项⽬信息成功 微信开发者⼯具介绍⼩程序结构⽬录⼩程序⽂件结构和传统web对⽐ ⼩程序配置⽂件全局配置 app.json页面配置sitemap 配置-了解即可 小程序介绍 开…

Centos7下升级gcc/g++版本(简单 + 避坑)

在 Centos7 下&#xff0c;使用 yum 安装高版本的 gcc/g 最简单&#xff1a; yum -y install centos-release-scl yum -y install devtoolset-11-gcc devtoolset-11-gcc-c devtoolset-11-binutils需要安装哪个个版本的gcc/g&#xff0c;就把数字替换成对应的版本号。例如上面代…

A借助AI工具提升电子邮件营销内容效果

随着互联网的普及和电子邮件的广泛应用&#xff0c;邮件营销已成为企业推广产品和服务的重要手段之一。为了提高邮件营销的效果&#xff0c;我们需要关注邮件内容的质量和吸引力。而百度文言一心等AI工具作为一款强大的在线写作工具&#xff0c;可以帮助我们提升邮件营销内容的…

MySQL运维实战(3.2) 常见数据库连接失败问题排查

作者&#xff1a;俊达 我们经常会遇到一些数据库连接失败或访问报错的问题。收集并分析具体的报错信息&#xff0c;可以帮助我们迅速定位问题。 1、客户端到服务端的网络是否畅通&#xff0c;服务端端口是否能连通。 使用ping、telnet等工具探测服务端的端口是否能访问。 […

C语言分支和循环语句

分支和循环语句 学习内容 分支语句 if switch 循环语句 while for do while goto语句 1. 什么是语句&#xff1f; C语句可分为以下五类&#xff1a; 表达式语句 函数调用语句 控制语句 复合语句 空语句 本次介绍的是控制语句。 控制语句用于控制程序的执行流程&a…

Android14之刷机模式总结(一百七十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Spring之启动过程源码

文章目录 一. Spring初始化流程二. 源码分析1. 初步分析2. 核心方法refresh() 三. 事件发布机制1. 简介2. 源码分析 一. Spring初始化流程 前面的内容我们已经把Bean的生命周期的源码已经分析完了。现在我们从容器的角度去分析源码&#xff0c;这一部分首先着重分析一下Spring…

CVE-2023-51385 OpenSSH ProxyCommand命令注入漏洞

一、背景介绍 ProxyCommand 是 OpenSSH ssh_config 文件中的一个配置选项&#xff0c;它允许通过代理服务器建立 SSH 连接&#xff0c;从而在没有直接网络访问权限的情况下访问目标服务器。这对于需要经过跳板机、堡垒机或代理服务器才能访问的目标主机非常有用。 二、漏洞简…