从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

    • 我的操作系统学习笔记

    • 我的操作系统实验笔记

    • 操作系统网课-王道考研

      • 0_课程白嫖指南
      • 1_1_操作系统的概念(定义)、功能和目标
      • 1_2_操作系统的特征
      • 1_3_操作系统的发展与分类
      • 1_4_操作系统的运行机制与体系结构
      • 1_5_中断和异常
        • 中断机制的诞生
        • 中断的分类
        • 中断的处理过程
        • 小结
      • 2_1_6_系统调用
      • 2_1_1_进程的定义、组成、组织方式、特征
      • 2_1_2_进程的状态与转换
      • 2_1_3_进程控制
      • 2_1_4_进程通信
      • 2_1_5_线程概念和多线程模型
      • 2_2_1_处理机调度的概念、层次
      • 2_2_2_进程调度的时机、切换与过程、方式
      • 2_2_3_调度算法的评价指标
      • 2_2_4_FCFS、SJF、HRRN调度算法
      • 2_2_5_调度算法:时间片轮转、优先级、多级反馈队列
      • 2_3_1_进程同步、进程互斥
      • 2_3_2_进程互斥的软件实现方法
      • 2_3_3_进程互斥的硬件实现方法
      • 2_3_4_信号量机制
      • 2_3_5_用信号量实现进程互斥、同步、前驱关系
      • 2_3_6_生产者-消费者问题
      • 2_3_7_多生产者-多消费者问题
      • 2_3_8_吸烟者问题
      • 2_3_9_读者-写者问题
      • 2_3_10_哲学家进餐问题
      • 2_3_11_管程
      • 2_4_1_死锁的概念
      • 2_4_2_死锁的处理策略—预防死锁
      • 2_4_3_死锁的处理策略—避免死锁
      • 2_4_4_死锁的处理策略—检测和解除
      • 3_1_1_内存的基础知识
      • 3_1_2_内存管理的概念
      • 3_1_3_覆盖与交换
      • 3_1_4_连续分配管理方式
      • 3_1_5_动态分区分配算法
      • 3_1_6_基本分页存储管理的基本概念
      • 3_1_7_基本地址变换机构
      • 3_1_8_具有快表的地址变换机构
      • 3_1_9_两级页表
      • 43_3_1_10_基本分段存储管理方式
      • 3_1_11_段页式管理方式
      • 3_2_1_虚拟内存的基本概念
      • 3_2_2_请求分页管理方式
      • 3_2_3_页面置换算法
      • 3_2_4_页面分配策略
      • 4_1_1_初识文件管理
      • 4_1_2_文件的逻辑结构
      • 4_1_3_文件目录
      • 4_1_4_文件的物理结构(上)
      • 4_1_4_文件的物理结构(下)
      • 54_4_1_5_文件存储空间管理
      • 4_1_6_文件的基本操作
      • 4_1_7_文件共享
      • 4_1_8_文件保护
      • 4_1_9_文件系统的层次结构
      • 4_2_1_磁盘的结构
      • 4_2_2_磁盘调度算法
      • 4_2_3_减少磁盘延迟时间的方法
      • 4_2_4_磁盘的管理
      • 5_1.2_I-O 控制器
      • 5_1.3_I-O 控制方式
      • 65_5_1_1_I-O 设备的概念和分类
      • 5_1_4_I-O 软件层次结构
      • 5_1_5_I-O 核心子系统
      • 5_1_6_假脱机技术
      • 5_1_7_设备的分配与回收
      • 5_1_8_缓冲区管理
  • Linux

  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • 操作系统
  • 操作系统网课-王道考研
2023-05-15
目录

15中断和异常

# 1.1_5_中断和异常

各位同学大家好,这个小节当中我们会学习中断和异常相关的知识点和概念。

‍

首先我们会从中断机制诞生的历史背景开始讲起,聊一聊中断机制是怎么诞生的,它的诞生是为了解决什么样的问题,由此我们会引出中断的概念和作用。

之后我们会介绍中断有哪些分类,大致上可以分为内中断和外中断两种大类,其中内中段又可以称之为异常,也就是我们开篇提到的异常。

最后我们还会简单的介绍一下对计算机对外中断的一个处理过程,那么我们会按照从上到下的顺序依次讲解。

​ ‍

# 中断机制的诞生

首先我们看一下中断机制是怎么诞生的,其实在早期的计算机当中,各个程序只能串行的执行,一个程序它放入了计算机内存之后,接下来这个程序会开始运行,当它运行结束之后,需要等待 lO 设备输出操作结束,这个程序才可以从内存中移出。

接下来再移入第二道程序,同样的第二道程序移入内存之后开始执行,然后等待 IO 操作结束再移除程序。

第三道程序其实和刚才也一样。

所以其实这种方式它的缺点显而易见,就是各个程序他们只能串行的执行,在计算机的内存当中同一时刻最多只能有一道程序,这种方式会导致系统的资源利用率特别低,而资源利用率低这个问题咱们在之前计算操作系统的发展小结中,以已经详细的介绍过,这个地方就不再展开细聊了。

​

那么为了解决系统资源利用率低的问题,人们就发明了操作系统,操作系统它作为计算机的管理者,并且引入了中断机制,从而实现了多道程序并发执行这样一件事情,也就是进入了我们之前提到过的多道批处理阶段。

那么再聊下面的中断问题的时候,大家只需要谨记一个本质,只要发生了中断之后,就意味着需要操作系统介入工作,来开展各种各样的管理工作。那么在引入了这种中断机制之后,就可以把这些程序多到程序,同时放入到内存各个程序并发的执行,比如说刚开始第一道程序或者说进程 1,它在用户态下运行,

​

运行了一段时间之后,CPU 可能会收到计时部件,计时部件其实就是一个用于计时的一个硬件设备,然后这个计时部件可能会向 CPU 发送一个中断信号,来通知 CPU 现在时间已经过了一个时间片了,然后当 CPU 收到中断信号之后,就意味着需要操作系统来介入开展管理工作,因此 CPU 会立即切换到核心态,然后把 CPU 的使用权限交给操作系统,操作系统的内核就会开始对刚才的中断信号进行处理。操作系统的内核发现刚才的中断信号是告诉它时间片已到,那么操作系统就会决定进程一的时间片现在已经用完了,那么接下来要换进程 2 投入运行,这就是操作系统开展的一系列的管理工作。

​ ‍

在完成这一系列的管理工作之后,操作系统会把 CPU 的使用权交还给用户进程,接下来进程 2 就会在用户台下开始执行。

​

然后当进程 2 执行了一段时间之后,它有可能会发出像系统调用这种内中断信号,为了保证系统的安全性,向输入输出操作相应的那些指令是属于特权指令,不允许用户进程直接使用。因此用户进程这些普通的应用程序,它只能通过系统调用的方式,通过这种内中断信号的方式来主动的要求操作系统介入工作,让操作系统代他完成请求输出操作这样一个事情。因此接下来 CPU 同样会立即进入到核心态,然后操作系统的内核接管,刚才进程 2 提出的请求就是系统调用的请求之后,操作系统会按照进程 2 的请求要求打印机输出设备开始工作

​

然后进程二由于要等待 IO 设备的工作完成,所以它会让进程 2 暂停运行,接下来换进程 3 运行。完成这一系列的管理工作之后,操作系统又会再次把 CPU 的使用权还给用户进程,然后进程 3 开始工作,并且这个输出设备在操作系统的要求下会也会并行的工作,当他工作结束之后,会向 CPU 发出一个 IO 完成的中断信号。

​ ‍

当 CPU 接接收到中断信号之后,他又知道现在又应该由操作系统来介入开展后续的管理工作了,那么接下来不用说了,也会切换为核心态,操作系统的内核会对刚才的中断信号进行处理,结果他发现刚才的中断信号其实是通知他进程二的 l 操作已经完成,那么他就会让进程 2 恢复运行,来完成后续的相应的工作,所以接下来他又会把 CPU 的使用权还给用户进程,然后进程 2 又重新投入运行,开始后续的工作。

​

所以其实通过刚才的过程的讲解,我们会发现一些显著的特点,

当中断发生的时候,CPU 会立即进入核心态。

第二,当中断发生用户进程会暂停运行,然后由操作系统的内核对中断进行处理。

第三,对于不同的中断信号,操作系统进行的这种处理方式是各不相同的。 ‍ 那么当发生了中断之后,就意味着操作系统需要介入工作,开展各种各样的管理工作,这是我们刚开始提到的一个本质特点。由于操作系统的管理工作向进程切换分配 lO 设备,这些管理工作都需要使用到特权指令,所以说 CPU 需要从用户态转换为核心态,因为只有在核心态下才可以执行这些特权指令,而中断就恰好可以使 CPU 从用户态转换为核心态,从而使操作系统获得计算机的控制权,然后开展一些后续的管理工作。

那么只有操作系统获得了控制权,开展这些像进程切换这样的工管理工作之后,才可以让进程之间实现真正的并发执行这样的一个事情。所以我们才说有了中断才可以实现多道程序并发执行。

那么上个小节我们遗留下了一个小问题,用户态和核心态之间的切换是怎么实现的?相信经过刚才的讲解,大家应该已经知道用户态到核心态的切换是通过中断来实现的,并且需要注意到的是中断是唯一的一种让 CPU 从用户态进入到核心态的一个唯一的途径。而核心态到用户态的转换,只需要通过一个特权指令来设置程序状态字,把它的标志位改成用户态就可以了。

​

还记得我们之前小结讲过的, CPU 用来区分用区分核心态和用户态,其实只是在其实只是在这个程序状态字里用一个标志位 0 和 1 来进行标识的,而由于核心态下本来就可以执行这些特权指令,所以只需要执行一个设置程序状态字的特权指令,就可以把 CPU 的状态从核心态切换回用户态了。 ‍

# 中断的分类

那么讲完了中断的基本概念之后,我们再来看一下中段有哪些分类。中段可以分为内中断和外中断两种大类,其中外中断也可以简单的称之为中断。那么大家需要注意这里说的是狭义的中断,而这个中断刚才我们提到的那些中断其实指的是广义的中断,具体是狭义还是广义,大家在做题的时候需要进行自己体会进行总结。

内中断也可以称为异常或者例外陷入。而内外中断,这两种中断本质上的区别在于中断信号的来源到底是 CPU 的内部,还是 CPU 的外部,内中断的发生和当前执行的指令是有关系的,而外中断和当前执行的指令事务没有关系的,比如说刚才我们提到的打印机在完成了输出工作之后向 CPU 发送的一个外部中断信号,这就属于外部中断。 ‍ 那么内中断和外中断又可以进一步细分为这样一些类型,那么像指令中断,就是刚才我们提到的系统调用这个部分,后面会用单独再用一个小节的视频来进行讲解。

而硬件故障,比如说像我们后面几个章节会学到的缺页中断,现在先不用管,有个印象就可以了。

然后软件中断是大家可能现在比较容易理解的,假如当前执行的指令是一个除法指令,并且这个指令进行了一个整数除 0 这样的非法操作,这种情况下就会抛出一个异常或者说内中断。由于内中断的产生和当前正在执行的除法指令有关,所以说这个中断信号它的来源是来自于 CPU 内部,当前执行的指令有关,这个大家再体会一下。

而外中断,比如说像刚才我们提到的 IO 操作完成之后,IO 设备会向 CPU 发送一个外部中断信号,而这个中断信号很显然和当前 CPU 中内部正在执行的这些指令,这个指令是没有关系的。所以我们才说外中断它的中断信号来源是来自于 CPU 外部,

考试当中常考的是会给大家一个事件,然后让一个中断事件,然后让大家判断中段它是属于内中断还是外中断,大家只需要紧紧抓住它的本质区别,就是信号来源是否来自于 CPU 内部,还是来自于 CPU 外部就可以了。而具体的这些分类其实只是深入了解一下,如果记不住的话也没关系,大家通过做题能有基本的印象就可以。

​

那么除了刚才咱们提到的王道书上的那种分类方式之外,内部中断也可以分为陷入,故障,中止这三种不同的类型,其中陷入就是像我们刚才提到的系统调用那种用户程序有意而为之的故意的故意造成的异常,这个叫陷入。

而故障是指由错误条件引起,并且有可能被故障处理程序修复的。比如说刚才我们提到的缺页中断,大家在学习完第三章之后就可以理解了

那么终止的话就是一些不可恢复的致命错误造成的结果。比如说刚才我们提到的整数除以 0 这种操作,即使操作系统介入这个错误也没办法修复的,这种叫做终止。

​

以上就是中断的两种分类方式。 ‍

# 中断的处理过程

那么除了之前的那些内容之外,我们再来简单看一下计算机对外部中断的处理过程。比如说 CPU 现在正在用户态下运行一个用户程序相关的指令,那么 CPU 会按顺序依次执行这些指令,在执行完每一个指令之后,CPU 都会例行检查当前是否有外部中断信号需要处理。如果说没有外部中断信号的话,它就会继续执行下一条用户程序的指令,直到有一条指令结束完了之后,他检查之后,发现此时有一个外部中断信号需要处理,那么接下来就需要操作系统介入来处理外部中断信号。

因此用户程序需要暂停运行,而由于它需要暂停运行,所以需要做一件事情,就是要保护被中断的用户进程,它的 CPU 环境。比如说像程序状态字程序计数器,还有各种各样的通用寄存器,为什么需要保存保护这些 CPU 环境呢?其实类似于我们玩游戏玩到一半,中间突然也被一个什么事情打断了,需要把这个游戏暂停,那么我们是不是就需要把游戏的进度进行存档,之后再处理完别的事情之后再回头玩这个游戏,我们只需要再把我们存的游戏的存档给读入,就可以接着往下继续玩了保护工作具体需要做一些什么事情,这个是需要在计算机组成原理那门课里进行学习了,在这个地方大家只需要知道,它是要把这个程序运行的一些中间结果暂时保存下来,以便之后还可以恢复,继续往下执行就可以了。

那么在完成了保护工作之后,就会开始根据中断信号的类型,转入相应的中断处理程序进行处理。而这个中断处理程序其实是属于操作系统内核的,它运行在核心态,那么当中断处理程序要执行结束之后,又需要把刚才我们保留下来的保存下来的这些 CPU 环境给它恢复,并且退出中断处理程序,返回原来的程序继续往下执行,所以这就是外中段的一个大致的处理过程。

​ ‍

# 小结

好的,那么我们再来做一个简单的回顾,在小节当中我们主要介绍了中断和异常相关的知识点,首先我们从中断机制的诞生,历史背景开始讲起,我们知道中断的引入其实是为了实现多道程序并发执行而引入的一种技术,而中断发生之后,就意味着需要操作系统介入开展一系列的管理工作。

在这个小节当中比较容易作为考题进行考察的,是中断的概念和作用和中断的分类这两个知识点。其中我们最需要注意的是当中断发生之后,CPU 会立即进入到核心态,然后中断还是 CPU 从用户态进入核心态的唯一途径,注意是唯一途径。

另外经常会有一些题目会给出一个中断事件,然后让我们来判断这种这个事件它是属于内中断还是外中断,大家要学会通过中中断信号到底是来自于 CPU 内部,还是来自于 CPU 外部,来判断这个中断到底是内中断还是外中断,

除了课本上给出的中断的分类之外,我们还对内中断的另一种分类方式进行了补充,在咱们课后习题中会有具体的讲解,会有遇到。最后我们介绍了外中断的处理过程,大致分为这样 4 个步骤。好的,那么以上就是小节的全部内容。

​

上次更新: 2025/5/9 14:55:39
1_4_操作系统的运行机制与体系结构
2_1_6_系统调用

← 1_4_操作系统的运行机制与体系结构 2_1_6_系统调用→

最近更新
01
学点统计学:轻松识破一本正经的胡说八道
06-05
02
2025 年 5 月记
05-31
03
《贫穷的本质》很棒,但可能不适合你
05-27
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式