专栏首页机器学习与系统什么是中断机制?

什么是中断机制?

本文是操作系统系列第五篇,介绍操作系统中的中断机制。更多内容见公号机器学习与系统,欢迎与我互动~

概念

操作系统需要管理外设,但是外设的速度远远低于CPU的速度,所以我们需要一种机制来弥补这种速度鸿沟,提高CPU的效率。

为此我们引入了中断机制,让外设在需要操作系统处理外设相关事件的时候,能够主动通知操作系统,即打断操作系统和应用的正常执行,让操作系统完成外设的相关处理,然后在恢复操作系统和应用的正常执行。

当CPU收到中断或者异常的事件时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理例程中,在完成对这个事件的处理后再跳回到刚才被打断的程序或任务中。

分类

  1. 异步中断(asynchronous interrupt),由CPU外部设备引起的外部事件如I/O中断、时钟中断、控制台中断等是异步产生的(即产生的时刻不确定),与CPU的执行无关。也称外部中断,简称中断(interrupt)。
  2. 同步中断(synchronous interrupt),在CPU执行指令期间检测到不正常的或非法的条件(如除零错、地址访问越界)所引起的内部事件称作,也称内部中断,简称异常(exception)。
  3. 陷入中断(trap interrupt),在程序中使用请求系统服务的系统调用而引发的事件,也称软中断(soft interrupt)。

中断

异常

系统调用

源头

外设

应用程序

应用程序

响应方式

异步

同步

异步或同步

处理机制

持续,对用户应用程序是透明的

杀死或者重新执行意想不到的应用程序指令

等待和持续

中断描述符表

也称中断描述符表(Interrupt Descriptor Table)。

在操作系统中,会预先设置一些中断处理函数,当CPU接收到中断时,会根据中断号去查找对应的处理函数,中断向量表就是记录中断号和处理函数映射关系的表。

中断处理机制如下:

中断、异常和系统调用都由中断向量表协调执行。

  1. 发生中断时,根据中断向量号查询中断向量表,根据里面的处理程序,协调设备驱动处理外部设备的中断请求
  2. 发生系统调用请求时,中断向量表查询系统调用表,然后执行对应的系统调用程序
  3. 发生异常时,查询中断向量表得到对应异常处理程序,处理异常

总结

中断机制是为了弥补CPU速度和外设速度数量级差异的机制,它的核心是中断向量表。本文只介绍概念和简单的机制,没有深入介绍中断过程中特权级转换等内容,有兴趣的同学可以查看清华大学的操作系统课程[1]。

参考资料

[1]操作系统课程: https://chyyuu.gitbooks.io/ucore_os_docs/content/lab1/lab1_3_3_2_interrupt_exception.html

本文分享自微信公众号 - 机器学习与系统(aimlsystem),作者:陆道峰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 70年,国人的奋斗史,计算机技术的追赶史

    1. 1936年11月12日,阿兰·图灵(Alan Turing)发表了计算机理论的奠基性论文《论可计算数及其在判定问题中的应用》(On Computable ...

    陆道峰
  • [翻译]15分钟bash进阶

    需要注意的是,有些Linux命令可以使用一些选项来强制忽略错误,比如rm -f和mkdir -p。

    陆道峰
  • kde5与archlinux环境下配置libinput-gestures多手势操作

    自己的笔记本是archlinux+kde plasma5的环境,看到同事的macbook pro支持很多手势操作(gestures),自己也希望在archlin...

    陆道峰
  • 多台Linux服务器执行同样的命令

    在Spark安装和运行时,比如zkServer.sh start这样的命令是需要所有服务器执行的,一个个复制粘贴回车肯定不够优雅,找个shell解决这个问题:

    悠扬前奏
  • 大数据的力量,成就勇士队夺冠之路

    NBA总决赛第五场,回到主场的勇士队的最终以129-120击败骑士,总比分4-1夺取2016-17赛季NBA总冠军。这是勇士最近三年里第2次夺冠,也是队史第5冠...

    钱塘数据
  • Python缺少zlib的问题

    参考: 解决python3缺少zlib的问题 Python安装zlib模块

    py3study
  • 容器化的Apache服务并监控

    sudo docker run -d --name ubuntu -p 80:80 ubuntu:16.04

    飞天小子
  • php_network_getaddresses: getaddrinfo failed

    大江小浪
  • PHP图像函数之gd_info()

    申霖
  • linux 下shell脚本备份文件

      具体步骤:先查询源目录和目标目录中的文件,分别存在fileSrc和fileDst中。 -> 来两个循环,比较。不在fileDst的就拷贝过去。再判断一下是否...

    xcywt

扫码关注云+社区

领取腾讯云代金券