点我查看秘籍连载安全
要想在任何须要的时候回到操做系统,这至关因而改变了CPU的正常执行流程,因此一个很是熟悉的字眼——中断(Interrupt)就出现了。经过中断,能够保证回到操做系统,从而将CPU的控制权交给操做系统。bash
中断的字面意思就是打断正常执行流程,可是注意,它表示的是打断流程而不是终止流程,这是不一样的概念。中断是操做系统中很是重要的机制,正如上面所描述的:中断用于保证CPU控制权交给操做系统,从而让操做系统能够执行某些操做。操作系统
中断分为硬件中断和软件中断。blog
任何硬件,都有本身的IRQ(中断请求),均可以在须要的时候经过总线向CPU发送硬件中断通知。好比时钟中断,当进程执行耗光时间片时将产生一个时钟中断,使得可以马上进入操做系统并调度下一个要执行的进程,时钟中断是操做系统具备安全感的保证,只要时钟开始运行后,就意味着操做系统最终总可以获取到CPU控制权。再好比硬盘的IO中断,当硬盘读取所请求的数据完成后,就会发送硬盘IO中断,CPU接到该中断后就会切换到操做系统,让操做系统去处理这个中断事件。进程
软件也能够发送中断,好比请求一个系统调用(system call),关于系统调用,后面再介绍。事件
不管是软中断仍是硬件中断,最终的目的都是为了回到操做系统,将CPU交给操做系统。那么,中断是如何回到操做系统的呢?换句话说,中断时是如何进入内核态的呢?内核态又如何回到用户态呢?get
当操做系统执行完相关操做后,就要回到用户态,要回到用户态也只需执行特殊的指令便可,通常称之为return-from-trap指令。(此处的trap又彷佛是个名词,表示脱离陷阱,回到用户态之下。它将内核态描述为陷阱,这其实也是能够理解的,中断是事件,收到事件表示捕获到事件,什么具备捕获的能力?陷阱。在bash中也有一个trap命令,也能够理解为陷进,它用来设置信号处理程序,当捕获到信号时就作出某些处理。咱们无论trap是陷入仍是陷阱,咱们关注的是做用:进入内核态和退出内核态。)软件
中断既然是打断CPU的执行流程,那么可能须要从新回到中断点继续正常的执行流程。因此,在发生中断时,须要保存好中断点以及相关的一些状态,以便可以在处理完中断后恢复执行流程继续向下执行。硬件
因此,中断就像是突发事件,处理完成后若是恢复到断点处,那么对整个流程来讲,中断就像是从未发生过的事同样,但却实实在在的被处理了。可是,中断后并不必定会恢复到断点处,由于中断处理程序可能会在恢复断点前直接退出这个执行流程,好比有些硬件中断表示一些异常现象(好比除0异常),这些异常可能会致使终止进程。请求