首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86处理器中断标志的实际使用有哪些例子?

问x86处理器中断标志的实际使用有哪些例子?
EN

Stack Overflow用户
提问于 2015-08-18 23:33:21
回答 2查看 635关注 0票数 1

维基百科说,中断标志决定了CPU是否会处理可掩蔽的硬件中断。如果将标志设置为1,则如果清除忽略,将处理可掩蔽硬件中断。

我很难理解什么是可掩蔽的还是不可掩盖的中断。

  1. IF标志的实际用途是什么?
  2. 什么是可掩蔽/不可掩盖的中断,有什么区别?

我刚刚开始钻研处理器的汇编语言和内部工作,请给我5岁的简单英语。当然,如果可能的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-19 00:42:21

一个典型的场景,例如,在DOS编程中,在修改中断处理程序表之前禁用中断,并在完成时重新启用中断。

如果在修改表时允许发生中断,则不知道是否要使用旧的或新的处理程序地址(或每种地址的一半)。

您还可以在中断处理程序本身中禁用中断,以防止在为挂起的中断服务时再次调用中断。

非屏蔽中断通常是发生在中断标志当前状态下发生的中断--我不记得曾经处理过这些中断。

票数 4
EN

Stack Overflow用户

发布于 2015-08-19 03:27:59

如果你正在学习asm来加速内部循环和其他东西,你不需要担心它。你可以也应该把中断管理留给操作系统.(cli / sti当然是特权指令,只对内核起作用。)

Linux设备驱动程序(第二版),第九章是关于中断处理,并提到使用cli/sti。

在SMP前的日子里,禁用中断作为一种简单的蛮力替代锁定。使用多核CPU,即使在代码运行的核心上禁用中断,另一个核心也可能触及您的数据结构,因此它的用处要小得多。现在很少这么做了。

有时,禁用中断是必要的。例如,当您做一些暂时没有指向有效内存的堆栈指针的操作时。(nvm ),mov ss, reg隐式地禁用中断,直到执行以下指令。因此,您可以更改堆栈段,然后在不使用cli/sti的情况下更改堆栈指针。这在64位代码中是无关的,其中段寄存器基本上是未使用的。)

另一个可能的例子是在修改其他关键数据结构时,CPU使用这些结构来决定中断发生时该做什么。(全局描述符表和/或中断描述符表)。尽管IDK提到了这些,但是如果它们是与其他CPU共享的,那么您就需要保持它们始终有效。我想,不久前我读过一个例子,在对描述符表或什么的一些连接更改期间,您需要禁用中断,但我不记得是什么情况。

我并不是i386在内核空间方面的专家,所以我不会在对案件的这种解释中发现在使用“任务门”时需要禁用中断,不管这些是什么。

这个文档看起来像是一个低级教程系列的一部分:http://www.osdever.net/bkerndev/Docs/gdt.htm。如果您想深入了解在x86的引擎盖下发生的所有疯狂的事情,您可能会发现它很有趣。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32084253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档