¿Cómo sabe un chip o computadora la duración de un segundo?

En primer lugar, un pequeño descargo de responsabilidad. La computadora no puede ejecutar realmente simultáneamente más procesos (es decir, ejecutar programas) de los que tiene CPU / núcleos. Y fácilmente puede haber procesos más activos que eso. En tal situación, el sistema operativo está cambiando entre ellos, otorgándoles a su vez acceso a la CPU. Los procesos se cambian con tanta frecuencia que nosotros, los seres humanos, ni siquiera nos damos cuenta.
Entonces, ¿hay alguna diferencia entre la computadora que mide 1s con una precisión absoluta y espera 1ms para otorgarle acceso a la CPU a su proceso y la mide con una precisión de hasta 1ms? Yo diría que no hay ninguno.

Ahora, cómo se mide el tiempo. Hay un reloj de cuarzo en tiempo real que oscila con cierta frecuencia (> 1MHz). Se acompaña con un par de contadores programables. Estos contadores se incrementan con cada tic del reloj. Una vez que un contador alcanza un valor preprogramado, activa la CPU para ejecutar un pequeño procedimiento (interrupción de tiempo). Hay un contador que activa dicha interrupción de tiempo cada período fijo (por ejemplo, 4 ms). El sistema operativo utiliza estas interrupciones de tiempo para cambiar los procesos en ejecución y también para medir el tiempo real con la precisión de una interrupción de tiempo (es decir, 4 ms).
Cuando su programa le pide al sistema operativo que espere 1 segundo, puede suceder en cualquier lugar entre las dos interrupciones de tiempo consecutivas, y el sistema operativo puede activarse para continuar su programa con una de las interrupciones de tiempo. Significa que no puede esperar un tiempo con mayor precisión que la frecuencia de las interrupciones de tiempo (digamos 4 ms).

También hay un reloj de cuarzo en tiempo real que funciona todo el tiempo en su computadora. Puede desplazarse hasta 1 segundo por día. Para corregir esta deriva, puede sincronizarse periódicamente con una red mundial de relojes atómicos utilizando el llamado protocolo de tiempo de red (NTP). Esto generalmente garantiza que la precisión de su reloj local es de al menos 0,1s.

En términos generales, la CPU en sí tiene un oscilador interno. Cada CPU tiene una velocidad de funcionamiento de un número constante de instrucciones por segundo (ya no es cierto para la CPU moderna). Esto es realmente controlado por el oscilador interno.

Sin embargo, dicho oscilador no es lo suficientemente preciso para el reloj en tiempo real. Se alejará del reloj del mundo real y puede que ni siquiera sea un número completamente constante de tics por segundo debido a la potencia, la temperatura y muchos otros factores.

Entonces, para cualquier computadora (incluida la integrada), si desea un reloj en tiempo real con algún requisito de precisión, debe tener un oscilador externo. Por ejemplo, algún tipo de oscilador de cristal.

Tales osciladores son generalmente bastante precisos. Si alguna vez ha tenido un reloj digital, tiene un oscilador de cristal en su interior. Por ejemplo, para un oscilador de cristal de 32Khz, el oscilador oscilará 32768 ciclos por segundo. Al contar el número de ciclos, sabes que ha pasado un segundo.

El oscilador de cristal también tiene deriva. Es simplemente pequeño en comparación con el reloj en tiempo real. Un reloj digital puede desplazarse aproximadamente 1 segundo cada mes o varios meses.

Tal deriva no es constante también, se ve afectada por la temperatura y algunos otros factores. Pero generalmente es suficiente para la mayoría de las aplicaciones.

Modelo simplificado: una computadora tendrá uno o más circuitos de ‘generador de pulso de reloj’ que producen pulsos digitales a alguna frecuencia conocida de alta frecuencia. Un circuito contador realiza un seguimiento de cuántos pulsos se han producido hasta el momento. Dividir el recuento por la frecuencia permite una sincronización relativamente precisa.