1.5. Gestion Del Tiempo Real
-
Upload
jose-luis-rocha-marquez -
Category
Documents
-
view
218 -
download
0
Transcript of 1.5. Gestion Del Tiempo Real
-
8/18/2019 1.5. Gestion Del Tiempo Real
1/11
1
1.5. Gestión del TiempoReal en Sistemas
Empotrados
-
8/18/2019 1.5. Gestion Del Tiempo Real
2/11
2
Gestión de tiempos ytemporización
• El tiempo es un recurso peculiar.
• La gestión del tiempo es un componente
básico en cualquier sistema empotrado o detiempo real.
• Vamos a estudiar:– Tipos de relojes
– Rutinas de servicio de la interrupción del reloj
– Gestión de temporizadores
-
8/18/2019 1.5. Gestion Del Tiempo Real
3/11
3
Gestión de tiempos y temporizaciónRelojes
• Reloj de tiempo real (RTC)– Siempre en funcionamiento. Requiere
alimentación propia.
• Reloj Hardware– Se inicializa con el RTC en la inicialización.
– Produce las interrupciones de reloj.
– Suele ser programable (PIT, p. ej., Intel 8253).
– Puede tener otras funciones (p. ej., refresco de laDRAM).
• Reloj del sistema– Es un reloj software implementado por la ISR del
PIT.
– Cuenta interrupciones y las expresa en unidadesde tiempo.
(ISR: Manejadores de interrupción)
(PIT: Temporizador programable de intervalos)
-
8/18/2019 1.5. Gestion Del Tiempo Real
4/11
4
El tiempo en Linux
•Comando para consultar el reloj del sistema:– date
•Ajuste del reloj:– adjtimex (sólo puede ejecutarla root super usuario)
•Cronómetro de alta resolución:– gettimeofday()
#include
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);
-
8/18/2019 1.5. Gestion Del Tiempo Real
5/11
5
Gestión de tiempos y temporizaciónRutina de servicio de la interrupción del reloj
• Funciones:– Soporte del reloj software (contador de unidades
de tiempo, p. ej., segundos)
• Para el tiempo del sistema
• Para implementar temporizadores
– Gestión del tiempo compartido (expulsión por finde quantum).
– Contabilidad del uso de recursos temporales (p.ej., tiempo de CPU).
• Genera eventos periódicos
-
8/18/2019 1.5. Gestion Del Tiempo Real
6/11
6
Gestión de tiempos y temporizaciónRutina de servicio de la interrupción del reloj
Ejemplo
ISR_del_reloj (){
...ticks_por_segundo−−;intervalo_CPU++;
if (ticks_por_segundo== 0) {
actualiza_tiempo_del_sistema();señalar_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());
}
-
8/18/2019 1.5. Gestion Del Tiempo Real
7/117
Gestión de tiempos y temporizaciónGestión de temporizadores
• El sistema proporciona un servicio de temporización:
– Un proceso se duerme durante n unidades de tiempo.
– El sistema gestiona cuándo despertar a cada procesodormido.
• Hay que definir la resolución del temporizador:– A mayor resolución más carga para el sistema.
• Modelo:
– Los procesos ponen su petición de temporización(usando un IORB: Input Output Request Block)).
– Un gestor de tiempos (manejador), activado cadaunidad de tiempo por la ISR del reloj, despacha laspeticiones a medida que se cumplen, despertando alproceso correspondiente.
-
8/18/2019 1.5. Gestion Del Tiempo Real
8/118
Peticionestemporización
Gestión de tiempos y temporizaciónImplementación
13 EVENTO_P
ISR
Gestorde
tiempos
P EVENTO_SEGUNDO
EVENTO_P
-
8/18/2019 1.5. Gestion Del Tiempo Real
9/119
Gestión de tiempos y temporizaciónImplementación
13
23
23
12
Ordenar
12
13
23
23
Relativoa la
anterior
12
1
10
0
Sólo hay queconsultar la
primera
Sólo hay quedecrementar la
primera
-
8/18/2019 1.5. Gestion Del Tiempo Real
10/1110
Gestión de tiempos y temporizaciónImplementación
Gestor_tiempos (){
...while (TRUE) {
esperar_evento(EVENTO_SEGUNDO);while (primero(peticiones_tiempo).plazo == 0)
señalar_evento(primero(peticiones_tiempo).evento;eliminar(primero(peticiones_tiempo));
}primero(peticiones_tiempo).plazo−−;
}}
-
8/18/2019 1.5. Gestion Del Tiempo Real
11/11
Ejemplo:uso de temporizadores en Unix
#include
#include
#include
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