Абсолютное время
Абсолютное время
Текущее значение абсолютного времени (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, то ядро не так часто использует абсолютное время, как пространство пользователя. Одно важное исключение— это код файловых систем, который хранят в индексах файлов значения моментов времени доступа к файлам.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Дата и время
Дата и время Стандартный системный компонент, позволяющий управлять встроенными часами Windows, которые вы можете наблюдать на панели уведомлений. Кроме того, можно настроить отображение дополнительных часов, которые могут показывать время другого часового пояса. Здесь
Cистемное время
Cистемное время Windows XP умеет подстраивать системное время, сверяясь со специальными серверами в интернете. Можно изменить адреса используемых серверов.Без использования реестра: Щелкните правой кнопкой мыши на значке часов в системной области панели задач, выберите
Дата и время
Дата и время Часовой поясВ апплете Панели управления Дата и время вы видите, что у вас часовой пояс Москвы, Санкт-Петербурга и Волгограда (или что-то в этом роде). Хотите, чтобы Windows знала о существовании вашей деревни Гадюкино? В разделе реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVersionTime
Дата и время
Дата и время Если жесткий диск был отформатирован, то следует установить текущее число и время. Есть два способа открыть окно Свойства: Дата и время (рис. 3.2):• в окне Панель управления дважды щелкнуть на значке Дата и время;• на Панели задач дважды щелкнуть на
Время
Время 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 -
Единое время
Единое время Людям нужно время, чтобы постоянно добиваться своегоСотрудники 37signals находятся в четырех городах и в восьми часовых поясах. От Прово, штат Юта до Копенгагена, Дания. Есть только 4-5 часов в течение дня, когда мы работаем вместе. Когда наша команда спит, Давид,
Системное время
Системное время Чтобы получить или установить системное время на устройстве, нужно использовать функции GetSystemTime и SetSystemTime. Следует учитывать, что функция GetSystemTime возвращает время по Гринвичу, а не местное время. Код, иллюстрирующий применение этих функций, приведен в
7.2. Системное время
7.2. Системное время Этот раздел посвящен отнюдь не простому получению текущего времени или даты (благо эти функции можно найти и в библиотеке Borland). Здесь мы обратимся к несколько более интересной теме – использованию системных средств измерения малых промежутков
2.1.3 Время Жизни
2.1.3 Время Жизни Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами создаются и инициализируются один раз (только) и «живут» до завершения
Дата и время
Дата и время Чтобы открыть окно редактирования даты и времени, нужно дважды щелкнуть кнопкой мыши на значке Дата и время окна Панель управления. В результате на экране появится окно Свойства: Дата и время, в котором на вкладке Часовой пояс отображается соответствующий
16.4. Опережая время
16.4. Опережая время В данном примере мы рассмотрим чрезвычайно простой способ сделать осеннюю фотографию из летней. В качестве исходной подойдет практически любая фотография, на которой сняты деревья (рис. 16.20). Чем отличаются деревья летом и осенью? Правильно – цветом
Настоящее время
Настоящее время За последние 5–7 лет в «ноутбукостроении» никаких революционных событий не произошло. Конечно, ноутбуки стали более мощными, легкими, надежными, стильными и в этом плане будут развиваться и дальше.Скорее всего, очередной прорыв произойдет тогда, когда в
2.4.2. Время установки Windows 7 и время жизни аккумулятора
2.4.2. Время установки Windows 7 и время жизни аккумулятора Если вы устанавливаете Windows 7 на ноутбук или нетбук, желательно подключить его к сети питания. Если это невозможно, тогда лучше не начинать установку Windows. Хотя весь процесс установки занимает около 20–25 минут (во всяком
2.5.8. Время и дата
2.5.8. Время и дата После настроек брандмауэра можно установить дату и время, а также выбрать часовой пояс (рис. 2.17). После установки Windows вы сможете настроить синхронизацию времени с удаленным компьютером (обычно с сервером времени
ВРЕМЯ «Ч»
ВРЕМЯ «Ч» Как известно, очень многое в схеме построения безопасности в офисе направлено на решение проблем в случае наступления так называемого времени «Ч» — то есть Чужой в офисе. Да на самом деле всё равно, кто это будет: налётчики, подосланные конкурентами, марсиане,
Опережая время
Опережая время Казалось, можно было успокоиться, отдохнуть от напряженнейшего труда или, во всяком случае, сделать передышку.Этого не получилось и, наверно, просто не могло получиться. Еще в 1966 году Карцев выдвинул идею создания многомашинного вычислительного комплекса,