能否在执行时修改中断处理程序代码?

问题描述 投票:0回答:1

这可能是一个愚蠢的问题,答案是“否”,但理论上可行吗?我想知道为什么不呢?

而且我不知道该怎么办...

interrupt interrupt-handling
1个回答
2
投票

有几种不同类型的“中断处理程序”。

第一个是硬件IRQ处理程序,是在OS加载驱动程序等时修改的。

第二个,软件中断处理程序,用于在现代OS中调用OS级服务。

那些具有硬件支持的设备(在整个计算机上或在处理器内)。>>

没有硬件支持的第三种是“信号处理程序”(在UNIX中,它基本上是OS级别的,并且与OS事件有关。

它们之间的共同概念是响应是可编程的。这个想法是,您知道您希望软件/操作系统如何响应它们,因此您添加了为它们提供服务所需的代码。从这个意义上讲,它们是“在运行时可修改的”。

但是在这些事情上有规则。首先,您不想浪费太多时间来处理它们,因为您对它们所做的任何事情都可以防止在处理它们时发生其他中断(优先级相同或较低)。 (例如,您不想在处理完一个第一个中断之前就陷入同一中断的处理之中,因为中断处理程序可以执行本来需要锁定的操作(加载和例如,增加环形队列上的当前或最后一个指针),如果重新进入该状态,则会破坏状态。)

因此,通常中断处理程序会做最少的事情,并为软件设置一个标志,以使其识别出一旦退出中断模式就需要对它进行处理。

从历史上看,DOS和其他不受保护的OS允许软件随意修改中断表。当了解中断应该如何工作的人在对它们进行编程时,这行得通,但是用它们完全弄清系统状态也很容易。这就是为什么现代的,受保护的OS通常不允许用户软件修改中断表。 (如果您以内核模式作为驱动程序运行,则可以这样做,但这仍然不是一个好主意。)

但是,UNIX允许用户软件更改其进程的信号处理程序。通常这样做是为了允许(例如)SIGHUP告诉Apache重新加载其配置文件。

修改操作系统使用的中断表会为系统上运行的所有软件修改该表。如果运行安全的操作系统的用户想要保持系统的安全性,通常这不是他们特别想要的。

© www.soinside.com 2019 - 2024. All rights reserved.