一开始看王道网课,它说内中断就是异常。但是我一查ai,它又说内中断和异常不能等同,是两个概念,这时候我觉得天都塌了。内中断到底是不是异常啊?
我心想我今天一定要把这个搞懂,我来交作业了!我终于知道为什么了!
中断如果是广义的,就包括外中断和内中断对吧?那异常就分为陷阱、障碍和终止。
如果中断是狭义的,咱们知道外中断就是狭义的中断。咱们标题是啥,中断和异常啊对不对?
那此时异常就是内中断,实际上异常是属于内中断的,所以可以代表,所以它才会说异常就是内中断。所以异常我觉得也是狭义上的内中断。
就会有两种结构!啊啊啊啊啊啊啊听懂掌声。
那我现在分两种结构讲一下,先讲广义的。
广义上的中断与异常
【1】中断:
-
定义:计算机系统中用于响应和处理异步事件的机制,包括外中断和内中断。
-
例子:打印机完成打印任务后,会发送一个信号给计算机,这是一个中断,通知操作系统打印任务已完成。
【2】外中断:
-
定义:由计算机外部事件引起的中断,如用户输入、硬件设备的请求等。
-
例子:当你在使用电脑时,突然按下键盘上的"Print Screen"键,这个动作会触发一个外中断,告诉操作系统需要捕捉屏幕截图。
【3】内中断:
-
定义:由计算机内部事件引起的中断,如硬件故障、非法操作等。
-
例子:如果你的电脑内存条出现问题,可能会导致非法内存访问,触发一个内中断。
【4】异常:
-
定义:程序执行过程中出现的非预期情况,需要特别处理。
-
例子:在编程时,尝试除以零会触发一个异常,因为除以零在数学上是未定义的。
【5】终止:
-
定义:程序或进程的正常或非正常结束。
-
例子:当你关闭一个应用程序时,该程序的执行被终止。
【6】障碍:
-
定义:程序执行过程中的错误,可能会导致程序无法继续执行。
-
例子:在编程时,访问一个不存在的数组索引会触发一个障碍。
【7】陷阱:
-
定义:程序中特意设置的中断,用于调试或系统调用。
-
例子:在调试程序时,开发者可能会设置断点,当程序执行到这一点时,会触发一个陷阱,暂停程序执行。
易错点:
- 中断是一个广泛的概念,包括了外中断和内中断,它们都是异步事件,需要操作系统介入处理。
- 异常 和障碍都是程序执行过程中的错误,但异常通常是非预期的,而障碍可能是由于程序错误或硬件问题导致的。
- 终止是程序生命周期的结束,可能是由于程序正常完成执行或遇到严重错误。
- 陷阱是一种特殊的中断,通常用于系统调用或调试目的,与外中断和内中断不同,陷阱是程序有意触发的。
- 内中断和异常的区别:内中断 通常是由硬件事件触发的,无论是硬件故障还是正常硬件操作。异常是由程序执行中的异常情况触发的,这些情况可能是软件错误或硬件异常。
狭义上的中断与异常
想象一下,你正在家里专心做作业,突然电话响了。这个电话铃声就是一个"中断"------它打断了你当前的工作(做作业),要求你立即处理(接电话)。在计算机中,中断也是类似的。当外部设备(比如键盘、鼠标或者打印机)需要与计算机的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检测到中断信号后,就会根据中断信号的类型,查询"中断向量表",以此来找到中断处理程序在内存中的位置。
显然,中断处理程序就是一种内核程序,需要运行在内核态。