- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第17章 时钟定时管理 学习本章要达到的目标: 1. 了解操作系统内核定时器的分类,熟悉实时时钟、时间戳计数器和可编程间隔定时器的硬件工作原理; 2.理解Linux内核时钟节拍的含义; 3.掌握Linux内核定时器的管理机制; 4. 掌握Linux定时器加载与使用方式。 17.1 内核定时器分类 80x86体系结构上,内核与时钟密切相关,与时钟相关的硬件有: 实时时钟(Real Time Clock,RTC) 时间戳计数器(Time Stamp Counter,TSC) 可编程间隔定时器(Programmable Interval Timer, PIT) SMP系统上的本地APIC定时器 高精度事件定时器(High Precision Event Timer,HPET)。 1. 实时时钟RTC RTC是一个独立于CPU的专用芯片,它依靠独立于系统供电电源的小电池给RTC的振荡器进行供电,因此在关机时也能保证时间是正确的。即使关闭PC电源,也会继续运转。这些芯片一般与主板的CMOS芯片组集成在一个芯片中。 例如:Motorala 146818,实时时钟中断是从IRQ8上引入的,能发出周期性的中断,频率在2HZ~8192之间,可以对其编程实现对时间的长短计时。 时间戳计数器TSC 从Pentium开始,很多80x86微处理器都引入了一个TSC,这是一个64位的、用作时间戳计数器的寄存器,它在每个时钟信号(CLK)到来时+1,例如时钟频率1GHz的微处理器,TSC每隔1ns就加1。 在Linux2.6.24中,使用对32位操作的rdtscl()函数和64位操作的rdtscll()函数分别用来读取TSC的值。 可编程间隔定时器PIT 在IBM PC中使用的是8253或8254定时计数器芯片 经过适当编程后,可以周期性的给出时钟中断。在8254 CMOS芯片中,使用I/O端口0x40~0x43,进行数据控制和数据操作。 Linux内核每隔一定的时间会周期性的发出中断,HZ是用来定义每一秒有几次定量中断的。 tick(滴答)是HZ的倒数,也就是发生两次定时中断的时间间隔。如HZ为100时,tick为1/100=10ms(毫秒)。 jiffies为Linux内核中的一个全局变量,用来记录从系统启动以来产生的节拍数, SMP系统上的本地APIC定时器 在SMP系统上 ,可以单次或者周期性的产生中断信号。 本地APIC只把中断信号发送给本地CPU进行处理,而PIC发送的中断信号任何CPU都可以处理 高精度计时器(HPET) 在linux2.6中增加了对高精度计时器HPET的支持。 高精度计时器是一种由微软和intel联合开发的新型定时芯片。该设备有一组计时器,每个计时器对应有自己的时钟信号,时钟信号到来的时候就会自动加1。 17.2内核时钟管理分析 时钟源及其初始化 软定时器 17.2.1时钟源及其初始化 在Linux内核启动过程中,要对所有定时机制所用到的软硬件资源进行初始化。 在sart_kernel()函数中: 时钟滴答的初始化tick_init 定时器相关初始化init_timers 高精度定时器相关初始化hrinit_timers xtime相关初始化timekeeping_init 时间的初始化time_init以及时钟调度器相关的初始化sched_colck_init 时钟源初始化 时间的初始化函数time_init( )在内核源码arch/x86/kernel/time_32.c文件中的定义如下: 17.2.2软定时器 Linux的动态定时器是一种软定时器,它可以被动态的创建和删除,当前活动的动态定时器个数没有限制。 软定时器列表结构timer_list中记录了软件时钟的到期时间以及到期后要执行的操作 软定时器列表管理结构struct tvec_base用于组织、管理软定时器的结构。在 SMP 系统中,每个 CPU 占有一个。 软定时器的组织结构 17.3 应用实例训练 针对Linux时钟管理机制,设计了一个小测试实例 以模块的方式插入内核,实现定时器my_timer1、 my_timer2,定时器my_timer1的过期时间为(1 x HZ),并在定时器my_timer1中创建定时器my_timer2,定时器my_timer2的过期时间为(2 x HZ)。 头文件及函数声明: 定义定时器my_timer1的过期函数my_timer1_function(),并在此函数中创建定时器my_timer2: 定义定时器my_timer2的过期函数my_timer2_function(): 定义安装模块初始化函数: 定义退出模块函数: 17.3.3编译及运行结果 查看系统信息 思考与练
您可能关注的文档
最近下载
- 《信用卡营销策略》课件.ppt VIP
- 2024年全国高考数学真题分类(-三角函数与解三角形)汇编(附答案).pdf VIP
- 班会课件不说脏话.pptx VIP
- 吊篮施工安全技术管理交流.ppt VIP
- 高速数字电路设计及EMC设计(华为)..doc VIP
- (完整word版)糖尿病酮症酸中毒抢救预案及流程.docx VIP
- 自考03709马克思主义基本原理概论(2023年高教版)全书知识点汇总.pdf VIP
- 园区物业服务投标方案.doc VIP
- 湖泊(水库)富营养化评价方法及分级计算.xls VIP
- TZS 0678—2025《生物安全实验室工作人员本底血清样本管理规范》(水印版).pdf VIP
文档评论(0)