操作系统原理 —— 什么是中断?(四)

news/2025/2/21 1:55:54/

我们先来看看早期的计算机的工作流程:
在这里插入图片描述

如上图,在早期的计算机假设有三个程序需要执行,执行顺序是:先执行程序1,等待程序1结束之后,再开始执行程序2,以此类推,所以它们是串行执行的,这种方式效率就比较低,为了能够使计算机能够同时执行多个程序,从而引入了中断机制。

什么是中断?

为了解决程序只能串行执行的问题,人们发明了操作系统,操作系统相当于计算机的管理者,并且引入了中断机制,实现了多道程序并发执行。

也就是说,在多个程序同时执行的时候,如果发生了中断就意味着需要操作系统来介入,展开管理工作。

官方的定义:中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

从官方的定义来看,中断其实就是为了支持多道程序并发执行 。

中断的概念和作用

我们再来详细看下中断的各个步骤所需要做的事:

1、当中断发生时,CPU 会立即进入核心态

2、当中断发生后,当前运行的进程会被暂停执行,并且由操作系统内核对中断进行处理。

3、对于不同的中断信息,会进行不同的处理。

发生了中断,就意味着需要计算机操作系统介入,展开管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用到特权指令,因此 CPU 要从用户态转为内核态。

中断可以使 CPU 从用户态切换为核心态,使操作系统获得计算机的控制权,有了中断,才能实现多道程序并发执行。

我们再来回顾一下前面两个章节的内容,如下图:

在这里插入图片描述

在之前的章节有说过,CPU 为了区分什么时候执行特权指令,从而定义了两种状态,一个是内核态,一个是用户态。 那它们之间如何进行切换呢?

用户态 切换 核心态,由于用户态无法执行特权指令,所以只能通过中断机制,来让操作系统切换为核心态,并且中断是唯一的途径。

核心态 切换 用户态,由于核心态即可以执行特权指令又可以执行非特权指令,所以只需要通过特权指令就可以切换为用户态。

中断的分类

在这里插入图片描述

如上图所示,中断可以分为:内中断、外中断

内中断:信号的来源是 CPU 的内部,与当前执行的指令有关,并且内中断又可以分为自愿中断、强迫中断。

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

在关于中断的分类还可以安装下图来进行区分:
在这里插入图片描述

外中断处理的过程

我们再来看看外中断的处理过程:
在这里插入图片描述

如上图,本来用户程序需要执行指令1~5:

1、执行完每一个指令之后,CPU 都要检查当前是否有外部中断信号。

2、如果检查到外部中断信息,则需要保护被中断进程的 CPU 环境 (类似于 Java 多线程上下文切换,保护现场)。

3、根据中断信息类型转入相应的中断处理程序。

4、处理完中断之后,恢复原进程的 CPU 环境并且退出中断,返回原进程继续往下执行。

本章总结

在这里插入图片描述


http://www.ppmy.cn/news/48545.html

相关文章

jsp+springboot基于ssm的人才招聘求职网站推荐模拟考试系统java idea

登录需要随机数字验证码 管理员: 招聘管理 求职信息管理 , 招聘信息管理 人员管理 管理注册的用户进行审核操作 公告管理 发布公告新闻 (公告我想不到啥意思,可修改或增加别的) 个人信息 修改个人信息 招聘者&am…

一天吃透SpringMVC面试八股文

说说你对 SpringMVC 的理解 SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块。 它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程…

Qt扫盲-Qt图表类综述

Qt支持图表类综述 一、概述二、图表类型1. 折线图和柱状图2. 面积图和散点图3. 柱状图4. 饼图5. 盒须图6. 烛台图表7. 星座图图表 三、坐标轴 Axes四、图例五、与图表交互1. 动态绘制数据2. 深入数据3. 缩放和滚动4. 鼠标悬停 六、主题 一、概述 Qt Charts支持创建时尚的、交互…

webpack plugin源码解析(六) CompressionWebpackPlugin

文章目录 作用涉及 webpack API处理 asset 钩子compilation.hooks.processAssets返回或新建缓存:compilation.getCache返回 asset 文件信息:compilation.getAsset文件名匹配函数:compiler.webpack.ModuleFilenameHelpers.matchObject模版字符…

RabbitMQ的介绍和安装

文章目录 1.1 RabbitMQ介绍1.2 RabbitMQ的安装1.2.1 下载镜像1.2.2 安装启动1.2.3 测试 1.1 RabbitMQ介绍 RabbitMQ是一个开源的消息队列中间件,可以用于构建分布式应用程序,使应用程序能够快速、可靠地处理大量消息。它实现了AMQP(高级消息队…

MyBatis小技巧

一、MyBatis中接口代理机制及使用 我们不难发现,以前编写dao/mapper实现类中的方法代码很固定,基本上就是一行代码,通过SqlSession对象调用insert、delete、update、select等方法,这个类中的方法没有任何业务逻辑,既然…

八、express框架解析

文章目录 前言一、express 路由简介1、定义2、基础使用 二、express 获取参数1、获取请求报文参数2、获取路由参数 三、express 响应设置1、一般响应设置2、其他响应设置 四、express 防盗链五、express 路由模块化1、模块中代码如下:2、主文件中代码如下&#xff1…

常见的Web漏洞

一、SQL 注入 SQL 注入就是通过把 SQL 命令插入到 Web 表单,递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令的目的。 1、原理: 网站数据过滤不合格,过分依赖用户输入的数据,没有过滤用…