Varios mecanismos de reloj y temporizador en Linux
1. RTC (Reloj en tiempo real)
Todos los PC tienen RTC. Es independiente de la CPU y otros chips. Aún puede funcionar normalmente después de apagar la computadora. RTC puede generar interrupciones periódicas en IRQ8. La frecuencia es de 2 Hz a 8192 HZ.
Linux solo usa RTC para obtener la hora y la fecha. Por supuesto, permite que el proceso realice operaciones en /dev/rtc. programación del dispositivo. El kernel accede a RTC a través de los puertos de E/S 0x70 y 0x71.
2. TSC (Contador de marca de tiempo)
Todos los microprocesadores en 80x86 tienen pines de entrada CLK. A partir de la serie Pentium, el microprocesador admite un contador cada vez que llega un reloj. , el contador aumenta en 1. El valor del contador se puede obtener mediante las instrucciones de ensamblaje rdtsc. La frecuencia de la CPU se puede obtener a través de calibrate_tsc. Se confirma calculando el aumento en el registro tsc durante aproximadamente 5 milisegundos. O puede obtener la frecuencia de la CPU a través de cat /proc/cpuinfo. tsc puede proporcionar una medición del tiempo más precisa que PIT.
3. PIT (temporizador de intervalos programable)
Además de RTC y TSC, los ordenadores compatibles con IBM proporcionan PIT. PIT es similar al mecanismo de alarma de un horno microondas. Cuando se acaba el tiempo, proporciona un tono de llamada. PIT no genera un tono de llamada, pero genera una interrupción especial, llamada interrupción del temporizador o interrupción del reloj. Se utiliza para indicarle al núcleo que ha pasado un intervalo. Este intervalo de tiempo también se denomina número de tick. Esto se puede determinar seleccionando la frecuencia del núcleo al compilar el núcleo. Si la frecuencia central se establece en 1000 HZ, el intervalo de tiempo o tick es 1/1000 = 1 microsegundo. El mes de tick es más corto. La precisión del tiempo es mayor pero el tiempo en modo de usuario es más corto. En otras palabras, la ejecución del programa será más lenta. La longitud del tick se almacena en la variable tick_nsec en nanosegundos. Se accede a PIT a través de los puertos 0x40--0x43 de 8254. El número de interrupción que genera es IRQ 0.
Las siguientes son algunas definiciones de macros en pIT:
HZ: Número de interrupciones por segundo.
CLOCK_TICK_RATE: El valor es 1, 193, 182. Es la frecuencia del oscilador interno del chip 8254.
LATCH: representa la relación de CLOCK_TICK_RATE y HZ. Se utiliza para programar PIT.
setup_pit_timer() es el siguiente:
spin_lock_irqsave(amp; i8253_lock, flags);
outb_p(0x34, 0x43); >udelay (10);
outb_p(LATCH amp; 0xff, 0x40);
udelay(10);
outb (LATCH gt; gt; 8 , 0x40);
spin_unlock_irqrestore(amp; i8253_lock, flags);
4. Temporizador local de CPU
Proporcionado por apic local en microprocesadores de arquitectura 80x86 recientes. temporizador La diferencia entre este y pit es que proporciona interrupciones periódicas y de un solo disparo. Permite enviar interrupciones a una CPU específica. Las interrupciones de un solo disparo se utilizan comúnmente en sistemas en tiempo real.