TIME - Linux手册页
Linux程序员手册 第7部分
更新日期: 2020-04-11
名称
时间-时间和计时器概述
说明
Real time and process time
实时定义为从某个固定点开始的时间,该固定点可以是过去的标准点(请参见下面的"大纪元"和"日历时间"的描述),也可以是过程寿命中某个点(例如开始时间)的时间(经过的时间)。
进程时间定义为进程使用的CPU时间量。有时,它分为用户和系统组件。用户CPU时间是在用户模式下执行代码所花费的时间。系统CPU时间是内核在系统模式下代表进程执行(例如执行系统调用)所花费的时间。 time(1)命令可用于确定程序执行过程中消耗的CPU时间。程序可以使用times(2),getrusage(2)或clock(3)来确定已消耗的CPU时间量。
The hardware clock
大多数计算机都具有(电池供电)硬件时钟,内核在启动时会读取该时钟,以初始化软件时钟。有关更多详细信息,请参见rtc(4)和hwclock(8)。
The software clock, HZ, and jiffies
设置超时(例如select(2),sigtimedwait(2))和测量CPU时间(例如getrusage(2))的各种系统调用的精度受到软件时钟分辨率的限制,软件时钟的分辨率由衡量时间的内核。抖动的大小由内核常数HZ的值确定。
HZ的值因内核版本和硬件平台而异。在i386上,情况如下:在2.4.x(含)以下的内核上,HZ为100,给定值为0.01秒。从2.6.0开始,HZ提升到1000,产生0.001秒的跳动。从内核2.6.13开始,HZ值是内核配置参数,可以为100、250(默认值)或1000,产生的吉菲斯值分别为0.01、0.004或0.001秒。从内核2.6.20开始,可以使用另一个频率:300,该频率平均分配给普通视频帧速率(PAL,25 HZ; NTSC,30 HZ)。
times(2)系统调用是一个特例。它以内核常量USER_HZ定义的粒度报告时间。用户空间应用程序可以使用sysconf(_SC_CLK_TCK)确定此常数的值。
System and process clocks; time namespaces
内核支持一系列时钟,这些时钟可测量各种经过的时间和虚拟的(即消耗的CPU)时间。这些时钟在clock_gettime(2)中描述。使用clock_settime(2)可设置一些时钟。某些时钟的值由时间名称空间虚拟化。参见time_namespaces(7)。
High-resolution timers
在Linux 2.6.21之前,计时器和睡眠系统调用的准确性(请参见下文)也受抖动大小的限制。
从Linux 2.6.21开始,Linux支持高分辨率计时器(HRT),可以选择通过CONFIG_HIGH_RES_TIMERS进行配置。在支持HRT的系统上,睡眠和计时器系统调用的准确性不再受干扰的限制,而是可以达到硬件允许的精度(现代硬件通常具有微秒级的精度)。您可以通过检查对clock_getres(2)的调用返回的分辨率或查看/ proc / timer_list中的" resolution"条目来确定是否支持高分辨率计时器。
并非所有硬件体系结构都支持HRT。 (在x86,arm和powerpc等上提供支持。)
The Epoch
自1970年1月1日00:00:00 +0000(UTC)以来,UNIX系统以秒为单位表示时间。
程序可以通过clock_gettime(2)CLOCK_REALTIME时钟来确定日历时间,该时钟返回自大纪元以来已经过的时间(以秒和纳秒为单位)。 time(2)提供类似的信息,但仅精确到最接近的秒。可以使用clock_settime(2)更改系统时间。
Broken-down time
某些库函数使用tm类型的结构来表示细分时间,该时间存储分解为不同部分(年,月,日,时,分,秒等)的时间值。 ctime(3)中描述了此结构,该文件还描述了在日历时间和细分时间之间转换的函数。在ctime(3),strftime(3)和strptime(3)中描述了在细分时间和时间的可打印字符串表示形式之间转换的函数。
Sleeping and setting timers
各种系统调用和函数允许程序在指定的时间段内休眠(挂起执行)。参见nanosleep(2),clock_nanosleep(2)和sleep(3)。
各种系统调用都允许一个进程设置一个计时器,该计时器在将来的某个时间点终止,并且可以选择重复一次。请参阅alarm(2),getitimer(2),timerfd_create(2)和timer_create(2)。
Timer slack
从Linux 2.6.28开始,可以控制线程的"定时器松弛"值。计时器松弛时间是内核可以延迟某些因超时而阻塞的系统调用的唤醒时间的长度。允许此延迟允许内核合并唤醒事件,从而可能减少系统唤醒次数并节省功耗。有关更多详细信息,请参见prctl(2)中PR_SET_TIMERSLACK的描述。
另外参见
date(1),time(1),timeout(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),ntp_adjtime(3),ntp_gettime(3),pthread_getcpuclockid(3),sleep(3),strftime(3),strptime(3),timeradd(3),usleep(3), rtc(4),time_namespaces(7),hwclock(8)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。