图解|Linux内核低精度定时器原理

💡 原文中文,约7000字,阅读约需17分钟。
📝

内容提要

在Linux操作系统中,定时器扮演关键角色,用于执行延迟任务。Linux内核有高精度和低精度两种定时器。低精度定时器基于时钟中断实现,使用时间轮数据结构快速查找到期定时器。定时器根据超时时间存放在不同级别的数组中,每个数组有一个到期指针。定时器在时钟中断中执行,到期指针移动到下一个位置。内核使用timer_list对象表示定时器,通过add_timer函数添加定时器,run_timer_list函数执行到期定时器。

🎯

关键要点

  • 在Linux操作系统中,定时器用于执行延迟任务。
  • Linux内核有高精度和低精度两种定时器,低精度定时器基于时钟中断实现。
  • 低精度定时器的精度由HZ值决定,通常设置为每秒1000次。
  • 高精度定时器的精度更高,但运行成本也更高,因此低精度定时器更经济实用。
  • 低精度定时器使用时间轮数据结构快速查找到期定时器,时间复杂度为log(1)。
  • 时间轮通过数组保存定时器,索引为定时器的过期时间。
  • 内核使用层级概念减少数组占用的内存空间,将超时时间划分为5个等级。
  • 每个级别的数组存放不同范围的定时器,超时时间越小,存放的数组层级越小。
  • 内核通过到期指针选择到期的定时器来执行,执行完后指针移动到下一个位置。
  • 内核使用timer_list对象表示定时器,通过add_timer函数添加定时器,run_timer_list函数执行到期定时器。
➡️

继续阅读