Según tengo entendido, se necesita RTC para realizar un seguimiento del tiempo. Sin embargo, Raspberry Pi no tiene eso y usa servidores NTP para sincronizar su tiempo.
Todo eso está bien, pero ¿cómo sabe Pi que ha transcurrido un milisegundo o un segundo? ¿Cómo es consciente Pi del paso del tiempo?
timekeeping
rtc
AppleGrew
fuente
fuente
Respuestas:
Operación RTC
Lo que le falta a RaspberryPi es un RTC (reloj en tiempo real) respaldado por batería. Es un dispositivo que puede funcionar independientemente de la computadora principal y realizar un seguimiento del tiempo que pasa incluso cuando está apagado (es por eso que tiene su propia batería). Puede funcionar de manera muy simple: tiene un oscilador de frecuencia conocido conectado y en cada pulso del oscilador, incrementará su temporizador / contador interno. Como se conoce la frecuencia, es fácil calcular el tiempo transcurrido en función del contador. El dispositivo también tendrá una batería para que pueda seguir funcionando incluso cuando la alimentación externa esté apagada.
Algunos dispositivos RTC pueden ser más sofisticados. Pueden, por ejemplo, crear una interrupción en frecuencia programable o en modo de alarma (ajustada a una hora determinada en el futuro o a una hora determinada cada día, etc.). No es relevante para mantener la hora del sistema y es opcional.
Cómo se usa el RTC
Una computadora puede preguntarle a RTC qué hora es (o más precisamente, cuál es su valor de contador) en el momento del arranque y establecer su fecha / hora interna en función de este valor. A partir de ahora, sin embargo, una computadora no le pedirá tiempo a RTC por segundo / milisegundo / microsegundo. En cambio, ejecutará su propio reloj (llamado tiempo del sistema), usualmente usando sus propios temporizadores / contadores. Al igual que en RTC, el temporizador / contador se registra con una frecuencia conocida, por lo que es fácil calcular el tiempo transcurrido.
Puede obligar a su sistema a sincronizar su reloj con el dispositivo RTC (en ambas direcciones), pero no sucederá hasta que lo solicite. Algunos sistemas están configurados para almacenar la hora del sistema en RTC cuando se apaga o después de la sincronización NTP, por ejemplo.
Falta de RTC
RaspberryPi, como muchas computadoras baratas de placa única, no tiene un dispositivo RTC externo. Esto significa que no puede pedir la hora actual en el arranque. Pero como ya se mencionó, esto no es un problema si podemos obtener la fecha / hora de otra fuente (como NTP). La única desventaja es que, a diferencia de RTC, no puede solicitar NTP en el arranque temprano (ya que primero necesita una conexión de red).
Entonces, para responder directamente a su pregunta, no importa si RaspberryPi (o cualquier otra computadora) tiene RTC o no, mantendrá un registro del tiempo utilizando un dispositivo interno de temporizador / contador que está disponible en casi todos los sistemas informáticos y se requiere para ejecutar casi cualquier tipo del sistema operativo
Tiempo en Linux
Las aplicaciones de espacio de usuario en Linux pueden determinar la llamada
calendar time
(que es un tiempo en el mundo real) utilizando unagettimeofday()
función que luego llama a laclock_gettime()
llamada del sistema. Lo que sucede ahora es un poco complicado debido a muchas características avanzadas que tiene el kernel de Linux (como espacios de nombres, etc.). Pero lo básico es que el núcleo mantiene su tiempo basado enjiffies
. En realidad, es solo una variable dentro del núcleo (generalmente de 64 bits de ancho) que cuenta el número de ticks desde que se inició el sistema.Los ticks son generados por el temporizador de hardware mediante
interrupts
.jiffies
el valor se incrementa en cada interrupción de este tipo. El temporizador de hardware está configurado para producir tales interrupciones a intervalos regulares. El intervalo se configura en el momento del arranque de acuerdo con un valor delHZ
parámetro de configuración del núcleo.En cualquier momento, el kernel sabe cuántos ticks se generaron desde el arranque (
jiffies
variable), sabe cuántos ticks se generan por segundo (HZ
opción de configuración) para que pueda calcular fácilmente cuánto tiempo pasó desde el último arranque.Para resumir - kernel pregunta
RTC
sobrecalendar time
(también llamadowall clock
) en el arranque para que sepa lo que era el tiempo real cuando el sistema comenzó. Luego agregajiffies/HZ
valor a esto cada vez que una aplicación de espacio de usuario pregunta a qué hora está usando laclock_gettime
llamada al sistema.Temporizador de hardware / dispositivo contador
El temporizador / contador de hardware es un dispositivo muy simple. Tiene un registro de contador que cuenta sus tics de reloj. Los ticks de reloj generalmente son creados por algunos externos
oscillator
(un circuito electrónico que produce una señal repetitiva) y son de frecuencia conocida (generalmente van desde un par de kHz a cientos de MHz). Esto significa que podemos calcular fácilmente cuánto tiempo pasó dividiendo el valor del contador por la frecuencia del oscilador.El dispositivo temporizador puede programarse para hacer varias cosas: puede contar hacia arriba y hacia abajo, comparar el registro del contador con algún valor. Por ejemplo, puede crear una señal externa y comenzar a contar desde el principio cuando el registro del contador tiene algún valor. De esta forma, puede configurar el dispositivo temporizador para crear dicha señal externa a intervalos constantes que es una frecuencia mucho más baja que el oscilador. Esta señal puede usarse luego como un evento de interrupción para una CPU.
Tenga en cuenta que el oscilador podría usarse directamente en lugar del dispositivo temporizador. Lo que diferencia al dispositivo temporizador / contador del oscilador es que se puede programar. Por lo tanto, puede pensar en el dispositivo temporizador / contador como un oscilador mucho más sofisticado.
fuente
El reloj de la CPU se deriva de un cristal. Por lo general, puede esperar 10-20 partes por millón para la precisión del reloj (aproximadamente 5-10 minutos por año)
fuente
De todos modos, para responder la pregunta de una manera mucho más fácil junto con instrucciones para agregar un RTC a su PI, insertaré un enlace a continuación. Dependiendo de si solo desea un método confiable además de usar la forma inet / ntp para decir la hora o necesita un método muy preciso, recomendaría ir con el RTC "Chronodot". De lo contrario, el RTC de la placa de conexión funcionaría bien y es muy fácil trabajar, todo lo que necesita para configurar es I2C para que el PI se comunique con el RTC. Información de enlace / materiales
fuente