Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • 操作系统

    • 学习笔记

      • 鸟哥的Linux私房菜学习笔记01-计算机概论
      • 鸟哥的Linux私房菜学习笔记02-磁盘分区
      • 鸟哥的Linux私房菜学习笔记03-日志文件
      • 寄存器
      • 汇编语言
      • 零拷贝
      • 内存管理单元MMU
      • 内存管理基础知识
      • 文件系统
      • 系统调用
      • 写时复制
      • 虚拟地址
      • 虚拟内存
      • 中断
        • CPU
        • DMA
        • mmap
        • Swap分区
      • Shell

      • Linux命令

      • RAID分类详解
      • Page Cache与Page回写
      • 磁盘IO与swap分区
    • 计算机网络

    • 数据结构和算法

    • MySQL

    • Redis

    • Nginx

    • MongoDB

    • 其他

    • 计算机基础
    • 操作系统
    • 学习笔记
    Ravior
    2019-02-04
    目录

    中断

    中断的字面意思就是打断正常执行流程,但是注意,它表示的是打断流程而不是终止流程,这是不同的概念。

    中断是操作系统中非常重要的机制,正如上面所描述的:中断用于保证CPU控制权交给操作系统,从而让操作系统可以执行某些操作。

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

    任何硬件,都有自己的IRQ(中断请求),都可以在需要的时候通过总线向CPU发送硬件中断通知。

    比如时钟中断,当进程执行耗光时间片时将产生一个时钟中断,使得能够立刻进入操作系统并调度下一个要执行的进程,时钟中断是操作系统具有安全感的保证,只要时钟开始运行后,就意味着操作系统最终总能够获取到CPU控制权。

    再比如硬盘的IO中断,当硬盘读取所请求的数据完成后,就会发送硬盘IO中断,CPU接到该中断后就会切换到操作系统,让操作系统去处理这个中断事件。

    软件也可以发送中断,比如请求一个系统调用(system call)。

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

    其实,要进入内核态只需执行特殊的指令即可,一般称之为trap指令,当执行trap指令后,就会进入内核态,回到操作系统。trap这个单词的意思是陷阱,在这里它表示的是动词:陷入,这些事国人翻译的意思, 非常形象,它表示的是执行trap指令以便陷入到内核,即进入内核态。

    当操作系统执行完相关操作后,就要回到用户态,要回到用户态也只需执行特殊的指令即可,一般称之为return-from-trap指令。(此处的trap又似乎是个名词,表示脱离陷阱,回到用户态之下。

    它将内核态描述为陷阱,这其实也是可以理解的,中断是事件,收到事件表示捕获到事件,什么具有捕获的能力?陷阱。在bash中也有一个trap命令,也可以理解为陷进,它用来设置信号处理程序,当捕获到信号时就做出某些处理。我们不管trap是陷入还是陷阱,我们关注的是作用:进入内核态和退出内核态。)

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

    所以,中断就像是突发事件,处理完成后如果恢复到断点处,那么对整个流程来说,中断就像是从未发生过的事一样,但却实实在在的被处理了。

    但是,中断后并不一定会恢复到断点处,因为中断处理程序可能会在恢复断点前直接退出这个执行流程,比如有些硬件中断表示一些异常现象(比如除0异常),这些异常可能会导致终止进程。

    # 中断描述符表-IDT

    #操作系统
    上次更新: 2022/12/01, 11:09:34
    虚拟内存
    CPU

    ← 虚拟内存 CPU→

    最近更新
    01
    常用游戏反外挂技术总结
    11-27
    02
    Golang开发实践万字总结
    11-11
    03
    Redis万字总结
    10-30
    更多文章>
    Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式