ИМЯ

time - обзор времени и таймеров

ОПИСАНИЕ

Реальное время и время процесса

Реальное время (real time) — время, измеряемое от некоторой постоянной точки, или от стандартной точки в прошлом (смотрите описание эпохи (Epoch) и календарного времени далее), или от некоторой точки (например, с момента запуска) в жизни процесса ( прошедшее время (elapsed time)).
Время процесса (process time) — количество процессорного времени, использованного процессом. Иногда его делят на пользовательское (user) и системное (system). Пользовательское время ЦП — это время, потраченное на исполнение кода в режиме пользователя. Системное время ЦП — это время, потраченное ядром, выполняющемся в системном режиме, для процесса (например, на обработку системных вызовов). Команда time(1) позволяет определить количество процессорного времени, затраченного при выполнении программы. Программа может определить количество потраченного процессорного времени с помощью times(2), getrusage(2) или clock(3).

Аппаратные часы

В большинстве компьютеров (оснащённых батареей) имеются аппаратные часы, которые ядро читает при запуске для инициализации программных часов. Подробности смотрите в rtc(4) и hwclock(8).

Программные часы, HZ и миги (jiffies)

Точность различных системных вызовов, которые задают время ожидания (timeouts) (например, select(2), sigtimedwait(2)) и измеряют процессорное время (например, getrusage(2)), ограничена точностью программных часов (software clock) — часов, поддерживаемых ядром, у которых время измеряется в мигах (jiffies). Размер мига определяется значением константы ядра HZ.
The value of HZ varies across kernel versions and hardware platforms. On i386 the situation is as follows: on kernels up to and including Linux 2.4.x, HZ was 100, giving a jiffy value of 0.01 seconds; starting with Linux 2.6.0, HZ was raised to 1000, giving a jiffy of 0.001 seconds. Since Linux 2.6.13, the HZ value is a kernel configuration parameter and can be 100, 250 (the default) or 1000, yielding a jiffies value of, respectively, 0.01, 0.004, or 0.001 seconds. Since Linux 2.6.20, a further frequency is available: 300, a number that divides evenly for the common video frame rates (PAL, 25 Hz; NTSC, 30 Hz).
Системный вызов times(2) — это особый случай. Он выдаёт время с точностью, определяемой константой ядра USER_HZ. Приложения пользовательского пространства могут определить значение этой константы с помощью sysconf(_SC_CLK_TCK).

System and process clocks; time namespaces

The kernel supports a range of clocks that measure various kinds of elapsed and virtual (i.e., consumed CPU) time. These clocks are described in clock_gettime(2). A few of the clocks are settable using clock_settime(2). The values of certain clocks are virtualized by time namespaces; see time_namespaces(7).

Таймеры высокой точности

До Linux 2.6.21 точность системных вызовов таймера и сна (смотрите далее) была ограничена размером мига.
Начиная с Linux 2.6.21, Linux поддерживает таймеры высокой точности (HRT), включаемые через CONFIG_HIGH_RES_TIMERS. В системе, которая поддерживает HRT, точность сна и таймеров в системных вызовах больше не ограничена мигом, а только точностью аппаратуры (в современной аппаратуре, обычно, микросекундная точность). Вы можете определить поддерживаются ли таймеры высокой точности, проверив результат вызова clock_getres(2) или поискав записи «resolution» в /proc/timer_list.
HRTs are not supported on all hardware architectures. (Support is provided on x86, ARM, and PowerPC, among others.)

Эпоха

В системах UNIX время считается в секундах и начинается с эпохи (Epoch), 1970-01-01 00:00:00 +0000 (UTC).
Программа может определить календарное время c помощью часов CLOCK_REALTIME через clock_gettime(2), которые возвращают время (в секундах и наносекундах), прошедшее с начала эпохи; вызов time(2) выдаёт подобную информацию, но с точностью только до ближайшей секунды. Системное время можно изменять с помощью clock_settime(2).

Календарное время, разделённое на компоненты

Certain library functions use a structure of type tm to represent broken-down time, which stores time value separated out into distinct components (year, month, day, hour, minute, second, etc.). This structure is described in tm(3type), which also describes functions that convert between calendar time and broken-down time. Functions for converting between broken-down time and printable string representations of the time are described in ctime(3), strftime(3), and strptime(3).

Таймеры сна и их установка

Различные системные вызовы и функции позволяют программе спать (приостанавливать выполнение) заданный промежуток времени; смотрите nanosleep(2), clock_nanosleep(2) и sleep(3).
Различные системные вызовы позволяют процессу устанавливать таймеры, которые срабатывают в какой-то момент в будущем, и, возможно, через определённые интервалы; смотрите alarm(2), getitimer(2), timerfd_create(2) и timer_create(2).

Допуск таймера

Начиная с Linux 2.6.28, возможно контролировать значение «допуска таймера» (timer slack) нити. Допуск таймера — это промежуток времени, на который ядро может задержать пробуждение определённых системных вызовов, заблокированных на время. Эта задержка позволяет ядру объединять события пробуждения, таким образом сокращая количество системных пробуждений и экономя энергию. Подробней смотрите описание PR_SET_TIMERSLACK в prctl(2).

СМ. ТАКЖЕ

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)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Azamat Hackimov <[email protected]>, Dmitry Bolkhovskikh <[email protected]>, Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]