Linux内核学习(七)—— 定时器和时间管理(基于Linux 2.6内核)
目录
一、内核中的时间概念
二、节拍率:HZ
实时时钟
系统定时器
三、定时器
系统定时器是一种可编程硬件芯片,能以固定频率产生定时器中断,它所对应的中断处理程序负责更新系统时间,也负责执行需要周期性运行的任务。
一、内核中的时间概念
系统定时器以某种频率自行触发定时器中断,该频率可以通过编程预定,称作节拍率(tick rate)。当定时器中断发生时,内核就通过一种特殊的中断处理程序对其进行处理。两次定时器中断发生的间隔时间就称为节拍(tick),它的大小等于节拍率分之一(1 / (tick rate))秒。
下面给出一些利用定时器中断周期执行的工作:
- 更新系统运行时间。
- 更新实际时间。
- 在 smp 系统上,均衡调度程序中各处理器上的运行队列。如果运行队列负载不均衡的话,尽量使它们均衡。
- 检查当前进程是否用尽了自己的时间片。如果用尽则重新进行调度。
- 更新资源消耗和处理器时间的统计值。
二、节拍率:HZ
系统定时器频率(节拍率)是通过静态预处理定义的,也就是 HZ(赫兹),在系统启动时按照 HZ 值对硬件进行设置。内核在 <asm/param.h> 中定义了这个值。

实时时钟
实时时钟(RTC)是用来持久存放实际时间的设备,即便系统关闭后,也可以靠主板上的微型电池保持系统的计时。当系统启动时,内核通过读取 RTC 来初始化实际时间,该时间存放在 xtime 变量中。
系统定时器
系统定时器是内核定时机制中最为重要的部分,它提供一种周期性触发中断机制。
三、定时器
定时器(也叫动态定时器或内核定时器)可以让指定的工作在指定的时间点上执行(如延后 5 秒或指定在某个时刻上执行)。下面的代码可以定义一个定时器:
struct time_list mytimer;
// 通过一个辅助函数来初始化定时器数据结构的内部值
init_timer(&my_timer);
// 然后设置自己的值
my_timer.expires = jiffies + delay; /* delay 为定时器超时节拍数,jiffies 是系统全局变量,维护系统发生时钟中断的总次数 */
my_timer.data = 0; /* 给定时器处理函数传入 0 值 */
my_timer.function = my_function; /* 定时器超时时调用的函数 */
my_timer.expires 表示超时时间,它是以节拍为单位的绝对计数值。jiffies 是系统全局变量,维护系统发生时钟中断的总次数。如果当前 jiffies 计数大于 my_timer.expires ,那么 my_timer.function 指向的处理函数就会开始执行。处理函数必须符合下面的函数原型:
void my_timer_function(unsigned long data);
最后,需要激活定时器:
add_timer(&my_timer);
一般来说,定时器都在超时后马上执行,但是也有可能推迟到下一个时钟节拍才能执行,所以不能用定时器来实现任何硬实时任务。
上面的方法是延迟一个函数执行,还有一种延迟进程执行的方法是使用 schedule_timeout() 函数,该方法会让需要延迟执行的任务睡眠到指定的延迟时间耗尽后再重新运行。但该方法也不能保证睡眠时间正好等于指定的延迟时间,只能使睡眠时间接近指定的延迟时间。当时间到期后,内核唤醒被延迟的进程并将其重新放回运行队列,用法如下:
/* 将任务设置为可中断睡眠状态 */
set_current_state(TASK_INTERRUPTIBLE);/* 小睡一会,“s” 秒后唤醒 */
schedule_timeout(s * HZ);
唯一的参数为延迟的相对时间,单位为节拍。当任务被设置为 TASK_INTERRUPTIBLE 状态,即可中断状态,那么当任务收到信号时可能被提前唤醒;也可以将任务设置为 TASK_UNINTERRUPTIBLE,这样就不会被信号提前唤醒。既然调用该函数后进程会睡眠,那么这种方法肯定不能在中断上下文或者持有锁的时候使用了。
相关文章:
Linux内核学习(七)—— 定时器和时间管理(基于Linux 2.6内核)
目录 一、内核中的时间概念 二、节拍率:HZ 实时时钟 系统定时器 三、定时器 系统定时器是一种可编程硬件芯片,能以固定频率产生定时器中断,它所对应的中断处理程序负责更新系统时间,也负责执行需要周期性运行的任务。 一、内…...
Tortoise Git(乌龟git)常用命令总结
查看全局和本地 Git 配置 打开命令行终端(如 Git Bash),分别执行以下命令查看全局和本地的 Git 配置信息: git config --global -l git config --local -l确保配置中没有任何与 SSH 相关的设置 移除全局和本地 SSH 相关配置&…...
SSM商城项目实战:物流管理
SSM商城项目实战:物流管理 在SSM商城项目中,物流管理是一个重要的功能模块。通过物流管理,可以实现订单的配送、运输和签收等操作。本文将介绍如何在SSM商城项目中实现物流管理功能的思路和步骤代码。 实现SSM商城项目中物流管理的思路总结如…...
nlp系列(7)三元组识别(Bert+CRF)pytorch
模型介绍 在实体识别中:使用了Bert模型,CRF模型 在关系识别中:使用了Bert模型的输出与实体掩码,进行一系列变化,得到关系 Bert模型介绍可以查看这篇文章:nlp系列(2)文本分类&…...
Druid配置类、Dubbo配置类、Captcha配置类、Redis配置类、RestTemplate配置类
DruidConfig配置类package com.xdclass.app.config;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.beans.factory.annotation.V…...
Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图
Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图 作者:安静到无声 个人主页 目录 Pyecharts教程(十二):使用pyecharts创建带有数据缩放滑块和位置指示器的K线图前言代码讲解总结完整代码推荐专栏前言 本博客将详细解释如何使用Python中的pyech…...
MySQL 基本操作
目录 数据库的列类型 数据库基本操作 SQL语言规范 SQL语句分类 查看表,使用表 管理数据库 创建数据库和表 删除数据库和表 向数据表中添加数据 查询数据表中数据 修改数据表的数据 删除数据表中数据 修改表明和表结构 扩展表结构(增加字段&…...
HHDESK一键改密功能
HHDESK新增实用功能——使用SSH连接,对服务器/端口进行密码修改。 1 测试 首页点击资源管理——客户端,选择需要修改的连接; 可以先对服务器及端口进行测试,看是否畅通; 右键——测试——ping; 以及右…...
瞬态电压抑制器(TVS)汽车级 SZESD9B5.0ST5G 工作原理、特性参数、封装形式
什么是汽车级TVS二极管? TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护,防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中,由于车辆启…...
ChatGPT 一条命令总结Mysql所有知识点
想学习Mysql的同学,可以使用ChatGPT直接总结mysql所有的内容与知识点大纲 输入 总结Mysql数据库所有内容大纲与大纲细分内容 ChatGPT不光生成内容,并且直接完成了思维导图。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Offi…...
Nginx-报错no live upstreams while connecting to upstream
1、问题描述 生产环境Nginx间歇性502的事故分析过程 客户端请求后端服务时一直报错 502 bad gateway,查看后端的服务是正常启动的。后来又查看Nginx的错误日志,发现请求后端接口时Nginx报错no live upstreams while connecting to upstream,…...
五种 CSS 位置类型以实现更好的布局
在 Web 开发中,CSS(层叠样式表)用于设置网站样式的设置。为了控制网页上元素的布局,使用CSS的position属性。因此,在今天这篇文章中,我们将了解 CSS 位置及其类型。 CSS 位置属性用于控制网页上元素的位置…...
【真题解析】系统集成项目管理工程师 2022 年下半年真题卷(综合知识)
本文为系统集成项目管理工程师考试(软考) 2022 年下半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析&#x…...
视频中的声音怎么提取出来?这样做提取出来很简单
提取视频中的声音可以有多种用途。例如,我们可能希望从视频中提取音乐或音效,以在其他项目中使用。或者,可能需要将视频中的对话转录为文本,以便更轻松地编辑和共享内容。无论目的是什么,提取视频中的声音都可以帮助我…...
【Qt学习】05:自定义封装界面类
OVERVIEW 自定义封装界面类1.QListWidget2.QTreeWidget3.QTableWidget4.StackedWidget5.Others6.自定义封装界面类-显示效果(1)添加设计师界面类(2)在ui中设计自定义界面(3)在需要使用的界面中添加…...
网络服务第二次作业
[rootlocalhost ~]# vim /etc/httpd/conf.d/vhosts.conf <Virtualhost 192.168.101.200:80> #虚拟主机IP及端口 DocumentRoot /www/openlab #网页文件存放目录 ServerName www.openlab.com #服务器域名 </VirtualHost> …...
【记录】USSOCOM Urban3D 数据集读取与处理
Urban3D数据集内容简介 Urban3D数据集图像为正摄RGB影像,分辨率为50cm。 从SpaceNet上使用aws下载数据,文件夹结构为: |- 01-Provisional_Train|- GT|- GT中包含GTC,GTI,GTL.tif文件,GTL为ground truth b…...
flutter ios webview不能打开http地址
参考 1、iOS添加信任 webview_flutter 在使用过程中会iOS出现无法加载HTTP请求的情况, 但是Flutter 却可以加载HTTP请求。这就与两个的框架有关了,Flutter是独立于UIKit框架的。 解决方案就是在iOS 的info.plist中添加对HTTP的信任。 <key>NSApp…...
【SpringBoot】详细介绍SpringBoot中Entity类中的getters和setters
在Spring Boot中的Entity类中,getters和setters是用来获取和设置对象属性值的方法。它们是Java Bean规范的一部分,并且通常被用于向开发人员和框架公开类的属性。 在Entity类中,getters和setters方法通常通过property来实现,即将…...
阿里云服务器搭建FRP实现内网穿透-P2P
前言 在了解frp - p2p之前,请先了解阿里云服务器搭建FRP实现内网穿透-转发: 文章地址 1、什么是frp - p2p frp(Fast Reverse Proxy)是一个开源的反向代理工具,它提供了多种功能,包括端口映射、流量转发和内网穿透等。…...
PHP反序列化实战:手把手教你绕过CTF题中的字符检查与属性保护
PHP反序列化漏洞实战:从CTF解题到真实场景防御 在网络安全竞赛中,PHP反序列化漏洞一直是高频考点。这类漏洞不仅存在于CTF比赛中,也广泛存在于真实世界的Web应用中。本文将从一个典型CTF题目入手,深入剖析PHP反序列化的攻击手法与…...
Sentinel-2 Level-2A数据怎么用?从QA60波段解读到实战:去云、计算NDVI/ARVI并导出GeoTIFF
Sentinel-2 Level-2A数据实战指南:从QA60波段解析到植被指数计算全流程 当第一次打开Sentinel-2 Level-2A数据时,很多研究者会被那些看似晦涩的质量波段搞得一头雾水。记得我刚开始处理这些数据时,就曾因为忽略了QA60波段的重要性,…...
别再只用CPU了!手把手教你用CUDA C++写第一个GPU并行程序(附完整代码)
从零开始:用CUDA C解锁GPU并行计算的实战指南 如果你是一名C开发者,可能已经习惯了在CPU上编写串行代码。但当你面对海量数据计算时,是否曾感到CPU力不从心?现代GPU拥有数千个计算核心,能够同时执行大量线程࿰…...
稀疏矩阵实战:手把手教你用ILU预处理子搞定有限元分析中的病态方程组
稀疏矩阵实战:手把手教你用ILU预处理子搞定有限元分析中的病态方程组 在计算力学和CFD领域,工程师们每天都要面对一个令人头疼的数学难题——如何高效求解那些由有限元分析产生的大型稀疏线性方程组。想象一下,当你花费数小时构建精美的三维模…...
Apex Legends压枪宏终极指南:轻松掌握自动武器检测与精准射击
Apex Legends压枪宏终极指南:轻松掌握自动武器检测与精准射击 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRe…...
OpenClaw安全防护指南:GLM-4.7-Flash本地化部署的5个关键设置
OpenClaw安全防护指南:GLM-4.7-Flash本地化部署的5个关键设置 1. 为什么需要特别关注OpenClaw的安全配置? 去年夏天,我在调试一个自动整理财务报告的OpenClaw任务时,差点酿成大错。当时AI助手误将包含敏感信息的临时文件上传到了…...
AcousticSense AI进阶使用:批量处理上百首歌曲的实战方法
AcousticSense AI进阶使用:批量处理上百首歌曲的实战方法 1. 为什么需要批量处理音乐文件? 在音乐流媒体平台、唱片公司或广播电台的实际工作中,我们经常需要处理海量音频文件。手动上传单首歌曲进行流派分析不仅效率低下,也难以…...
Wan2.1-UMT5一键部署教程:基于Python的AI视频生成WebUI快速搭建
Wan2.1-UMT5一键部署教程:基于Python的AI视频生成WebUI快速搭建 你是不是也对那些能根据文字描述生成视频的AI工具感到好奇?想自己动手搭建一个来玩玩,但又担心过程太复杂,被各种环境配置和依赖问题劝退? 别担心&…...
YALMIP求解器报错看不懂?从verbose到debug,教你快速定位并解决优化问题
YALMIP求解器报错看不懂?从verbose到debug,教你快速定位并解决优化问题 当你满怀期待地运行YALMIP优化代码,却看到命令行突然跳出一片红色报错信息时,那种挫败感每个优化工程师都深有体会。"No feasible solution found"…...
MinerU智能文档理解服务新手教程:5分钟搭建PDF解析系统
MinerU智能文档理解服务新手教程:5分钟搭建PDF解析系统 1. 引言:文档智能解析的实用价值 每天我们都会遇到各种PDF文档——合同、报告、论文、发票,手动提取内容不仅耗时还容易出错。MinerU智能文档理解服务正是为解决这个问题而设计&#…...
