中断
中断时提高处理器效率的一种手段,如任务A需要用到打印机,打印的时间相对于cpu来说会很长,如果在打印期间死等打印机太浪费资源,所以出现了中断,cpu会先放弃该任务的执行,然后转去执行其他任务,当打印机打印好后就会发出中断信号给cpu,cpu就暂停当前任务的执行,继续运行任务A。
中断的分类:
程序中断 | 由指令执行的结果产生,如算数溢出、除数为0、试图执行非法指令 | 时钟中断 | 由处理器内部的计时器产生,运行操作系统以一定的规律执行周期性的任务 | I/O中断 | 由I/O控制器产生,发信号通知一个io操作的正常完成或是错误 | 硬件失效中断 | 如掉电或存储器奇偶校验之类的故障产生 |
- 中断(Interruption):也叫外中断,即上面的IO中断和时钟中断,这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。
- 异常(陷阱):也叫内中断,是由CPU内部事件所引起的中断,例如进程在运算中发生了上溢或者下溢,有如程序出错,如非法指令,地址越界等,即上面的程序中断。若系统发现有陷入事件,CPU也将暂停正在执行的程序,转去执行该陷入事件的处理程序。
中断和陷入的主要区别是信号的来源,看是来自CPU外部,还是CPU内部。
另外还有一种是系统调用。所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
有了中断的加入,cpu的指令周期从
?变为了
?多出了一个检查中断的步骤,也增加了消耗,但是对于io的速度和cpu相比,大部分时候还是挺划算的。中断是硬件和软件相互合作才能完成的。
中断步骤
具体的中断处理步骤如下: ?
- ?首先某个硬件完成了自主的给CPU发送中断信号
- 处理器响应中断前结束当前指令的执行
- 处理器发送确认信号,允许该中断的设备取消它的中断信号,否则该信号会一直存在
- 保存当前执行程序的信息,要求最少包括程序状态字PSW(包含了当前程序的内存使用信息、条件码和其他诸如允许中断/禁止中断位、内核/用户模式位等信息)和程序计数器PC指针(保存下一条要执行的指令地址),将这些信息压入系统栈
- 处理器把响应该中断的中断处理程序入口地址装入程序计数器PC,每类中断可有一个中断处理程序,CPU根据新的PC值开始执行中断处理程序:
- 除了PSW和PC已经被压入系统栈外,还有其他的信息也需要保存,如CPU寄存器的一些内容,防止被中断处理程序运行的时候覆盖掉。
- 开始处理中断
- 中断处理完成后,被保存的寄存器的值恢复到处理器中
- 最后从系统栈中恢复PSW和PC,因此下一条要执行的指令就是刚刚被中断的程序
多个中断
假如有多个设备发送中断信号的话,有两种方法:
- 正在处理一个中断时禁止再发生中断,即开始处理一个中断请求时,设置PSW中的标记为禁止中断状态,其他设备发送的中断信号都不予理睬,但该信号会一直存在,直到当前中断执行完毕后,把标记位设置为允许中断,再去获取到当时的中断信号。该方法比较简单。
- 嵌套中断:定义中断优先级,允许高优先级的中断打断低优先级的中断的运行
总结
- 中断是为了实现多道程序并发执行而引入的一种技术。
- 中断的本质就是发生中断时需要操作系统介入开展管理工作。
- 发生中断,CPU会立即进入核心态,针对不同的中断信号,采取不同的处理方式。
- 中断是CPU从用户态进入核心态的唯一途径(如系统调用)。
- 中断分为内中断和外中断。
- 进程中断时,操作系统会保存CPU的运行环境,如程序状态字(PSW)、程序计数器、各种通用寄存器,这是为了当进程再次运行时可以从中断的状态处继续运行。
|