在Linux单处理器系统中,计时器中断是否独立于系统处于内核模式或用户模式?
当系统处于内核模式时,计时器中断是否有不同的行为?
当系统处于内核模式时,计时器中断是否有不同的行为?
timer_interrupt
实现的中断服务例程(ISR)。当定时器中断发生时,此ISR立即执行,无论当前执行上下文如何。但是,此硬件中断与其他硬件中断不同之处在于,当它返回时,处理过程不会返回到先前的上下文。相反,进入调度程序。linux/timer.h
设置的类型)已过期,在时钟定时器中断结束之前设置。大致顺序如下:[arch dependent]:timer_interrupt( )
kernel/time/tick-common.c:tick_handle_periodic( )
kernel/time/tick-common.c:tick_periodic( )
kernel/timer.c:update_process_times( )
kernel/timer.c:run_local_timers( )
kernel/softirq.c:raise_softirq(TIMER_SOFTIRQ)
timer_interrupt
处理程序为tick_handle_periodic
和TIMER_SOFTIRQ
的初始化。调用raise_softirq(TIMER_SOFTIRQ)
会生成一个软件中断,该中断会立即得到服务。中断服务程序运行动态定时器队列。计时器处理程序在软中断上下文中运行,启用硬件中断。当中断服务程序返回时,调度程序被调用。这意味着,如果有很多计时器设置,则运行队列中的下一个进程将被延迟。如果有丢失的滴答声,则计时器处理程序的执行可能会延迟,但是延迟不取决于在运行时钟定时器中断之前的执行上下文。参考文献:软件中断和实时性