首页 > 代码库 > 墙上时间

墙上时间

原文链接:http://blog.csdn.net/sfrysh/article/details/5828475

墙上时间,在系统启动过程中根据实时钟(RTC)芯片保存数据进行初始化,在系统运行期间由系统时钟维护并在合适的时刻和RTC芯片进行同步。墙上时间存储于系统核心变量xtime中,该变量记录了现实世界中的年月日格式的时间,以便内核对某些对象和事件作时间标记,如记录文件的创建时间、修改时间、上次访问时间,或者供用户进程通过系统调用来使用。

内核中使用struct timespec类型的变量xtime来记录墙上时间,该变量在文件src/kernel/time.c中的第564行声明如下:

struct timespec xtime __attribute__ ((aligned (16)));

 

 

其中,数据结构struct timespec在文件src/include/Linux/time.h中的第12行开始定义,代码如下:

struct timespec {       
time_t tv_sec;  /* seconds */ 
long  tv_nsec;  /* nanoseconds */ 
};

 

 

 

该结构用来表示当前时刻距UNIX时间基准1970/01/01/00:00:00的相对时间。其中成员变量tv_sec用来记录距标准时间1970/01/01/00:00:00的秒数,成员变量tv_nsec用来记录不足一秒的微秒值,其取值范围为0~999 999。

变量xtime的初值在系统初始化过程由函数time_init()进行设置,该函数通过读取系统实时钟芯片RTC的值来为变量xtime赋初值;该变量的值在系统运行过程中由系统时钟中断处理程序负责在每次时钟中断时进行更新。该变量的初始化语句如下。

xtime.tv_sec = get_cmos_time();
xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);