| 
 
 
 
 
 ИМЯ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.
 
 Значение  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).
 
 Таймеры высокой точности
 До Linux 2.6.21 точность системных вызовов таймера и  сна  (смотрите  далее)  была
 ограничена размером мига.
 
 Начиная  с  Linux  2.6.21,  Linux  поддерживает  таймеры  высокой  точности (HRT),
 включаемые через CONFIG_HIGH_RES_TIMERS.  В  системе,  которая  поддерживает  HRT,
 точность  сна  и таймеров в системных вызовах больше не ограничена мигом, а только
 точностью аппаратуры (в современной аппаратуре, обычно, микросекундная  точность).
 Вы   можете  определить  поддерживаются  ли  таймеры  высокой  точности,  проверив
 результат   вызова   clock_getres(2)   или   поискав   записи    «resolution»    в
 /proc/timer_list.
 
 HRT  поддерживаются не на всех аппаратных архитектурах (среди имеющих отметим x86,
 секунды. Системное время можно изменять с помощью settimeofday(2).
 
 Календарное время, разделённое на компоненты
 Некоторые библиотечные функции используют структуру с типом tm  для  представления
 календарного  времени,  разделённого  на  компоненты (broken-down time), в которой
 время хранится в виде отдельных  составляющих  (год,  месяц,  день,  час,  минута,
 секунда  и  т.  д.).  Эта  структура  описана  в 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).
 
 Допуск таймера
 Начиная с 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), hwclock(8)
 
 
 
 
 |