2010-04-09 13 views
20

Sé que hace 10 años, la precisión típica del reloj igualaba un tic del sistema, que estaba en el rango de 10-30ms. En los últimos años, la precisión aumentó en varios pasos. Hoy en día, hay formas de medir intervalos de tiempo en nanosegundos reales. Sin embargo, los marcos habituales aún devuelven el tiempo con una precisión de solo alrededor de 15 ms.¿Cuán preciso es el reloj interno de una PC moderna?

Mi pregunta es, qué pasos aumentaron la precisión, cómo es posible medir en nanosegundos, y por qué todavía estamos obteniendo menos de microsegundos de precisión (por ejemplo en .NET).

(Descargo de responsabilidad: me parece extraño que esto no se haya preguntado antes, así que creo que me perdí esta pregunta cuando busqué. Por favor, cierre y señale la pregunta en ese caso, gracias. Creo que esto pertenece a SO y no en ningún otro sitio SOFU. Entiendo la diferencia entre precisión y precisión.)

Respuesta

20

Realmente es una característica de la historia de la PC. El IBM-PC original usaba un chip llamado Real Time Clock, que tenía una batería de respaldo (¿Recuerda haber tenido que cambiar las baterías?) Funcionaban cuando la máquina estaba apagada y se mantenía el tiempo. La frecuencia de estos fue de 32.768 kHz (2^15 ciclos/segundo), lo que facilitó el cálculo del tiempo en un sistema de 16 bits. Este reloj en tiempo real se escribió luego en CMOS, que estaba disponible a través de un sistema de interrupción en sistemas operativos anteriores.

Un nuevo estándar está fuera de Microsoft e Intel llama de alta precisión evento de temporizador que especifica una velocidad de reloj de 10 MHz http://www.intel.com/hardwaredesign/hpetspec_1.pdf aún más reciente arquitecturas de PC toman este y se pone en el controlador Northbridge y el HPET pueden tun a 100 MHz o incluso mayor. A 10Mhz deberíamos poder obtener una resolución de 100 nano-segundos y a 100MHZ deberíamos poder obtener una resolución de 10 nano-segundos.

los siguientes sistemas operativos son conocidos por no ser capaz de utilizar HPET: Windows XP, Windows Server 2003 y versiones anteriores de Windows, las versiones de Linux antiguas

Se conocen los siguientes sistemas operativos para poder utilizar HPET: Windows Vista, Windows 2008, Windows 7, versiones basadas en x86 de Mac OS X, sistemas operativos Linux que usan el kernel 2.6 y FreeBSD.

Con un núcleo de Linux, es necesario los más nuevos "RTC-CMOS" de controladores de dispositivos de hardware de reloj en lugar del original controlador "RTC"

Dicho todo esto, ¿cómo acceder a esta resolución adicional? Pude cortar y pegar desde artículos previos de stackoverflow, pero no - Solo busque HPET y encontrará las respuestas sobre cómo conseguir temporizadores más finos que funcionen

+0

http://en.wikipedia.org/wiki/High_Precision_Tvent_Timer#Problems Aparentemente, algunas implementaciones de HPET tienen irónicamente problemas de precisión, debido a la lentitud de lectura o la deriva, entre otros problemas. Sin embargo, todavía debería estar bien usarlo en la mayoría de los casos, especialmente para la reproducción/sincronización multimedia (ya que para eso se diseñó originalmente). – Alex

1

Literalmente leí una publicación de blog en MSDN sobre esto hoy, read it here, cubre el tema bastante bien. Tiene un énfasis en DateTime de C# pero es universalmente aplicable.

+0

Acabo de leer lo mismo. Planteó la pregunta, ya que Eric no entró en detalles. Su artículo es solo sobre lo básico. – mafu

+0

@mafutrct :) Medir el tiempo no es una ciencia exacta, porque ¿qué es el tiempo? El tiempo se define como el período durante el cual ocurren los eventos. El reloj atómico usa un estándar de frecuencia de resonancia atómica como elemento de indicación del tiempo, por lo que es muy preciso. Pero las computadoras no pueden usar mediciones tan precisas, así que use otros métodos que sean menos precisos. Así es como, con el tiempo, los relojes pierden sincronía. – Chris

+0

Bueno, sí, pero eso no acaba de responder a la pregunta. Las computadoras pueden proporcionar ns precisión para timediffs, por lo que debería haber una manera de mejorar la precisión ms que solemos obtener. Además, me gustaría saber cómo se logra (a veces) esta precisión ns. – mafu