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

“从零到一:揭秘操作系统的奇妙世界”【操作系统中断和异常】

一开始看王道网课,它说内中断就是异常。但是我一查ai,它又说内中断和异常不能等同,是两个概念,这时候我觉得天都塌了。内中断到底是不是异常啊?

我心想我今天一定要把这个搞懂,我来交作业了!我终于知道为什么了!

中断如果是广义的,就包括外中断和内中断对吧?那异常就分为陷阱、障碍和终止。

如果中断是狭义的,咱们知道外中断就是狭义的中断。咱们标题是啥,中断和异常啊对不对?

那此时异常就是内中断,实际上异常是属于内中断的,所以可以代表,所以它才会说异常就是内中断。所以异常我觉得也是狭义上的内中断。

就会有两种结构!啊啊啊啊啊啊啊听懂掌声。


那我现在分两种结构讲一下,先讲广义的。

广义上的中断与异常

【1】中断:

   - 定义:计算机系统中用于响应和处理异步事件的机制,包括外中断和内中断。
   - 例子:打印机完成打印任务后,会发送一个信号给计算机,这是一个中断,通知操作系统打印任务已完成。

【2】外中断:

   - 定义:由计算机外部事件引起的中断,如用户输入、硬件设备的请求等。
   - 例子:当你在使用电脑时,突然按下键盘上的“Print Screen”键,这个动作会触发一个外中断,告诉操作系统需要捕捉屏幕截图。

【3】内中断:

   - 定义:由计算机内部事件引起的中断,如硬件故障、非法操作等。
   - 例子:如果你的电脑内存条出现问题,可能会导致非法内存访问,触发一个内中断。

【4】异常:

   - 定义:程序执行过程中出现的非预期情况,需要特别处理。
   - 例子:在编程时,尝试除以零会触发一个异常,因为除以零在数学上是未定义的。

【5】终止:

   - 定义:程序或进程的正常或非正常结束。
   - 例子:当你关闭一个应用程序时,该程序的执行被终止。

【6】障碍:

   - 定义:程序执行过程中的错误,可能会导致程序无法继续执行。
   - 例子:在编程时,访问一个不存在的数组索引会触发一个障碍。

【7】陷阱:

   - 定义:程序中特意设置的中断,用于调试或系统调用。
   - 例子:在调试程序时,开发者可能会设置断点,当程序执行到这一点时,会触发一个陷阱,暂停程序执行。

易错点:

  1. 中断是一个广泛的概念,包括了外中断和内中断,它们都是异步事件,需要操作系统介入处理。
  2. 异常障碍都是程序执行过程中的错误,但异常通常是非预期的,而障碍可能是由于程序错误或硬件问题导致的。
  3. 终止是程序生命周期的结束,可能是由于程序正常完成执行或遇到严重错误。
  4. 陷阱是一种特殊的中断,通常用于系统调用或调试目的,与外中断和内中断不同,陷阱是程序有意触发的。
  5. 内中断和异常的区别:内中断通常是由硬件事件触发的,无论是硬件故障还是正常硬件操作。异常是由程序执行中的异常情况触发的,这些情况可能是软件错误或硬件异常。

狭义上的中断与异常

想象一下,你正在家里专心做作业,突然电话响了。这个电话铃声就是一个“中断”——它打断了你当前的工作(做作业),要求你立即处理(接电话)。在计算机中,中断也是类似的。当外部设备(比如键盘、鼠标或者打印机)需要与计算机的CPU(中央处理器)通信时,它会发送一个信号,告诉CPU:“嘿,我这里有事情需要处理。”CPU必须暂停当前的工作,去处理这个紧急的请求,比如读取键盘输入或者发送数据到打印机。处理完毕后,CPU会回到它之前被打断的地方,继续工作。

“异常”就像是你在做作业时遇到的一个意外问题。比如,你突然意识到你不知道某个单词怎么写,或者你遇到了一个你不会解的数学题。在计算机中,异常是程序执行过程中出现的错误或特殊情况,比如除以零、访问了不允许访问的内存区域等。当这些错误发生时,程序会触发一个“异常”,操作系统需要介入,决定如何处理这个问题。处理方式可能是修复错误、记录错误信息、关闭程序或者重启程序。

从中断的来源看,直观上可以分成两类:外中断和内中断。

  • 外中断——就是我们指的中断——是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;
  • 内中断——就是异常——是指由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。

【1】外中断

1.定义:由外部设备向 CPU 发出的请求(比如打印),或者突发的外部事件或环境对计算机造成了影响(比如计算机烧了),在 CPU 外部产生。来自于 CPU 外部其它硬件设备的中断,就被称为 外中断,是狭义的 中断。它们通常是外部设备依照 CPU 时钟随机产生的,因此也被叫做异步中断。中断是让操作系统内核夺回cpu使用权的唯一途径

如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。如果这样的话,就无法实现操作系统的并发性。

2.触发原因:通常由外部事件触发,如硬件设备的输入/输出操作、用户输入、硬件故障等。

3.处理方式:当中断发生时,处理器会暂停当前执行的任务,保存当前状态,然后跳转到中断服务程序来处理中断。

4.恢复:中断服务程序执行完毕后,处理器会返回到被中断的地方继续执行。

5.可能引发外中断的两种情况

  • 时钟中断:计算机硬件时钟部件发出,可以实现计算机多道程序并发执行
  • IO中断:输入输出设备发出的中断信号,当输入输出任务完成后会向系统发出一个中断信号,通知cpu我的任务已经完成了。接下来cpu会对中断信号的应用程序进行处理

在每条指令执行结束之前,cpu都会例行检查是否有外中断信号需要处理。

【2】内中断

1.定义:CPU 在执行指令时遇到的异常情况 ,在 CPU 内部产生。通常将 CPU 内部产生的中断称为 异常,也称作 内中断。异常一般是 CPU 在执行指令时遇到了意外情况、因而必须暂停处理;在指令执行结束后才发出中断,因此也被叫做同步中断。

2.触发原因:由软件执行过程中的错误或异常情况触发,如非法操作、程序错误、算术溢出等。

3.处理方式:当异常发生时,处理器会触发一个异常处理程序(Exception Handler),这个程序负责诊断问题并采取相应的恢复措施。

4.恢复:异常处理程序执行完毕后,程序可能继续执行,也可能终止,这取决于异常的性质和处理结果。

5.可能引发内中断的三种情况:

由陷入指令引发,是应用程序故意的。如有时候应用程序向请求操作系统内核的服务,此时会执行一条特殊指令---陷入指令。该指令会引发一个内部中断信号。执行“陷入指令”意味着主动把cpu的使用权还给操作系统,系统调用就是通过过陷入指令完成的。但是请注意!!!陷入指令并不是特权指令!它是在用户态下执行的指令

由错误条件引起,可能被内核程序修复。修复完之后把CPU使用权还给应用程序。

处于用户态,还想执行特权指令

指令参数非法。比如,做除法计算时,除数为0。

由致命错误引起,内核程序无法修复该错误,因此一般不将CPU使用权还给应用程序。

【3】 如何判断是内中断还是外中断?

看中断信号的产生是否与当前执行指令有关。

【4】中断机制的基本原理

如何检查中断信号?

内中断:cpu在执行指令时会检查是否有异常发生

外中断:每个指令周期末尾,cpu都会检查是否有外中断信号需要处理。

一旦检测到中断信号,如何处理?

不同的中断信号,需要不同的中断处理程序去处理。当cpu检测到中断信号后,就会根据中断信号的类型,查询“中断向量表”,以此来找到中断处理程序在内存中的位置。

显然,中断处理程序就是一种内核程序,需要运行在内核态。


http://www.kler.cn/a/446578.html

相关文章:

  • (14)D-FINE网络,爆锤yolo系列
  • 苹果手机怎么清理空间:拯救你的拥挤手机
  • 技术文档的规划布局:打造清晰且有条理的知识传递框架
  • day5,数据结构,单向,双向,循环链表
  • python脚本中使用git命令
  • 安装opnet14.5遇到的问题
  • wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新
  • G口带宽服务器与1G独享带宽服务器:深度剖析其差异
  • wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势
  • Node Version Manager (nvm) -管理不同版本的 Node.js
  • 【k8s集群应用】kubeadm1.20高可用部署(3master)
  • Eclipse设置自动补全后 输入字符串类型变量后会自动追加String的解决方案
  • 网络安全技术深度解析与实践案例
  • P1305 新二叉树
  • RPA 助力电商:自动化商品信息上传,节省人力资源 —— 以影刀 RPA 为例【rpa.top】
  • 【信息系统项目管理师】高分论文:论信息系统项目的成本管理(社区网格化管理平台系统)
  • 如何使用Python进行音频片断合成
  • vscode配置markdown代码片段snippet不生效问题
  • MFC/C++学习系列之简单记录13
  • Pytorch常用内置优化器合集
  • lvs介绍与应用
  • 提示词工程-Prompt Engineering
  • 关于小程序内嵌h5打开新的小程序
  • Spring Boot 核心技术解析与应用实践
  • 【深度学习量化交易10】miniQMT快速上手教程案例集——使用xtQuant获取板块及成分股数据篇
  • IIS漏洞复现