// 高分辨率下的定时器软中断
// 当增加一个hrtimer到rbtree中后,会raise高分辨率定时器软中断
// 函数任务:
// 1.关中断下,运行所有hrtimer
// 注:
// 在hrtimers_init中,open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
1.1 static void run_hrtimer_softirq(struct softirq_action *h)
{
//遍历运行所有到期的hrtimer
hrtimer_peek_ahead_timers();
}
// 遍历运行hrtimer
// 函数任务:
// 1.关中断
// 2.运行hrtimer
// 调用路径:run_hrtimer_softirq->hrtimer_peek_ahead_timers
1.2 void hrtimer_peek_ahead_timers(void)
{
unsigned long flags;
//关中断
local_irq_save(flags);
hrtimer_interrupt(&__get_cpu_var(tick_cpu_device)->evtdev);
local_irq_restore(flags);
}
// 高分辨率tick device事件处理函数
// 遍历执行本cpu上的hrtimer
// 调用路径:
// 1.run_hrtimer_softirq->....->hrtimer_interrupt 软中断路径。
// 2.当激活高分辨率模式时,安装此函数作为tick device的事件处理函数。
// 函数任务:
// 1.遍历时钟基础
// 1.1 运行到期的hrtimer
// 2.如果处理完所有hrtimer,关闭时钟事件设备,退出
// 3.重复步骤1,最多遍历3次
// 4.更新统计信息
// 4.1 cpu_
时间子系统7_高分辨率定时器处理
最新推荐文章于 2023-02-02 11:06:51 发布
本文详细介绍了Linux内核中高分辨率定时器的处理流程,包括软中断`run_hrtimer_softirq`、遍历并运行到期的`hrtimer_peek_ahead_timers`、中断处理函数`hrtimer_interrupt`以及如何运行高分辨率定时器的`hrtimer_run_queues`。这些函数在处理和调度高精度定时器方面起到关键作用。
摘要由CSDN通过智能技术生成