中断处理程序是不会重入的,当中断发生时,所有处理器上同一中断线上的其它中断被禁止,绝不会出现同一中断线的嵌套中断。。。
而其它中断线则是打开的,能被处理的。。
这些准则,极大的简化了中断处理程序的编写。。
当内核接受到一个中断后,将依次调用在该中断线上注册的每一个处理程序(从这一点看,一个中断可能会有很多中断处理程序要执行。。)
每一个处理程序必须知道它是否与这一中断相关,因此它要去检测与自己对应的硬件的状态寄存器以确定是否相关,若不相关,立即退出。。。
RTC是一个从系统定时器中独立出来的设备,用于设置系统时钟,提供报警器或周期性的定时器。。
系统时钟的设置,一般只需要向寄存器或I/O地址写入时间即可
而报警器和定时器则要依靠中断来实现,中断发生时,定时器或报警器就会启动。。
自旋锁spin_lock用的比较多,主要是防止一些变量在SMP机器中被其它处理器访问。。
中断上下文,不允许睡眠,与进程没有什么关系,但会共享中断进程的内核栈(2 pages)。。。
中断部分还剩下
(1)linux中断处理系统的实现
(2)linux虚拟系统目录/proc/interrupts记录中断相关的各种统计信息
(3)中断控制相关系统调用,<asm/system.h>,<asm/irq.h>
OVER!!!
一直想研究下linux内核中的并发,同步机制,下一节看看。。