Абсолютное время

Абсолютное время

Текущее значение абсолютного времени (time of day, wall time, время дня) определено в файле kernel/timer.c следующим образом.

struct timespec xtime;

Структура данных timespec определена в файле <linux/time.h> в следующем виде.

struct timespec {

 time_t tv_sec; /* seconds */

 long tv_nsec; /* nanoseconds */

};

Поле xtime.tv_sec содержит количество секунд, которые прошли с 1 января 1970 года (UTC, Universal Coordinated Time, всеобщее скоординированное время). Указанная дата называется epoch (начало эпохи). В большинстве Unix-подобных операционных систем счет времени ведется с начала эпохи. В поле xtime.tv_nsec хранится количество наносекунд, которые прошли в последней секунде.

Чтение или запись переменной xtime требует захвата блокировки xtime_lock. Это блокировка — не обычная спин-блокировка, а секвентная блокировка, которая рассматривается в главе 9, "Средства синхронизации в ядре".

Для обновления значения переменной xtime необходимо захватить секвентную блокировку на запись следующим образом.

write_seqlock(&xtime_lock);

/* обновить значение переменной xtime ... */

write_sequnlock(&xtime_lock);

Считывание значения переменной xtime требует применения функций read_seqbegin() и read_seqretry() следующим образом.

do {

 unsigned long lost;

 seq = read_seqbegin(&xtime_lock);

 usec = timer->get_offset();

 lost = jiffies — wall_jiffies;

 if (lost)

  usec += lost * (1000000 / HZ);

 sec = xtime.tv_sec;

 usec += (xtime.tv_nsec / 1000);

} while (read_seqretry(&xtime_lock, seq));

Этот цикл повторяется до тех пор, пока не будет гарантии того, что во время считывания данных не было записи. Если во время выполнения цикла приходит прерывание таймера и переменная xtime обновляется во время выполнения цикла, возвращаемый номер последовательности будет неправильным и цикл повторится снова.

Главный пользовательский интерфейс для получения значения абсолютного времени — это системный вызов gettimeofday(), который реализован как функция sys_gettimeofday() следующим образом.

asmlinkage long sys_gettimeofday(struct timeval *tv,

 struct timezone *tz) {

 if (likely(tv !=NULL)) {

  struct timeval_ktv;

  do_gettimeofday(&ktv);

  if (copy_to_userftv, &ktv, sizeof(ktv))

   return -EFAULT;

 }

 if (unlikely(tz != NULL)) {

  if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))

   return -EFAULT;

 }

 return 0;

}

Если из пространства пользователя передано ненулевое значение параметра tv, то вызывается аппаратно-зависимая функция do_gettimeofday(). Эта функция главным образом выполняет цикл считывания переменной xtime, который был только что рассмотрен. Аналогично, если параметр tz не равен нулю, пользователю возвращается значение часового пояса (time zone), в котором находится операционная система. Этот параметр хранится в переменной sys_tz. Если при копировании в пространство пользователя значения абсолютного времени или часового пояса возникли ошибки, то функция возвращает значение -EFAULT. В случае успеха возвращается нулевое значение.

Ядро предоставляет системный вызов time()[58], однако системный вызов gettimeofday() полностью перекрывает его возможности. Библиотека функций языка С также предоставляет другие функции, связанные с абсолютным временем, такие как ftime() и ctime().

Системный вызов settimeofday() позволяет установить абсолютное время в указанное значение. Для того чтобы его выполнить, процесс должен иметь возможность использования CAP_SYS_TIME.

Если не считать обновления переменной xtime, то ядро не так часто использует абсолютное время, как пространство пользователя. Одно важное исключение— это код файловых систем, который хранят в индексах файлов значения моментов времени доступа к файлам.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.1.3 Время Жизни

Из книги C++ автора Хилл Мюррей

2.1.3 Время Жизни Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами создаются и инициализируются один раз (только) и «живут» до завершения


Единое время

Из книги Getting Real (на русском) [вычитывается] автора 37signals

Единое время Людям нужно время, чтобы постоянно добиваться своегоСотрудники 37signals находятся в четырех городах и в восьми часовых поясах. От Прово, штат Юта до Копенгагена, Дания. Есть только 4-5 часов в течение дня, когда мы работаем вместе. Когда наша команда спит, Давид,


Дата и время

Из книги Реестр Windows автора Климов Александр

Дата и время Часовой поясВ апплете Панели управления Дата и время вы видите, что у вас часовой пояс Москвы, Санкт-Петербурга и Волгограда (или что-то в этом роде). Хотите, чтобы Windows знала о существовании вашей деревни Гадюкино? В разделе реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVersionTime


Дата и время

Из книги Тонкости реестра Windows Vista. Трюки и эффекты автора Клименко Роман Александрович

Дата и время Чтобы открыть окно редактирования даты и времени, нужно дважды щелкнуть кнопкой мыши на значке Дата и время окна Панель управления. В результате на экране появится окно Свойства: Дата и время, в котором на вкладке Часовой пояс отображается соответствующий


Cистемное время

Из книги Реестр Windows автора Климов А

Cистемное время Windows XP умеет подстраивать системное время, сверяясь со специальными серверами в интернете. Можно изменить адреса используемых серверов.Без использования реестра: Щелкните правой кнопкой мыши на значке часов в системной области панели задач, выберите


Дата и время

Из книги Установка и настройка Windows XP. Легкий старт автора Донцов Дмитрий

Дата и время Если жесткий диск был отформатирован, то следует установить текущее число и время. Есть два способа открыть окно Свойства: Дата и время (рис. 3.2):• в окне Панель управления дважды щелкнуть на значке Дата и время;• на Панели задач дважды щелкнуть на


Системное время

Из книги Программирование КПК и смартфонов на .NET Compact Framework автора Климов Александр П.

Системное время Чтобы получить или установить системное время на устройстве, нужно использовать функции GetSystemTime и SetSystemTime. Следует учитывать, что функция GetSystemTime возвращает время по Гринвичу, а не местное время. Код, иллюстрирующий применение этих функций, приведен в


2.4.2. Время установки Windows 7 и время жизни аккумулятора

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

2.4.2. Время установки Windows 7 и время жизни аккумулятора Если вы устанавливаете Windows 7 на ноутбук или нетбук, желательно подключить его к сети питания. Если это невозможно, тогда лучше не начинать установку Windows. Хотя весь процесс установки занимает около 20–25 минут (во всяком


2.5.8. Время и дата

Из книги Delphi. Трюки и эффекты автора Чиртик Александр Анатольевич

2.5.8. Время и дата После настроек брандмауэра можно установить дату и время, а также выбрать часовой пояс (рис. 2.17). После установки Windows вы сможете настроить синхронизацию времени с удаленным компьютером (обычно с сервером времени


7.2. Системное время

Из книги Omert@. Руководство по компьютерной безопасности и защите информации для Больших Боссов автора Экслер Алекс

7.2. Системное время Этот раздел посвящен отнюдь не простому получению текущего времени или даты (благо эти функции можно найти и в библиотеке Borland). Здесь мы обратимся к несколько более интересной теме – использованию системных средств измерения малых промежутков


ВРЕМЯ «Ч»

Из книги Русский справочник по Win32 API автора Сорока Тарас

ВРЕМЯ «Ч» Как известно, очень многое в схеме построения безопасности в офисе направлено на решение проблем в случае наступления так называемого времени «Ч» — то есть Чужой в офисе. Да на самом деле всё равно, кто это будет: налётчики, подосланные конкурентами, марсиане,


Время

Из книги Информационные технологии в СССР. Создатели советской вычислительной техники автора Ревич Юрий Всеволодович

Время CompareFileTime Функция CompareFileTime сравнивает два 64-битных файловых времени. LONG CompareFileTime ( CONST FILETIME * lpFileTime1 , // pointer to first file time CONST FILETIME * lpFileTime2 // pointer to second file time ); Параметры lpFileTime 1 - указывает на структуру типа FILETIME , которая определяет первое 64-битное файловое время. lpFileTime 2 -


Опережая время

Из книги Установка, настройка и восстановление Windows 7 на 100% автора Ватаманюк Александр Иванович

Опережая время Казалось, можно было успокоиться, отдохнуть от напряженнейшего труда или, во всяком случае, сделать передышку.Этого не получилось и, наверно, просто не могло получиться. Еще в 1966 году Карцев выдвинул идею создания многомашинного вычислительного комплекса,


Дата и время

Из книги Цифровая фотография. Трюки и эффекты автора Гурский Юрий Анатольевич

Дата и время Стандартный системный компонент, позволяющий управлять встроенными часами Windows, которые вы можете наблюдать на панели уведомлений. Кроме того, можно настроить отображение дополнительных часов, которые могут показывать время другого часового пояса. Здесь


16.4. Опережая время

Из книги Ноутбук [секреты эффективного использования] автора Пташинский Владимир

16.4. Опережая время В данном примере мы рассмотрим чрезвычайно простой способ сделать осеннюю фотографию из летней. В качестве исходной подойдет практически любая фотография, на которой сняты деревья (рис. 16.20). Чем отличаются деревья летом и осенью? Правильно – цветом


Настоящее время

Из книги автора

Настоящее время За последние 5–7 лет в «ноутбукостроении» никаких революционных событий не произошло. Конечно, ноутбуки стали более мощными, легкими, надежными, стильными и в этом плане будут развиваться и дальше.Скорее всего, очередной прорыв произойдет тогда, когда в