Linux源代码—中断

xiaoxiao2021-02-27  271

(本文部分图文参考了《Linux内核源代码情景分析》) 本文主要讨论中断基本过程。主要内容如下: 1、前期知识介绍:中断向量表; 2、中断响应过程; 3、系统调用;

1、中断向量表 1.1 1.2 CPU中一共有四种门:任务门,中断门,陷阱门,调用门 1.2.1 任务门 1.2.2 除任务门外,其他三种门结构基本相同,均为64位。与任务门不同的是:在任务门中不需要使用段内位移,因为任务门并不指向某一个子程序的入口,TSS本身是作为一个段来对待的,而中断门、陷阱门和调用门则都是要指向一个子程序,所以必须结合使用段选择码和段内位移。

1.2.3 保护模式下中断机制采取中断门或陷阱门时的结构: 2 中断响应过程 此时,随CPU返回do_IEQ(): { … /* 结束后,会返回ret_from_intr函数. */ return 1; } 到 现在,从逻辑的角度说对中断请求的服务似乎已经完毕,可以返回了。 可是 Linux 内核在这里有个特殊的考虑,这就是所谓 softirq,即“ (在时间上)软性的中断请求”,以前称为“ bottom half”。 在 Linux 中,设备驱动程序的设计人员可以将中断服务分成两“部分”。第一部分是必须立即执行,一般是在关中断条件下执行的,并且必须是对每次请求都单独执行的。而另一部分,即“后半” 部分,是可以稍后在开中断条件下执行的,并且往往可以将若干次中断服务程序中剩下来的部分合并起来执行。这些操作往往是比较费时的,因而不适宜在关中断条件下执行,或者不适宜一次占据 CPU 时间太长而影响对其他中断请求的服务。这就是所谓的“后半”,在内核代码中常简称为 bh。 执行 bh 的机制是内核中的一项“基础设施”,此处不多介绍,只需要知道有这部分即可。在 do_softirq()中执行完相关的 bh 函数(如果有的话)以后,就会从 do_IRQ()返回到 ret_from_intr函数; 在ret_from_intr函数中:

00273: ENTRY(ret_from_intr) 00274: GET_CURRENT(
转载请注明原文地址: https://www.6miu.com/read-10834.html

最新回复(0)