Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Внутренние механизмы ядра | Вперед |
Абсолютное время
Всё рассмотрение выше касалось измерения относительных временных интервалов (даже если эта относительность отсчитывается от достаточно отдалённой во времени точки загрузки системы, как в случае с jiffies). Реальное хронологическое время (абсолютное время) нужно ядру исключительно редко (если вообще нужно) - его вычисление и представление лучше оставить коду пространства пользователя. Тем не менее, в ядре абсолютное UTC время (время эпохи UNIX - отсчитываемое от 1 января 1970г.) хранится как:
struct timespec xtime;
В UNIX традиционно существует две структуры точного представления времени (как в ядре, так и в пространстве пользователя), полностью идентичные по своей функциональности:
#include <linux/time.h> struct timespec { time_t tv_sec; /* секунды */ long tv_nsec; /* наносекунды */ } ... struct timeval { time_t tv_sec; /* секунды */ suseconds_t tv_usec; /* микросекунды */ }; ... #define NSEC_PER_USEC 1000L #define USEC_PER_SEC 1000000L #define NSEC_PER_SEC 1000000000L
В виду не атомарности xtime, непосредственно использовать его нельзя, но есть некоторый набор API ядра для преобразования с хронологического времени а одну из форм и обратно:
- превращение хронологического времени в значение единиц jiffies :
#include <linux/time.h> unsigned long mktime( unsigned int year, unsigned int mon, unsigned int day, unsigned int hour, unsigned int min, unsigned int sec );
- текущее время с разрешением до тика:
#include <linux/time.h> struct timespec current_kernel_time( void );
- текущее время с разрешением меньше тика (при наличии аппаратной поддержке для этого на используемой платформе, и очень сильно зависит от используемой платформы):
#include <linux/time.h> void do_gettimeofday( struct timeval *tv );
Предыдущий раздел: | Оглавление | Следующий раздел: |
Измерения временных интервалов | Временные задержки |