目标:
初步认识:干啥的,从图看出组成部分,说清楚最简单的流程
补充细节:整理成表格的知识(或许我会看手册把寄存器也贴出来)
凝练关键问题与重要知识(或许是总结,不一定能凝练出重点,或许有案例,看我死没死)
Linux系统下CPU需要解决的问题:
1.如何获取外设中断,私有中断,软件中断(可能我会讨论这些中断的必要性),以及中断之间如何处理
2.获得中断后,如何执行处理函数
中断使能与获取:
GIC获取外设的各种中断以及软件中断,分发给处理器,这里涉及到中断优先级,仲裁器(GIC_D),接口器(GIC_C),通过接口分给处理器。
、
这里涉及到几个问题,外设中断使能,知道是哪个中断,清楚中断。
GIC获取外设的各种中断以及软件中断,分发给处理器,这里涉及到中断优先级,仲裁器(GIC_D),接口器(GIC_C)

中断处理:
为了平衡中断的实时响应性(需要快速处理)和复杂性(可能需要较长时间处理、甚至访问可能睡眠的资源),Linux 将中断处理分成了两个部分:
中断处理的“上半部”
硬件中断发生时,CPU 立即从当前模式(通常是用户模式或 SVC 模式)切换到 IRQ 模式,并执行注册在该中断号上的“上半部”函数,期间禁用中断。
中断处理的“下半部”
通常在 SVC 模式 (内核态) 下执行。虽然仍在内核态,但它不再处于严格的中断上下文。在执行下半部时,中断通常是再次被允许的,并且下半部可以睡眠/阻塞,通常以tasklet。
Linux不用FIQ,只用到了IRQ,在IRQ模式记录中断,SVC模式处理。

中断屏蔽:INTMSK
INTPND: 最终发送给 ARM CPU 的中断信号,有且只有一个
INTMOD:配置中断源是 IRQ 还是 FIQ。

如何获取到中断处理:
中断向量表:
计算公式:IDT基地址 + (中断向量号 × 每个描述符的大小)