Red de conocimiento del abogados - Bufete de abogados - La diferencia entre CLOCK_MONOTONIC y CLOCK_REALTIME

La diferencia entre CLOCK_MONOTONIC y CLOCK_REALTIME

1 CLOCK_MONOTONIC (hora monótona)

CLOCK_MONOTONIC: Basado en el tiempo absoluto, el tiempo obtenido es el tiempo desde el reinicio del sistema hasta el presente. Cambiar la hora del sistema no tiene ningún efecto. él.

Significado literal: tiempo monótono, que representa el tiempo transcurrido desde que se inicia el sistema, registrado por la variable santiamén.

Cada vez que se inicia el sistema, sjiffies se inicializa a 0. Cada vez que llega una interrupción del temporizador, los jiffies aumentan en 1, es decir, representa la cantidad de ticks que han transcurrido desde que se inició el sistema.

Los santiamén deben ir aumentando monótonamente porque el tiempo es irreversible.

2 CLOCK_REALTIME (es decir, tiempo de pared)

CLOCK_REALTIME: tiempo relativo, desde 1970.1.1 hasta la hora actual. Cambiar la hora del sistema cambia el valor obtenido. Se basa en la hora del sistema.

Significado literal: tiempo de pared, tiempo de reloj de pared, que representa el tiempo real y es registrado por la variable xtime.

Cada vez que se inicia el sistema, la hora RTC en el CMOS se lee en xtime. Este valor es "la cantidad de segundos experimentados desde 1970-01-01 y la cantidad de nanosegundos experimentados en este segundo". Cada vez que llega una interrupción del temporizador, también es necesario actualizar xtime.

El tiempo de pared no necesariamente aumenta de forma monótona. Debido a que el tiempo del muro se refiere a la hora real, si el sistema desea sincronizarse con la hora de un determinado nodo en la red, o si el administrador del sistema considera que el tiempo del muro no coincide con el tiempo real, es posible cambiarlo. el tiempo de la pared arbitrariamente.

El ejemplo más simple es que el usuario puede modificar la hora del sistema arbitrariamente. La hora modificada debe ser la hora de la pared, es decir, xtime Incluso puede escribirse en RTC y guardarse permanentemente.

Algunas aplicaciones de software pueden utilizar este tiempo de pared. Por ejemplo, cuando usé la estación de trabajo vmware en el pasado, se me indicó que el período de prueba había expirado cuando lo inicié. Sin embargo, siempre que ajustara el tiempo del sistema para avanzar un año, no aparecería ningún mensaje cuando lo iniciara. de nuevo. Probablemente esto se deba a que cuando comienza, usa gettimeofday para leer el tiempo del muro y luego determina si ha caducado. Siempre que se cambie el tiempo del muro, puede ser engañado.