Насколько точны внутренние часы современного ПК?

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

Мой вопрос заключается в том, какие этапы повысили точность, как можно измерить их в наносекундах и почему мы все еще часто получаем точность менее микросекунды (например, в.NET).

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

3 ответа

Решение

Это действительно особенность истории ПК. В оригинальном 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"

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

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

Что ж, пока я не видел ни одного ПК, который бы показывал точное (реальное) время лучше, чем, скажем, 100 мс / день. На всех моих ПК за последние 40 лет или около того реальное время всегда было либо быстрым, либо медленным и могло дрейфовать на 2 или 3 секунды в день. Основная причина этого - точность кварцевого генератора ПК (независимо от частоты), который управляет схемой синхронизации. В обкатанных на заводе компьютерах эти генераторы НИКОГДА не калибруются по их номинальной частоте, и нет даже элементарной компенсации дрейфа частоты из-за изменения температуры внутри корпуса ПК.

Другие вопросы по тегам