【发布时间】:2020-01-14 21:13:23
【问题描述】:
在 Linux x86 上,我可以发送中断(例如,由计时器或其他机制触发),这些中断将由在用户模式下运行的代码处理吗?
假设答案是肯定的(几乎可以肯定是肯定的,参见例如timer_create),是否仅在用户模式下发生此中断,或者是否涉及一些内核转换(例如,中断最初由内核处理,然后将信号发送给用户进程)。
【问题讨论】:
-
您总是可以编写无效代码,即尝试执行会产生某种类型异常的无效操作的代码,然后您可以在用户模式下以 Linux 信号的形式捕获这些异常。我不确定这是否是您所说的“发送中断”。在调用信号处理程序之前,将执行大量代码。 AFAIK,Linux 中没有内置机制允许直接连接您自己的(用户模式)中断处理程序或在 IDT 中定义您自己的条目,但我认为可以通过一些手动操作来完成。
-
在 Linux 中,中断处理程序都在 ring 0 中运行。内核会在用户模式内发出一个信号,以便可以调用适当的用户模式处理程序。
标签: linux x86 signals interrupt