【操作系统】操作系统运行环境——中断与异常

news2024/9/23 11:13:23

中断与异常

  • 导读
  • 一、中断机制
    • 1.1 中断机制的重要性
  • 二、中断与异常的基本概念
    • 2.1 中断与异常的个人理解
    • 2.2 内中断与外中断
  • 三、中断与异常的分类
  • 四、中断与异常的处理过程
  • 结语

封面

导读

大家好,很高兴又和大家见面啦!!!

在上一篇内容中我们介绍了处理器的运行模式。在计算机系统中,CPU通常会执行两种不同性质的程序:

  • 内核程序——当CPU处于核心态时执行的程序,此时CPU能够执行特权指令
  • 应用程序——当CPU处于用户态时执行的程序,此时CPU能够执行非特权指令

大多数操作系统的内核包括4个方面的内容:

  1. 时钟管理
  2. 中断机制
  3. 原语
  4. 系统控制的数据结构及处理

在这些内容中,中断机制的引入的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,称为操作系统各项操作的基础。

那么在操作系统中,中断机制究竟是如何工作的呢?在今天的内容中,我们将会探讨一下操作系统中的中断与异常;

一、中断机制

在操作系统中引入核心态与用户态这两种工作状态后,就需要考虑这两种状态之间如何切换。操作系统内核工作在核心态,而用户程序工作在用户态。系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此需要在核心态建立一些“门”,以便实现从用户态进入核心态。

在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常。

发生中断时,运行用户态的CPU会立即进入核心态,这是通过硬件实现。

程序状态寄存器PSW,专门用来记录CPU此时的工作状态,当寄存器存储的值为0时,表示CPU此时为核心态,当寄存器存储的值为1时,表示CPU此时为用户态。
若要从用户态进入核心态,只需要将寄存器的值从1改为0即可
同理,从核心态进入用户态,只需将寄存器的值从0改为1即可

中断时操作系统中一个非常重要的概念,对一个运行在计算机上的实用操作系统来说,缺少了中断机制,将是不可想象的。

1.1 中断机制的重要性

在前面的内容中我们知道了操作系统的4个特征——并发、共享、虚拟、异步。并且在这4个特征中并发与共享是操作系统的最基本的特征。

而对于操作系统来说,程序能够并发运行的前提就是中断机制。

当一道程序开始运行时,它势必就会占用一定的计算机资源。设想一下,如果程序在运行的过程中无法中断,只能够等到程序运行结束才能继续运行下一个程序,那对于操作系统而言,还会存在多道程序并发运行的情况吗?

在前面我们也提到过,当操作系统不需要进行并发运行多道程序时,那也就不存在程序与程序之间的计算机资源的争抢问题,那么也就代表不存在共享计算机资源。没有并发与共享,那也就不存在虚拟与异步。

因此我们说中断机制是操作系统中一个非常重要的概念,有了中断机制,才有了操作系统的并发、共享、虚拟、异步这些基本特征。

由操作系统的发展历程我们也能够感受到,操作系统的发展过程实际上就是一个想方设法不断提高资源利用率的过程。而提高资源利用率就需要在程序并未使用某种资源时,把它对那种资源的占有权释放,而这一行为就需要通过中断机制来实现。

二、中断与异常的基本概念

中断(Interruption)也称外中断,是指来自CPU执行指令外部的时间,通常用于信息输入/输出,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。

异常(Exception)也称内中断,是指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页及专门的陷入指令等引起的事件。异常不能被屏蔽,一旦出现就应立即处理。

2.1 中断与异常的个人理解

外中断,我们可以理解为是操作系统的主动中断机制

  • 比如,当我们要使用打印机打印一份文件时,当文件打印完后,打印机就已经完成了它的任务,不需要继续启动了,这时程序就会终止打印机的运行并释放该资源的占用;
  • 再比如,当我们假设当前操作系统下预设的程序一次运行的时间为50ms,那么,当有多道程序在运行时,当程序1运行了50ms后,程序1的运行就会被操作系统主动中断,操作系统会开始执行程序2;同理,对于程序3、程序4……都是同样的运行方式。因此,在一整个时间周期中,每一道程序都会通过操作系统主动中断的方式来按照固定的时间片来进行运行,

内中断,我们则可以理解为操作系统的被动中断机制

这里的被动最直观的感受就是程序运行错误。在C语言中,我们在编写程序时遇到过各种各样的错误,并且无一例外,每一次遇到错误时,程序都无法正常运行,而是会直接终止。

比如我们熟悉的数组越界的问题,栈溢出的问题,空指针的解引用问题,算术溢出的问题,赋值左值为不可修改对象的问题……

当我们遇到这些问题时,如果程序不能及时停下来处理这些问题的话,那产生的结果将会是我们无法想象的。因此这些异常不能被屏蔽,并且只要出现,就必须立即进行处理。

2.2 内中断与外中断

可能有朋友在读完上一部分我对中断与异常的个人理解后开始有点犯迷糊了,现在脑海中可能会存在一个疑问:为什么主动中断机制是被称为外中断,既然是主动不应该是内中断吗?而被动中断机制又被称为内中断,那不应该是外中断吗?这真是奇奇怪怪的理解。

实际上这里的内外指的是中断信号的产生源头。

对于外中断来说,它的中断信号主要来自于CPU的外部,我们可以理解为是操作系统的预设信号,如时钟管理,当程序的运行完一个时间片后,中断信号会由时钟部件产生,然后发送给CPU,CPU在接受到外部的中断信号后,会主动的执行中断操作。因此,我将外中断理解为的是操作系统的主动中断机制,但是这里的外指的是来自CPU外部的中断信号;

对于内中断来说,它的中断信号主要来自于CPU的内部,比如当CPU在正常运行的过程中,出现了不正常的操作时,操作系统为了避免引发未知的错误,所以被迫通过中断机制来处理这一不正常的操作,因此内中断也被称之为异常。这也就是为什么我将内中断理解为操作系统的被动中断机制,完全就是因为CPU内部产生的中断信号,并不是操作系统需要的信号,操作系统的中断操作是被迫执行的。

三、中断与异常的分类

外中断可分为可屏蔽中断和不可屏蔽中断。

  • 可屏蔽中断指的是通过INTR线发出的中断请求,通过改变屏蔽字可以实现多重中断,从而是得中断处理更加灵活。

  • 不可屏蔽中断是指通过NMI线发出的中断请求,通常是紧急的硬件故障,如电源掉电等。此外,异常也是不能被屏蔽的。

异常可分为故障、自陷和终止。

  • 故障(Fault)通常是有指令执行引起的异常,如非法操作码、缺页故障、除数为0、运算溢出等。
  • 自陷(Trap)是一种事先安排的“异常”事件,用于在用户态下调用操作系统内核程序,如条件陷阱指令。
  • 终止(Abort)是指出现了使得CPU无法继续执行的硬件故障,如控制器出错、存储器校验错等。

故障异常和自陷异常属于软件中断(程序性异常),终止异常和外部中断属于硬件中断。

四、中断与异常的处理过程

中断和异常的处理过程的大致描述如下:

当CPU在执行用户程序第i条指令时检测到一个异常事件,或在执行第i条指令后发现一个中断请求信号,则CPU打断当前的用户程序,然后转到相应的中断或异常处理程序去执行。若中断或异常处理程序能够解决相应的问题,则在终端或异常处理程序的最后,CPU通过执行中断或异常返回指令,回到被打断的用户程序的第i条指令或第i+1条指令继续执行;若中断或异常处理程序发现时不可恢复的致命错误,则终止用户程序。

通常情况下,对中断和异常的具体处理过程由操作系统(和驱动程序)完成。

结语

在今天的内容中我们介绍了操作系统中的中断与异常:

  • 中断也称外中断,是操作系统的主动中断机制
  • 异常也称内中断,是操作系统的被动中断机制

中断机制对于操作系统而言是十分重要的一个机制。正因为有了中断机制,才有了操作系统的并发、共享、虚拟与异步这些特征。

在外中断中,可以分为两种类型的中断:

  • 可屏蔽中断——如时钟中断、I/O中断请求等
  • 不可屏蔽中断——紧急的硬件故障,如电源掉电等

在内中断中,可以分为3中类型的中断:

  • 故障(Fault)——由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU使用权还给引用程序,让它继续执行下去,如缺页故障。
  • 自陷(Trap)——由陷入指令引发,是应用程序故意引发的
  • 终止(Abort)——由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该引用程序。如整数除0,非法使用特权指令等。

外中断的过程我们可以理解为,当CPU执行用户程序时,接收到了外部发送过来的中断信号,之后由操作系统主动执行中断操作的过程;

内中断的过程我们可以理解为,当CPU执行用户程序时,CPU内部因为某种原因,产生了中断信号,之后由操作系统被动执行中断操作的过程;

今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《系统调用》的相关内容,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!

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

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

相关文章

【C++ | 设计模式】简单工厂模式的详解与实现

1.简单工厂模式概述 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它定义了一个工厂类,由这个类根据提供的参数决定创建哪种具体的产品对象。简单工厂模式将对象的创建逻辑集中到一个工厂类中,从而将对…

认知杂谈32

今天分享 有人说的一段争议性的话 I I 《恋爱中的价值难题》 咱就认识个31岁的哥们,事业有成,一年能挣35 万。他现在正为找对象的事儿犯愁呢。他想找个年轻漂亮的小姑娘谈对象,可又不想在感情上投入太多,就想一边乐呵着&#x…

Linux(CentOS)同步服务器时间之~ntpd

NTP 是 Network Time Protocol(网络时间协议)的缩写,它是一种用于在计算机系统之间同步时间的协议。NTP 允许网络中的设备通过与一个或多个时间服务器进行通信,来校正自身的系统时钟,确保所有设备上的时间保持高度一致…

演示:基于WPF的DrawingVisual和谷歌地图瓦片开发的地图(完全独立不依赖第三方库)

一、目的:基于WPF的DrawingVisual和谷歌地图瓦片开发的地图 二、预览 三、环境 VS2022,Net7,DrawingVisual,谷歌地图瓦片 四、主要功能 地图缩放,平移,定位 真实经纬度 显示瓦片信息 显示真实经纬度和经纬线 省市县…

[环境配置]Pycharm手动安装汉化插件

在Pycharm-file-setting-Plugins中,搜索chinese,就会出现汉化包 点击install后,在安装时出现这种报错:Plugin "Chinese (Simplified) Language Pack / 中文语言包" was not installed: Invalid filename returned by a …

用 jsPDF 让 PDF 生成触手可及

jsPDF :在浏览器中生成 PDF,从未如此简单- 精选真开源,释放新价值。 概览 jsPDF 是一个开源的 JavaScript 库,专为在浏览器端生成 PDF 文档而设计。它通过提供一个直观且易于使用的 API,使得开发者能够快速地将 PDF 生…

【Kubernetes】持久卷 PV

持久卷 PV 1.什么是持久卷2.创建一个持久卷3.持久卷的访问模式4.持久卷的回收策略 数据卷是在创建 Pod 时通过 挂载目录 来实现数据的共享和持久化的。但是在一个大型系统中,这种方式是非常不利于管理的,因为数据卷把数据的 持久存储 和 供应使用 封装在…

短时傅里叶变换(Short-Time Fourier Transform, STFT),语音识别

高能预警!!! .wav文件为笔者亲自一展歌喉录制的噪声,在家中播放,可驱赶耗子,蟑螂 介绍 短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,用于…

智能分拣投递机器人

产品介绍 自研智能分拣投递机器人,专注于物流行业“NC小件”的分拣与投递,机器人运行稳定、分拣效率高,搭配智能分拣投递系统单台机器人最大作业效率可达400件/H,投递效率相较于传统“小黄人“提升了30%-50%,可替代“…

生成艺术,作品鉴赏:物似主人形

2001年,当21岁的我,还在恒基伟业当高级工程师时。我有一个女同事,她有个特别大的杯子用来喝水,不夸张的说,是那种我从来没见过的大杯子,由于她是很大只的那种,她便自嘲说:「物似主人…

RAG增强的视觉问答开发框架

检索增强生成 (RAG) 是一种强大的技术,可以提高大型语言模型 (LLM) 生成的答案的准确性和可靠性。它还提供了检查模型在特定生成过程中使用的源的可能性,从而使人类用户更容易进行事实核查。此外,RAG 可以使模型知识保持最新状态并整合特定主…

前端进阶| 深入学习面向对象设计原则

引言 面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它通过将数据和与之相关的操作封装在一起,提供了一种更有组织和易于理解的方式来构建应用程序。在JavaScript中,我们可以使用面…

【持续更新】【Google Play版】淘宝最新国际版10.36.10.20启动更快

功能和国内比基本是差不多的,只不过没有应用内乱七八糟的弹窗,用起来比较舒服,启动也比较快。 像这种软件如何保证是 官方 的呢?毕竟涉及到财产,还是要小心些的。 很简单,修改过的 app 会提示“签名不一致…

Unity本地化id查找器,luaparser函数参数查找

前言: 适用范围:Unity 中需要查找所有预制体里面的某一个脚本的属性值,或者Lua脚本里面的某一个属性值 本文介绍如何查找预制体和Lua脚本里面调用的本地化id 下面首先介绍改插件的功能以及使用方法,然后对该插件的原理进行说明 使…

SOMEIP_ETS_075: Wrong_Message_Type

测试目的: 验证当设备(DUT)接收到一个包含错误消息类型的SOME/IP请求时,是否能够返回错误消息或忽略该请求。 描述 本测试用例旨在检查DUT在处理一个echoUINT8方法的SOME/IP消息时,如果消息中包含的消息类型不正确&…

【超详细】Linux开发环境搭建指南 | Ubuntu

文章目录 虚拟机安装对比Virtual Box 下载ubuntu 操作系统下载Virtual Box 安装安装ubuntu设置中文语言共享文件夹设置添加输入法安装步骤,参考官方教程 安装 vscode解决主机不能通过ssh连接宿主机网络连接几种网络连接区别主机和宿主机相互 ping通 网络代理 虚拟机…

为k8s准备docker 私有仓库 harbor

目录 一、 环境准备 二、部署docker 二、为Registry提加密传输 三、为仓库建立登陆认证 四、构建harbor 五、上传镜像 然后就是在200上面进行配置了 一、 环境准备 我是用两台虚拟机(红帽9)的,一台172.25.254.10用来部署加密认证仓库,另一台172.2…

从零上手CV竞赛:YOLO方案 # Datawhale AI夏令营

文章目录 平台参赛平台云平台 Task 1 从零上手CV竞赛下载baseline相关文件一键运行baseline!(大约需要25分钟)赛题解析数据集提交结果违法标准注意事项 下载生成的文件结果如图最后要记得关机 不然一直消耗算力 Task 2 建模方案解读与进阶物体…

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 啥是串相等判定算法啊 小鱼:这个… en…en… 小屌丝:咋…

ai免费生成ppt软件有哪些?我推荐秒出PPT

现在市面上的ai生成PPT软件非常的多。有收费的,也有不收费的,生成的效果也各不相同。要选择一个性价比高的确实难度不小。 我在使用了不少的产品之后,说一说我的心得。 首先就是,大部分免费的ai生成ppt产品并不好用。我怕不排除…