File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ 1 . 为什么要学习内核:你对技术追求、大厂面试需求、更好地做应用层开发
2+ 2 . 内核我们要学习内容:内核管理、进程管理、文件系统、操作系统调用、网络协议栈、虚拟化等等。
3+
4+ ## 1、异常及非屏蔽中断
5+
6+ - 异常就是CPU内核出现的中断,在CPU执行特定指令时出现非法情况。非屏蔽中断就是计算机内部硬件出错时引起的异常情况。
7+
8+ ![ img] ( https://pic1.zhimg.com/80/v2-3ec56aabdcdee71a277a7fe5512b1450_720w.webp )
9+
10+ - Intel把非屏蔽中断作为异常的一种来处理。IntelX86处理器发布大约20种异常。每种异常都会由专门的异常处理程序来处理操作,它们通常把一个UNIX信号发送到引起异常的进程。具体异常处理程序发送的信号如下:
11+
12+ ![ img] ( https://pic1.zhimg.com/80/v2-683b38bdf0caa852b87c550e04329fa8_720w.webp )
13+
14+ ## 2、中断请求初始化分析
15+
16+ - 由于计算机硬件的限制,很多外部设备不共享中断线,例如,PC配置可以把同一条中断线分配给网卡或图形卡。在Linux系统设计中,专门为每个中断请求IRQ设置一个队列,称为中断请求队列。
17+ - 中断线、中断请求(IRQ)号及中断向量它们之间关系:中断线是中断请求的一种物理描述,逻辑上对应一个中断请求号(中断号),第n个中断号(IRQn)的缺少中向量是n+32。
18+
19+ ## 3、 IRQ队列数据结构
20+
21+ - 在256个中断向量中,除32个分配给异常以外,还有224个作为中断向量。对于第个IRQ,Linux都用一个irq_desc_t数据结构来描述,我们就把它叫IRQ描述符,224个IRQ形成一个数组irq_desc[ ] ,具体在内核源码分析如下:
22+
23+ ![ img] ( https://pic2.zhimg.com/80/v2-542e4ea3362bbad570e87e4ff8cf62e1_720w.webp )
24+
25+ ### 3.1中断服务例程描述符irqaction
26+
27+ - 在IRQ描述符中我们看到指针action的结构为irqaction,它是为多个设备能共享一条中断线而设置的一个数据结构。具体内核源码分析如下:
28+
29+ ![ img] ( https://pic3.zhimg.com/80/v2-ebe9e5c3b5334cbb7b4f5bbdf8b5f606_720w.webp )
30+
31+ ### 3.2中断服务例程
32+
33+ - 具体来讲中断处理程序相当于某个中断向量的总处理程序,每个中断服务例程都有相同的参数:
34+
35+ 1 . IRQ:中断号
36+ 2 . dev_id:设备标识符,其类型为void*
37+ 3 . regs:指向内核堆栈区的指针。
38+
39+ ### 3.3中断请求队列的初始化
40+
41+ - 在IDT表初始化完成之初,每个中断服务队列还为空。即使打开中断且某个外设中断真的发生,也得不到实际服务,因为CPU虽然通过中断门进入某个中断向量的总处理程序,具体中断服务例程还没有挂入中断请求队列,因此在设备驱动程序的初始化阶段,必须通过request_irq()函数将对应的中断服务例程挂入中断请求队列。具体内核源码如下:
42+
43+ ![ img] ( https://pic2.zhimg.com/80/v2-78a5cacea36f33c9539e30d6d1167031_720w.webp )
44+
45+ - 真正对中断请求队列进行初始化的函数如下:
46+
47+ ![ img] ( https://pic3.zhimg.com/80/v2-7d3ed5f42b4ee5d4aeac7cc5e977a946_720w.webp )
48+
49+ ------
50+
51+ 版权声明:本文为知乎博主「Linux内核库」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 出处链接及本声明。
52+
53+ 原文链接:https://zhuanlan.zhihu.com/p/475244586
You can’t perform that action at this time.
0 commit comments