当前位置: 首页 > news >正文

扩展阅读:什么是中断

如果用一句话概括操作系统的原理,那就是:整个操作系统就是一个中断驱动的死循环,用最简单的代码解释如下:

while(true){doNothing();
}

其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成的。我们点击一下鼠标,敲击一下键盘,执行一个程序,都是用中断的方式来通知操作系统帮我们处理这些事件,当没有任何需要操作系统处理的事件时,它就乖乖地待在死循环里不出来。

所以,中断非常重要,它是让我们理解整个操作系统的根基。

五花八门的中断分类

在Intel CPU手册中对中断的定义有一个官方的标准答案。如下图:

这段话概括起来的意思就是:中断可以分为中断和异常,异常又可以分为故障、陷阱和中止。

第一句话有点奇怪,啥叫中断又可以分为中断和异常呢?其他很多文章也是这么写的,不知道你有没有感到疑惑。

原文的意思准确的说就是,CPU提供了两种中断程序执行的机制,中断和异常。第一个中断是动词,第二个中断时真正的机制种类。

先说第一个机制---中断(interrupt),中断时一个异步事件,通常由I/O设备触发。比如点击一下鼠标,敲击一下键盘。

再说第二个机制--异常,异常是一个同步事件,是CPU在执行指令时检测到的反常条件。比如除法异常、错误指令异常、缺页异常等。

这两个机制,殊途同归,都是让CPU收到一个中断号,至于CPU收到这个中断号后干什么,我们暂且不管。

我们先看看收到中断号之前,中断和异常是怎么给CPU一个中断号的。先说中断。

有一个设备叫做可编程中断控制器,它有很多IRQ引脚线,接入了一堆能发出中断请求的硬件设备。当这些硬件设备给IRQ引脚发送一个信号时,由于可编程中断控制器提前被设置好了IRQ与中断号的对应关系,所以就转化成了对应的中断信号。把这个中断号存储在自己的一个端口上,然后给CPU的INTR引脚发送一个信号,CPU收到INTR引脚信号后,去刚刚的那个端口可读取到这个终端号的值。

你看,最终的目标,就是让CPU知道,有中断了,并且也知道中断号时多少。

比如按下图3中的键盘,最终到CPU那里的反应就是,得到了一个中断号0x21。

那异常的即使就更简单了,时CPU自己执行指令时检测到一些反常情况,然后自己给自己一个中断号,无须外界提供。

比如,CPU执行到了一个无效指令,则自己给自己一个中断号0x06,这个中断号是CPU提前就规定好写死了的硬布线逻辑。

好了,到目前位置,我们知道了无论是中断还是异常

http://www.lryc.cn/news/387738.html

相关文章:

  • git 命令学习之branch 和 tag 操作
  • 如何理解 IEEE 754 单精度浮点型能表示的最小绝对值、最大绝对值
  • LeetCode 算法:二叉树的右视图 c++
  • Java 并发编程常见问题
  • 网络基础:静态路由
  • 库存管理系统基于spingboot vue的前后端分离仓库库存管理系统java项目java课程设计java毕业设计
  • 【ArcGIS AddIn插件】【可用于全国水旱灾害风险普查】全网最强洪水淹没分析插件-基于8邻域种子搜索算法-有源淹没分析算法
  • ==和equals的区别(面试题)
  • 本地项目上传到GitHub上(李豆)
  • 碧海威L7云路由无线运营版 confirm.php/jumper.php 命令注入漏洞复现(XVE-2024-15716)
  • redis实战-添加商户缓存
  • SQL游标的基本使用方法与示例
  • 还不知道工业以太网和现场总线区别???
  • 量化交易 - 策略回测
  • Java--选择排序
  • Python基础之模块和包
  • 基于SpringBoot漫画网站系统设计和实现(源码+LW+调试文档+讲解等)
  • Mysql----表的约束
  • 如何用 PHP 实现一个自定义爬虫框架
  • 【机器学习】机器学习的重要方法——强化学习:理论,方法与实践
  • Linux磁盘监控思路分析
  • pc端制作一个顶部固定的菜单栏
  • ONLYOFFICE 8.1版本桌面编辑器深度体验:创新功能与卓越性能的结合
  • 使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(2)
  • socket编程常见操作
  • springcloud-config git配置源加载(部署公钥问题)
  • 华为OD机考题HJ24 合唱队
  • 基于bootstrap的12种登录注册页面模板
  • 【劳德巴赫 Trace32 高阶系列 3.1 -- trace32 svf 文件操作与 InitState】
  • 爬虫知识:补环境相关知识