Publicado el 14 de Enero del 2017
805 visualizaciones desde el 14 de Enero del 2017
79,8 KB
11 paginas
Creado hace 10a (13/05/2014)
Master en Computación
Plataformas de Tiempo Real
POSIX Avanzado y Extensiones
Tema 1. Ficheros y entrada/salida
Tema 2. Gestión de Interrupciones en MaRTE OS
Tema 3. Monitorización y control avanzado del tiempo de
ejecución
Tema 4. Planificación EDF
Tema 5. Planificación a Nivel de Aplicación
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
Tema 3. Monitorización y control avanzado del tiempo de ejecución
Tema 3. Monitorización y control avanzado del
tiempo de ejecución
3.1. Relojes y temporizadores de tiempo de ejecución
3.2. Patrón de diseño para threads de TR
3.3. Relojes de tiempo de ejecución para grupos de threads
3.4. Tiempo de ejecución de las Interrupciones
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
1
2
3
Tema 3. Monitorización y control avanzado del tiempo de ejecución
3.1 Relojes y temporizadores de tiempo de
3.1 Relojes y temporizadores de tiempo de ejecución
ejecución
Ya vistos en "Programación Concurrente"
Relojes de tiempo de ejecución
• Permiten conocer el tiempo consumido por un thread
Temporizadores de tiempo de ejecución
• Permiten detectar un consumo excesivo de tiempo de
ejecución
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
Tema 3. Monitorización y control avanzado del tiempo de ejecución
Relojes de tiempo de ejecución: Resumen
Constante que identifica el reloj del thread actual:
const clockid_t CLOCK_THREAD_CPUTIME_ID = ...;
3.1 Relojes y temporizadores de tiempo de ejecución
Obtener el identificador de reloj de un thread cualquiera:
#include <pthread.h>
#include <time.h>
int pthread_getcpuclockid(pthread_t thread_id,
clockid_t *clock_id);
Leer el tiempo consumido por el thread actual:
struct timespec time;
...
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &time);
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
4
Tema 3. Monitorización y control avanzado del tiempo de ejecución
3.1 Relojes y temporizadores de tiempo de ejecución
Temporizadores de tiempo de ejec.: Resumen
Se utiliza la interfaz de temporizadores POSIX
• basados en un reloj de tiempo de ejecución
• lanzan una señal cuando expiran
Crear un temporizador:
#include <signal.h>
#include <time.h>
int timer_create (clockid_t clock_id,
struct sigevent *evp,
timer_t *timerid);
Armar (programar) un temporizador:
int timer_settime (timer_t timerid, int flags,
const struct itimerspec *value,
struct itimerspec *ovalue);
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
Tema 3. Monitorización y control avanzado del tiempo de ejecución
3.2 Patrón de diseño para threads de TR
3.2 Patrón de diseño para threads de TR
Define un marco que permite implementar de forma sencilla:
• threads periódicos y esporádicos
Con detección automática de:
• sobrepaso de plazo
• sobrepaso de tiempo de ejecución de peor caso
Basado en la utilización de temporizadores y relojes POSIX
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
5
6
Tema 3. Monitorización y control avanzado del tiempo de ejecución
3.2 Patrón de diseño para threads de TR
Checking Deadlines
Periodic and sporadic hard real-time threads have deadlines
It is useful to be able to perform some error-handling action if the
deadline is not met
loop
loop
loop
sleep until next period
loop
sleep until next period
loop
sleep until next period
set deadline watch
loop
sleep until next period
set deadline watch
sleep until next period
set deadline watch
do useful things
sleep until next period
set deadline watch
do useful things
set deadline watch
do useful things
clear deadline watch
set deadline watch
do useful things
clear deadline watch
do useful things
clear deadline watch
end loop
do useful things
clear deadline watch
end loop
clear deadline watch
end loop
clear deadline watch
end loop
end loop
end loop
Periodic Thread
Handler
Handler
Plataformas de Tiempo Real
Tema 3. Monitorización y control avanzado del tiempo de ejecución
A r m
r m
a
s
D i
Timer
Signal
loop
sigwait
execute handler
end loop
Deadline Manager Thread
© M. Aldea, M. González
Mayo-2014
3.2 Patrón de diseño para threads de TR
Enforcing CPU-time budgets
Hard real-time threads may overrun their estimated WCETs,
perhaps causing somebody else to miss its deadline
It is necessary to detect and limit budget overruns
Periodic Thread
loop
loop
loop
sleep until next period
loop
sleep until next period
loop
sleep until next period
set deadline watch
loop
sleep until next period
set deadline watch
sleep until next period
set deadline watch
do useful things
sleep until next period
set deadline watch
do useful things
set deadline watch
do useful things
clear deadline watch
set budget watch
do useful things
clear deadline watch
do useful things
clear deadline watch
end loop
do useful things
clear deadline watch
end loop
clear deadline watch
end loop
clear budget watch
end loop
end loop
end loop
Lower the priority
or abort job
Handler
Handler
Plataformas de Tiempo Real
Tema 3. Monitorización y control avanzado del tiempo de ejecución
A r m
r m
a
s
D i
CPU-Time
Timer
Signal
loop
sigwait
execute handler
end loop
Budget Manager Thread
© M. Aldea, M. González
Mayo-2014
Common actions for a periodic thread
3.2 Patrón de diseño para threads de TR
Periodic Thread
loop
loop
loop
loop
sleep until next period
loop
sleep until next period
loop
sleep until next period
clear budget watch
set deadline watch
loop
sleep until next period
set deadline watch
sleep until next period
set deadline watch
clear deadline watch
do useful things
sleep until next period
set deadline watch
do useful things
set deadline watch
do useful things
sleep until next period
clear deadline watch
set budget watch
do useful things
clear deadline watch
do useful things
clear deadline watch
set budget watch
end loop
do useful things
clear deadline watch
end loop
clear deadline watch
end loop
set deadline watch
clear budget watch
end loop
end loop
end loop
do useful things
end loop
A r m
r m
a
s
D i
CPU-Time
Timer
Signal
Handler
Handler
loop
sigwait
execute handler
end loop
Budget Manager Thread
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
7
8
9
Tema 3. Monitorización y control avanzado del tiempo de ejecución
Example: packages for periodic threads
3.2 Patrón de diseño para threads de TR
time_ops
rt_constants
user thread
rt_events
rt_deadlines
rt_budgets
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
10
3.2 Patrón de diseño para threads de TR
Tema 3. Monitorización y control avanzado del tiempo de ejecución
Example sources: rt_budgets.h
#include <time.h>
#include "rt_constants.h"
#ifndef RT_BUDGET_TIMERS
#define RT_BUDGET_TIMERS
#define RT_BUDGET_SIGNAL SIGRTMIN
// Opaque datatype for the budget timer
typedef struct { ... } rt_budget_timer;
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
11
Tema 3. Monitorización y control avanzado del tiempo de ejecución
rt_budgets.h (cont’d)
3.2 Patrón de diseño para threads de TR
// Creates the budget manager thread if it is not already created
int rt_init_budget_manager();
// Creates a budget timer for the calling thread, with a
// normal priority level equal to the calling thread's priority
int rt_init_budget_timer(rt_budget_timer *budgettimer,
void (*action)(void *arg),
void * arg);
// Starts counting the budget
int rt_set_budget_timer(rt_budget_timer *budgettimer,
struct timespec budget);
// Stops counting the budget
int rt_clear_budget_timer(rt_budget_timer *budgettimer);
#endif //RT_BUDGET_TIMERS
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
12
Tema 3. Monitorización y control avanzado del tiempo de ejecución
Example sources: rt_deadlines.h
3.2 Patrón de diseño para threads de TR
#include <time.h>
#ifndef RT_DEADLINES
#define RT_DEADLINES
#define RT_DEADLINE_SIGNAL SIGRTMIN+1
// Opaque datatype for the deadline timer
typedef struct { ... } rt_dln_timer;
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
13
Tema 3. Monitorización y control avanzado del tiempo de ejecución
rt_deadlines.h (cont’d)
3.2 Patrón de diseño para threads de TR
// Creates the deadline manager thread if it is not already created
int rt_init_deadline_manager();
// Creates a budget timer for the calling thread, with the
// specified action and arg. associated with the expiration
int rt_init_deadline_timer(rt_dln_timer *dlntimer,
void (void *arg) action,
void * arg);
// Sets the deadline timer to expire at the deadline
int rt_set_deadline_timer(rt_dln_timer *dlntimer,
struct timespec budget);
// Stops the deadline timer
int rt_clear_deadline_timer(rt_budget_timer *budgettimer);
#endif //RT_DEADLINES
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
14
Tema 3. Monitorización y control avanzado del tiempo de ejecución
3.2 Patrón de diseño para threads de TR
Example sources: rt_events.h
#include <time.h>
#include "rt_constants.h"
#include "rt_budgets.h"
#include "rt_deadlines.h"
#ifndef RT_EVENT_MANAGERS
#define RT_EVENT_MANAGERS
// Event manager types
typedef enum {PERIODIC, SPORADIC, ...} event_manager_t;
// Opaque datatype for the event manager
typedef struct {
rt_budget_timer budgettimer;
rt_dln_timer dlntimer;
... } rt_event_manager;
Los campos budgettimer y dlntimer permiten
cambiar el manejador usando las funciones
rt_init_budget_timer y
rt_init_deadline_timer respectivamente.
Los manejadores por defecto se limitan a escribir
un
Comentarios de: Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 3. Monitorización y control avanzado del tiempo de ejecución (0)
No hay comentarios