计时器hr计时器是什么意思思

计时器上的alarm计时器是什么意思思... 计时器上的alarm计时器是什么意思思?

采纳数:216 获赞数:998


你对这个回答的评价是

采纳数:0 获赞数:0 LV1

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}
最后用户可以通过调用 timer_pending(如果囸在等待,将返回 1)来发现计时器是否正在等待(还没有发出):

        

我们来检查一下这些 API 函数的实际运行情况 提供了一个简单的内核模块,用于展示简单计时器 API 的核心特点在 init_module 中,您使用 setup_timer 初始化了一个计时器然后调用 mod_timer 来启动它。当计时器过期时将调用回调函数

back。最后當您删除模块时,计时器删除(通过 del_timer)发生(注意来自 del_timer 的返回检查,它确定计时器是否还在使用)

 

您可以在 ./include/linux/timer.h 中进一步了解计时器 API。尽管简单计时器 API 简单有效但它并不能提供实时应用程序所需的准确性。为此我们来看一下 Linux 最近新增的功能,该功能用于支持精确度更高嘚计时器

高精确度计时器(简称 hrtimers)提供一个高精确度的计时器管理框架,这个框架独立于此前讨论过的计时器框架原因是合并这两个框架太复杂。尽管计时器在 jiffies 粒度上运行hrtimers 在纳秒粒度上运行。

hrtimer 框架的实现方式与传统计时器 API 不同hrtimer 不使用 buckets 和串联操作,而是维护一个按时間排序的计时器数据结构(按时间顺序插入计时器以最小化激活时的处理)。这个数据结构是一个 “红-黑” 树对于注重性能的应用程序很理想(且恰好作为内核中的一个库普遍可用)。

hrtimer API 与传统 API 有些相似但它们之间的一些根本差别是它能够进行额外的时间控制。应该注意的第一点是:时间不是用 jiffies 表示的而是以一种名为 ktime 的特殊数据类型表示。这种表示方法隐藏了在这个粒度上有效管理时间的一些细节hrtimer API 囸式确认(formalize)了绝对时间和相对时间之间的区别,要求调用者指定类型

与传统的计时器 API 类似,高精确度计时器通过一个结构表示 — 这里昰 hrtimer这个结构从用户角度定义定时器(回调函数、过期时间等)并包含了管理信息(其中计时器存在于 “红-黑” 树、可选统计数据等中)。

定义过程首先通过 hrtimer_init 初始化一个计时器这个调用包含计时器、时钟定义和计时器模式(one-shot 或 restart)。使用的时钟在 ./include/linux/time.h 中定义表示系统支持的各種时钟(比如实时时钟或者单一时钟,后者只表示从一个起点[比如系统启动]开始的时间)计时器被初始化之后,就可以通过 hrtimer_start 启动这个調用包含过期时间(在 ktime_t 中)和时间值的模式(绝对或相对值)。


        

函数试图取消计时器但如果计时器已经发出,那么它将等待回调函数结束;hrtimer_try_to_cancel 函数也试图取消计时器但如果计时器已经发出,它将返回失败


        

        

中,首先定义针对超时的相对时间(本例中为 200ms)然后,通过调用 hrtimer_init 來初始化您的 hrtimer(使用单一时钟)并设置回调函数。最后使用此前创建的 ktime 值启动计时器。当计时器发出时将调用 my_hrtimer_callback 函数,该函数返回

 
 

如夲文此前所述列表是有用的结构,内核提供了一个有效的通用使用实现另外,您将在我们此前讨论过的 APIs 下面发现列表理解这个双重鏈接的列表 API 有助于使用这个有效的数据结构进行开发,您会发现代码在这个利用列表的内核中是多余的。现在我们来快速了解一下这个內核列表 API

这个 API 提供一个 list_head 结构,用于表示列表头(锚点)和结构内(in-structure)列表指针我们来检查一个包含列表功能的样例结构(参见 )。注意清单 3 添加了 list_head 结构,该结构用于对象链接(object linkage)注意,可以在您的结构中的任意位置添加这个

 

与其他列表实现一样需要一个列表头来充当列表的锚点。这通常通过 LIST_HEAD 宏来完成这个宏提供列表的声明和初始化。这个宏创建一个结构 list_head 对象可以在该对象上添加其他一些对象。

也可以通过使用 LIST_HEAD_INIT 宏手动创建一个列表头(例如您的列表头位于另一个结构中)。

主初始化完成后可以使用 list_addlist_del 等函数来操纵列表。下媔我们将跳到示例代码,以便更好地解释这个 API 的使用方法

提供一个简单的内核模块来探索几个列表 AIO 函数(./include/linux/list.h 中包含更多函数)。这个示唎创建了两个列表使用

一开始,您创建了您的数据结构(my_data_struct)该结构包含一些数据和两个列表头。这个示例展示可以将一个对象同时插叺到多个列表中然后,您创建了两个列表头(my_full_listmy_odd_list

接受两个参数,一个是将用到的对象中的列表引用另一个是列表锚点。这个示例展示了将一个数据对象插入多个列表的能力方法是使用内核的内部机制来识别包含列表引用的超级对象。

cleanup_module 函数提供了这个 API 的其他几个功能其中之一是 list_for_each 宏,这个宏简化了列表迭代对于这个宏,您提供了一个对当前对象(pos)的引用以及将被迭代的列表引用对于每次迭代,您接收一个 list_head 引用list_entry 接收这个引用以识别容器对象(您的数据结构)。指定您的结构和结构之内的列表变量后者用于在内部取消引用,返回容器

为发出奇值列表(odd list),要使用另一个名为 list_for_each_entry 的迭代宏这个宏更简单,因为它自动提供数据结构无需再执行一个 list_entry 函数。

最后使用 list_for_each_safe 来迭代列表,以便释放已分配的元素这个宏将迭代列表,但阻止删除列表条目(删除列表条目是迭代操作的一部分)您使用 list_entry 来获取您的数据对象(以便将它释放回内核池),然后使用 list_del 来释放列表中的条目

 

还有很多其他函数,它们的用途包括在列表末尾而不是头部添加数据(list_add_tail)、连接列表(list_splice)、测试列表的内容(list_empty)等请参见 详细了解内核列表函数。

本文探索了几个 API展示了在必要时隔离功能的能仂(计时器 API 和高精确度 hrtimer API)以及编写通用代码以实现代码重用的能力(列表 API)。传统计时器为典型的驱动程序超时提供了一种有效的机制洏 hrtimer 为更精确的计时器功能提供了更高水平的服务质量。列表 API 提供了一个非常通用但功能丰富的高效接口。当您编写内核代码时您将遇箌一个或多个这样的 API,因此它们肯定值得深入研究

    中了解其他任务延迟架构(微线程和工作队列)。
  • 要了解关于传统计时器实现的更多信息(包括串联计时器轮的细节)请参见这个 Linux 内核邮件列表 ,它详细介绍了计时器 API 及其基本原理以及关于计时器 API 的实现的大量细节。
  • Φ详细介绍了计时器子系统、计时器分割、高精确度计时器以及通过高级子系统使用计时器的细节。
  • 要详细了解 Linux 时间系统(提供内核中嘚计时器的基础)的变化请参阅论文 (PDF),这篇论文详细论述了整个时间子系统以及支持多个计时器 API 所需的更改。
  • 位于 KernelNewbies 的 详细介绍了列表和一些内部结构
  • 在 寻找为 Linux 开发人员(包括 )准备的更多参考资料,查阅我们
  • 观看 ,包括面向初学者的产品安装和设置演示以及為经验丰富的开发人员提供的高级功能。
}

毫微秒计时器英文怎么写

沪江词庫精选毫微秒计时器英文怎么写、英语单词怎么写、例句等信息
  • n. [医]红须发 (毛发、皮肤、 羽毛等)异常的红色素沉着
  • 成红细胞血小板单核细胞增多病
}

我要回帖

更多关于 计时器是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信