huyc

导航

time(7)

TIME(7) 2009-02-10

NAME
time —— 时间和定时器概述

DESCRIPTION
实际时间和进程时间
实际时间定义为相对于某些固定点所测定的时间。可能相对于过去的一个基准点(参见下面的纪元时间和日历时间描述),或相对于一些进程活跃其间的点(比如进程开始时)。

进程时间定义为进程占用的CPU时间量。有时还细分为用户和系统两个部分。用户CPU时间是用户模式下执行代码耗费的时间,系统CPU时间是指系统模式下内核代表进程执行所花费的时间(如执行系统调用)。time(1)命令可以用于确定程序执行耗费的CPU时间量。一个程序可以使用times(2),getrusage(2)或clock(3)确定自己耗费的CPU时间。

硬件时钟
大多数的计算机都有一个(电池供电的)硬件时钟,每当内核引导时都读取它以初始化软件时钟。更多细节参见rtc(4)和hwclock(8)。

软件时钟,HZ和Jiffies
各种设置超时的系统调用(比如select(2),sigtimedwait(2))和测量CPU时间的系统调用(比如getrusage(2))的精度最终取决于软件时钟,一个由内核维护的以Jiffy为单位测量的时钟。Jiffy的大小取决于内核常量HZ。

HZ的值根据内核版本和硬件平台而有不同。i386平台下:内核2.4.x及其以上版本,HZ是100,Jiffy值为0.01秒;从内核2.6.0开始,HZ升为1000,Jiffy的值为0.001秒。内核2.6.13往后,HZ成为一个内核配置参数,可以为100,250(默认值),或1000,生成的Jiffy值为0.01,0.004或0.001秒。内核2.6.20往后,又多了一个可用频率:300,一个能被常见的视频帧率整除的数(PAL,25Hz;NTSC,30Hz)

系统调用times(2)是一个特殊的例子。它导出的时间粒度由内核常量USER_HZ所定义。用户空间的应用程序可以通过sysconf(_SC_CLK_TCK)获得此常量值。

高分辨率计时器
Linux2.6.21之前,计时器和sleep系统调用的精度(参见下文)也一样受限于Jiffy的大小。

从Linux 2.6.21开始,Linux支持高分辨率计时器(HRTs),可选的通过CONFIG_HIGH_RES_TIMERS配置。在一个支持HRTs的系统上,sleep和计时器系统调用的精度不再受限于Jiffy,而可以直接依赖硬件的精度(微秒是典型现代计算机的精度)。你可以检查clock_getres(2)的返回值,或查看/proc/timer_list的“resolution”项以了解是否支持高分辨率计时器。

HRTs are not supported on all hardware architectures. (Support is provided on x86, arm, and powerpc, among others.)

纪元时间
Unix系统表示的以秒为单位的时间,时间起点定义为UTC的1970年1月1日早晨0:00:00。

一个程序可以用gettimeofday(2)确定其日历时间,它返回自纪元时间起,已经过去的时间数(秒和微秒);time(2)提供类似的信息,但是只返回最近的秒数。系统时间可以使用settimeofday(2)修改。

修正时间(Broken-down time)
某些库函数使用tm结构指代修正时间,它保存的时间值分为不同的组成部分(年,月,日,时,分,秒等等)。这个结构在ctime(3)中描述,该文档还描述了在日历时间和修正时间之间转换的函数。用于在修正时间和可打印字符串之间转换的函数在ctime(3),strftime(3)和strptime(3)中描述。

睡眠和设置计时器
许多系统调用和函数允许程序睡眠(挂起执行)一段给定的时间,参见nanosleep(2),clock_nanosleep(2)和sleep(3)。

许多系统调用允许进程设置一个计时器,要么在将来的一些时间点超时,要么在重复间隔超时,参见alarm(2),getitimer(2),timerfd_create(2)和timer_create(2)。

SEE ALSO
date(1), time(1), adjtimex(2), alarm(2), clock_gettime(2),clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2), timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3), pthread_getcpuclockid(3), sleep(3), strftime(3),strptime(3), timeradd(3), usleep(3), rtc(4), hwclock(8)

COLOPHON
This page is part of release 3.23 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.

posted on 2011-12-27 16:46  huyc  阅读(2779)  评论(0编辑  收藏  举报