http://www.enicn.com/uploads/soft/server_2009022520.doc
Nucleus实时操作系统分析报告
======================================================================
1 快中断与慢中断
Linux中,可以区分快中断和慢中断两类中断事件。前者用于时间短,简单的中断处理任务,后者处理常见中断,需要时间较长并且处理复杂。两者的区别:1 处理慢中断之前需要保存所有寄存器中的内容,而快中断最初保存现场时,仅要保存常规C函数修改的寄存器。2 慢中断处理时,通常不屏蔽其他中断信号,而快中断处理时会屏蔽其他中断。3 慢中断处理完毕后,通常不立即返回被中断的进程,而是进入调度程序重新进行调度,而快中断处理完毕,通常恢复现场返回被中断的进程继续执行。
为了尽快缩短快中断处理时间,引入底半处理的概念。
2 底半处理
发生中断的时候,系统负责把中断发送到相应的设备驱动程序去处理。设备驱动程序都是核心态代码,通常在运行这些代码时,要关闭中断,不能进行其他工作,这段时间里资源利用效率很低。为了缩短屏蔽中断的时间,设备驱动程序用最快的速度在核心态下完成必要的处理,而处理中断所需要的其他大部分耗时的工作则留在中断处理例程之外,由系统安排运作时机。
Nuleus PLUS中断处理
中断发生的时候,Nucleus挂起当前的任务,处理器的控制权转交给中断处理程序(ISR)。ISR要使用系统功能,就不可避免的要使用到公共资源,而这些资源是需要保护的,保护的办法之一就是在运行ISR的时候屏蔽其它中断,但对于实时系统来说,这显然不是一个好办法,为此,Nucleus通过把应用程序的ISR区分为低级和高级中断处理程序。
低级中断
低级中断服务子程序(LISR)和普通的ISR一样运行在当前的堆栈空间,LISR运行之前系统需要保护处理器现场,运行结束之后恢复现场,但是对于LISR,只有小部分的Nucleus PLUS服务可以被使用,要使用更多的系统服务,就需要使用高级中断服务子程序(HISR)。
高级中断
高级中断服务子程序(HISR)支持动态创建和删除,每个HISR有自己的堆栈空间和控制块,HISR必须在LISR激活之前被创建。
HISR有三个优先级,低优先级的HISR可以被高优先级的HISR抢获处理器。
======================================================================
LISR和HISR是针对OS中断处理不同层次需要而设计的,LISR在硬件中断时立即从Vector表产生,对其执行时间必须要求相当苛刻,所以一般是什么都事都不干,仅仅做一个中断触发标记(当然也有例外,对于有些时间要求更高的FIQ的ISR,必须使其放在LISR处理)。而HISR其实是一个独立于TASK之外而比TASK高级的服务例程,它进行真正的中断处理,因此,它会在LISR完的下一次OS线程调度时触发出来,但是,HISR对执行时间要求也很短。个人感觉NUCLEUS的LISR/HISR概念是有些类似于LINUX里所谓Top Half/Bottom Half中断处理的方式。
http://blog.sina.com.cn/s/blog_4cd5d2bb0100hue2.html
http://blog.csdn.net/yuucyf/article/details/7108590