• 中断


    要想在任何需要的时候回到操作系统,这相当于是改变了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异常),这些异常可能会导致终止进程。

  • 相关阅读:
    repomd.xml signature could not be verified for kubernetes
    在远程连接最小化和关闭后执行失败的解决方案
    docker
    conan buildroot
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 250: illegal multibyte sequence
    最小化及关闭远程桌面后键盘与鼠标仍处于可交互状态
    docker push denied: requested access to the resource is denied
    HDU 3709 Balanced Number
    Ahoi2009 self 同类分布
    HDU 1711 Number Sequence
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12404337.html
Copyright © 2020-2023  润新知