中断机制

中断机制

  • 中断定义:[处理器暂停当前正在执行的进程,并将当前进程保存在上下文中,转而恢复其他新的进程的并执行的过程]{.red}

    [注:上下文采用进程控制块实现]{.red}

  • 中断处理程序:用于处理各种中断的程序

    [注:中断处理程序都是存放在内存中的]{.red}

  • 中断向量:各种设备的中断处理程序的地址数组

  • 中断过程:

    1. 进程使用 [系统调用]{.blue} 获取操作系统提供的服务 ([进程发出指令中断]{.red})
    2. 进程传递 系统调用 [需要使用的参数]{.blue}
    3. 进程使用 [陷入指令]{.blue} 切换用户态到内核态
    4. 操作系统查找 [硬件驱动程序]{.blue} 用于处理进程的请求
    5. 硬件驱动程序查找相应的 [硬件控制器]{.blue} 去控制硬件设备
    6. 硬件设备完成 I/O 操作后由 [硬件控制器发出中断]{.blue}
    7. [处理器]{.blue} 响应中断:根据 [中断号]{.blue} 在 [中断向量]{.blue} 中查找 [中断处理程序]{.blue} 并执行
    8. 中断处理程序开始处理中断:保存程序状态字寄存器和部分通用寄存器的内容
    9. 中断执行结束后由 [中断处理程序]{.blue} 重新恢复之前进程执行的指令
  • 中断分类:

    • 外中断:处理器以外的事件的发生称为外中断

      • I/O 中断:[硬件设备 完成 I/O 操作后发出的中断]{.blue}
      • 时钟中断:[定时器 在进程执行时间到了之后发出的中断]{.blue}
    • 内中断:处理器内部执行指令产生异常称为内中断 ([也称为异常]{.red})

      • 指令中断:系统调用发出的中断

      • 强制中断:(1) 硬件故障中断(缺页中断)(2) 软件中断 (整数除0)

        [注:指令中断 和 强制中断 最终都会使用 陷入指令 从用户态切换到内核态]{.red}

    • 可屏蔽中断:处理器可以 延后处理 的中断

      :::info

      [处理器可以设置 程序状态字寄存器 来设置是否延后处理可屏蔽中断]{.red}

      :::

    • 不可屏蔽中断:处理器 必须立刻执行 的中断

  • 系统调用

  • 源语定义:[实现某一功能的指令的集合 (类似于事务)]{.red}

    • [指令集合中的指令要么全部执行,要么全部不执行]{.red}
    • [中断机制不可以打断源语的执行]{.red}
  • 陷入指令:

    • 定义:操作系统出现故障或者进程需要使用操作系统提供的服务时,从用户态切换为内核态使用的指令
    • 细节:
      • [系统调用硬件故障 最终都会使用到陷入指令用于陷入操作系统]{.red}
      • [陷入指令又称为访管指令,不是特权指令并且在用户态使用]{.red}:本质就是将处理器的使用权从进程交付给操作系统
  • 特权指令:

    • 定义:[操作系统调用计算机底层硬件资源或者内部算法所发出的具有特殊权限的,使用不当可能对计算机产生危险的指令]{.red}
    • 主要指令:
      • 控制中断禁止屏蔽位
      • 切换进程
      • 存取用于主存保护的寄存器
      • 执行I/O操作
      • 清理内存
      • 设置时钟
      • 加载程序状态字寄存器
    • 细节:[系统调用最终都会使用到特权指令]{.red}:换言之系统调用的实现都是特权指令
  • 细节:

    1. [处理器正在执行的中断程序是不可以被新产生的中断所打断的]{.red}
    2. 多个中断同时发生时,处理器根据每个中断的 [优先级]{.blue} 决定优先执行哪个中断程序
    3. [所有的中断都会引发用户态到内核态的切换]{.red}
    4. [操作系统可以认为是中断驱动的]{.red}
ba5ebb00071d15087ee9bd6fe7200f17.png
Author: Fuyusakaiori
Link: http://example.com/2021/09/18/os/overview/中断机制/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.