操作系统:中断和异常

简介: 内中断(异常):与当前CPU的执行的指令有关,中断信号来自CPU内部外中断:与当前CPU的执行的指令无关,中断信号来自CPU外部 (注:在大部分教材中,“中断”是狭义的中断,指外中断;而内中断则称为异常)

一、中断的类型


内中断(异常):与当前CPU的执行的指令有关,中断信号来自CPU内部


外中断:与当前CPU的执行的指令无关,中断信号来自CPU外部


(注:在大部分教材中,“中断”是狭义的中断,指外中断;而内中断则称为异常)



内中断分类:陷入中断、故障中断、异常中断


陷入中断:由陷入指令(非特权指令)引发,是应用程序故意引起。比如应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个中断信号。执行陷入指令意味着应用程序主动放弃CPU的使用权,将CPU的使用权交给操作系统内核。 “系统调用”就是通过陷入指令实现的。



故障中断:由错误条件引起,可能被内核程序修复,内核程序修复后会把CPU使用权交还给应用程序,使应用程序继续执行。比如CPU执行除法指令发现除数是0,该指令是非法的。比如缺页故障。



异常中断:由致命错误引起,内核程序无法修复,因此一般不在将CPU的使用权交还给引发该中断信号的应用程序,而是直接终止该应用程序的运行。比如非法使用特权指令。



外中断的分类:时钟中断、I/O中断等



时钟中断:实现并发运行。由时钟部件发出中断信号,时钟部件每隔一个时间片(假设为50ms)就会给CPU发送一个时钟中断信号。起初,应用程序A在CPU上运行,执行一系列的指令,当时钟部件检测到应用程序A已经运行了50ms时,会向CPU发出中断信号。CPU检测到中断信号转化为内核态,由处理时钟中断信号的内核程序上CPU运行,处理完成后转换为用户态,将CPU的使用权交给应用程序B。应用程序B上CPU运行,执行一系列的指令,当时钟部件又检测到应用程序B已经运行了50ms,又会向CPU发出时钟中断信号……如此往复实现程序的并发运行。



I/O中断:由输入/输出设备发出中断信号。比如打印机在工作时,打印任务执行完毕后,回向CPU发出中断信号,CPU检测到中断信号转换为内核态,由相对应的内核程序去处理该中断信号



补充:CPU每执行一条指令都是例行去检查是否有中断信号


二、中断的作用


CPU上会运行两种程序——应用程序和内核程序。在合适的时间内,内核程序会主动让出CPU的使用权交给应用程序,但是应用程序无法主动让出CPU的使用权交给内核程序,只能通过中断来实现。中断是操作系统内核夺回CPU使用权的唯一途径。


如果没有中断,那么一旦应用程序上CPU运行,那么CPU就会一直运行这个程序,并发运行程序又从何而来?因此中断是实现并发运行必不可少的。


三、中断机制的基本原理


不同的中断信号需要由不同的中断处理程序(内核程序)去处理。当CPU检测到中断信号时,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中存放的位置。

目录
相关文章
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
612 0
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
511 1
|
算法 Linux 调度
技术好文共享:详解操作系统中断
技术好文共享:详解操作系统中断
|
资源调度 调度 UED
CPU执行系统调用时发生中断,操作系统还能切回中断前的系统调用继续执行吗?
系统调用服务例程在执行过程中,通常不会被中断。系统调用服务例程的执行是一个原子操作,即在执行期间不会被中断。这是为了确保在系统调用服务例程执行期间对内核数据结构的一致性和完整性。
311 1
|
Unix 编译器 Linux
操作系统的启动和中断
操作系统的启动和中断
213 0
|
存储 前端开发 Linux
操作系统实验一:时钟中断程序设计
操作系统实验一:时钟中断程序设计
409 0
|
C语言
《计算机操作系统-第三章》之中断与系统调用
《计算机操作系统-第三章》之中断与系统调用
648 0
|
10月前
|
Ubuntu Unix Linux
操作系统的最强入门科普(Unix/Linux篇)
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注! 如果大家觉得文章不错,还请帮忙多多转发!谢谢!
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
1449 0
Vanilla OS:下一代安全 Linux 发行版

推荐镜像

更多