PDF de programación - Watchdog y timers

Imágen de pdf Watchdog y timers

Watchdog y timersgráfica de visualizaciones

Publicado el 14 de Enero del 2017
631 visualizaciones desde el 14 de Enero del 2017
530,3 KB
40 paginas
Creado hace 12a (15/11/2011)
Watchdog y Timers

Programación concurrente y Distribuída

Curso 2011-12

Miguel Telleria, Laura Barros, J.M. Drake

telleriam AT unican.es

Computadores y Tiempo Real

http://www.ctr.unican.es

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Contenido

● Patrón de watchdog e implementaciones

● Uso del watchdog en la cena de los filósofos

● Timer casero

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 2 de 40

Patrón de Watchdog

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Ejemplo: Conductor de tren dormido

● Elemento que se activa por

omisión de acción.

● El conductor ha de pulsar un

botón cada cierto tiempo
indicando que está activo.
● En cuanto transcurra un

intervalo de un periodo sin que
el conductor haya mandado la
señal, el watchdog asume que
el conductor está muerto y
detiene el tren.

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 4 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Modos de funcionamiento del Watchdog

● OneShot:

● Cuando se pasa el periodo sin actividad se dispara una vez y

automáticamente se desarma.

● Si el periodo de actividad se duplica o triplica no se vuelve a disparar.
● Es necesario volver a armarlo para que vuelva a dispararse.

● Continuo

● Una vez armado siempre que haya un periodo de inactividad se dispara.
● Cada vez que el periodo de inactividad se duplica se vuelve a disparar
● Para que cese de dispararse es necesario desarmarlo.

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 5 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Diagrama de clases

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 6 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

OneShot (izda) Continuo (dcha)

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 7 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

API del Watchdog

● boolean arma(callback, timeout, continuidad)
● Arma el watchdog en el modo dado por continuidad (CONTINUO o

ONESHOT) para que se dispare si hay un intervalo de intactividad de
timeout.

● Para cambiar los parámetros del timer hay que desarmarlo antes.

● void i_m_alive()

● Señala al watchdog que el cliente está vivo. Si el watchdog está

armado resetea el timer de inactividad.

● void desarma()

● Desarma el timer, por lo que no se disparará hasta que vuelva a ser

armado.

● void termina()

● Termina el timer liberando los recursos. No se puede volver a armar.

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 8 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Condiciones

● Mientras el watchdog esté armado no se puede volver a armar.
● Es necesario que se desarme (en el caso de oneShot también vale una

expiración) para poder cambiar los parámetros.

● El callback es llamado desde el thread interno del watchdog.
● Cuando el timer está desarmado el i_m_alive() no produce

ningún efecto.
● Las acciones

● arma(), desarma(), i_m_alive(), expiración, termina()
son susceptibles de venir de threads distintos y por lo tanto
deben estar protegidas para que se ejecuten atómicamente.

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 9 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

arma (izda) y i_m_alive (dcha)

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 10 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

expira_timer (izda) y desarma (dcha)

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 11 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

set_timer y termina

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 12 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Implementaciones

● Proponemos 3 implementaciones en función del timer interno

● Con la clase Timer de java

● Con un ThreadPool de un único thread

● Con un “timer casero” construido con un thread y locks de wait() y

notify()

● Todas las implementaciones son similares

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 13 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Watchdog Timer: Objetos internos

public class Watchdog implements Disparable
{

private long timeout_ms;
private Continuidad continuidad;
private Monitorizable observado;
// Lock de operaciones del watchdog
private Object lock_watchdog;
private boolean watchdog_armado;
// Temporizador interno (en este caso un timer)
private Timer timer;
private ExpiraTimerTask expira_timertask;

public Watchdog()
{

this.timer = new Timer();
lock_watchdog = new Object();
watchdog_armado = false;

}
...
private class ExpiraTimerTask extends TimerTask
{

public void run()
{

...

}

}

24 Oct 2011

}

Miguel Telleria de Esteban telleriam AT unican.es)

Página 14 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Watchdog Timer: Lock watchdog

public boolean arma(controlado,
timeout_ms,
continuidad)
{

synchronized(lock_watchdog)
{

...

}

}

public void i_m_alive()
{

synchronized(lock_watchdog)
{

...

public void desarma()
{

synchronized(lock_watchdog)
{

...

}

}

public void termina()
{

synchronized(lock_watchdog)
{

...

}

}

}

}

private class ExpiraTimerTask extends TimerTask
{

public void run()
{

synchronized(lock_watchdog)
{

...

}

}

}

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 15 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Watchdog timer: arma

public boolean arma(Monitorizable controlado,

long timeout_ms,
Continuidad continuidad)

{

synchronized(lock_watchdog)
{

if (watchdog_armado)
{

// No armamos el watchdog sin cancelarlo antes
return false;

}

watchdog_armado = true;
this.observado = controlado;
this.timeout_ms = timeout_ms;
this.continuidad = continuidad;

set_timer();
return true;

}

}

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 16 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

watchdog Timer: set_timer

private void set_timer()
{

// Necesario porque en los timers una vez el timertask esta
// cancelado no se puede volver a planificar
expira_timertask = new ExpiraTimerTask();

if (continuidad == Continuidad.CONTINUO)
{

timer.scheduleAtFixedRate(expira_timertask, timeout_ms,

}
else if (continuidad == Continuidad.ONESHOT)
{

timer.schedule(expira_timertask, timeout_ms);

timeout_ms);

}

}

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 17 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Expiracion del timer

private class ExpiraTimerTask extends TimerTask
{

public void run()
{

synchronized(lock_watchdog)
{

if (continuidad == Continuidad.ONESHOT)
{

watchdog_armado = false;

}
observado.accion_recuperacion();

}

}

}

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 18 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

i_m_alive, desarma, termina

public void i_m_alive()
{

synchronized(lock_watchdog)
{

if (watchdog_armado)
{

expira_timertask.cancel();
set_timer();

}

}

}

public void termina()
{

synchronized(lock_watchdog)
{

timer.cancel();

}

}

public void desarma()
{

}

}

synchronized(lock_watchdog)
{

watchdog_armado = false;
expira_timertask.cancel();

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 19 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Diferentes implementaciones

Timer

ThreadPool

Timer casero

timer

Timer
(java.lang.Timer)

ScheduledThreadPoolEx
ecutor(1)

TimerCasero

expiraTask

TimerTask

Runnable (con futurible)

Expirable

timer.set_one_shot

new TimerTask()
timer.schedule()

executor.schedule()

timer.set_timer_one_shot()

timer.set_fixed_rate()

new TimerTask()
timer.scheduleAtFixedR
ate()

executor.scheduleAtFixe
dRate()

timer.set_timer_continuo()

timer.schedule_cancel(
)

timertask.cancel()

futurible.cancel()

timer.cancela_timer()

timer.terminate()

timer.cancel()

executor.shutdown()

timer.termina()

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 20 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Cena de filósofos con watchdog

● Objetivo:

● Una vez el bloqueo producido, resolverlo obligando a uno de los

filósofos a liberar el recurso.

● Idea

● Un watchdog vigila que haya actividad (por ejemplo cogiendo los

palillos).

● Si el watchdog expira, el comedot toma las medidas necesarias.

24 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 21 de 40

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Watchdog y Timers

Estrategia

● El watchdog se arma...

● En el comedor al inicializarse con un timeout suficientemente gra
  • Links de descarga
http://lwp-l.com/pdf1043

Comentarios de: Watchdog y timers (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad