Linux 内核定时器

         一个人总要走陌生的路,看陌生的风景,听陌生的歌,然后在某个不经意的瞬间,你会发现,原本费尽心机想要忘记的事情真的就这么忘记了。

                                                                                                                                         ----小新

一、引言

        Linux内核定时器是一种用于在特定时间间隔后触发特定事件的重要组件。它对于系统的性能和稳定性至关重要,特别是在需要精确时间同步和事件处理的应用程序中。本文将深入探讨Linux内核定时器的实现,工作原理以及如何使用它来调度任务。

二、Linux内核定时器的工作原理

        Linux内核定时器基于内核计时器实现,它使用一个循环队列来存储定时器的到期时间和回调函数。当系统时钟中断时,内核会检查当前时间是否已经超过了某个定时器的到期时间,并执行相应的回调函数。

 (1)节拍率

        系统定时器频率是通过静态预处理定义的,也就是 HZ ,在系统启动时按照 Hz 对硬件进行设置。体系结构不同,HZ 的值也不同。内核在文件 <include/asm-generic/param.h> 中定义了 HZ 的实际值,节拍率就 是 HZ ,周期为 1/HZ 。一般 ARM 体系结构的节拍率多数都等于 100 。在编译 Linux 内核的时候可以通过 图形化界面设置系统节拍率,按照如下路径打开配置界面:
-> Kernel Features
-> Timer frequency (<choice> [=y])
          从上图可以看出可选的系统节拍率为 100Hz 200Hz 250Hz 300Hz 500Hz 1000Hz ,默认情况下 选择 100Hz 。设置好以后打开 Linux 内核源码根目录下的 .config 文件。

(2)jiffies

        全局变量 jiffies 用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为 0 ,此 后, 每次时钟中断处理程序都会增加该变量的值。因为一秒内时钟中断的次数等于 Hz ,所以 jiffes 一秒内 增加的值也就为 Hz ,系统运行时间以秒为单位计算,就等于 jiffes/Hz。       
                                                 jiffes=seconds*HZ。
举例来说
<1> 定时 10ms
计算: jiffies +msecs_to_jiffies(10)
<2> 定时 10us
计算: jiffies +usecs_to_jiffies(10)

三、Linux内核定时器的实现

        以下是一个简单的Linux内核定时器实现的例子:

#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/timer.h> 
#include <linux/init.h> 
static struct timer_list my_timer; 
static void my_timer_function(unsigned long data) 
{ 
    printk(KERN_INFO "My timer expired!\n"); 
} 

static int __init my_timer_init(void) 
{ 
    printk(KERN_INFO "Initializing my timer...\n"); 
    init_timer(&my_timer, my_timer_function, NULL, 0); 
    my_timer.expires = jiffies + msecs_to_jiffies(5000); // 5 seconds 
    add_timer(&my_timer); 
    return 0; 
} 

static void __exit my_timer_exit(void) 
{ 
    del_timer(&my_timer); 
    printk(KERN_INFO "Removing my timer...\n"); 
} 

module_init(my_timer_init); 
module_exit(my_timer_exit); 
MODULE_LICENSE("GPL");

 

        在这个例子中,我们首先定义了一个名为my_timer的定时器,并定义了一个回调函数my_timer_function,这个函数会在定时器到期时被调用。然后,我们在my_timer_init函数中初始化了定时器,设置了定时器的到期时间,并添加了定时器。最后,我们在my_timer_exit函数中删除了定时器。这个模块可以被加载和卸载,当加载时,它会开始一个新的定时器,当卸载时,它会停止定时器。

四、总结

        Linux内核定时器是一个强大的工具,它可以用来调度任务,处理系统事件,以及实现各种其他需要定时触发的事件。通过使用内核定时器,我们可以实现精确的时间同步和事件处理,这对于系统的性能和稳定性至关重要。本文深入探讨了Linux内核定时器的实现和工作原理,并给出了一个简单的例子来展示如何使用它来调度任务。希望这篇论文能帮助读者更好地理解和使用Linux内核定时器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之AVL树

map/multimap/set/multiset这几个容器有个共同点是: 其底层都是按照二叉搜索树来实现的,但是普通的二叉搜索树有其自身的缺陷, 假如往树中插入的元素有序或者接近有序, 二叉搜索树就会退化成单支树, 时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了…

JavaScript基础入门04

目录 1.WebAPI 背景知识 1.1什么是 WebAPI 1.2什么是 API 2.DOM 基本概念 2.1什么是 DOM 2.2DOM 树 3.获取元素 3.1querySelector 3.2querySelectorAll 4.事件初识 4.1基本概念 4.2事件三要素 4.3简单示例 5.操作元素 5.1获取/修改元素内容 5.2获取/修改元素属性…

记事本简单运行java代码,理解程序运行

1.记事本创建一个文件, 把后缀.txt改为.java 如果没有显示尾缀, 勾选出文件扩展名 2.在文件里面编辑java代码并保存 3.在当前目录打开cmd 4.执行 javac Test.java 会生成好编译的.class文件 5.执行下面代码, 就成功得到j编写ava打印的代码 java Test 6.注意上面的中文在cmd中…

Windows下安装Anaconda5.3.1+Python3.8+TensorFlow2.13.0-CPU版本总结

Python3.8安装可以参考博文https://janus.blog.csdn.net/article/details/55274849 进行安装即可。 【1】Anaconda 清华的开源软件镜像站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载&#xff0c;这里选择的是5.3.1版本。 然后正常安装就可以&am…

C++17中std::optional的使用

模版类std::optional管理一个可选的(optional)存储值(contained value)&#xff0c;即可能存在也可能不存在的值。std::optional的一个常见用例是存储可能失败的函数的返回值。与其它方法相反(例如std::pair<T, bool>),std::optional可以很好地处理构造成本高昂的对象&am…

帧同步的思想与FIFO复位

02基于FDMA三缓存构架_哔哩哔哩_bilibili 图像从外部传输进来的时候&#xff0c;会产生若干延迟&#xff0c;可能会出现各种各样的问题&#xff08;断帧等&#xff09;&#xff0c;此时可以通过VS信号清空FIFO进行复位。 这个过程中的复位信号可能需要拓展&#xff0c;这是因为…

运筹说 第102期 | 非线性规划—制约函数法

通过上期学习&#xff0c;大家已经了解了非线性规划中约束极值问题的最优性条件。本期小编将为大家介绍约束极值问题的求解方法&#xff1a;制约函数法&#xff0c;包括概念以及最基本的两种制约函数法&#xff1a;罚函数法、障碍函数法等内容。 制约函数法是通过构造某种制约函…

数据分析 - 数据案例流程分析

有这样的一个案例&#xff1a;外卖骑手的未接单率上升 1&#xff1a;分析有哪些因素会造成这种后果 骑手和订单的一个占比情况订单配送距离的情况平台补贴情况和收入情况时间段的订单和骑手的需求比 2&#xff1a;清理错误数据&#xff0c;或者无用的数据&#xff0c;确保数…

Docker安装详细步骤及相关环境安装配置

目录 一、从空白系统中克隆Centos7系统 二、使用xshell连接docker_tigerhhzz虚拟机 ​编辑 三、在CentOS7基础上安装Docker容器 最近自己在虚拟机上搭建一个docker,将项目运行在虚拟机中。 需要提前准备的工具&#xff0c;XShell(远程链接工具)&#xff0c;VM&#xff08;…

专业128分总分390+上岸中山大学884信号与系统电通院考研经验分享

专业课884 信号系统 过年期间开始收集报考信息&#xff0c;找到了好几个上岸学姐和学长&#xff0c;都非常热情&#xff0c;把考研的准备&#xff0c;复习过程中得与失&#xff0c;都一一和我分享&#xff0c;非常感谢。得知这两年专业课难度提高很多&#xff0c;果断参加了学长…

【Linux】语言层面缓冲区的刷新问题以及简易模拟实现

文章目录 前言一、缓冲区刷新方法分类a.无缓冲--直接刷新b.行缓冲--不刷新&#xff0c;直到碰到\n才刷新c.全缓冲--缓冲区满了才刷新 二、 缓冲区的常见刷新问题1.问题2.刷新本质 三、模拟实现1.Mystdio.h2.Mystdio.c3.main.c 前言 我们接下来要谈论的是我们语言层面的缓冲区&…

数据分析实战 | 逻辑回归——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://download.csdn.net/d…

Oracle(18)Auditing

文章目录 一、基础知识1、审计介绍2、Auditing Types 审计类型3、Auditing Guidelines 审计准则4、Auditing Categories 审核类别5、Database Auditing 数据库审计6、Auditing User SYS 审计sys用户7、Getting Auditing Informatio 获取审计信息8、获取审计记录通知 二、基础操…

智能指针,c++11,单例,类型转换

c11 unique_ptr 防拷贝 shared_ptr / weak_ptr: 引用计数,支持拷贝 面试 手写shared_ptr 各种ptr的特性对比, 不会问定制删除器和weak_ptr,但是问shared_ptr时,可以往这边延展. 单例 保证一写数据在一个进程中,只有一份,并且方便访问修改. 饿汉模式 在main函数之前就创…

雷达检测及MATLAB仿真

文章目录 前言一、雷达检测二、Matlab 仿真1、高斯和瑞利概率密度函数①、MATLAB 源码②、仿真 2、归一化门限相对虚警概率的曲线①、MATLAB 源码②、仿真 3、检测概率相对于单个脉冲 SNR 的关系曲线①、MATLAB 源码②、仿真 4、改善因子和积累损失相对于非相干积累脉冲数的关系…

使用xlwings实现对excel表中指定列隔行求和

需要对上表中的营业额隔行求和&#xff0c;即橙色背景颜色的求和&#xff0c;无背景颜色的求和。 看了大佬的视频&#xff0c;有两种方法&#xff1a; 1.加辅助列 2.使用判断行的奇偶函数&#xff0c;然后在用sumproduct函数 在此&#xff0c;我使用xlwings对excel表中数据…

2023年【北京市安全员-C3证】考试题库及北京市安全员-C3证在线考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 北京市安全员-C3证考试题库是安全生产模拟考试一点通总题库中生成的一套北京市安全员-C3证在线考试&#xff0c;安全生产模拟考试一点通上北京市安全员-C3证作业手机同步练习。2023年【北京市安全员-C3证】考试题库及…

vmware开启ipv6

说明 在 ipv4 基础上配置ipv6网络。 分享 大数据博客列表开发记录汇总个人java工具库 项目https://gitee.com/wangzonghui/object-tool 包含json、string、集合、excel、zip压缩、pdf、bytes、http等多种工具&#xff0c;欢迎使用。 vm开启ipv6 设置vmware 打开vmware点击编…

MySQL的索引和复合索引

由于MySQL自动将主键加入到二级索引&#xff08;自行建立的index&#xff09;里&#xff0c;所以当select的是主键或二级索引就会很快&#xff0c;select *就会慢。因为有些列是没在索引里的 假设CA有1kw人咋整&#xff0c;那我这个索引只起了前一半作用。 所以用复合索引&am…

gorm使用之各种表关系实例-主外键->struct

gorm使用之各种表关系实例-主外键->struct 一对多关系(用户与文章) 如: 老板与员工 女神和舔狗 老师和学生 班级与学生 用户与文章 ...以用户与文章举例 models应当如,注意&#xff01;&#xff01;&#xff1a;User表中的ID应当与Article中的UID一直&#xff0c;大小和…