加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux的时钟处理机制

发布时间:2016-01-26 08:34:39 所属栏目:Linux 来源:网络整理
导读:在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理 等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统

2.1 数据结构

和硬件计时器(本文又称作硬件时钟,区别于软件时钟)相关的数据结构主 要有两个:

struct clocksource :对硬件设备的抽象,描述时钟源信息

struct clock_event_device :时钟的事件信息,包括当硬件时钟中断发生 时要执行那些操作(实际上保存了相应函数的指针)。本文将该结构称作为 “时钟事件设备”。

上述两个结构内核源代码中有较详细的注解,分别位于文件 clocksource.h 和 clockchips.h 中。需要特别注意的是结构 clock_event_device 的成员 event_handler ,它指定了当硬件时钟中断发生时,内核应该执行那些操作,也 就是真正的时钟中断处理函数。 在2.3节“时钟初始化”部分会介绍 它真正指向哪个函数。

Linux 内核维护了两个链表,分别存储了系统中所有时钟源的信息和时钟事 件设备的信息。这两个链表的表头在内核中分别是 clocksource_list 和 clockevent_devices 。图2-1显示了这两个链表。

图2-1 时钟源链表和时钟事件链表

Linux的时钟处理机制

2.2 通知链技术( notification chain )

在时钟处理这部分中,内核用到了所谓的“通知链( notification chain )”技术。所以在介绍时钟处理过程之前先来了解下“通知链 ”技术。

在 Linux 内核中,各个子系统之间有很强的相互关系,一些被一个子系统生 成或者被探测到的事件,很可能是另一个或者多个子系统感兴趣的,也就是说这 个事件的获取者必须能够通知所有对该事件感兴趣的子系统,并且还需要这种通 知机制具有一定的通用性。基于这些, Linux 内核引入了“通知链 ”技术。

2.2.1 数据结构:

通知链有四种类型,

原子通知链( Atomic notifier chains ):通知链元素的回调函数(当事 件发生时要执行的函数)只能在中断上下文中运行,不允许阻塞

可阻塞通知链( Blocking notifier chains ):通知链元素的回调函数在 进程上下文中运行,允许阻塞

原始通知链( Raw notifier chains ):对通知链元素的回调函数没有任何 限制,所有锁和保护机制都由调用者维护

SRCU 通知链( SRCU notifier chains ):可阻塞通知链的一种变体

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读