中断屏蔽:为什么?

2023-12-30

我正在阅读有关中断的内容。可以通过特殊的中断屏蔽来暂停非关键中断。这称为中断屏蔽。我不知道的是您何时/为什么可能想要或需要暂时中止中断?可能是信号量,或者在多处理器环境中编程?


当操作系统准备运行自己的“让我们编排世界”代码时,它就会这样做。

例如,在某些时候操作系统线程调度程序具有控制权。它会准备处理器寄存器以及在让线程运行之前需要完成的所有其他操作,以便为该进程和线程设置环境。然后,在让该线程运行之前,它会设置一个计时器中断,以便在该线程占用 CPU 的时间结束后引发该中断。

经过该时间段(量子)后,将引发中断,操作系统调度程序将再次获得控制权。它必须弄清楚下一步需要做什么。为此,它需要保存 CPU 寄存器的状态,以便知道如何消除其执行代码的副作用。如果在保存状态时因任何原因(例如某些异步 I/O 完成)引发另一个中断,这将使操作系统处于其世界处于以下状态:not处于有效状态(实际上,保存状态需要是原子操作)。

为了避免陷入这种情况,操作系统内核会在执行任何需要原子操作的此类操作时禁用中断。在完成所需的操作并且系统再次处于已知状态后,它会重新启用中断。

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

中断屏蔽:为什么? 的相关文章

  • python:获取上两层目录

    好吧 我不知道模块在哪里x是 但我知道我需要向上两层目录的路径 那么 有没有更优雅的方法 import os two up os path dirname os path dirname file 欢迎提供适用于 Python 2 和 3
  • 为什么我的空循环在 Intel Skylake CPU 上作为函数调用时运行速度是原来的两倍?

    我正在运行一些测试来比较 C 和 Java 并遇到了一些有趣的事情 在 main 调用的函数中 而不是在 main 本身中 运行具有优化级别 1 O1 的完全相同的基准代码 导致性能大约翻倍 我正在打印 test t 的大小 以毫无疑问地验
  • 确定分区属于什么文件系统

    操作系统如何知道分区正在使用什么文件系统 换句话说 FAT16 32 NTFS ext2 3等如何区分 如果您在 Windows 上使用 Win32 API 则可以调用 GetVolumeInformation http msdn micr
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • STM32F4 板上的 SPI 从机设置

    我正在尝试通过主从配置中的 SPI 在两个 STM32F4 发现板之间进行通信 我已经有了主设备的代码 但我对需要对从设备的 SPI 初始化进行的更改感到有点困惑 我还想在主机发送数据时实现中断 而不是让从机一直轮询 RXNE 寄存器 但是
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • 何时可以重用avx指令中的源寄存器

    在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用 例如 我想使用vgatherdps该指令消耗两个 ymm 寄存器 其中之一是位移索引 我意识到vgatherdps由于数据的局部性较差 因此需要花费大量时间来收集 位移索引寄存器
  • 识别操作系统

    我在 Intel 编译器上的 Fortran 90 代码取决于它运行的操作系统 例如 if OS win7 then do X else if OS linux then do y end if 我如何以编程方式执行此操作 您可以使用预处理
  • ARM Cortex-M3 启动代码

    我试图了解 STM32 微控制器的 Keil realview v4 附带的初始化代码是如何工作的 具体来说 我试图了解堆栈是如何初始化的 In the 文档 http infocenter arm com help index jsp t
  • java替代Thread.stop()来中断特定调用

    我正在寻找一种方法来告诉这个调用 大约需要 20 120 秒 final Area image final AffineTransform transform new AffineTransform transform scale imag
  • 32 位应用程序在 64 位操作系统上运行得更快还是更慢? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有什么工具可以了解 Windows 中正在运行的进程的布局(段)?

    我一直很好奇 该进程在内存中到底是什么样子的 其中有哪些不同的部分 部分 程序 在磁盘上 和进程 在内存中 到底是如何相关的 我之前的问题 有关可执行程序 进程 的内存布局的更多信息 https stackoverflow com ques
  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • delphi定时器比定时器服务中断例程更快

    大家好 我被要求为某人维护一个基于 Delphi 5 的程序 该程序使用一个计时器对象每 50 毫秒计时一次 并且在每次计时结束时运行单线程代码块 我只是想知道 如果执行这段代码所花费的时间比计时器滴答间隔长 会发生什么 这会很糟糕吗 例如
  • 使用 Intel xHC 执行启用插槽命令后,如何确定 USB 设备连接在哪个根集线器端口上?

    我正在一个使用 UEFI 启动的小型业余爱好操作系统中为英特尔 xHC 编写一个小型驱动程序 重置所有根集线器端口后 我收到 2 个端口状态更改事件 这是因为我要求 QEMU 在命令行中模拟 USB 键盘和 USB 鼠标 每个设备的一个端口
  • 制作一个“任意键”可中断的 Python 定时器

    我正在尝试制作一个简单的计时器 它会一直计时 直到被键盘输入中断 现在我正在使用 CTRL C 来停止计时器 但我想做一些更简单的事情 例如按空格或 Enter 或 任意键 我听说这可以通过线程模块来完成 但经过几次尝试后 我显然不知道我在
  • 在Python中使用子文件夹的名称为每个子文件夹创建空文件

    如果我的文件夹结构如下 folder sub1 sub1 1 sub1 sub1 2 sub1 sub1 3 sub2 sub2 1 sub2 sub2 2 sub2 sub2 3 我想让每个子文件夹的文件使用子文件夹的名称 我怎样才能用P
  • 如何查看网站浏览者的操作系统?

    我运行的是 Ubuntu 8 04 最近在访问网站时收到以下错误 请使用运行 Windows 98 2000 Me NT 或 XP 的计算机返回 www site com 网站如何知道我正在运行哪个操作系统 是仅通过 javascript

随机推荐

  • Selenium RC:“等待窗口'null'本地帧'null'”

    我在这里完全不知所措 试图运行一个最小的 Selenium RC 风格测试 网上很多用户都描述了我遇到的问题 但没有一个widely不同的解决方案解决了我的问题 发生的情况是 Firefox 将打开 但在我看来是一个空的配置文件 因为它打开
  • 如何跟踪 Mac OS X 上的文件位置?

    很好的功能之一BBEdit http en wikipedia org wiki BBEdit这就是它跟踪文件的方式 无论这些文件发生什么情况 我正在开发的应用程序需要跟踪用户拥有的许多文件的位置 用户可以移动或删除这些文件 即使位置发生更
  • 检测按键是否被按下一次

    I wanted to do an action as soon as my f key is pressed The problem is that it spams the action import win32api while Tr
  • 如何在 PHPmyadmin 中禁用单元格单击上的内联编辑

    在 phpmyadmin 中 当我浏览表格内容时 单击某个单元格将启动此单元格数据编辑器 如何避免这种情况 我没有找到任何配置选项 从 phpMyAdmin 4 0 0 开始 double click现在是单元格编辑的新默认值 如果需要 您
  • 使类泛型有什么意义?

    当你有一个方法时 我知道将其声明为泛型是有意义的 这样我就可以采用泛型参数 像这样 public
  • Ubuntu 12.04 R install.packages() 不起作用。没有警告,不安装

    我正在运行 ubuntu 12 04 实例 并加载了 R3 0 2 但无法使用 install packages 来安装软件包 它下载了文件 但似乎没有安装它们 我在这里错过了什么吗 我在运行 ubuntu R 实例之前从未遇到过这个问题
  • go语言中的Unix域套接字名称

    The netgo中的包提供了这个功能 func ResolveUnixAddr net addr string UnixAddr error 字符串参数net给出网络名称 unix unixgram 或 unixpacket 我猜网络名称
  • 使用gradle将features.xml部署到nexus?

    我正在尝试创建一个 gradle 构建文件以将 features xml 文件部署到本地 Nexus maven 存储库中 除了直接使用 maven 之外 我还没有找到任何关于如何执行此操作的示例 有人有如何使用 gradle 执行此操作的
  • Python 类型:类型化字典或 defaultdict 扩展类

    我有一段旧的 python 代码 可以解析格式严格的文本文件 存储用于本地化的字符串 由于结构是分层的 并且某些元素可能存在也可能不存在 因此程序使用嵌套defaultdicts 来表示它 就像是 terms defaultdict lam
  • Rails 为所有命令行方法(例如生成或 rake)提供 NameError

    我是 Rails 的初学者 过去几天我一直试图找出这里到底出了什么问题 但完全没有运气 我到处寻找 但一无所获 基本上 当我运行任何类型的命令行方法时 我都会收到 NameError 我也尝试过在不同的项目目录中运行它 并且曾经有效 看来铁
  • User Based CF 或 Item Based CF 需要多少数据才能提供推荐?

    User CF Item CF需要多少数据才能给出推荐 我手动创建了一个小数据集 因此我可以很好地理解该算法是如何工作的 我发现对于我创建的小数据集 Slope One可以给出推荐 User CF或Item CF不能给出推荐 其背后的原因是
  • HTML id 属性中的冒号意味着什么?

    我见过这样的 ID 属性 HTML 代码 id t1 c3 谁可以给我解释一下这个 冒号的目的是什么 ID 属性中允许使用冒号 但没有特殊意义 实际上并不建议使用它们 因为它们有时会导致问题 例如与 jQuery 或 CSS 一起使用时 冒
  • 更新 EndDate 导致“更新列表项时使用了无效数据”

    这是完整的错误 Invalid data has been used to update the list item The field you are trying to update may be read only 我基本上尝试更新
  • 通过公共变量合并两个数据集,在 R 中给出 0 个观察值

    我有两个数据集 A 和 B A 和 B 都有不同的变量 但有两个公共变量 即 ID 和日期 我想使用 ID 和日期合并两者 但是 当我使用代码合并它们时 C lt merge A B by date ID 输出是具有 0 个观测值的 C 数
  • 无法读取 Windbg 中的故障转储

    我的程序中出现了 stackoverflow 异常 该异常可能源自第三方库 microsoft sharepoint client runtime dll Using adplus为了创建故障转储 我面临的问题是 当我在 Windbg 中打
  • 如何使用实体数据模型将图像从图像控件插入WPF到SQL数据库

    我正在创建一个应用程序来将学生信息保存到 SQL 中 我想知道如何使用实体框架将 WPF 中的图像控件中的图像插入 SQL 数据库 我创建了将图像上传到图像控件的事件 现在我需要使用实体框架将其保存到 SQL 数据库 图像加载按钮代码 pr
  • 刷新物化视图不包括添加的列

    来自manual http www postgresql org docs 9 3 static sql creatematerializedview html CREATE MATERIALIZED VIEW 与 CREATE TABLE
  • Bootstrap 3:当导航栏折叠或展开时捕获事件

    使用引导程序 3 当导航栏折叠 展开时是否可以捕获 我无法为此找到一个活动 Edit 我的徽标高度为 90 像素 因此导航栏高度必须约为 110 像素 为了将菜单链接放置在靠近主要内容的位置 我将顶部边距设置为 60 像素 当它折叠时 我希
  • main.cpp:1:10: 致命错误: opencv2/highgui.hpp: 没有这样的文件或目录

    我已经在ubuntu 18 04中安装了opencv并且安装成功 我尝试过这个命令 pkg config modversion opencv它的输出是 4 0 1 开发版之后我尝试运行 C 代码 include
  • 中断屏蔽:为什么?

    我正在阅读有关中断的内容 可以通过特殊的中断屏蔽来暂停非关键中断 这称为中断屏蔽 我不知道的是您何时 为什么可能想要或需要暂时中止中断 可能是信号量 或者在多处理器环境中编程 当操作系统准备运行自己的 让我们编排世界 代码时 它就会这样做