Jeffies值与linux系统时间——理论篇

xiaoxiao2021-02-28  13

Jeffies值与linux系统时间——理论篇


阅读目录:

1、 时间概念 - GMT及UTC

2、 时间点、时间段

3、 Jeffies与时间管理


1、 时间概念 - GMT及UTC

1.1、GMT时间

(1)GMT概念: GMT是Greenwich Mean Time缩写,即格林尼治时间。格林尼治是地球本初子午线的标界处,世界计算时间和经度的起点。是格林尼治本地时间。 (2)GMT意义:标准世界时间。如果对国际上某一重大事情,用地方时间来记录,就会感到复杂不便.而且将来日子一长容易搞错。因此,天文学家就提出一个大家都能接受且又方便的记录方法,那就是以格林尼治的地方时间为标准。

1.2、UTC时间(附带了时区信息) (1)UTC概念: 是 Coordinated Universal Time缩写,即世界协调时间。整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时UTC (2)UTC换算:UTC + 时区差 = 本地时间

例如:

北京时区是东八区,领先UTC八个小时,在电子邮件信头的Date域记为+0800。如果在电子邮件的信头中有这么一行: Date: Fri, 08 Nov 2002 09:42:22 +0800 说明信件的发送地的地方时间是二○○二年十一月八号,星期五,早上九点四十二分(二十二秒),这个地方的本地时领先UTC八个小时(+0800,就是东八区时间)。

时区差东为正,西为负。在此,把东八区时区差记为 +0800, UTC + (+0800) = 本地(北京)时间 (1) 那么,UTC =本地时间(北京时间))- 0800 (2) 即: 0942 - 0800 = 0142 ,即UTC是当天凌晨一点四十二分二十二秒。如果结果是负数就意味着是UTC前一天,把这个负数加上2400就是UTC在前一天的时间。

多数电子邮件程序,在显示时间时,计算机程序把时间先转换成为本地时间再显示,例如,邮件的Date域为: Date: Fri, 08 Nov2002 09:42:22 +0800 Outlook Express在显示时就显示为: Date: Thur, 07 Nov 2002 08:42:22 pm, 把北京时间转换成为了纽约时间,而且把二十四小时格式的时间转换成为了十二小时的格式。当然,为了时间转换正确,发送方和接受方的计算机的时区都要设置正确。


2、时间点与时间段概念:

(1)点时间:具体到某一时刻,比如天猫双十一秒杀活动将于2017年11月11日,0时0分0秒开始

(2) 段时间:段时间=终止点时间-起始点时间 ,例如双十一活动持续一天

(3)定时器和实时时钟:定时器(timer)定的时间就是段时间,实时时钟(RTC)就是和点时间有关的一个器件。二者配合使用,让计算机懂得时间。


3、Jeffies与时间管理:

3.1、jiffies引入

(1)jiffies是linux内核中的一个全局变量,用来记录自系统启动以来产生的节拍的总数。每次时钟中断处理程序都会增加该变量的值。

(2)内核配置的时候定义了一个节拍时间,实际上linux内核的调度系统工作时就是以这个节拍时间为时间片的。Jiffies记录到底经过了多少个节拍。

(3)jiffies变量开机时有一个基准值,然后内核每过一个节拍时间jiffies就会加1,然后到了系统的任意一个时间我们当前时间就被jiffies这个变量所标注。

3.2、linux系统时间管理

(1)内核在开机启动的时候会读取RTC(断电不会停)硬件获取一个时间作为初始基准时间,这个基准时间对应一个jiffies值(这个基准时间换算成jiffies值的方法是:用这个时间减去1970-01-01 00:00:00 +0000(UTC)标准基准0时,然后把这个时间段换算成jiffies数值),这个jiffies值作为我们开机时的基准jiffies值存在。

(2)系统运行时每个时钟节拍的末尾都会给jiffies这个全局变量加1,因此操作系统就使用jiffies这个全局变量记录了下来当前的时间。当我们需要当前时间点时,就用jiffies这个时间点去计算(计算方法就是先把这个jiffies值对应的时间段算出来(1000 * 1ms = 1s),然后加上1970-01-01 00:00:00 +0000(UTC)即可得到这个时间点)时间点是时间

(3)其实操作系统只在开机时读一次RTC,整个系统运行过程中RTC是无作用的。RTC的真正作用其实是在OS的2次开机之间进行时间的保存。

(4) jiffies这个变量记录的其实是段时间(其实就是当前时间和1970-01-01 00:00:00 +0000(UTC)这个时间的差值)

(5)一个时间节拍的时间取决于操作系统的配置,现代linux系统一般是10ms或者1ms。这个时间其实就是调度时间,在内核中用HZ来记录和表示。(频率f的单位)如果HZ定义成1000难么时钟节拍就是1/HZ,也就是1ms。


本文参考百度百科、朱有鹏老师嵌入式课程

附:UTC时间详细讲解: http://www.cnblogs.com/qiuyi21/archive/2008/03/04/1089456.html

转载请注明原文地址: https://www.6miu.com/read-1650217.html

最新回复(0)