Опубликован: 15.06.2004 | Доступ: свободный | Студентов: 2557 / 712 | Оценка: 4.35 / 3.96 | Длительность: 27:47:00
ISBN: 978-5-9556-0011-6
Лекция 12:

Время и работа с ним

Аннотация: Рассматриваются служебные программы и функции, предназначенные для работы с часами и таймерами реального и процессорного времени, средства приостановки выполнения процессов на заданное время, а также опрос и изменение данных о времени, ассоциированных с файлами.
Ключевые слова: начало отсчета времени, минута, секунда, год, всемирное время, поясное время, часовой пояс, время, час, летнее время, астрономическое время, момент времени, значение, день, ПО, TIME, диапазон, часы, показания часов, разрешающая способность часов, скачок часов, монотонные часы, такт часов, поток, время выполнения, процессорное время, часы процессорного времени, мониторинг времени выполнения, виртуальное время процесса, таймер, абсолютный таймер, срабатывание таймера, таймер процессорного времени, взвести таймер, избыточное срабатывание таймера, программа, DATE, утилита, стандартный вывод, аргумент, пользователь, спецификатор преобразования, месяц, языково-культурная среда, вывод, опция, команда, shell, текущее время, функция, переполнение, проблема 2038-го года, разность, указатель, предел, опрос, общесистемные часы, реальное время, идентификатор, интерпретация, интервальный таймер, представление данных о времени, представление, буфер, стандарт ISO 8601:2000, байт, входной, маршрутное имя, спецификатор, время выполнения простой команды, стандартный протокол, файл, командная строка, командный интерпретатор, процессор, процесс завершения, TMS, порожденный процесс, адресное семейство, стандартный ввод, манипулирование часами процессорного времени, идентификатор часов процессорного времени, код ошибки, приоритет процесса, вычитание, время последнего доступа, права, запись, действующий идентификатор, время последнего изменения статуса, время последнего изменения, чередование, приостановка выполнения на заданное время, минимально допустимое значение, конфигурационные константы, ISO, приостановка выполнения, доставка сигнала, активное ожидание, пассивное ожидание, значение семафора, таймер реального времени, таймер виртуального времени процесса, таймер профилирования, поле, снять таймер со взвода, операционная система, единица, анализ, скрытый канал по времени, виртуальное, управление ходом выполнения программы, нелокальный переход, целый, функция обработки сигнала, приостановка выполнения процесса, вызов функции, компилятор, цикла, маска сигналов, место

Основные понятия и объекты

Согласно стандарту POSIX, за начало отсчета (астрономического) времени принимается ноль часов, ноль минут, ноль секунд первого января 1970-го года универсального координированного времени (далее для краткости именуемого также всемирным ).

Всемирным называют поясное время нулевого часового пояса, которое представляет собой местное среднее солнечное время гринвичского меридиана.

Московское время опережает всемирное на три часа. Имеется в виду так называемое декретное московское время, которое не следует путать с поясным.

Поясное время Москвы, лежащей во втором часовом поясе, опережает всемирное на два часа.

Московское летнее время опережает всемирное на 4 часа.

За стандартную единицу измерения астрономического времени в POSIX-2001 принята секунда. Пусть некоторый момент времени задан в терминах секунд (значение tm_sec ), минут ( tm_min ), часов ( tm_hour ), а также номером дня в году ( tm_yday ) и номером года минус 1900 ( tm_year ). Тогда число секунд всемирного времени, прошедшее на этот момент от начала отсчета, вычисляется по формуле

tm_sec + tm_min*60 + tm_hour*3600 + 
tm_yday*86400 + (tm_year-70)*31536000 + 
((tm_year-69)/4)*86400 - ((tm_year-1)/100)*
86400 + ((tm_year+299)/400)*86400

(три последних слагаемых предназначены для учета високосных лет).

Учет разного рода поправок к всемирному времени (таких, например, как вставка дополнительной секунды в начале 1996 года ) зависит от реализации.

Для представления данных о моментах времени в программах на языке C обычно используется структура tm, описанная во включаемом файле <time.h> и содержащая, согласно стандарту POSIX-2001, по крайней мере следующие поля.

int tm_sec;   /* Секунды [0,60]             */
int tm_min;   /* Минуты [0,59]              */
int tm_hour;  /* Часы [0,23]                */
int tm_mday;  /* Номер дня в месяце [1,31]  */
int tm_mon;   /* Номер месяца в году [0,11] */
int tm_year;  /* Номер года минус 1900      */
int tm_wday;  /* Номер дня недели [0,6]     */
        /* (воскресенью соответствует ноль) */
int tm_yday;  /* Номер дня в году [0,365]   */
int tm_isdst; 
           /* Признак учета летнего времени */

Диапазон [0, 60] для поля tm_sec позволяет справляться с производимой время от времени вставкой дополнительной секунды.

Значение поля tm_year задается со знаком, что позволяет представлять годы до 1900.

Значение признака tm_isdst должно быть положительным, если действует летнее время, нулевым, если летнее время не действует, или отрицательным, если про летнее время ничего не известно.

Часами называется программный или аппаратный объект, предназначенный для измерения видимого или истинного хода времени.

Показания часов можно опросить и установить (в допустимых для часов пределах).

Разрешающей способностью часов называется минимальный промежуток времени, который может быть этими часами измерен.

Под скачком часов понимается разность между двумя последовательными, различными с точки зрения приложения (использующего стандартные средства) показаниями часов .

Часы называются монотонными, если их нельзя установить стандартными средствами и они не могут иметь отрицательных скачков.

Такт часов - это зависящие от реализации промежутки времени, на которые дробится каждая секунда .

Реальным (или астрономическим) называется время, измеренное по системным часам безотносительно к тому, какой процесс (поток управления) выполняется.

Под временем выполнения ( процессорным временем ) понимается время, затрачиваемое на выполнение процесса (потока управления), включая работающие от его имени системные сервисы.

Время выполнения конкретного процесса или потока управления измеряется часами процессорного времени.

Под мониторингом времени выполнения понимается оперативное отслеживание процессорного времени, затрачиваемого процессом (потоком управления).

Виртуальное время процесса - время, измеряемое системными часами, пока процесс выполняется.

Таймер - это механизм, способный известить процесс (поток управления) об истечении заданного временного промежутка (подобный таймер называется интервальным) или о достижении (или превышении) часами заданных показаний (абсолютный таймер). Соответствующее событие называется срабатыванием таймера.

Таймером процессорного времени называется таймер, ассоциированный с часами процессорного времени .

Взвести (зарядить) - значит запустить таймер, измеряющий ход времени и позволяющий уведомить процесс о наступлении заданного момента.

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

Таймеры можно подразделить на одноразовые и периодические.

Одноразовые таймеры снимаются со взвода после первого (и единственного) срабатывания.

Периодические таймеры после очередного срабатывания запускаются вновь в соответствии с однажды заданной спецификацией следующего срабатывания.

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

Все, что касается часов процессорного времени и таймеров, относится к необязательным частям стандарта POSIX-2001. Тем не менее, мы детально рассмотрим соответствующие средства ввиду их важности и употребительности.

Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?