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
243 visualizaciones desde el 14 de Enero del 2017
530,3 KB
40 paginas
Creado hace 7a (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
Es necesario revisar y aceptar las políticas de privacidad

Revisar política de publicidad