2012-05-02 3 views
2

Это не вопрос домашней работы, а ответвление.Точность времени в программировании, приложениях и операционных системах

Как выполняются функции времени на объектно-ориентированных языках, а также на императивных языках, таких как C? Если бы вы получили временную метку в наносекундах как длинную и преобразовали ее в строку, не всегда ли время было бы неточным?

На самом деле, как только вы выполняете какие-либо вычисления или работаете с данными синхронизации, разве теперь это неточно неизвестно какой-то неизвестной степени? Правильно ли это предположение?

Вы можете легко объяснить сетевую задержку, но как локально, прежде чем данные будут отправлены? Кажется, что все спрашивали до сих пор, пришел к выводу, что функции времени никогда не являются полностью точными - это всего лишь принятая неточность.

По существу, я спрашиваю, как реализованы приложения реального времени?

+0

Возможно, вы можете привести пример «приложения реального времени», который значительно пострадает от задержки нескольких циклов процессора? – deceze

+0

Linux ntpd daemon? Системы руководства? – atx

ответ

1

На самом деле домашнее задание!

Вещь, которую мы называем time, прогрессирует. Долгое время вещь даже не носила чисел. Просто путешествующее солнце и путешествующие звезды давали подсказку о времени. Позднее, особенно с момента начала цифровой революции, номера были присвоены time. Время прогрессирования происходит вместе с увеличением числа. Не говоря уже обо всех форматах , я заявляю, что большинство из этих схем имеют время для orgin. Unix epoche - это время 00:00:00 UTC 1 января 1970 года, например. Конечно, это не начало времени, но такое виртуальное происхождение выбирается для соответствия чисел разумным структурам данных. Back to you question: Можем ли мы захватить текущее время? Нет, мы не сможем, и мы никогда не сможем. Чтение любых часов подскажет нам время, когда свет оставил часы на пути к нашим глазам. Это может быть очень мало, но ... Когда кто-то спросил нас о времени, мы с удовольствием расскажем. Но снова происходит какая-то задержка, и я уверен, что мы скажем то же самое время, не добавляя задержки.

Зная физику, мы могли бы добавить задержку для света, достигающего наших глаз, задержать наш мозг и задержать наши разговорные слова, чтобы достичь уха человека, которого спросили.

Но ..........

Так как может быть реализована в реальном приложении времени мир? Нет THAT TIME. Время зависит от того, где вы находитесь, время зависит от того, какая гравитация окружает вас, время зависит от вашей скорости и т. Д.

Но .........

Это не то, что все происходит потому, что время проходит мимо. Нет, время заставляет все случиться!

Again back to your question: Вообще-то в вопросах программного обеспечения вопрос о времени - это в основном вопрос о ходе и/или синхронизации. Вы хотите что-то сравнить. В основном есть два возможных варианта: calls - ресурс, выполняющий этот прорыв: time: first call вернет time в тот момент, когда вы сделали звонок. Но вам нужно принять во внимание, что вы получите результат позже. Поэтому время, которое вы получаете, в прошлом. возвращает time, по которому возвращается вызов.Это немного другая реализация, поскольку такая функция должна знать что-то о том, как долго она нуждается в ее собственной службе. Вероятно, это возможно только при некоторой калибровке.

Это два основных вызова.

Когда дело доходит до resolution (опять же на ваш вопрос), я хотел бы исключить возможность подключения атомных часов к вашему компьютеру. Предположим, что вы являетесь владельцем с супермаркета. Он может работать на частоте нескольких ГГц. Самая высокая частота, которую вы можете наблюдать, скорее всего, является частотой процессора. Скажем, 4 ГГц такая частота заставит счетчик увеличиваться в 4 раза за наносекунду, то есть разрешение на пикосекунду в течение 250 пикосекунд. Таким образом, вы можете сказать, что есть суб-наносекундное разрешение. На практике широко используемые высокочастотные счетчики находятся в диапазоне МГц, что даст разрешение в диапазоне 100 нс.

Но .......

Могут ли эти высокие частоты можно использовать в качестве линейки для времени? В краткосрочной перспективе они могут! Но в долгосрочной перспективе это намного сложнее, потому что эти источники времени должны быть заблокированы фазой с использованием обычных источников времени, например, вашего компьютера. Высокочастотные счетчики имеют значительные погрешности, которые могут вызвать фазовый дрейф многих пользователей. Это можно преодолеть только путем тщательной калибровки. Правильная калибровка может позволить фазовому замку высокочастотного счетчика к системному времени.

Как только у вас есть источник времени с точностью до нескольких микросекунд, вы можете по-разному определить поведение вашего кода, потому что вы можете прогнозировать потенциальные задержки.

Суммируя (философский подход):

  1. Время делает вещи случаются.
  2. Время is никогда не верно, или представляет собой истинное значение
  3. Любого значения считается связанным время представляет собой время, в прошлом
  4. Там нет такого понятия, actual time на практике
  5. Наконец, как вы говорите: Time can never be completely accurate (ничего не может!)

Более подробный взгляд на реализацию служб времени высокого разрешения для Windows можно найти в Windos Timestamp Project.

Смежные вопросы