中断
要想在任何需要的时候回到操作系统,这相当于是改变了CPU的正常执行流程,所以一个非常熟悉的字眼——中断(Interrupt)就出现了。通过中断,可以保证回到操作系统,从而将CPU的控制权交给操作系统。
中断的字面意思就是打断正常执行流程,但是注意,它表示的是打断流程而不是终止流程,这是不同的概念。中断是操作系统中非常重要的机制,正如上面所描述的:中断用于保证CPU控制权交给操作系统,从而让操作系统可以执行某些操作。
中断分为硬件中断和软件中断。
任何硬件,都有自己的IRQ(中断请求),都可以在需要的时候通过总线向CPU发送硬件中断通知。比如时钟中断,当进程执行耗光时间片时将产生一个时钟中断,使得能够立刻进入操作系统并调度下一个要执行的进程,时钟中断是操作系统具有安全感的保证,只要时钟开始运行后,就意味着操作系统最终总能够获取到CPU控制权。再比如硬盘的IO中断,当硬盘读取所请求的数据完成后,就会发送硬盘IO中断,CPU接到该中断后就会切换到操作系统,让操作系统去处理这个中断事件。
软件也可以发送中断,比如请求一个系统调用(system call),关于系统调用,后面再介绍。
无论是软中断还是硬件中断,最终的目的都是为了回到操作系统,将CPU交给操作系统。那么,中断是如何回到操作系统的呢?换句话说,中断时是如何进入内核态的呢?内核态又如何回到用户态呢?
其实要进入内核态只需要特殊的指令即可,一般称之为trap指令,当执行trap指令后,就会进入内核态,回到操作系统。trap这个词的意思就是陷阱,在这里它表示的是动词:陷入,非常形像,它表示的是执行trap指令以便陷入到内核,即进入内核态。
当操作系统执行完相关操作后,就要回到用户态,要回到用户态也只需执行特殊的指令即可,一般称之为return-from-trap指令。(此处的trap又似乎是个名词,表示脱离陷阱,回到用户态之下。它将内核态描述为陷阱,这其实也是可以理解的,中断是事件,收到事件表示捕获到事件,什么具有捕获的能力?陷阱。在bash中也有一个trap命令,也可以理解为陷进,它用来设置信号处理程序,当捕获到信号时就做出某些处理。我们不管trap是陷入还是陷阱,我们关注的是作用:进入内核态和退出内核态。)
中断既然是打断CPU的执行流程,那么可能需要重新回到中断点继续正常的执行流程。所以,在发生中断时,需要保存好中断点以及相关的一些状态,以便能够在处理完中断后恢复执行流程继续向下执行。
所以,中断就像是突发事件,处理完成后如果恢复到断点处,那么对整个流程来说,中断就像是从未发生过的事一样,但却实实在在的被处理了。但是,中断后并不一定会恢复到断点处,因为中断处理程序可能会在恢复断点前直接退出这个执行流程,比如有些硬件中断表示一些异常现象(比如除0异常),这些异常可能会导致终止进程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?