gpt4 book ai didi

windows - 在 Windows 中禁用中断

转载 作者:可可西里 更新时间:2023-11-01 10:38:22 26 4
gpt4 key购买 nike

我需要以原子方式执行一段代码。我想唯一的方法是禁用中断,我怎么能在 Windows 下做到这一点?我正在搜索允许我执行此操作的 Windows 操作系统,因此我不会专注于特定的 Windows。即使是 Windows CE 也不错。

斯特凡诺

最佳答案

用户编写的代码完全禁用中断的概念几乎违背了 Windows 的一些基本设计假设。

对于初学者来说,您不能从用户模式应用程序中禁用中断。 (这是一个特权指令。)

在内核模式下,您可以使用 IRQL 来防止大多数抢占(但不是全部)。这是在 Windows 下执行不可抢占的硬件操作的“标准”方式。我怀疑这就是您真正想要的。如果您可以让您的代码在更高级别的 IRQL 范围内运行,您应该没问题。 See this link for info on IRQL.请记住,你跑得越高,就会有越多的东西坏掉。期望性能计数器变得不准确,设备缓冲区溢出等。

作为后门,您可以将原始汇编 CLI/STI 指令嵌入到内核驱动程序中,但这可能会破坏很多东西,除非您的代码在非常短的时间内禁用中断。如果没有,请期待蓝屏。此外,我相信 AMD64 编译器会反对您尝试进行内联汇编。

我强烈建议您放弃原子性要求。

一些其他选项:

  • 启动到您自己的环境以运行您的测试(类似于 Memtest86)。
  • 考虑使用父 RTOS 内核。有现成的“Windows RTOS”解决方案,它们将 Windows 作为父 RTOS 的子进程运行。现有的 Windows 应用程序和驱动程序运行良好,时间关键/原子任务是为 RTOS 编写的。空间中最受欢迎的播放器是 RTX from IntervalZero .

此外,关于 x86,还有一个肮脏的小 secret 您应该知道:您在 x86 平台上编写的几乎所有内容都不能保证是原子的,即使您用汇编编写 RTOS 也是如此。即使您执行 CLI/STI,系统管理中断也会中断您的代码。

关于windows - 在 Windows 中禁用中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com