欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

每天3分钟操作系统修炼秘籍(4):中断

程序员文章站 2023-10-31 17:23:10
"点我查看秘籍连载" 回到操作系统:中断 要想在任何需要的时候回到操作系统,这相当于是改变了CPU的正常执行流程,所以一个非常熟悉的字眼—— 中断 (Interrupt)就出现了。通过中断,可以保证回到操作系统,从而将CPU的控制权交给操作系统。 中断的字面意思就是打断正常执行流程,但是注意,它表示 ......

回到操作系统:中断

要想在任何需要的时候回到操作系统,这相当于是改变了cpu的正常执行流程,所以一个非常熟悉的字眼——中断(interrupt)就出现了。通过中断,可以保证回到操作系统,从而将cpu的控制权交给操作系统。

中断的字面意思就是打断正常执行流程,但是注意,它表示的是打断流程而不是终止流程,这是不同的概念。中断是操作系统中非常重要的机制,正如上面所描述的:中断用于保证cpu控制权交给操作系统,从而让操作系统可以执行某些操作。

中断分为硬件中断和软件中断。

任何硬件,都有自己的irq(中断请求),都可以在需要的时候通过总线向cpu发送硬件中断通知。比如时钟中断,当进程执行耗光时间片时将产生一个时钟中断,使得能够立刻进入操作系统并调度下一个要执行的进程,时钟中断是操作系统具有安全感的保证,只要时钟开始运行后,就意味着操作系统最终总能够获取到cpu控制权。再比如硬盘的io中断,当硬盘读取所请求的数据完成后,就会发送硬盘io中断,cpu接到该中断后就会切换到操作系统,让操作系统去处理这个中断事件。

软件也可以发送中断,比如请求一个系统调用(system call),关于系统调用,后面再介绍。

无论是软中断还是硬件中断,最终的目的都是为了回到操作系统,将cpu交给操作系统。那么,中断是如何回到操作系统的呢?换句话说,中断时是如何进入内核态的呢?内核态又如何回到用户态呢?

每天3分钟操作系统修炼秘籍(4):中断

当操作系统执行完相关操作后,就要回到用户态,要回到用户态也只需执行特殊的指令即可,一般称之为return-from-trap指令。(此处的trap又似乎是个名词,表示脱离陷阱,回到用户态之下。它将内核态描述为陷阱,这其实也是可以理解的,中断是事件,收到事件表示捕获到事件,什么具有捕获的能力?陷阱。在bash中也有一个trap命令,也可以理解为陷进,它用来设置信号处理程序,当捕获到信号时就做出某些处理。我们不管trap是陷入还是陷阱,我们关注的是作用:进入内核态和退出内核态。)

中断既然是打断cpu的执行流程,那么可能需要重新回到中断点继续正常的执行流程。所以,在发生中断时,需要保存好中断点以及相关的一些状态,以便能够在处理完中断后恢复执行流程继续向下执行。

所以,中断就像是突发事件,处理完成后如果恢复到断点处,那么对整个流程来说,中断就像是从未发生过的事一样,但却实实在在的被处理了。但是,中断后并不一定会恢复到断点处,因为中断处理程序可能会在恢复断点前直接退出这个执行流程,比如有些硬件中断表示一些异常现象(比如除0异常),这些异常可能会导致终止进程。