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

一开始看王道网课,它说内中断就是异常。但是我一查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检测到中断信号后,就会根据中断信号的类型,查询"中断向量表",以此来找到中断处理程序在内存中的位置。

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

相关推荐
猪哥帅过吴彦祖11 小时前
从源码到可执行文件:揭秘程序编译与执行的底层魔法
操作系统·编译原理·编译器
SundayBear12 小时前
Autosar Os新手入门
车载系统·操作系统·autosar os
千里镜宵烛16 小时前
深入理解 Linux 线程:从概念到虚拟地址空间的全面解析
开发语言·c++·操作系统·线程
OpenAnolis小助手2 天前
朗空量子与 Anolis OS 完成适配,龙蜥获得抗量子安全能力
安全·开源·操作系统·龙蜥社区·龙蜥生态
墨夏3 天前
跨平台开发下的策略模式
设计模式·操作系统
fakerth3 天前
OpenHarmony介绍
操作系统·openharmony
程序员老刘5 天前
操作系统“卡脖子”到底是个啥?
android·开源·操作系统
有信仰5 天前
操作系统——虚拟内存和物理内存
操作系统
望获linux9 天前
【实时Linux实战系列】实时数据流处理框架分析
linux·运维·前端·数据库·chrome·操作系统·wpf
unfetteredman10 天前
Mac查看端口使用信息
操作系统·mac