time(7) Miscellaneous Information Manual time(7)

time - visión general del tiempo y los temporizadores

El Tempo real se define como el tiempo medido desde algún punto fijo, ya sea desde un punto estándar en el pasado (véase la descripción del Inicio (Epoch) y el tiempo del calendario a continuación), o desde algún momento (por ejemplo, el comienzo) en la vida de un proceso (tiempo transcurrido).

Tempo de proceso se define como la cantidad de tiempo de CPU utilizado por un proceso. Esto a veces se divide en dos componentes: usuario y sistema. El tiempo de CPU del usuario es el tiempo que se gasta ejecutando código en modo de usuario. El tiempo de CPU del sistema es el tiempo que el núcleo está ejecutando en modo sistema en nombre del proceso , por ejemplo ejecutando llamadas del sistema. Puede emplearse la orden time(1) para determinar la cantidad de tiempo de CPU consumido durante la ejecución de un programa. Un programa puede determinar la cantidad de tiempo de CPU que ha consumido usando times(2), getrusage(2) o clock(3).

La mayoría de los equipos tienen un reloj de hardware (alimentado por batería) que el núcleo lee durante el inicio para iniciar el reloj del software. Para más información, consulte rtc(4) y hwclock(8).

La exactitud de muchas llamadas del sistema que establecen los intervalos de tiempo, (por ejemplo, select(2) o sigtimakawit(2)) y miden el tiempo de la CPU (por ej., getrusage(2)), está limitada por la resolución del reloj de software gestionado por el núcleo que mide el tiempo en jiffies. El tamaño de un jiffy se determina por el valor de la constante del núcleo HZ.

El valor de HZ varía entre las versiones del kernel y las arquitecturas de hardware. Por ejemplo, en i386: en los núcleos a partir de Linux 2.4.x, HZ tenía un valor de 100, dando un valor jiffy de 0.01 segundos; a partir de Linux 2.6.0, el HZ se elevó a 1000, dando un jiffie de 0.001 segundos. Desde Linux 2.6.13, el valor HZ es un parámetro configurable del núcleo que puede valer 100, 250 (el predeterminado) o 1000, dando un valor de jiffies de, respectivamente, 0.01, 0.004, y 0.001 segundos. Desde Linux 2.6.20, también puede configurarse a 300, un número que se divide uniformemente para las tasas de cuadro de vídeo comunes (PAL, 25 Hz; NTSC, 30 Hz).

La llamada de sistema times(2) es un caso especial. Proporciona tiempos con una granularidad definida por la constante de núcleo USER_HZ. Las aplicaciones de espacio de usuario pueden determinar el valor de esta constante mediante sysconf(_SC_CLK_TCK).

El núcleo incluye soporte para una gama de relojes que miden varios tipos de tiempo transcurrido y virtual (es decir, CPU consumido). Estos relojes se describen en clock_gettime(2), algunos de los cuales son ajustables mediante clock_settime(2). Los valores de ciertos relojes son virtualizados por espacios de nombres de tiempo; véase time_namespaces(7).

Antes de Linux 2.6.21, la precisión de las llamadas de temporizador y de las pausas de las llamadas del sistema (véase a continuación) también estaba limitada por el tamaño del jiffy.

Desde la versión de 2.6.21, Linux admite temporizadores de alta resolución (HRTs), configurables a través de CONFIG_HIGH_RES_TIMERS. En un sistema que soporta HRTs, la precisión de las pausas de las llamadas del sistema y temporizador ya no están restringida por el jiffy, sino que puede ser tan precisa como el hardware permita que, en equipos modernos, es habitual ver precisiones de microsegundos. Puede comprobarse que los temporizadores de alta resolución son compatibles viendo la resolución devuelta por una llamada a clock_getres(2) o mirando las entradas 'resolution' en /proc/timer_list.

Los HRT no son compatibles en todas las arquitecturas de hardware. Existe soporte, ente otros, para x86, ARM y PowerPC.

Los sistemas UNIX representan el tiempo en segundos desde el Inicio (Epoch) 1970-01-01 00:00:00 +0000 (UTC).

Un programa puede determinar tiempo de calendario a través del reloj clock_gettime(2) CLOCK_REALTIME, que muestra el tiempo (en segundos y nanosegundos) que han transcurrido desde el Inicio (Epoch); time(2) proporciona información similar, pero redondeada al segundo más próximo. El tiempo del sistema se puede cambiar mediante clock_settime(2).

Algunas funciones de la biblioteca usan una estructura de tipo tm para representar tiempo desglosado, que almacena el valor de tiempo separado en componentes distintos (año, mes, dia, hora, minuto, segundo...). Esta estructura se describe en tm(3type), donde también se describen funciones que convierten el tiempo de calendario al un tiempo desglosado y viceversa. Las funciones para la conversión entre el desglosado y las representaciones impresa de la cadena del tiempo se describen en ctime(3), strftime(3) y strptime(3).

Varias llamadas y funciones del sistema permiten que un programa se pause (suspenda su ejecución) durante un período de tiempo definido. Consulte nanosleep(2), clock_nanosneep(2) y sleep (3).

Varias llamadas del sistema permiten que un proceso establezca un temporizador que expira en algún momento del futuro, también a intervalos repetidos. Consulte alarm(2), getitimer(2), timerfd_create(2) y timer_creat.(2).

A partir de Linux 2.6.28, es posible controlar el 'tiempo de hibernación del temporizador' para un determinado hilo. El tiempo de hibernación es el tiempo por el que el núcleo puede retrasar el 'despertado' de ciertas llamadas del sistema que bloquean con un tiempo de espera. Estas hibernaciones permiten al núcleo unificar eventos de 'despertado', reduciendo así el número de activaciones del sistema y ahorrando energía. Consulte la descripción de PR_SET_TIMERSLACK en prctl(2).

date(1), time(1), timeout(1), adjtimex(2), alarm(2), clock_gettime(2), clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2), timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3), ntp_adjtime(3), ntp_gettime(3), pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3), timeradd(3), usleep(3), rtc(4), time_namespaces(7), hwclock(8)

La traducción al español de esta página del manual fue creada por Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.

2 Mayo 2024 Páginas de Manual de Linux 6.8