Насколько точны внутренние часы современного ПК? - PullRequest
23 голосов
/ 09 апреля 2010

Я знаю, что 10 лет назад типичная точность часов равнялась системному такту, который находился в диапазоне 10-30 мс. За последние годы точность была увеличена в несколько этапов. В настоящее время существуют способы измерения временных интервалов в реальных наносекундах. Однако обычные фреймворки по-прежнему возвращают время с точностью всего около 15 мс.

У меня вопрос: какие шаги увеличили точность, как можно измерить в наносекундах и , почему мы все еще часто получаем точность менее 100 микросекунд (например, в .NET).

(Отказ от ответственности: мне кажется странным, что об этом раньше не спрашивали, поэтому я думаю, что пропустил этот вопрос при поиске. Пожалуйста, закройте и укажите мне вопрос в этом случае, спасибо. Я считаю, что это относится к SO и не на любом другом сайте SOFU. Я понимаю разницу между точностью и точностью.)

Ответы [ 2 ]

23 голосов
/ 11 апреля 2010

Это действительно особенность истории ПК. В оригинальном IBM-PC использовалась микросхема, называемая часами реального времени, с резервным питанием от батареи (помните ли вы о необходимости замены батарей на них?). Они работали, когда машина была выключена, и сохраняли время. Частота их составляла 32,768 кГц (2 ^ 15 циклов в секунду), что позволило легко рассчитать время в 16-битной системе. Эти часы реального времени были затем записаны в CMOS, которая была доступна через систему прерываний в более старых операционных системах.

Более новый стандарт от Microsoft и Intel называется High Precision Event Timer, который определяет тактовую частоту 10 МГц. http://www.intel.com/hardwaredesign/hpetspec_1.pdf Даже более новые архитектуры ПК принимают это и устанавливают его на контроллер северного моста, а HPET может настраиваться на частоте 100 МГц или даже больше. При 10 МГц мы должны получить разрешение 100 нс, а при 100 МГц мы должны получить разрешение 10 нс.

Известно, что следующие операционные системы не могут использовать HPET: Windows XP, Windows Server 2003 и более ранние версии Windows, более старые версии Linux

Известно, что следующие операционные системы могут использовать HPET: Windows Vista, Windows 2008, Windows 7, x86-версии Mac OS X, операционные системы Linux с ядром 2.6 и FreeBSD.

При использовании ядра Linux вам необходим более новый драйвер аппаратных часов "rtc-cmos", а не оригинальный драйвер "rtc"

Все это говорит о том, как нам получить доступ к этому дополнительному разрешению? Я мог бы вырезать и вставить из предыдущих статей stackoverflow, но не - просто поищите HPET, и вы найдете ответы о том, как заставить работать более точные таймеры

3 голосов
/ 09 апреля 2010

Я буквально прочитал пост в блоге на MSDN об этом сегодня, прочитайте его здесь , он довольно хорошо освещает тему. В нем делается акцент на DateTime C #, но он универсально применим.

...