514 Linux的时间系统

通过上面的时钟运作机制,我们知道了OS时钟在Linux中的重要地位。OS时钟记录的时间也就是通常所说的系统时间。系统时间是以“时钟滴答”为单位的,而时钟中断的频率决定了一个时钟滴答的长短,例如每秒有100次时钟中断,那么一个时钟滴答的就是10毫秒(记为10ms),相应地,系统时间就会每10ms1。不同的操作系统对时钟滴答的定义是不同的,例如DOS的时钟滴答滴答1/18.2sMinix的时钟滴答为1/60s等等。

Linux中用全局变量jiffies表示系统自启动以来的时钟滴答数目。jiffy是“瞬间、一会儿”的意思,和“时钟滴答”表达的是同一个意思。jiffiesjiffy的复数形式,在/kernel/time.c中定义如下:

 

unsigned long volatile jiffies

jiffies基础上,Linux提供了如下适合人们习惯的时间格式,/include/linux/time.h中定义如下:

 

struct timespec {               *  这是精度很高的表示*

   long    tv_sec;          * 秒 (second *

   long    tv_nsec;             /* 纳秒:十亿分之一秒( nanosecond*

}

 

struct timeval  {               * 普通精度   *

   int tv_sec;          /*  *

   int tv_usec;             /* 微秒:百万分之一秒(microsecond*

};

 

struct timezone {                     /*  时区  *

   int tz_minuteswest;    *  格林尼治时间往西方的时差 *

   int tz_dsttime;                  /* 时间修正方式 *

};

 

tv_sec表示秒(second),tv_usec表示微秒(microsecond,百万分之一秒即10-6秒),tv_nsec表示纳秒(nanosecond,十亿分之一秒即10-9秒)。定义tb_usectv_nsec的目的是为了适用不同的使用要求,不同的场合根据对时间精度的要求选用这两种表示。

另外,Linux还定义了用于表示更加符合大众习惯的时间表示:年、月、日。但是万变不离其宗,所有的时间应用都是建立在jiffies基础之上的,我们将详细讨论jiffies的产生和其作用。 简而言之,jiffies产生于时钟中断!