第17章 Linux 内核时钟定时机制

上传人:我*** 文档编号:133319851 上传时间:2020-05-26 格式:PDF 页数:27 大小:293.76KB
返回 下载 相关 举报
第17章 Linux 内核时钟定时机制_第1页
第1页 / 共27页
第17章 Linux 内核时钟定时机制_第2页
第2页 / 共27页
第17章 Linux 内核时钟定时机制_第3页
第3页 / 共27页
第17章 Linux 内核时钟定时机制_第4页
第4页 / 共27页
第17章 Linux 内核时钟定时机制_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《第17章 Linux 内核时钟定时机制》由会员分享,可在线阅读,更多相关《第17章 Linux 内核时钟定时机制(27页珍藏版)》请在金锄头文库上搜索。

1、Linux操作系统精讲操作系统精讲 大连理工大学软件学院大连理工大学软件学院 邱铁邱铁 综合楼综合楼413 Tel 0411 87571632 E mail qiutie 参考教材 参考教材 Linux应用与开发典型实例精讲 邱铁 于玉龙 徐 子川编著 应用与开发典型实例精讲 邱铁 于玉龙 徐 子川编著 清华大学出版社清华大学出版社 2010 5 第第17章 时钟定时管理章 时钟定时管理 学习本章要达到的目标 学习本章要达到的目标 1 了解操作系统内核定时器的分类 熟悉实时 时钟 时间戳计数器和可编程间隔定时器的硬件 工作原理 了解操作系统内核定时器的分类 熟悉实时 时钟 时间戳计数器和可编程

2、间隔定时器的硬件 工作原理 2 理解 理解Linux内核时钟节拍的含义 内核时钟节拍的含义 3 掌握 掌握Linux内核定时器的管理机制 内核定时器的管理机制 4 掌握掌握Linux定时器加载与使用方式 定时器加载与使用方式 17 1 内核定时器分类内核定时器分类 80 x86体系结构上 内核与时钟密切相关 与时钟相 关的硬件有 体系结构上 内核与时钟密切相关 与时钟相 关的硬件有 实时时钟 实时时钟 Real Time Clock RTC 时间戳计数器 时间戳计数器 Time Stamp Counter TSC 可编程间隔定时器 可编程间隔定时器 Programmable Interval

3、Timer PIT SMP系统上的本地系统上的本地APIC定时器定时器 高精度事件定时器 高精度事件定时器 High Precision Event Timer HPET 1 实时时钟实时时钟RTC RTC是一个独立于是一个独立于CPU的专用芯片 它依 靠独立于系统供电电源的小电池给 的专用芯片 它依 靠独立于系统供电电源的小电池给RTC的振 荡器进行供电 因此在关机时也能保证时间 是正确的 即使关闭 的振 荡器进行供电 因此在关机时也能保证时间 是正确的 即使关闭PC电源 也会继续运 转 这些芯片一般与主板的 电源 也会继续运 转 这些芯片一般与主板的CMOS芯片组集 成在一个芯片中 芯片组

4、集 成在一个芯片中 例如 例如 Motorala 146818 实时时钟中 断是从 实时时钟中 断是从IRQ8上引入的 能发出周期性的中 断 频率在 上引入的 能发出周期性的中 断 频率在2HZ 8192之间 可以对其编 程实现对时间的长短计时 之间 可以对其编 程实现对时间的长短计时 时间戳计数器时间戳计数器TSC 从从Pentium开始 很多开始 很多80 x86微处理器都 引入了一个 微处理器都 引入了一个TSC 这是一个 这是一个64位的 用作 时间戳计数器的寄存器 它在每个时钟信号 位的 用作 时间戳计数器的寄存器 它在每个时钟信号 CLK 到来时 到来时 1 例如时钟频率 例如时钟

5、频率1GHz 的微处理器 的微处理器 TSC每隔每隔1ns就加就加1 在在Linux2 6 24中 使用对中 使用对32位操作的位操作的 rdtscl 函数和函数和64位操作的位操作的rdtscll 函数 分别用来读取 函数 分别用来读取TSC的值 的值 可编程间隔定时器可编程间隔定时器PIT 在在IBM PC中使用的是中使用的是8253或或8254定时 计数器芯片 定时 计数器芯片 经过适当编程后 可以周期性的给出时钟中 断 在 经过适当编程后 可以周期性的给出时钟中 断 在8254 CMOS芯片中 使用芯片中 使用I O端 口 端 口0 x40 0 x43 进行数据控制和数据操 作 进行数

6、据控制和数据操 作 Linux内核每隔一定的时间会周期性的发出 中断 内核每隔一定的时间会周期性的发出 中断 HZ是用来定义每一秒有几次定量中 断的 是用来定义每一秒有几次定量中 断的 tick 滴答 是 滴答 是HZ的倒数 也就是发生两 次定时中断的时间间隔 如 的倒数 也就是发生两 次定时中断的时间间隔 如HZ为为100时 时 tick为为1 100 10ms 毫秒毫秒 jiffies为为Linux内核中的一个全局变量 用 来记录从系统启动以来产生的节拍数 内核中的一个全局变量 用 来记录从系统启动以来产生的节拍数 extern u64 jiffy data jiffies 64 exte

7、rn unsigned long volatile jiffy data jiffies SMP系统上的本地系统上的本地APIC定时器定时器 在在SMP系统上系统上 可以单次或者周期性的产生 中断信号 可以单次或者周期性的产生 中断信号 本地本地APIC只把中断信号发送给本地只把中断信号发送给本地CPU进 行处理 而 进 行处理 而PIC发送的中断信号任何发送的中断信号任何CPU都 可以处理 都 可以处理 高精度计时器高精度计时器 HPET 在在linux2 6中增加了对高精度计时器中增加了对高精度计时器 HPET的支持 的支持 高精度计时器是一种由微软和高精度计时器是一种由微软和intel联

8、合开 发的新型定时芯片 该设备有一组计时器 每个计时器对应有自己的时钟信号 联合开 发的新型定时芯片 该设备有一组计时器 每个计时器对应有自己的时钟信号 时钟信 号到来的时候就会自动加 时钟信 号到来的时候就会自动加1 17 2内核时钟管理分析内核时钟管理分析 时钟源及其初始化时钟源及其初始化 软定时器软定时器 17 2 1时钟源及其初始化时钟源及其初始化 在在Linux内核启动过程中 要对所有定时机 制所用到的软硬件资源进行初始化 内核启动过程中 要对所有定时机 制所用到的软硬件资源进行初始化 在在sart kernel 函数中 函数中 时钟滴答的初始化时钟滴答的初始化tick init 定

9、时器相关初始化定时器相关初始化init timers 高精度定时器相关初始化高精度定时器相关初始化hrinit timers xtime相关初始化相关初始化timekeeping init 时间的初始化时间的初始化time init以及时钟调度器相 关的初始化 以及时钟调度器相 关的初始化sched colck init 时钟源初始化时钟源初始化 时间的初始化函数时间的初始化函数time init 在内核源 码 在内核源 码arch x86 kernel time 32 c文件 中的定义如下 文件 中的定义如下 void init time init void tsc init 时间戳计数器T

10、SC late time init choose time init 17 2 2软定时器软定时器 Linux的动态定时器是一种软定时器 它可 以被动态的创建和删除 当前活动的动态定 时器个数没有限制 的动态定时器是一种软定时器 它可 以被动态的创建和删除 当前活动的动态定 时器个数没有限制 软定时器列表结构软定时器列表结构timer list中记录了软 件时钟的到期时间以及到期后要执行的操作 中记录了软 件时钟的到期时间以及到期后要执行的操作 struct timer list struct list head entry 定时器链表的入口 unsigned long expires 到期时

11、间 以jiffies为单位 void function unsigned long 勾挂函数 定时到期时 所要执行的函数 unsigned long data 勾挂函数的参数 struct tvec t base s base 记录软定时器所在的struct tvec base变量 软定时器列表管理结构软定时器列表管理结构struct tvec base用于组织 管理软定时器的结 构 在 用于组织 管理软定时器的结 构 在 SMP 系统中 每个系统中 每个 CPU 占有一 个 占有一 个 软定时器的组织结构软定时器的组织结构 17 应用实例训练 应用实例训练 针对针对Linux时钟管理机制 设

12、计了一个小测 试实例 时钟管理机制 设计了一个小测 试实例 以模块的方式插入内核 实现定时器以模块的方式插入内核 实现定时器 my timer1 my timer2 定时器 定时器 my timer1的过期时间为的过期时间为 1 x HZ 并 在定时器 并 在定时器my timer1中创建定时器中创建定时器 my timer2 定时器 定时器my timer2的过 期时间为 的过 期时间为 2 x HZ 头文件及函数声明 头文件及函数声明 include include MODULE LICENSE GPL void my timer1 function unsigned long void

13、my timer2 function unsigned long struct timer list my timer1 定义定时器列表my timer1 struct timer list my timer2 定义定时器列表my timer2 static int init timer init module void static void exit timer exit module void module init timer init module module exit timer exit module 定义定时器定义定时器my timer1的过期函数的过期函数my timer1

14、 function 并在此函数中创建定时器 并在此函数中创建定时器my timer2 void my timer1 function unsigned long data printk KERN INFO In the my timer1 function n printk KERN INFO my timer1 will create my timer2 n unsigned long j jiffies init timer 初始化定时器my timer2 my timer2 expires j 2 HZ 设置定时器my timer2的过期时 间 my timer2 data my tim

15、er2 function my timer2 function 设置定时器my timer2的到期执行的函数my timer2 function add timer printk KERN INFO my timer2 init n struct timer list mytimer data del timer mytimer 删除my timer1 printk KERN INFO my timer1 was deleted n 定义定时器定义定时器my timer2的过期函数的过期函数 my timer2 function void my timer2 function unsigned

16、 long data printk KERN INFO In the my timer2 function n struct timer list mytimer data del timer mytimer 删除my timer2 printk KERN INFO my timer2 was deleted n 定义安装模块初始化函数 定义安装模块初始化函数 安装模块 int timer init module void printk KERN INFO my timer1 will be created n unsigned long j jiffies init timer 初始化定时器my timer1 my timer1 expires j 1 HZ 设置定时器my timer1的过期 时间 my timer1 data 设置定时器my timer1的到期执行的函数my timer1 function my timer1 function my timer1 function add timer printk KERN INFO my timer1 init n return

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号