Linux时间机制.PPT

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux时间机制

Linux时间机制 时间在一个操作系统内核中占据着重要的地位,它是驱动一个OS内核运行的“起博器” 内核的两种类型时间: 持续记录当前的时间和日期 在内核运行期间持续记录当前的时间与日期,是为了内核对某些对象和事件作时间标记(timestamp,也称为“时间戳”),或供用户通过时间syscall进行检索。 维持定时器 维持一个固定周期的定时器,是为了提醒内核或用户一段时间已经过去了。 时间的基本概念 (1)时钟周期(clock cycle)的频率:8253/8254 PIT的本质就是对由晶体振荡器产生的时钟周期进行计数,晶体振荡器在1秒时间内产生的时钟脉冲个数就是时钟周期的频率。 (2)时钟滴答(clock tick):当PIT通道0的计数器减到0值时,它就在IRQ0上产生一次时钟中断,也即一次时钟滴答。 (3)时钟滴答的时间间隔:Linux用全局变量tick来表示时钟滴答的时间间隔长度 (4)宏LATCH:Linux用宏LATCH来定义要写到PIT通道0的计数器中的值,它表示PIT将每隔多少个时钟周期产生一次时钟中断。 时间的基本概念 1个时钟滴答(10ms) 1S 1个时钟周期 (1s由 1193180个时钟周期组成,即晶体振荡器1s产生1193180个时钟脉冲) Linux表示时间的数据结构 (1)全局变量jiffies:这是一个32位的无符号整数,用来表示自内核上一次启动以来的时钟滴答次数。每发生一次时钟滴答,内核的时钟中断处理函数timer_interrupt()都要将该全局变量jiffies加1 unsigned long volatile jiffies; C语言限定符volatile表示jiffies是一个易改变的变量,因此编译器将使对该变量的访问从不通过CPU内部cache来进行。 (2)全局变量xtime:它是一个timeval结构类型的变量,用来表示当前时间距UNIX时间基准1970-01-01 00:00:00的相对秒数值。 (3)全局变量sys_tz:它是一个timezone结构类型的全局变量,表示系统当前的时区信息。 主要内容 硬时钟 时钟中断 定时器 主要内容 硬时钟 定时中断 定时器 硬时钟 实时时钟(RTC) 可编程间隔定时器(PIT) 时间戳计数器(TSC) 硬时钟 RTC (1)所有的PC机就都包含了一个叫做实时时(RTC)的时钟芯片,以便在PC机断电后仍然能够继续保持时间。 (2)RTC独立于CPU和所有其他芯片。它是通过主板上的电池来供电的,而不是通过PC机电源来供电的,因此当PC机关掉电源后,RTC仍然会继续工作。 (3)通常,CMOS RAM和RTC被集成到一块芯片上,因此RTC也称作“CMOS Timer”。 Linux有两套时间系统:硬时钟和软时钟 (1)硬时钟:实时时钟RTC (2)软时钟:系统初始化期间,linux调用time_init()设置时间和日期,它通过调用get_cmos_time()函数,从RTC中读取时间和日期,然后初始化全局时间变量xtime (3)此后软硬时钟独立运行,内核不再需要RTC,而是依靠时钟中断下半部分TIMER_BH ,它在每个节拍都被激活,来维护时间(注:软时钟维护的时间并不会每时每刻准确) 硬时钟 实时时钟(RTC) 可编程间隔定时器(PIT) 时间戳计数器(TSC) PIT 每个PC机中都有一个PIT,以通过IRQ0产生周期性的时钟中断信号。当前使用最普遍的是Intel 8254 PIT芯片,它的I/O端口地址是0x40~0x43。 Intel 8254 PIT有3个计时通道,每个通道都有其不同的用途: (1) 通道0用来负责更新系统时钟。每当一个时钟滴答过去时,它就会通过IRQ0向系统产生一次时钟中断。 (2) 通道1通常用于控制DMAC对RAM的刷新。 (3) 通道2被连接到PC机的扬声器,以产生方波信号。 每个通道都有一个向下减小的计数器,因此对于通道0而言,当他的计数器减到0时,PIT就向系统产生一次时钟中断,表示一个时钟滴答已经过去了。 TSC (1) 从Pentium开始,所有的Intel 80x86 CPU就都又包含一个64位的时间戳记数器(TSC)的寄存器。 (2)该寄存器实际上是一个不断增加的计数器,它在CPU的每个时钟信号到来时加1(也即每一个clock-cycle输入CPU时,该计数器的值就加1 (3)汇编指令rdtsc可以用于读取TSC的值。利用CPU的TSC,操作系统通常可以得到更为精准的时间度量。 主要内容 硬时钟 时钟中断 定时器 时钟中断 如前所述,8253/8254 PIT的

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档