ГОСТ Р ИСО/МЭК 9834-8—2011
Приложение А
(справочное)
Алгоритмы эффективного создания основанных на времени УУИд
В настоящем приложении описан алгоритм, который может быть использован для быстрого создания осно
ванных на времени УУИд в компьютерной системе.
А.1 Основной алгоритм
А.1.1 Следующий алгоритм является простым, корректным, но неэффективным:
- получают глобальную общесистемную блокировку.
- из общесистемной совместно используемой стабильной памяти (например, из файла) считывают состоя
ние генератора УУИд: значения времени, временной последовательности и узла, использованные при создании
последнего УУИд;
-получают текущее время в виде 60-битового отсчета 100-наносекундных интервалов от 00:00:00.00.
15октября 1582 г. в качестве значения времени;
- получают текущее значение узла;
- если состояние было недействительным (например, несуществующим или поврежденным) или сохранен
ное значение узла отличается от текущего, то генерируют случайное значение временной последовательности;
- если состояние было действительным, но сохраненное значение времени больше текущего, то значение
временнбй последовательности увеличивают:
- записывают состояние (текущие значения времени, временнбй последовательности и узла) обратно в ста
бильную память;
- освобождают глобальную блокировку;
- формируют УУИд из текущих значений времени, временнбй последовательности и узла в соответствии с
алгоритмом, описанным в разделе 13.
А.1.2 Если нет необходимости часто генерировать УУИд. то приведенный выше алгоритм может оказаться
вполне адекватным. Однако при высоких требованиях к производительности проявляются следующие проблемы
основного алгоритма:
- чтение состояния из стабильной памяти каждый раз является неэффективным;
- разрешение системных часов может не составлять 100 наносекунд;
- запись состояния а стабильную память каждый раз является неэффективной.
- совместное использование состояния через границы процессов может быть неэффективным.
А.1.3 Каждая из этих проблем может быть решена локальными улучшениями модульным способом а тех
функциях, которые читают и записывают состояние и читают время. Эти проблемы также рассмотрены в последую
щих разделах настоящего приложения.
А.2 Чтение стабильной памяти
А.2.1 Состояние необходимо читать из стабильной памяти только один раз во время загрузки при условии,
что оно будет прочитано а переменную, общесистемную, совместно используемую память (и будет обновляться
при каждом обновлении стабильной памяти).
А.2.2 Если реализация не имеет какой-либо доступной стабильной памяти, то она всегда может считать, что
значения являются недействительными. Такая реализация является менее желательной, т. к. повышает частоту
создания новых временных последовательностей, что повышает вероятность появления дубликатов.
А.2.3 Если значение узла не может никогда измениться (например, сетевая карта неотделима от системы)
или любые изменения приводят к новой установке временной последовательности к новому случайному значению,
то вместо хранения этого значения в стабильной памяти допускается возвращать текущее значение узла.
А.З Разрешение системных часов
А.3.1 Значение времени генерируется из системного времени, разрешение которого может быть меньше,
чем требуемое для времени разрешение.
А.3.2 Если нет необходимости в частой генерации УУИд. то время может быть просто системным временем,
умноженным на число 100-наносекундных интервалов в интервале системного времени.
А.3.3 Если система перегружает генератор, запрашивая слишком много УУИд за один интервал системного
времени, то услуга УУИд должна либо возвращать ошибку, либо приостановить генератор УУИд до захвата следую
щего системного времени.
А.3.4 Высокое разрешение значения времени может быть имитировано сохранением подсчета числа сгене
рированных УУИд с одним и тем же значением системного времени и использованием его для построения низших
битов значения времени. Подсчет должен вестись в диапазоне от нуля до числа 100-наносекундных интервалов в
интервале системного времени.
13