• 操作系统随记 —— 中断与异常


    操作系统系列文章👉 目录 👈

    请添加图片描述

    一、用户态与核心态

    为了避免操作系统及其关键数据受到用户程序的破坏,通常需要将 CPU 的执行状态分成两种:用户态核心态

    • 用户态:又称目态,是用户程序执行时机器所处的状态,具有较低的特权指令(只能由操作系统内核部分使用,不允许用户直接使用的指令)。它只能执行规定的指令,只能访问指定的寄存器和存储器。
    • 核心态:又称管态、系统态,是操作系统管理程序执行时机器所处的状态,具有较高的特权,能够执行包括特权指令的一切指令,能访问寄存器和存储区。

    通过划分核心态与用户态,这两类程序就被严格的区分了,从而在 CPU 执行时的优先级等将会有所不同。

    二、中断与异常

    在引入用户态与核心态这两种工作状态后,就需要考虑这两种状态之间的切换,让相关指令能够在用户态与核心态之间反复横跳。中断与异常就恰好能够解决这一问题,从而提高系统的资源利用率。

    1、中断与异常的定义

    中断(Interrupt)也称为外中断,是指来自 CPU 执行指令以外的事件的发生,比如设备发出的 I/O 结束中断,表示设备输入/输出处理已经完成,希望处理机能够向别的设备发出下一个输入/输出请求,同时让完成输入/输出后的程序继续执行。

    异常(Exception)也称为内中断、例外或者陷入(trap),指源自 CPU 执行指令内部的事件,如程序的非法操作码、地址越界、算数溢出等等。

    2、中断处理的过程

    网上关于中断处理的过程有所不同,主要是其所占的软硬件角度不同,以及其所选的中断的开始不同,其原理都是大致相同的,主要分为以下部分:

    请添加图片描述

    ⓪ 中断请求:某一中断源向 CPU 发起中断请求,对于外部中断 CPU 在当前指令最后一个时钟周期查询中断请求信号的。

    硬件部分

    ① 关中断:CPU 响应中断后,首先要保护程序的现场状态,在保护现场的过程中,CPU 不应响应更高级中断源的中断请求;否则,现场保存不完整,中断结束后也就不能正确的恢复并执行现行程序。

    ② 保存断点:为了能够恢复到原来的程序,必须将原来的程序的断点(程序计数器 PC)保存起来。

    ③ 引出中断服务程序:取出中断服务程序的入口地址送入程序计数器 PC。

    软件部分

    ④ 保存现场与屏蔽字:进入中断服务程序后,首先会保存现场(现场信息一般是指程序状态字寄存器 PSWR 和 某些通用寄存器的内容)。

    ⑤ 开中断:允许更高级的中断请求得到相应。

    ⑥ 执行中断服务程序:这是中断请求的目的。

    ⑦ 关中断:保证在恢复现场和屏蔽字时不被中断。

    ⑧ 恢复现场与屏蔽字:将现场和屏蔽字恢复到原来的状态。

    ⑨ 开中断、中断返回:中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。

  • 相关阅读:
    线程中开启线程池异步处理,主副线程设置执行顺序
    Ubuntu安装步骤
    测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
    二:对表进行基本CRUD操作
    Corel VideoStudio会声会影2022旗舰版本视频剪辑软件
    基于FTP协议的文件上传与下载
    【开源】基于Vue和SpringBoot的民宿预定管理系统
    在一个字符串中找到没有重复字符子串中最长的长度。
    C++ Qt开发:运用QThread多线程组件
    Kettle【实践 06】使用 HTTP client 获取 GPC 全球商品分类代码 JSON 数据处理入库全流程(云资源分享:ktr+数据.sql)
  • 原文地址:https://blog.csdn.net/qq_21484461/article/details/126821089