Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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