Я хотел бы узнать, насколько точным является время, которое отображается при вводе даты +% s% N в терминале.
Я знаю, что это дает нам время эпохи в наносекундах, но являются ли числа действительными? Представляет ли он момент, когда я нажимаю ввод в наносекундах, или это фальшивка с некоторой точностью и ниже, скажем, миллисекунды?
это представляет момент, который я поразил, входят в наносекундах?
Хорошо, который не мог быть. Много вещей происходят между Вашим хитом на , Входят и вывод команды:
/bin/date
. /bin/date
программа выполняется. Это, вероятно, требует, чтобы некоторая память была выделена. Это называет несколько связанных со временем стандартных программ ядра, которые заставляют процесс несколько раз чередоваться (точно так же, как любой другой Вы сказали бы...) между непривилегированным режимом и привилегированным режимом. В основном, Вы могли поместить его этот путь:
date
, программа называет волшебные стандартные программы в time.h
, переключаясь в привилегированный режим для каждого из них. Здесь, ОС получает текущее время от аппаратных часов. Те промежуточное звено времена могут варьироваться согласно нескольким вещам, они едва измеримы. Как пример, если Ваши центральные процессоры имеют много процессов для обработки, то Ваш date
процесс должен будет спать дольше между каждой из его фаз выполнения.
можно было пойти еще больше путем добавления:
Добавление еще нескольких миллисекунд к количеству.
Конечно, это не. Все, что Вы делаете, занимает измеримое количество времени. От удара входят, на клавиатуру, реагирующую на него, передавая его на оболочку, которая будет работать date
, к отображению вывода на Вашем терминале и Вашем чтении его. Для получения лучшее представление взгляните на это очень хорошие Вопросы и ответы на том, что точно происходит, когда Вы нажимаете клавишу на своей клавиатуре.
Если мы снова используем схемы из того сообщения:
+-------------------+ +-------------+
----->| terminal emulator |-------------->| application |
+-------------------+ +-------------+
keypress character or
escape sequence
+-------------+ +-------------------+
| application |-------------->| terminal emulator |
+-------------+ +-------------------+
character or
escape sequence
Каждая из стрелок и каждое из полей, показанных выше, представляют процессы, которые занимают измеримое количество времени. В случае date
программа, время, которое Вы видите, является временем, которое это получило, когда это запросило систему в течение текущего времени. Процесс был бы чем-то как
You hit enter --> `date` is executed -> queries current time
Снова, каждый из вышеупомянутых шагов (и другой, меньшие, выполненные strace date
понять), занимают время так не, возвращенное время не будет точным моментом, который Вы поражаете, Входят.
К тому времени, когда результат печатается на Вашем терминале, время (в точности наносекунды) изменится снова. То, что Вы видите, который был возвращен системой когда date
спрошенный.
Однако можно на самом деле пребывать в уверенности, что это достаточно точно для чего-либо, что Вы могли бы хотеть сделать на своем компьютере. При требовании точности на уровне наносекунды Вы, вероятно, испытываете необходимость в произведенных по заказу аппаратных средствах.