Linux内核-时间子系统(时钟中断)专题汇总

文章目录

    • 概要
    • 一、专题汇总
        • 1.1、优秀系列博文
        • 1.2、时间子系统
        • 1.3、高精度定时器hrtimer
        • 1.4、RTC硬件芯片驱动

概要

中断机制是计算机系统的重要组成部分,在Linux中也不例外,中断按照来源分为硬中断和软中断,而硬中断根据硬件范围分为外中断和内中断。时钟中断就是内中断的一种。

之所以要提到时钟中断,是因为时钟是操作系统进行调度工作的重要工具,如维护系统的绝对日期和时间、让分时进程按时间片轮转、让实时进程定时发送换接收控制信号、系统定时唤醒或阻塞进程、对用户进程记账、测量系统性能等,利用定时器能够确保操作系统在必要的时候获得控制权,陷入死循环的进程最终会因时间片耗尽而被迫让出CPU。

Linux下的时钟中断也称为时间子系统,其架构示意图如下:

Linux时间子系统架构图
可见Linux下的时间由硬件时钟芯片和软件时钟框架共同作用实现。

Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式:

  1. 系统启动后,会读取时钟源设备(RTC, HPET,PIT…),初始化当前系统时间;
  2. 内核会根据HZ(系统定时器频率,节拍率)参数值,设置时钟事件设备,启动tick(节拍)中断。HZ表示1秒种产生多少个时钟硬件中断,tick就表示连续两个中断的间隔时间。在我电脑上,HZ=250, 一个tick = 1/HZ, 所以默认一个tick为4ms。
  3. 设置时钟事件设备后,时钟事件设备会定时产生一个tick中断,触发时钟中断处理函数,更新系统时钟,并检测timer wheel,进行超时事件的处理。
    在上面工作方式下,Linux 2.6.16 之前,内核软件定时器采用timer wheel多级时间轮的机制,维护操作系统的所有定时事件。timer wheel的触发是基于系统tick的周期性中断。
    所以说在这之前,Linux只能支持ms级别的时钟,随着时钟源硬件设备的精度提高和软件高精度计时的需求,有了高精度时钟高精度时钟的内核设计。从Linux 2.6.16开始 ,内核支持了高精度的时钟,即新的定时器hrtimer,其实现逻辑和Linux 2.6.16 之前定时器逻辑区别:
  • 采用红黑树进行高精度定时器的管理,而不是时间轮;
  • 高精度时钟定时器不在依赖系统的tick中断,而是基于事件触发。

旧内核的定时器实现依赖于系统定时器硬件定期的tick,基于该tick,内核会扫描timer wheel进而处理超时事件,更新jiffies,wall time(墙上时间),real time(现实时间),process的使用时间等等工作。

新的内核不再会直接支持周期性的tick,新内核定时器框架采用了基于事件触发,而不是以前的周期性触发。新内核实现了hrtimer(high resolution timer),hrtimer的设计目的,就是为了解决旧定时器的缺点:

  • 低精度,旧定时器只能支持ms级别的精度,hrtimer可以支持ns级别;
  • 旧定时器与内核其它模块的高耦合;

新内核的hrtimer的触发和设置不像之前在定期的tick中断中进行,而是动态调整的,即基于事件触发,hrtimer的工作原理:

通过将高精度时钟硬件的下次中断触发时间设置为红黑树中最早到期的 Timer 的时间,时钟到期后从红黑树中得到下一个 Timer 的到期时间,并设置硬件,如此循环反复。

在高精度时钟模式下,操作系统内核仍然需要周期性的tick中断,以便刷新内核的一些任务。前面可以知道,hrtimer是基于事件的,不会周期性出发tick中断,所以为了实现周期性的tick中断(dynamic tick):系统创建了一个模拟 tick 时钟的特殊 hrtimer,将其超时时间设置为一个tick时长,在超时回来后,完成对应的工作,然后再次设置下一个tick的超时时间,以此达到周期性tick中断的需求。引入了dynamic tick,是为了能够在使用高精度时钟的同时节约能源,,这样会产生tickless 情况下,会跳过一些 tick。这里只是简单介绍,有兴趣可以读kernel源码。

Linux 时间架构示意图

新内核对相关的时间硬件设备进行了统一的封装,定义了主要有下面两个结构:

  • 时钟源设备(closk source device):抽象那些能够提供计时功能的系统硬件,比如 RTC(Real Time Clock)、TSC(Time Stamp Counter),HPET,ACPI PM-Timer,PIT等。不同时钟源提供的精度不一样,现在pc大都是支持高精度模式(high-resolution mode)也支持低精度模式(low-resolution mode)。
  • 时钟事件设备(clock event device):系统中可以触发 one-shot(单次)或者周期性中断的设备都可以作为时钟事件设备。

当前内核同时存在旧timer wheel 和新hrtimer两套timer的实现,内核启动后会进行从低精度模式到高精度时钟模式的切换,hrtimer模拟的tick中断将驱动传统的低精度定时器系统(基于时间轮)和内核进程调度。

一、专题汇总

主要是汇总个人觉得精彩的Linux时间子系统相关的博文。

1.1、优秀系列博文

1]:吴斌大佬
2]:DroidPhone大佬
3]:蜗窝科技

1.2、时间子系统

1]:Linux的时间子系统
1.1]:一文搞懂 | Linux 时间子系统
1.2]:Linux时钟框架
1.3]:Linux时钟子系统分析
1.4]:Linux之时钟中断
2]:Linux时间子系统(一)简介
3]:Linux内核设计与实现-定时器和时间管理
4]:Linux内核时钟系统和定时器实现
5]:Linux 时间子系统全栈解析
6]:Linux驱动移植-通用时钟框架子系统
7]:深入理解Linux时间子系统
8]:Linux内核启动注册中断内核中断源如何实现多个定时器
9]:Linux内核之时间子系统

1.3、高精度定时器hrtimer

1]:一文入门linux内核高精度定时器hrtimer机制

1.4、RTC硬件芯片驱动

1]:linux驱动移植-RTC驱动
2]: Linux下RTC实时时钟驱动
3]:Linux 驱动开发 三十五:Linux 内核时钟管理

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPT翻译网站的加载与使用

Sider: ChatGPT侧边栏 GPTs, GPT-4 Turbo, 联网, 绘图 sider.ai https://chromewebstore.google.com/detail/sider-chatgpt%E4%BE%A7%E8%BE%B9%E6%A0%8F-gpts-g/difoiogjjojoaoomphldepapgpbgkhkb?hlzh-CN 加入与移除 第二个翻译网站 https://chromewebstore.google.com/…

MATLAB知识点:poissrnd函数(★★☆☆☆)生成泊松分布的随机数

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章:课后习题讲解中拓展的函数 在讲解第三…

Sibelius安装包免费下载激活指南,西贝柳斯,专业作曲打谱软件

Sibelius来自芬兰音乐巨匠西贝柳斯的故乡,被誉为世界上最强的五线谱软件。Sibelius功能全面、音色音质精准受到广大作曲家的喜爱。其乐谱记号十分全面,所有的乐谱都可以应付自如,Sibelius可以迅速完成作曲、编曲、发布任务,轻松开…

react+ts【项目实战一】配置项目/路由/redux

文章目录 1、项目搭建1、创建项目1.2 配置项目1.2.1 更换icon1.2.2 更换项目名称1.2.1 配置项目别名 1.3 代码规范1.3.1 集成editorconfig配置1.3.2 使用prettier工具 1.4 项目结构1.5 对css进行重置1.6 注入router1.7 定义TS组件的规范1.8 创建代码片段1.9 二级路由和懒加载1.…

微服务中台架构的设计与实现

本文将探讨微服务中台架构的设计与实现,介绍如何通过微服务的方式进行系统拆分和组合,构建灵活、可扩展且易于维护的中台架构,以加速企业的数字化转型和提升竞争力。 ## 1. 引言 随着企业规模的不断扩大和业务的日益复杂化,传统…

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录 探针的生命周期流程图prestop 探针的生命周期 docker 创建:在创建阶段,你需要选择一个镜像来运行你的应用。这个镜像可以是公开的,如 Docker Hub 上的镜像,也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一…

Tuxera NTFS2024版本的文件操作功能有哪些特点?

Tuxera NTFS通过集成先进的文件系统驱动程序和算法,实现了对多种文件系统的全面支持。具体来说,它具备以下功能和特点,使其能够支持多种文件系统: Tuxera NTFS2024下载如下: https://wm.makeding.com/iclk/?zoneid58824 先进的…

wechat协议接口免费分享(价值5w)

几乎涵盖所有功能,仅供学习交流使用! 接口地址 https://apifox.com/apidoc/shared-86280587-c0f0-480a-85de-ee292b4aae82/doc-3721193

RK3568平台开发系列讲解(实验篇)杂项设备驱动实验

🚀返回专栏总目录 文章目录 一、什么是杂项设备驱动二、杂项设备的注册和卸载三、杂项设备驱动实验代码沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是杂项设备驱动 在 Linux 中,把无法归类的五花八门的设备定义成杂项设备。相较于字符设备,杂项设备有以下两…

Activation of network connection failed(ubuntu连不上网)

ubuntu连不上网,看了好几个方法找到个有用的记录一下 1. 还原默认设置 2. 更改适配器:加上vmware bridge protocol

(13)Hive调优——动态分区导致的小文件问题

前言 动态分区指的是:分区的字段值是基于查询结果自动推断出来的,核心语法就是insertselect。 具体内容指路文章: https://blog.csdn.net/SHWAITME/article/details/136111924?spm1001.2014.3001.5501文章浏览阅读483次,点赞15次…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第三天-ARM Linux ADC和触摸屏开发 (物联技术666)

链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码:1688 教学内容: 1、ADC S3C2440的A/D转换器包含一个8通道的模拟输入转换器,可以将模拟输入信号转换成10位数字编码。 在A/D转换时钟频率为2.5MHz时&…