王道 —— 中断和异常

1、知识总览

在这里插入图片描述

2、中断机制的诞生

早期的计算机中,各个程序只能串行执行,一个程序放进计算机内存之后,程序会开始运行,程序运行结束之后需要等到I/O设备输出,操作结束之后程序才能从内存中移除;接下来对第二个程序进行操作,其过程类似;

这种方法的缺点是各程序只能串行执行,系统资源的利用率低,在计算机的内存中同一时刻最多只能有一道程序运行,这种方式会导致系统的资源利用率低;

在这里插入图片描述

为了解决上述问题,人们发明了操作系统(作为计算机的管理者),引入了中断机制,从而实现多道程序的并发执行。

中断本质:发生中断就意味着需要操作系统介入,开展管理工作;引入中断机制之后,可以把多个程序放到内存。各个程序并发地执行;

在这里插入图片描述

比如说程序一,在用户态下运行,运行一段时间之后,CPU可能会收到计时部件发出的中断信号,提示CPU已经过了一个时间片了;
在这里插入图片描述

CPU收到中断信号后,就意味着需要操作系统介入,开展管理工作,CPU会立即切换核心态,然后把CPU的使用权限交给操作系统,操作系统的内核对中断信号进行处理;操作系统发现刚才的中断信号是时间片到了,操作系统负责将进程1切换到进程2运行,在完成这一系列管理工作后,操作系统会把CPU的使用权交还给用户进程,接下来进程2就会在用户态下开始执行;

在这里插入图片描述

当进程2进行一段时间后,进程2可能发出系统调用(内中断信号),请求输出,为了保证系统的安全性,输入输出操作指令属于特权指令,不允许用户进程直接使用,因此用户进程只能通过系统调用的方式主动要求操作系统介入工作,让操作系统来完成输入输出功能;
在这里插入图片描述

因此,接下来CPU会切换到核心态,操作系统接管进程2提出的系统调用请求,之后操作系统会按照进程2的请求要求打印机输出设备开始工作,进程2由于要等待I/O设备的工作完成,所以进程2会暂停运行,让进程3运行;
在这里插入图片描述
操作系统完成一系列的管理工作之后,操作系统会再次把CPU的使用权还给用户进程,然后进程3开始工作;

在这里插入图片描述

输出设备在操作系统的要求下也会并行地工作,当其工作结束之后会向CPU发送一个I/O完成的中断信号,当CPU接收到中断信号之后,操作系统接管管理工作,CPU会切换为核心态,操作系统内核会对刚才的中断信号进行处理,中断信号其实是进程2的I/O操作已经完成,那么操作系统会让进程2恢复运行来完成后续的工作,所以操作系统会把CPU的控制权交还给用户进程,然后进程2重新运行,执行后续的工作;

3、中断的概念和作用

通过以上分析,我们可以知道以下特点:

  • 当中断发生时,CPU立即进入核心态;
  • 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理;
  • 对于不同的中断信号,会进行不同的处理
    发生中断,就意味着需要操作系统的介入,开展管理工作。由于操作系统的管理工作(比如进程切换,分配I/O设备等)需要使用特权指令,因此CPU需要从用户态转换为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序的并发执行;
    在这里插入图片描述

看一个历史遗留问题:用户态、核心态的切换是怎么实现的?
回答:“用户态->核心态”是通过中断实现的,并且中断是唯一途径;“核心态->用户态”的切换是通过执行一个特权指令,将程序的状态字(PSW)的标志位设置为“用户态”;

4、中断的分类

中断可以分为内中断和外中断两大类,内中断和外中断的本质区别是中断信号的来源是CPU的内部还是CPU的外部:
在这里插入图片描述

另一种分类方法中,内中断可以细分为陷进(陷入)、故障、终止;
在这里插入图片描述

5、外中断的处理过程

在这里插入图片描述

假设CPU正在用户态下执行用户程序相关指令,在执行完每个指令之后,CPU都要检查当前是否有外部中断信号需要处理,如果没有中断信号需要处理,CPU会继续执行下一个程序指令,直到某一条指令结束后发现存在中断信号需要处理;

发现中断信号需要处理之后,操作系统需要介入来处理中断信号,因此用户程序需要暂停运行,需要保护被中断的进程的CPU环境(比如程序状态字PSW、程序计数器PC、各种通用寄存器);完成保护工作之后,会根据中断信号的类型转入相应的中断处理程序;当中断处理完成后,恢复原来进程的CPU环境并退出中断,返回原进程继续往下执行;

6、知识回顾

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_37388085/article/details/108484339