5.1.4
Linux的时间系统
通过上面的时钟运作机制,我们知道了OS时钟在Linux中的重要地位。OS时钟记录的时间也就是通常所说的系统时间。系统时间是以“时钟滴答”为单位的,而时钟中断的频率决定了一个时钟滴答的长短,例如每秒有100次时钟中断,那么一个时钟滴答的就是10毫秒(记为10ms),相应地,系统时间就会每10ms增1。不同的操作系统对时钟滴答的定义是不同的,例如DOS的时钟滴答滴答为1/18.2s,Minix的时钟滴答为1/60s等等。
Linux中用全局变量jiffies表示系统自启动以来的时钟滴答数目。jiffy是“瞬间、一会儿”的意思,和“时钟滴答”表达的是同一个意思。jiffies是jiffy的复数形式,在/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_usec和tv_nsec的目的是为了适用不同的使用要求,不同的场合根据对时间精度的要求选用这两种表示。
另外,Linux还定义了用于表示更加符合大众习惯的时间表示:年、月、日。但是万变不离其宗,所有的时间应用都是建立在jiffies基础之上的,我们将详细讨论jiffies的产生和其作用。 简而言之,jiffies产生于时钟中断!