time - обзор
времени и
таймеров
Реальное
время (real time) —
время,
измеряемое
от
некоторой
постоянной
точки, или
от
стандартной
точки в
прошлом
(смотрите
описание
эпохи (Epoch) и
календарного
времени
далее), или
от
некоторой
точки
(например, с
момента
запуска) в
жизни
процесса (
прошедшее
время (elapsed time)).
Время
процесса (process
time) —
количество
процессорного
времени,
использованного
процессом.
Иногда его
делят на
пользовательское
(user) и
системное
(system).
Пользовательское
время ЦП —
это время,
потраченное
на
исполнение
кода в
режиме
пользователя.
Системное
время ЦП —
это время,
потраченное
ядром,
выполняющемся
в
системном
режиме, для
процесса
(например,
на
обработку
системных
вызовов).
Команда
time(1)
позволяет
определить
количество
процессорного
времени,
затраченного
при
выполнении
программы.
Программа
может
определить
количество
потраченного
процессорного
времени с
помощью
times(2),
getrusage(2) или
clock(3).
В
большинстве
компьютеров
(оснащённых
батареей)
имеются
аппаратные
часы,
которые
ядро
читает при
запуске
для
инициализации
программных
часов.
Подробности
смотрите в
rtc(4) и
hwclock(8).
Точность
различных
системных
вызовов,
которые
задают
время
ожидания (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).
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]