操作系统之什么是中断?

2023-05-16

什么是中断?

​ 在学习操作系统中,经常性的会看到中断这个概念,最典型的就是汇编代码中的int命令。

​ 用一个比较通俗的概念来说,就是计算机会连接许多外接设备,包括磁盘、显示器、键盘鼠标等等,而如何处理这些输入呢?对于一个处理器来讲,程序运行的过程是一个不断取指执行的过程。如何响应设备也就是常说的I/O输入呢?一种简单的办法就是当我们有数据输入时,想处理器提出请求,处理器过来处理我们的输入,在回去执行原来的程序代码,这样的一个过程就叫做中断(Interrupt)。

​ 如果同时有多个设备提出请求,那么CPU应该怎么样去处理呢?我们需要对这些中断有一个优先级的概念。这里就需要提到可编程中断控制器(PIC-Programmable Interrupt Controller),会对所有的中断进行判断并且选出最高优先级进行处理。这里值得注意的是中断不仅仅可以由硬件发出,同样也可以由软件发出,最典型的就是从磁盘中读取数据。对于软件以及硬件中断的不同以及CPU的处理过程如下图:

异常:又称为同步中断,是当指令执行时CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。在不失进程执行连续性的同时,按引起的异常的指令是否能重新执行,且依据它们被报告的方式,异常分为错误陷阱,和终止三种情况。

错误:错误是一种通常可以能够被修正的异常,一旦修正,程序能够不失去连续性地接着执行。当报告错误发生时,处理器将机器状态恢复到执行错误之前的状态。错误处理例程的返回地址指向产生错误的指令,而不是错误指令之后的的那条指令。如页错误。

陷阱:当引起陷阱的指令发生时,马上产生该异常。陷阱允许程序不失去连续性的继续执行。陷阱处理例程的返回地址指向引起陷阱的指令的下一条指令(与错误本质上的区别)。如溢出。

终止:它并不总是报告产生异常的指令的确定位置,也不允许引起终止的进程或任务重新执行。如总线错误导致异常终止。

请添加图片描述

请添加图片描述

典型的非屏蔽中断源的例子是电源掉电,一旦出现,必须立即无条件地响应,否则进行其他任何工作都是没有意义的。

典型的可屏蔽中断源的例子是打印机中断,CPU对打印机中断请求的响应可以快一些,也可以慢一些,因为让打印机等待儿是完全可以的。

用户如果需要操作系统资源,则必须使用中断

用户程序和内核之间的交互主要是通过系统调用实现的,而内核和外部设备之间主要是通过硬中断

用户态、内核态以及其他内容我将会在其他的文章中做记录

什么是IDT(中断向量表)

中断描述符表IDT是一个系统表,它与每一个中断或异常向量相联系,每一个向量在表中有相应的中断或异常处理程序的入口地址。内核在允许中断发生前,必须适当的初始化IDT

(1)16-31共16位是中断处理程序所在的段选择符。

(2)0-15位和48-64位组合起来形成32位偏移量,也就是中断处理程序所在段(由16-31位给出)的段内偏移。

(3)40-43位共4位表示描述符的类型。(0111:中断描述符,1010:任务门描述符,1111:陷阱门描述符)

(4)45-46两位标识描述符的访问特权级(DPL,Descriptor Privilege Level)。

(5)47位标识段是否在内存中。如果为1则表示段当前不再内存中。

请添加图片描述

中断产生之后发生了什么?(以键盘为例)

请添加图片描述

  1. 引起一个中断
  2. 通过APIC判断中断优先级,同时向CPU发送int信号
  3. CPU中断后去查中断向量表,找到对应处理中断的程序,程序调用对应的设备驱动与外部设备之间通信

请添加图片描述

一个设备的中断处理程序是它设备驱动程序的一部分。中断处理程序与其他内核的真正区别在于:中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断上下文的特殊上下文中。

Linux内核中断系统处理机制-详细分析
Linux中断和系统调用的解析
Linux内核完全注释

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统之什么是中断? 的相关文章

  • 使用docker下的硬件使用(一)之双目摄像头

    本篇博客又名 xff1a 物理机 xff08 宿主机win xff09 下虚拟机 xff08 ubuntu xff09 中的docker下硬件 xff08 双目相机 xff09 调用 一 环境介绍 如下图 xff1a 我在windows10
  • AI自主图像生成 之 stable-diffusion(Anaconda+pycharm)本地部署

    无需订阅专栏 AI自主图像生成 之 stable diffusion 运行效果展示 一 介绍与实验效果 文章末尾包含 1 我已打包到百度云的部署验证成功并包含模型权重的代码文件 可直接链接完成python环境配置的anaconda环境下使用
  • AI自主图像生成 之 stable-diffusion—运行效果展示

    stable diffusion用途 xff1a 输入文字描述 xff0c 输出对应图片 The chicken with the hair parted in the middle and the suspenders is playin
  • python画甘特图

    1 使用plotly 安装包下载 span class token keyword import span plotly span class token punctuation span express span class token
  • bat 打开exe文件,并显示进度条

    如下 C camera flow njl CAM exe是你的exe文件路径 180 就是 180 s xff0c 即三分钟显示完毕 chcp span class token number 65001 span span class to
  • 基于opencv的掩膜生成 python

    代码将遍历JPG dir文件夹中的所有jpg文件 xff0c 并对于每一个jpg文件 xff0c 读取同名的JSON文件 xff0c 然后根据JSON文件中记录的标注区域的坐标在JPG图像上绘制掩膜图像 最后 xff0c 将掩膜图像保存到O
  • 用 Python 解数独(Sudoku)

    芬兰数学家因卡拉花费3个月时间设计出的世界上迄今难度最大的数独 数独是 9 横 9 竖共有 81 个格子 xff0c 同时又分为 9 个九宫格 规则很简单 xff1a 每个空格填入 1 9 任意一个数字 xff0c 需要保证每个横排和竖排以
  • alembic 如何使用?

    在之前的数据库操作中 xff0c 我们新增一个字段是不是每次都得删除数据库表 xff0c 然后再重新将新创建的数据库表映射到数据库中 这样操作是不是很蛋疼 xff1f 是吧 xff1f 于是sqlalchemy作者拜尔为了解决这一问题 xf
  • ROS中用opencv库实现物体中心点提取

    老师搞了个很简陋的双目摄像头 xff0c 只能输出两个摄像头的图像 xff0c 所以为了提取定位物体中心坐标 xff0c 还得算个深度距离 先对两个摄像头图像处理一下 xff0c 基于阈值分割 xff0c 然后提取个轮廓 xff0c 计算个
  • linux c语言高级编程-目录操作

    目录操作总共有以下几个函数 xff1a 1 创建目录 int mkdir const char pathname mode t mode 2 删除目录 int rmdir const char pathname 3 查看目录状态 int s
  • BeagleBone Black使用(一):狗板简介

    前言 BeagleBone 与 Arduino 和 Raspberry Pi xff08 树莓派 xff09 可以说是目前应用最广泛的三大嵌入式开源平台 而 BeagleBone 在一定程度上可视为融合了 Arduino 与树莓派的优点 x
  • 慧数汽车大数据分析:车市竞争将由打造爆款向构建“产品矩阵”转型

    在车企只要完成年销量三十万辆的目标时 xff0c 只需认认真真培育出一款爆款车就足够了 xff0c 如哈弗H6 完成年销量50万辆的目标时 xff0c 只需认认真真培育出一两款爆款车就足够了 xff0c 如哈弗H6 43 哈弗H2 但为什么
  • 4.10 Python tuple元组详解

    元组 xff08 tuple xff09 是 Python 中另一个重要的序列结构 xff0c 和列表类似 xff0c 元组也是由一系列按特定顺序排序的元素组成 元组和列表 xff08 list xff09 的不同之处在于 xff1a 列表
  • 使用ROS和RealSense直接获取点云

    点云获取 Realsense获取内参创建ROS工作环境创建ROS工作包package向package中添加cpp代码catkin make编译失败失败1 使用ROS订阅节点 xff08 rgb和depth xff09 ROS包安装升级Rea
  • 集成单点登录

    随着现在的系统越来越多 xff08 OA考勤 xff0c 学生宿舍管理等等 xff09 在使用中是不是还在为一次一次的登录而烦恼 xff1f 或者忘了密码而尴尬 xff0c 现在 xff0c 有一个好东西来解决这个问题了 那就是单点登录 单
  • PID算法入门与C语言代码实现

    PID算法的入门理解以及C代码实现 在结束了自控原理的学习后 xff0c 了解到PID算法是一种万能算法 xff0c 在课设中也是经常使用到的一种算法 xff0c 所以想具体的来进行以下总结与学习 xff0c 如果有错漏的地方 xff0c
  • 【Ubuntu18.04安装px4+mavros(解决mavros报错问题)】

    Ubuntu18 04安装px4 43 mavros xff08 解决mavros报错问题 xff09 安装ros melodic重新安装gazebo9 19安装mavros安装px4 我的电脑为联想R7000P2021款 xff0c 之前
  • 嵌入式面试题3

    1 讲一下STM32时钟系统 时钟系统类似于脉搏 xff0c 控制着CPU的命脉 xff0c STM32的时钟源又不像51的时钟源那么单一 xff0c 因为STM32的MCU较为复杂 xff0c 且外设较多 xff0c 并不是所有的外设都需
  • 将 linuxmint 20.2 设置成 mac 主题

    将 linuxmint 20 2 设置成 mac 主题 1 安装Adapta Nokto主题2 安装Numix Circle图标3 安装plank4 设置主题和图标5 设置字体 使用 vmware 安装 LinuxMint20 2 并打造

随机推荐

  • [转载][paper]Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey

    文章目录 摘要 深度学习是当前人工智能崛起的核心 在计算机视觉领域 xff0c 它已经成为从自动驾驶汽车到监控和安全等各种应用的主力 虽然深度神经网络在解决复杂问题方面取得了惊人的成功 通常超出了人类的能力 xff0c 但最近的研究表明 x
  • [paper]Feature Squeezing: Detecting Adversarial Examples in Deep Neural Networks

    本文提出了两种特征压缩方法 xff1a 减少每个像素的颜色位深度使用空间平滑来减少各个像素之间的差异 特征压缩通过将与原始空间中许多不同特征向量相对应的样本合并为单个样本 xff0c 从而减少了对手可用的搜索空间 通过将DNN模型对原始输入
  • C# List集合查找删除指定数据

    C List集合查找删除指定数据 文章目录1 实体类2 操作第一个负荷条件数据3 操作所有符合条件数据4 优质源码 文章目录 1 实体类 public class FaultLevelModel public string LBWJ get
  • 【论文阅读】AM-Softmax:Additive Margin Softmax for Face Verification. 1801.05599.【损失函数设计】

    原文链接 xff1a https blog csdn net weixin 43154149 article details 122611784 文章目录 1 四个问题2 论文简介1 Introduction xff08 相关工作 xff1
  • MobaXterm连接出现 Network error: Connection timed out 问题解决

    MobaXterm连接出现 Network error Connection timed out xff1a 接前文 xff1a CentOS安装 点此查看文章 xff0c 安装之后的SSH连接 xff1a 解决思路如下 xff1a 1 检
  • 撰写论文时如何复制参考文献公式----Mathpix及Mathtype教程

    同学们好啊 xff0c 我们在写论文时常常需要使用一些复杂的公式 xff0c 自己对着敲又费时费力 xff0c 那么如何才能讲文献中或者书本上的公式复制在自己的文章中嘞 xff1f 阿阮分享两个公式神器 xff0c 配合使用效果更好哈 xf
  • 驱动及驱动开发的简单理解

    一直对驱动有着强烈的好奇心 xff0c 怎奈工作始终与其无缘 xff0c 且未来也不大可能接触驱动 因此 xff0c 今天用了一些时间 xff0c 去简单的了解了一下驱动及驱动开发 如果有错误的理解 xff0c 请予以指正 xff0c 不胜
  • Mac ping IP+端口

    MacOS中ping IP 43 端口 nc vz w 2 192 168 1 1 8080 windows下 telnet 192 168 1 1 8080
  • 对文件夹下所有灰度图片进行像素值的修改

    最近在跑UNet训练的时候 xff0c 想用自己的数据集做训练 xff0c 发现数据集无法加载进去 xff0c 对比了一下源码所使用的数据集 xff0c 发现是gt的像素值不对导致的 xff0c 为了省事就写了个修改gt像素值的小脚本 im
  • Linux操作系统-信号量

    信号量也属于一种进程间通信的机制 xff0c 与其他的进程间通信不同 xff0c 信号量不是用来传输数据的 xff0c 而是用来进程间同步与互斥 除此之外 xff0c 信号量还可以实现线程间的互斥 信号量是什么 xff1f 信号量的本质是一
  • 你应该知道的 50 个 Python 单行代码

    你应该知道的 50 个 Python 单行代码 1 字母移位词 xff1a 猜字母的个数和频次是否相同2 二进制转十进制3 转换成小写字母4 转换成大写字母5 字符串转换为字节类型6 复制文件7 快速排序8 n 个连续数之和9 赋值交换10
  • npm安装报错ETIMEOUT

    npm安装报错 npm安装报错 xff1a npm ERR code ETIMEDOUT npm ERR errno ETIMEDOUT npm ERR network request to https registry npmjs org
  • JavaScript中的异步

    一 什么叫异步 xff1f 在JS中有同步和异步两种模式 1 同步 xff08 Synchronous xff09 一般指后一个任务等待前一个任务结束 xff0c 程序的执行顺序与任务的排列顺序是一致的 2 异步 xff08 Asynchr
  • 北邮人论坛镜像

    http bbs cloud icybee cn default
  • RLock锁的使用

    try RLock lock 61 redissonClient getLock 34 ppt pos sms code lock 34 43 34 orderSmsCode 34 System out println 34 得到的锁 34
  • Ubuntu开机自动挂载SD卡到指定挂载点并将Docker默认存储路径改为SD卡

    Ubuntu开机自动挂载SD卡到指定挂载点并将Docker默认存储路径改为SD卡 查看磁盘信息查看磁盘原挂载点永久开机自动挂载分区 修改文件 etc fstab应用挂载修改docker默认存储路径 查看磁盘信息 sudo fdisk l 如
  • JS数组对象,过滤掉不要的对象

    其实本来很简单 xff0c 奈何我自己把自己绕进去了 又是觉得自己不适合干开发的一天啊 const array1 61 id null name null id null name null id 1 name 2 我需要筛出不同时为空的数
  • Hadoop权威指南

    1 Hadoop基础知识 第1章 初识Hadoop Hadoop代替配有大量硬盘的数据库来进行大规模数据分析的原因是 xff1a 传输速率 xff08 取决于硬盘的带宽 xff09 的提升远大于寻址时间 xff08 将磁头移动到特定硬盘位置
  • 创建新分支,拉取代码

    1 查看当前已存在分支 git branch 2 创建新的分支 创建一个dev分支 git checkout b dev 3 提交分支到远程仓库 git push origin dev 4 删除本地分支 git branch D dev
  • 操作系统之什么是中断?

    什么是中断 xff1f 在学习操作系统中 xff0c 经常性的会看到中断这个概念 xff0c 最典型的就是汇编代码中的int命令 用一个比较通俗的概念来说 xff0c 就是计算机会连接许多外接设备 xff0c 包括磁盘 显示器 键盘鼠标等等