Anda di halaman 1dari 11

1.5.

Gestin del Tiempo


Real en Sistemas
Empotrados

Gestin de tiempos y
temporizacin
El tiempo es un recurso peculiar.
La gestin del tiempo es un componente
bsico en cualquier sistema empotrado o de
tiempo real.
Vamos a estudiar:
Tipos de relojes
Rutinas de servicio de la interrupcin del reloj
Gestin de temporizadores

Gestin de tiempos y temporizacin


Relojes
Reloj de tiempo real (RTC)
Siempre en funcionamiento. Requiere
alimentacin propia.

Reloj Hardware

Se inicializa con el RTC en la inicializacin.


Produce las interrupciones de reloj.
Suele ser programable (PIT, p. ej., Intel 8253).
Puede tener otras funciones (p. ej., refresco de la
DRAM).

Reloj del sistema


Es un reloj software implementado por la ISR del
PIT.
Cuenta interrupciones y las expresa en unidades
de tiempo.
(ISR: Manejadores de interrupcin)
(PIT: Temporizador programable de intervalos)

El tiempo en Linux
Comando para consultar el reloj del sistema:
date

Ajuste del reloj:


adjtimex (slo puede ejecutarla root super usuario)

Cronmetro de alta resolucin:


gettimeofday()
#include <sys/time.h>
struct timeval t0, t1;

gettimeofday(&t0, NULL);

gettimeofday(&t1, NULL);
printf("Duracion: %d,%d segundos\n",
t1.tv_sec-t0.tv_sec, t1.tv_usec-t0.tv_usec);
4

Gestin de tiempos y temporizacin


Rutina de servicio de la interrupcin del reloj
Funciones:
Soporte del reloj software (contador de unidades
de tiempo, p. ej., segundos)
Para el tiempo del sistema
Para implementar temporizadores

Gestin del tiempo compartido (expulsin por fin


de quantum).
Contabilidad del uso de recursos temporales (p.
ej., tiempo de CPU).

Genera eventos peridicos

Gestin de tiempos y temporizacin


Rutina de servicio de la interrupcin del reloj
Ejemplo
ISR_del_reloj ()
{
...
ticks_por_segundo;
intervalo_CPU++;
if (ticks_por_segundo== 0) {
actualiza_tiempo_del_sistema();
sealar_evento(EVENTO_SEGUNDO);
ticks_por_segundo= UN_SEGUNDO;
}
if (intervalo_CPU == quantum) {
incrementa_gasto_CPU_del_proceso(intervalo_CPU);
intervalo_CPU= 0;
goto cambio_de_contexto;
}
...
eoi();
reti();
cambio_de_contexto:
expulsar_proceso();
dispatcher (scheduler());
}
6

Gestin de tiempos y temporizacin


Gestin de temporizadores
El sistema proporciona un servicio de temporizacin:
Un proceso se duerme durante n unidades de tiempo.
El sistema gestiona cundo despertar a cada proceso
dormido.

Hay que definir la resolucin del temporizador:


A mayor resolucin ms carga para el sistema.

Modelo:
Los procesos ponen su peticin de temporizacin
(usando un IORB: Input Output Request Block)).
Un gestor de tiempos (manejador), activado cada
unidad de tiempo por la ISR del reloj, despacha las
peticiones a medida que se cumplen, despertando al
proceso correspondiente.

Gestin de tiempos y temporizacin


Implementacin

Peticiones
temporizacin
13

EVENTO_P

Gestor
de
tiempos

EVENTO_P

EVENTO_SEGUNDO

ISR

Gestin de tiempos y temporizacin


Implementacin
Slo hay que
consultar la
primera

13

12

23

13

23
12

Ordenar

23
23

Slo hay que


decrementar la
primera

12
Relativo
a la
anterior

1
10
0

Gestin de tiempos y temporizacin


Implementacin
Gestor_tiempos ()
{
...
while (TRUE) {
esperar_evento(EVENTO_SEGUNDO);
while (primero(peticiones_tiempo).plazo == 0)
sealar_evento(primero(peticiones_tiempo).evento;
eliminar(primero(peticiones_tiempo));
}
primero(peticiones_tiempo).plazo;
}
}

10

Ejemplo:
uso de temporizadores en Unix
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void fnula() {return;}


unsigned esperar_tiempo (unsigned seg) {
unsigned s;
s= alarm(seg);
pause();
return(s);

}
int main (int argc, const char * argv[]) {
int i;
unsigned t;
signal(SIGALRM, fnula);

for (i=1; i<5; i++) {


printf("espera (%d segundos)\n", i);
t= esperar_tiempo(i);
printf("despertado (%d)\n", t);
}
}
11

Anda mungkin juga menyukai