linux内核编程--5内核定时器

1.     用户态定时器

Linux用户态定时器想必大家都有所了解,以下只列出相关API,如:

1)      alarm:超时产生SIGALRM信号的那种;

2)      间隔定时器:getitimer、setitimer;

3)      timerfd系列:timerfd_create、timerfd_settime、timerfd_gettime;

4)      POSIX per-process timer(POSIX每CPU定时器):timer_create、timer_delete、timer_settime、timer_gettime等;

不懂的读者可以翻阅其他文章。

2.     写在kernel定时器之前

了解了用户态定时器相关知识,我们不禁要想:Linux内核是如何进行计时或时间管理的呢?以下将简述内核计时原理和定时器实现方案。

1)    HZ

    内核通过定时器中断来跟踪时间流,定时器中断由系统定时硬件(如:晶振)以周期性的时间间隔产生,此间隔由内核根据HZ值设置(即每秒产生HZ次中断),HZ是个常量,其值可以在内核编译时通过CONFIG_HZ来设置,一般以250为默认值。如笔者的内核CONFIG_HZ配置值为:

zglinux module_test # cat /boot/config-4.14.0 | grep CONFIG_HZ
# CONFIG_HZ_PERIODIC is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
zglinux module_test #

2)    jiffies

         除HZ外,内核通过jiffies_64全局变量(64位整型---文件timer.c中)进行时间计数,并通过EXPORT_SYMBOL导出为公共符号。此值表示自系统引导以来系统经历的时钟滴答数。此外,用于历史原因,内核源码还包括另一个时间基准:全局变量jiffies。其在32位系统中为32位整形,而不是64位。内核使用一种技巧来防止两个不同的时间基准转换时引入的精度误差,即将jiffies_64和jiffies的低32位重合。驱动程序一般访问jiffies值,因为其访问更快。

2.     内核定时器

有了jiffies时间计数,内核就可以实现定时器机制了。

1)    数据结构

内核定时器按照hlist链表进行组织,每个定时器实例由如下结构表示:

struct timer_list {
	/*
	 * All fields that
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核定时器内核用于在未来某个时间点或者特定时间段内调度执行某个函数的一种机制。它是一个软定时器,最终依赖于CPU的硬件定时器实现。对于Linux内核来说,它依赖于系统时钟节拍。内核定时器的处理函数在软中断中执行。它有几个特点:依赖于系统时钟节拍、只执行一次,超时后即退出。如果需要周期性的定时器,需要在超时处理函数中重新开启定时器。在Linux内核编程中常常会使用定时器,例如在驱动程序中使用定时器解决按键消抖、延时等待硬件就绪等问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【Linux驱动编程】如何使用内核定时器](https://blog.csdn.net/qq_20553613/article/details/106028620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【嵌入式Linux驱动开发】十四、了解Linux内核定时器使用流程,实现LED闪烁](https://download.csdn.net/download/weixin_38664427/14883898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值