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 una gettimeofday()
función que luego llama a la clock_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 en jiffies
. 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 del HZ
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
sobre calendar time
(también llamado wall clock
) en el arranque para que sepa lo que era el tiempo real cuando el sistema comenzó. Luego agrega jiffies/HZ
valor a esto cada vez que una aplicación de espacio de usuario pregunta a qué hora está usando la clock_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.