深入理解 Linux 内核(二)

news2024/10/6 6:43:18

在这里插入图片描述

系列文章目录


Linux 内核设计与实现
深入理解 Linux 内核
深入理解 Linux 内核(二)
Linux 设备驱动程序
Linux设备驱动开发详解


文章目录

  • 系列文章目录
  • 五、定时测量
    • 1、时钟和定时器电路
    • 2、Linux 计时体系结构
      • (1)计时体系机构的数据结构
      • (2)软定时器和延迟函数
        • (a)动态定时器


五、定时测量

1、时钟和定时器电路

  • 实时时钟(RTC)
  • 时间戳计数器(TSC)
  • 可编程间隔定时器(PIT)
  • CPU 本地定时器
  • 高精度时间定时器(HPET)
  • ACPI 电源管理定时器

2、Linux 计时体系结构

(1)计时体系机构的数据结构

  • 定时器对象
  • jiffies 变量
  • xtime 变量

(2)软定时器和延迟函数

    Linux定时器分为动态定时器(dynamic timer)和间隔定时器(interval timer)。第一种类型由内核使用,而间隔定时器可以由进程在用户态创建。

    这里是有关 Linux 定时器的警告:因为对定时器函数的检查总是由可延迟函数进行,而可延迟函数被激活以后很长时间才能被执行,因此,内核不能确保定时器面数正好在定时到期时开始执行,而只能保证在适当的时间执行它们,或者假定延迟到几百毫秒之后执行它们。因此,对于必须严格遵守定时时间的那些实时应用而言,定时器并不适合。

    除了软定时器外,内核还使用了延迟函数,它执行一个紧凑的指令循环直到指定的时间间隔用完。我们将在后面的 “延迟函数” 一节对它们进行讨论。

(a)动态定时器

    动态定时器(dynamic timer)被动态地创建和撤消,对当前活动动态定时器的个数没有限制。

// include/linux/timer.h
struct timer_list {
	struct list_head entry;
	unsigned long expires;

	void (*function)(unsigned long);
	unsigned long data;

	struct tvec_base *base;
#ifdef CONFIG_TIMER_STATS
	void *start_site;
	char start_comm[16];
	int start_pid;
#endif
#ifdef CONFIG_LOCKDEP
	struct lockdep_map lockdep_map;
#endif
};

    function 字段包含定时器到期时执行函数的地址。data 字段指定传递给定时器函数的参数。正是由于 data 字段,就可以定义一个单独的通用函数来处理多个设备驱动程序的超时问题,在 data 字段可以存放设备 ID,或其他有意义的数据,定时器函数可以用这些数据区分不同的设备。

    expires 字段给出定时器到期时间,时间用节拍数表示,其值为系统启动以来所经过的节拍数。当 expires 的值小于或等于 jiffies 的值时,就说明计时器到期或终止。

    entry 字段用于将软定时器插入双向循环链表队列中,该链表根据定时器 expires 字段的值将它们分组存放。我们将在本章后面描述使用这些链表的算法。

    为了创建并激活一个动态定时器,内核必须:

  1. 如果需要,创建一个新的 timer_list 对象,比如说设为 t。这可以通过以下几种方式来进行:
    • 在代码中定义一个静态全局变量。
    • 在函数内定义一个局部变量:在这种情况下,这个对象存放在内核堆栈中。
    • 在动态分配的描述符中包含这个对象。
  2. 调用 init_timer(&t) 函数初始化这个对象。实际上是把 t.base 指针字段置为 NULL 并把 t.lock 自旋锁设为 “打开”。
  3. 把定时器到期时激活函数的地址存入 function 字段。如果需要,把传递给函数的参数值存入 data 字段。
  4. 如果动态定时器还没有被插入到链表中,给 expires 字段赋一个合适的值并调用 add_timer(&t) 函数把 t 元素插入到合适的链表中
  5. 否则,如果动态定时器已经被插入到链表中,则调用 mod_timer() 函数来更新 expires 字段,这样也能将对象插入到合适的链表中(下面将讨论)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

200G 400G光模块介绍

200G 光模块封装有2种,分别是QSFP56和QSFP-DD。 200G QSFP56有2种光模块,第一种是200G QSFP56 SR4,第二种是200G QSFP56 FR。 200G QSFP56 SR4的封装形式是QSFP56,速率是200G,波长是850nm,最远传输距离是10…

儿童书写台灯哪个牌子比较好?盘点护眼学生用台灯品牌排行

想要拥有一个健康的视力对于我们多么重要,日常生活多么不便利,就是像家里孩子考学时视力也是对于未来专业选择的一个阻碍。 想要孩子不吃近视的苦,从小就要开始抓孩子对于视力和眼睛的呵护。 养成好习惯必须保持一个正确的学习姿势&#xff…

redis 持久化 RDB + AOF

redis 持久化 RDB AOF 1.redis持久化----两种方式 RDB(Redis DataBase)和AOF(Append Only File) RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上 AOF&am…

视频剪辑学习 pr 中视频

2023年中视频学习计划,学习资料全套视频。全网一手资料,有意者V: 第一章- 基础知识 第二章- 素材获取 第三章- 文案创作及搬运改写 第四章- 智能配音与自己配音修音 第五章- 剪辑基础快速入门 手机剪映零基础快速入门 电脑剪映零基础快速入门…

360SEO 360搜索引擎算法的基础知识

360搜索引擎是中国的一家互联网搜索引擎公司,由奇虎360公司推出。作为中国互联网领域的知名品牌之一,它的搜索算法一直备受关注和研究。那360搜索引擎有哪些算法的基础知识呢? 一、概述 360搜索引擎算法是一个非常庞大、复杂的系统&#xff…

科研人的利器:利用New Bing五分钟读完一篇论文

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,拉你进群。 New Bing『新必应』是微软一款集成了ChatGPT的搜索引擎,它以聊天的方式来进行信息搜索,这不同过去几十年通过对话框搜索信…

Linux之yum原(三)

最近学习Linux,利用 yum 下载软件的时候,总是报错: 错误:为仓库 appstream 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist因此小编决定更换一下 yum 源,小编用的是 CentOS8.5.2111&am…

Scala Option类型,异常处理,IO,高阶函数

Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…

记录-对象有哪些继承方式

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 原型链 温故而知新: 构造函数、原型和实例的关系:  每个构造函数都有一个原型对象,原型有一个属性指回构造函数,实例有一个内部指针指向原型。 思考…

【Java校招面试】基础知识(六)——计算机网络

目录 前言一、TCP协议 / UDP协议二、HTTP协议后记 前言 本篇主要介绍计算机网络的相关内容。 “基础知识”是本专栏的第一个部分,本篇博文是第六篇博文,如有需要,可: 点击这里,返回本专栏的索引文章点击这里&#xf…

Leetcode303. 区域和检索 - 数组不可变

Every day a leetcode 题目来源&#xff1a;303. 区域和检索 - 数组不可变 解法1&#xff1a;暴力 代码&#xff1a; class NumArray { public:vector<int> v;NumArray(vector<int> &nums){v nums;}int sumRange(int left, int right){int sum 0;for (in…

ChatGPT镜像网站【免费白嫖】

文章目录 前言说明网站 前言 ChatGPT是一种基于OpenAI GPT&#xff08;Generative Pretrained Transformer&#xff09;模型的聊天机器人&#xff0c;它可以对用户提出的问题做出回答&#xff0c;同时还能够进行精准的语言理解和回复&#xff0c;较好地满足了人们与机器人之间…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境&#xff0c;其实整个过程比较重复和固定&#xff0c;所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

[架构之路-183]-《软考-系统分析师》-13-系统设计 - 高内聚低耦合详解、图解以及技术手段

目录 第1章 什么是高内聚低耦合 1.1 概念 1.2 目的 1.3 什么时候需要进行高内聚低耦合 1.4 什么系统需要关注高内聚、低耦合 第2章 分类 2.1 内聚的分类 2.2 耦合的分类 第3章 增加高内聚降低耦合度的方法 3.1 增加高内聚 3.2 降低耦合度 第1章 什么是高内聚低耦…

SpringCloud_Gateway服务网关

文章目录 一、SpringCloudGateway服务网关概论1、SpringCloudGateway服务网关概论2、SpringCloudGateway的三大核心概念 二、SpringCloudGateway的路由及断言1、子模块项目SpringCloudGateway的搭建2、SpringCloudGateway_Java API构建路由3、SpringCloudGateway的动态路由功能…

cmd 批量ping命令

cmd 批量ping命令 1、批量ping 1个网段2、批量ping多个网段 1、批量ping 1个网段 ping 1个网段 for /l %X in (2,1,254) do (ping -n 2 10.1.2.%X && echo 10.1.2.%X >> ok.txt || echo 10.1.2.%X >> no.txt)命令说明&#xff1a; %l 表示在(2,1,254) 按…

免费矢量图标网站都有哪些,推荐这10个

矢量图标是我们日常设计应用程序和网页过程中不可缺少的元素之一。通过小矢量图标&#xff0c;我们可以快速方便地实现视觉指导和功能划分。 但在创作中&#xff0c;设计师往往需要花费大量的时间和精力来寻找不同网站的矢量图标&#xff0c;以满足他们的设计需求&#xff0c;…

电子价签能给生鲜零售带来什么?

生鲜零售 变价难 超市中的水果、蔬菜、鱼肉海鲜等商品&#xff0c;往往会受季节变化、运输和储存成本、自然环境引起的生产成本、供需关系等因素影响&#xff0c;其商品价格变动比较频繁。如不能及时更新价格&#xff0c;容易影响商品的销售&#xff0c;进而影响超市的盈利能…

asp.net基于web的大学生交友网站shfw9294程序

为社会的和谐做出了贡献。 通过网络&#xff0c;不同地区的人员可跨越时间、地点进行交流。建设一个安全、可靠、开放、纯净的大学生交友网站系统&#xff0c;为中山市大学生提供一个使用方便的、 界面美观的交友园地是本系统的主要目的。 系统使用Visual studio.net2010作为系…

【计算机网络】总结复习(1)

本文主要记录在看小林coding 时的一些体会&#xff0c;会记录一些我认为重要的知识点以及感受 网络基础篇 osi 七层协议 tcp/ip 四层协议 应用层 传输层 网络层 网络接口层 实际场景&#xff1a; 输出网址 到 网页显示 过程url 解析&#xff08;协议web 服务器 数据源路径…