Почему вывод команды "date" в z/OS USS отличается от TSO TIME?
Команда "дата" на USS говорит:
Wed Jan 22 17:51:30 EST 2014
Через пару секунд команда TSO TIME сообщает:
IKJ56650I TIME-04:51:58 PM. CPU-00:00:02 SERVICE-196896 SESSION-07:08:30 JANUARY 22,2014
(Существует разница в часовом поясе на один час.) TSO TIME отслеживает, через глазное яблоко, очень близко ко времени в записях системного журнала. Есть идеи, почему команда date может быть отключена на 28 секунд?
Благодарю.
1 ответ
Разница связана с обработкой високосных секунд. Приложения, которые просто обращаются к аппаратным часам напрямую (инструкции STCK/STCKE), часто забывают о високосных секундах, поэтому они отключаются примерно на 30 секунд. Более умные приложения используют процедуры преобразования системного времени, которые автоматически учитывают дополнительные секунды. Вот пример того, как это происходит: http://www-01.ibm.com/support/docview.wss?uid=isg1OA41950
Сказав это, POSIX или Single Unix Specification (которой придерживаются z/OS UNIX Services) могут фактически определять поведение команды date. Вот что говорит SUS в разделе "Секунды с эпохи":
Значение, которое приблизительно соответствует количеству секунд, прошедших с начала эпохи... Как указано в секундах с начала эпохи, каждый день должен составлять ровно 86400 секунд.
Насколько я понимаю, комментарий о том, что каждый день имеет ровно 86400 секунд, говорит о том, что спецификация UNIX намеренно не хочет подсчитывать дополнительные секунды. Если это так, то IBM просто следует букве закона относительно того, как отображается время.