Hoy les dare un pantallaso de lo que considero muy importante en programación, con mis conocimientos en drivers
y opiniones personales, ya que, sin medidas de tiempo exactas y frecuencias todas las cosas de hoy en dia
no serían posibles (aplicaciones, videojuegos, frecuencia de televisores PAL NTSC, fisica cuantica, etc...).
Ademas nos permite tener una visión más detallada de las frecuencias del kernel.


Jiffies:
Esta unidad no tiene una medida exacta, de hecho varia segun la versión del kernel(con respecto a los HZ que veremos
más adelante).
Se lo considera jiffy como "un santiamen"(velocidad muy rapida pero no determinada) ya que no tiene interpretación
exacta...
por otro lado esta medida es MUY importante en el kernel de los sistemas linux, ya que cuando el sistema
botea esta variable es puesta a 0 y es contada cada interrupcion.

Por ejemplo en fisica un "jiffy" se refiere al tiempo que tarda la luz en viajar a cierta distancia especifica,
en informatica puede representar el tiempo entre dos ciclos sucesivos del reloj(como medida definida ha sido
de 10ms), en electronica un tiempo para completar un ciclo de corriente alterna.

la variable "jiffie" es representada en jiffies.h de la siguiente manera:
extern unsigned long volatile jiffies;
Aquí tenemos otro dato, que por ejemplo es(por obviedad) volatil y no atomica como se puede pensar, ya que es un
dato que al apagarse el ordenador deja de existir...

A continuación mostrare lo fácil que es conseguir esta variable en el kernel de linux:
printk(KERN_INFO "\nJIFFIES %lu, jiffies);
Esto mostrará cuánto tiempo ha pasado desde que se inicio el ordenador.

HZ:
Ahora si quisieramos saberlo en segundos, contemplen está opción:
printk(KERN_INFO "\nJiffies en segundos %lu", (jiffies/HZ));
Como venia explicando cada version de kernel y sistema tiene una medida en HZ distintas(anteriormente 100),
por ésto hay que tener cuidado a la hora de conseguir medidas exactas(como lo pueden ser en MS),
ya que la diferencia entre Hz del procesador podria dar 0!. Para saber nuestro Hz estan facil como hacer:
printk(KERN_INFO "\nHz %d", HZ);
En mi caso esta funcion me dio 250, es decir que mi version de kernel se maneja en 250HZ,
Tambien podemos saber esta medida en <asm/param.h> o en mi caso en <asm-generic/param.h>

MS:
Ahora convertiremos los jiffies a milisegundos:
printk(KERN_INFO "\nJiffies en msecs %lu", jiffies_to_msecs(jiffies));
NOTA: Recordemos que la equivalencia de jiffies es dada por la constante de HZ que vimos anteriormente...

Para resumir y finalizar, vimos como es de util y precisa esta variable, obtener su valor exacto puede ser
mas o menos dificil dependiendo del uso que le queramos dar(y la exactitud).
Dejare el código completo para despejar dudas:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int __section(.init.text) __cold notrace INIT_KERNEL(void)
{
  printk(KERN_INFO "\nJiffies %lu", jiffies);
  printk(KERN_INFO "\nJiffies en segundos %lu", (jiffies/HZ));
  printk(KERN_INFO "\nJiffies en msecs %lu", jiffies_to_msecs(jiffies));
  printk(KERN_INFO "\nHz %d", HZ);
  
  return 0;
}

static void __section(.exit.data) EXIT_KERNEL(void)
{
  
}

module_init(INIT_KERNEL);
module_exit(EXIT_KERNEL);
NOTA FINAL: Este es un tema muy amplio y de aca se desplegan otros temas como lo pueden ser frecuencias en
electronica y en hardware en general o incluso en neurociencia...
Por esto si te interesa este tema dejare que tomes iniciativa por tu cuenta, y si tienes alguna duda puedes
hacermela por aca o mandandome un PM.

Atte: NvK
una labor muy admirable la tuya te felicito
sigue asi
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Responder

Volver a “Fuentes”