(记录学习Linux内核过程,后续还会结合代码或者别的书籍补充完善,可以先收藏)
1.中断的概念
1.1中断信号->处理器->操作系统
1.2中断本质上是一种特殊的电信号,由硬件设备发向处理器。中断可以随时随地产生,内核随时可能因为新到来的中断而被打断。
1.3不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标志。比如:来自键盘的中断就有别于来自硬盘的中断。这些中断值常被称为中断请求线(IRQ)。
1.4中断和异常的区别
异常产生的时候必须考虑与处理器时钟同步。其差异只是在于中断是由硬件而不是软件引起的。
2.中断处理程序
在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序或中断服务例程。产生中断的每个设备都有一个相应的中断处理程序。
在linux中 中断就是普普通通的C函数。
3.中断处理流程图
4.上半部与下半部的对比
我们一般把中断处理切为两个部分或者说是两半。中断处理程序是上半部---接到一个中断,他们就开始执行,但只做有严格时限的工作。能够被允许稍后完成的工作会被推迟到下半部去。此后,在合适的时机,下半部会被开中断执行。linux提供了实现下半部的各种机制。
5.注册中断处理程序
6.编写中断处理程序
7.中断上下文
当执行一个中断处理程序时,内核处于中断上下文中。
中断上下文具有较为严格的时间限制,因为它打断了其他代码。中断上下文中的代码应当迅速,简洁,尽量不要使用循环去处理繁重的工作。永远牢记:中断处理程序打断了其他的代码(甚至可能是打断了在其他中断线上的另一中断处理程序)。正是这种异步执行的特性,所以尽量把工作从中断处理程序中分离出来,放在下半部执行,因为下半部可以在更合适的时间运行。
中断处理程序具有自己的栈。
8./proc/interrus
procfs是个虚拟文件系统,它只存在于内核内存,一般安装在/proc目录。
/proc/interrus文件存放的是系统中与中断相关的系统信息。
9.中断控制
Linux内核提供了一组接口用于操作机器上的中断状态,这些接口为我们提供了能够禁止当前处理器的中断系统,或者屏蔽掉整个机器的一条中断线的能力。
一般来说,控制中断系统的原因归根到底是需要提供同步。通过禁止中断,可以确保某个中断处理程序不会抢占当前的代码也可以禁止内核抢占,但并不能阻止来自其他处理器的并发访问。
9.1禁止和激活中断
9.2禁止指定中断线
9.3中断系统的状态