La medición y sincronización del tiempo en Ubuntu Linux (1)

Este es el primer artículo de una serie dedicada a la medición y sincronización del tiempo en GNU/Linux. A lo largo del mismo veremos una parte de la teoría necesaria para entender los siguientes artículos: el tiempo UTC, qué son los segundos intercalares o leap seconds, el tiempo atómico, el tiempo UNIX y la localización.

1. Qué es el tiempo

Todos de manera intuitiva conocemos el concepto de tiempo: se trata de la magnitud física con la que es posible medir la duración de un determinado acontecimiento. La unidad básica utilizada por el sistema internacional para su medición es el segundo.

Contando segundos formamos minutos y contando minutos formamos las horas. Confiamos en el segundo como medida de referencia. Sin embargo debemos de saber que…​ ¡una hora medida que se midió en 1917 no correspondería a los 3600 segundos en 2017!.

¿El motivo? pues sencillamente que el segundo ha variado en función del sistema que se ha utilizado como referencia para medirlo.

1.1. El segundo en función del Sol

A lo largo de la historia se han empleado multitud de mecanismos para medir el tiempo, siendo el principal la observación del sol y del resto de astros del firmamento.

Observando lo que tarda el sol desde su punto más alto en volver a la misma posición, se determina el día solar y dado que el movimiento del sol observado desde el mismo punto de la la tierra no es regular a lo largo del año, se realiza una media y se define el día solar medio.

A esta forma de medir el tiempo se le denomina tiempo solar medio y define el segundo como:

Un segundo es la 1/86400 parte del día solar medio.

Esta definición del segundo se empleó como referencia del sistema internacional y se usaría para establecer el sistema de Tiempo Medio de Greenwich (GMT), que era el tiempo solar medio del observatorio de Greenwich (Londres).

observatorio de greenwich
Figura 1. Imagen del observatorio de Greenwich

1.2. El segundo en función de de los átomos

Tras la invención del reloj atómico se observó que se trataba de un sistema de referencia mucho más estable que el de la rotación de la tierra. A esta nueva forma de medir el tiempo se le denominó tiempo atómico y se definió el segundo como:

Un segundo es la duración de 9.192.631.770 oscilaciones de la radiación emitida en la transición entre los dos niveles hiperfinos del estado fundamental del isótopo 133 del átomo de cesio (133Cs), a una temperatura de 0 K.

Obviamente, la elección de esta cifra no fue arbitraria, sino que se escogió porque coincidía exactamente con el segundo del día solar medio en 1958, el año en que se puso en marcha el primer reloj.

Debido a la mayor estabilidad, a partir de 1967 se pasó a usar esta definición de segundo del tiempo atómico como la referencia del sistema internacional.

reloj atomico
Figura 2. Un reloj atómico

2. El Tiempo Universal Coordinado o UTC

El Tiempo Universal Coordinado o UTC es el principal estándar de tiempo. A diferencia de su precursor, el Tiempo Medio de Greenwich (GMT), este estándar emplea como magnitud la definición de segundo del tiempo atómico. Para realizar su medición, se usan varios relojes atómicos distribuidos por el planeta.

2.1. Un pequeño hack: los segundos intercalares (leap seconds)

Como vimos, la hora del día siempre ha sido marcada por el día solar medio, pero tiene un grave problema: la tierra no gira siempre a la misma velocidad. Al no girar a la misma velocidad, la referencia de la posición del sol y de otros astros se hace imprecisa. Y, por lo tanto, este hecho hace que el segundo del tiempo solar medio no coincida con el segundo del tiempo atómico. O, dicho de otra manera: cuando se fijó el segundo atómico en 1958 había exactamente 86400 segundos (atómicos) en un día solar medio y pero ahora ya no hay exactamente esa cantidad.

leap seconds
Figura 3. Variabilidad en la rotación de la tierra

Así que, debido a que por tradición se vinculaba la hora al día solar medio y a que este efecto acumulado a lo largo de los años podría producir una desviación significativa, se optó por corregir las diferencias agregando o eliminando segundos al tiempo UTC. De este modo la hora UTC se ajusta lo más posible a la hora del día solar medio. A estos segundos que se agregan o quitan se les conoce como segundos intercalares.

Desde la implantación de UTC, la rotación de la tierra se ha ralentizado, lo que ha hecho que únicamente se hayan agregado segundos, aun así el estándar también contempla su eliminación (a esto lo llama insertar segundos negativos). El organismo que lleva a cabo el estudio y se encarga de anunciar cuándo debe introducirse o eliminarse un segundo intercalar es el IERS (International Earth Rotation and Reference Systems Service) y lo hace mediante un boletín que lanza cada 6 meses.

Para entenderlo, fijémonos en el siguiente ejemplo con segundo intercalar:

  2011-12-31 23.59.57
  2011-12-31 23.59.58
  2011-12-31 23.59.59
  2011-12-31 23.59.60 <-- leap second
  2012-01-01 00.00.00
  2012-01-01 00.00.01
  2012-01-01 00.00.02

De manera regular, el reloj UTC pasa de las 23:59:59 a las 00:00:00 al cabo de un segundo. Pero puando se agrega un segundo intercalar, el reloj pasará a las 23:59:60 y, tras otro segundo, pasará a las 00:00:00. Si se eliminase un segundo intercalar, no se pasaría por 23:59:59, sino que desde las 23:59:58 se pasaría a las 00:00:00 al cabo de un segundo.

Esto es según UTC, pero fijémonos en la existencia del segundo 60. Sin embargo, algunas implementaciones de relojes los valores válidos son del 0 al 59.

Los segundos intercalares únicamente se agregan al final de un mes y hasta la fecha sólo se han insertado en los meses de Junio y Diciembre.

2.2. Problemas con los segundos intercalares

Hemos visto que, con el uso de los segundos intercalares, se mantiene el tiempo UTC conforme al día solar medio con una precisión del segundo de tiempo atómico.

Sin embargo este "hack" introduce otros problemas. Uno de ellos es que no podemos saber cuántos segundos habrá entre el momento presente y una fecha y hora en el futuro futuro, como pudiera ser por ejemplo las 00:00:00 del 1 de Marzo de 2024. Esto se debe a que no sabemos cuántos segundos intercalares habrá ni cuándo se agregarán.

Otro problema con el tiempo UTC es que dados dos tiempos UTC ya pasados, por ejemplo: 2017/10/12 14:00:00 y 2005/10/12 14:00:00, para saber el número de segundos que han transcurrido, necesitaremos tener un listado de todos los segundos intercalados que se han introducido hasta la fecha.

2.3. Tiempo Atómico Internacional o TAI

La medida que mantienen los relojes atómicos sin el ajuste de los segundos intercalares es lo que se conoce como el Tiempo Atómico Internacional (TAI). Actualmente mide UTC + 37 segundos (que son los segundos intercalares que se han agregado desde que se pusieron en funcionamiento).

Debido a que no tiene los "saltos de tiempo" introducidos en UTC, se escoge este sistema en aplicaciones que requieren gran precisión como la navegación, aviación, transporte, satélites…​

3. Usos horarios, horario de verano y localización

Los usos horarios se establecen en relación con el tiempo UTC, que será el uso horario centrado sobre el meridiano de Greenwich (meridiano 0). El tiempo sobre este meridiano se le conoce como tiempo UTC, GMT y hora Zulú.

Cada país decide el uso o usos horarios que va a utilizar en sus diferentes regiones y generalmente lo hará en función del meridiano en el que se encuentre, aunque no tiene porqué. Por ejemplo, en la zona peninsular de España geográficamente nos correspondería tener hora GMT, sin embargo tenemos GMT+1 también conocido como CET (Hora de Europa Central).

De manera adicional, muchos países pueden cambiar su horario adelantando o retrasando el tiempo de su uso horario entre determinadas fechas del año. Generalmente muchos países tienen lo que se conoce como horario de verano (o Daily Saving Time, DST) en los que adelantan una hora sobre su uso horario.

Nótese que los países son soberanos tanto en decidir el uso horario que utilizan como en los posibles cambios de horario que hay que aplicar entre determinadas fechas. Esto lógicamente implica que se tengan que actualizar los sistemas con la información sobre los usos horarios cada cierto tiempo.

A la conjunción del uso horario elegido y los cambios de hora definidos se le llama zona horaria o timezone. Si un sistema está configurado con respecto a una zona horaria diferente de UTC, se dice que está configurado con hora local.

Cuando estemos usando la hora local tendremos que tener en cuenta la existencia de horas solapadas que se darán por los cambios de hora del horario de verano. Obviamente también deberemos realizar la conversión horaria cuando contrastemos horas con máquinas de otra zona horaria.
zonas horarias
Figura 4. Mapa de zonas horarias

Para completar las particularidades que pueden ocurrir en las diferentes regiones nos falta añadir el formato con el que se han de representar las fechas y horas. Por ejemplo en España se utiliza día/mes/año mientras que en Estados Unidos se usa mes/dia/año. Este formato va definido en la información de localización del sistema. Además de los formatos de fecha esta información incluye otros formatos típicos de cada región como la moneda usada, el carácter de separador de decimales, etc.

4. El tiempo UNIX

El tiempo UNIX o también conocido como tiempo POSIX es el número de segundos transcurridos desde las 00:00:00 del día 1 de Enero de 1970 UTC sin usar segundos intercalares. Es lo que se conoce como una marca de tiempo o timestamp. Nótese además que el número de segundos puede expresarse como un número entero, lo cual hace que pueda almacenarse y tratarse como tal.

creadores unix
Figura 5. Los creadores de Unix

Para ver esto, usemos por ejemplo el timestamp 1234567890 y el comando date para que nos lo convierta:

$ date --utc --date="@1234567890"
vie feb 13 23:31:30 UTC 2009
$ date --date="@1234567890"
sáb feb 14 00:31:30 CET 2009

En ambos ejemplos se está usando el mismo timestamp definido, sin embargo en el primer ejemplo exigimos la hora UTC mientras que en el segundo ejemplo no exigimos nada y por lo tanto, pedirá la hora local del sistema en que ha sido ejecutado. Como vemos, y esto es importante, el mismo timestamp tiene diferentes resultados en función del uso horario establecido y esto es debido a que el timestamp Unix siempre usa como referencia la hora UTC.

Usar la hora UTC para almacenar el tipo de dato tiene una gran ventaja, ya que además de solucionar problemas de horas solapadas (ya hablaremos posteriormente de los segundos intercalados) por los cambios de horario de verano, permite que dos sistemas en diferentes zonas horarias interpreten la información correctamente.

Es importante remarcar que este tiempo, el tiempo UNIX, es ofrecido por la interfaz del sistema operativo a los programas y librerías en el espacio de usuario para que lo usen, cómo luego el sistema operativo implemente el "contrato" no nos incumbe (al menos de momento).

De manera adicional, la interfaz de programación Posix y las librerías estándar de C, hacen uso de otro número entero para denotar los microsegundos, pudiendo llegar a este nivel de precisión (en el Kernel Linux podemos llegar a los nanosegundos). Además, para facilitar la vida al programador, la interfaz de programación ofrece una serie de funciones que realizará automáticamente la conversión del tipo de dato a un formato de hora del sistema local.

Este formato de tiempo no sólo se usa para obtener el tiempo del sistema en un momento dado, también se utiliza para almacenar marcas de tiempo. Un claro ejemplo serían los datos referentes a la creación, modificación y acceso del sistema de archivos. Almacenar en este formato hace que, además de ser más fácil de manejar, el sistema de archivos pueda ser montado en cualquier sistema independientemente del uso horario.

4.1. El efecto 2038

Ya hemos visto que los timestamp unix pueden almacenarse como un tipo de datos entero. De esto se deriva un pequeño problema, ya que al almacenarse como un entero con signo, en los sistemas Unix de 32 bits se llegará hasta el día 19 de Enero 2038 03:14:07.

¿Se acabará la humanidad como pudo acabarse con el efecto 2000?. No lo sabemos, lo que sí es seguro es que tendremos menos pelo y que si hacen películas sobre el efecto 2038 tendrán mejores efectos especiales que las que se hicieron del 2000.

4.2. Tratamiento de los segundos intercalares

En la definición del timestamp Unix hemos vimos que era un número de segundos sin contar los segundos intercalados. ¿Qué quiere decir esto?, pues sencillamente que no existen para este tipo de dato, por lo que no habrá que tenerlos en cuenta para su uso: ni para almacenar, visualizar, restar fechas, etc.

Así que hacemos como el avestruz y escondemos la cabeza. Sin embargo…​ los segundos intercalares sí que existen. Esto lo trataremos cuando llegue el momento.


Hasta aquí hemos llegado con el artículo de hoy, ha sido intenso en teoría, pero es importante entender todos estos conceptos. En el siguiente artículo veremos cómo se lleva a cabo la medición del tiempo en un sistema GNU/Linux.

Referencias

Información de copyright:

comments powered by Disqus