分类: LINUX
2014-11-21 15:55:48
(3.10代码)
1、时钟中断初始化相关流程:
start_kernel
late_time_init
x86_late_time_init
x86_init.timers.timer_init()==hpet_time_init
setup_default_timer_irq
setup_irq(0, &irq0)
点击(此处)折叠或打开
点击(此处)折叠或打开
timer_interrupt->
tick_nohz_handler->
tick_sched_do_timer->
tick_do_update_jiffies64
3、高精度时钟和nohz模式切换流程:
系统刚启动时都是用的周期时钟,当第一个定时器到期,执行到定时器软中断中时,才根据硬件环境和内核配置,来切换至相应的时钟源和模式(高精度时钟或nohz)。如果当前时钟模式切换至one-shot模式,同时enable了高精度时钟,则将时钟源切换至高精度时钟;如果当前时钟模式切换至one-shot模式,但没有enable高精度时钟,则切换至nohz模式
run_timer_softirq
hrtimer_run_pending
tick_check_oneshot_change
tick_nohz_switch_to_nohz
tick_switch_to_oneshot(tick_nohz_handler) //切换只nohz模式,并设置时钟事件的处理函数为tick_nohz_handler
hrtimer_switch_to_hres //切换至高精度时钟
tick_init_highres
tick_switch_to_oneshot(hrtimer_interrupt)//切换只高精度时钟模式,并设置时钟事件的处理函数为hrtimer_interrupt