当前位置: 首页 > news >正文

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

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

如上图,在早期的计算机假设有三个程序需要执行,执行顺序是:先执行程序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.lryc.cn/news/60972.html

相关文章:

  • SA168 3BSE003389R1
  • 基于Java+Springboot+Vue+elememt美食论坛平台设计实现
  • Go Etcd
  • 01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS)
  • Redis数据结构与对象-链表和字典
  • 学系统集成项目管理工程师(中项)系列08a_合同管理(上)
  • 【Linux 裸机篇(四)】I.MX6ULL C语言 LED 驱动
  • 我也曾经因安装库而抓狂,直到我遇到了
  • DDPG算法详解
  • 继续学c++
  • Day949.遗留系统之殇:为什么要对遗留系统进行现代化? -遗留系统现代化实战
  • DAY 45 Nginx服务配置
  • 如何收集K8S容器化部署的服务的日志?
  • python删除csv文件中的某几列或行
  • Redis持久化机制导致服务自启动后恢复数据过长无法使用以及如何关闭
  • DAY 37 shell免交互
  • 用python脚本从Cadence导出xdc约束文件
  • 【C++ 六】内存分区、引用
  • markdown基本语法
  • 第十篇 Spring 集成Redis
  • PADS-LOGIC项目原理图设计
  • 36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?
  • Android Retrofit 源码分析
  • CDN如何阻止网络攻击
  • Mybatis-Plus -04 条件构造器与代码生成器
  • MapReduce高级篇——全局计数器
  • 轻松掌握K8S目录持久卷PV/PVC的kubectl操作知识点04
  • Appuploader证书申请教程
  • acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器
  • Linux 性能优化大全!