Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com



  • Mobile assistant lenovo
  • Powerbank аккумуляторы Lenovo. Сравнение цен в магазинах
  • allinfopark.net

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра 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 );

Предыдущий раздел: Оглавление Следующий раздел:
Измерения временных интервалов   Временные задержки

Поделиться: