PDF de programación - Sucesos asíncronos

Imágen de pdf Sucesos asíncronos

Sucesos asíncronosgráfica de visualizaciones

Publicado el 15 de Octubre del 2018
220 visualizaciones desde el 15 de Octubre del 2018
434,7 KB
17 paginas
Creado hace 14a (12/04/2007)
ditdit
ditdit

UPM

UPM

Sucesos asíncronos

Juan Antonio de la Puente

DIT/UPM

Transparencias basadas en el capítulo 10del libro de A. Burns y A. Wellings Real­Time Systems and Programming Languages, 3ª edición (2001)

Sucesos asíncronos

u Un suceso asíncrono es una señal generada por un 

proceso que requiere atención por parte de otro proceso, 
independientemente de lo que esté haciendo

u Dos formas de continuar después de atender el suceso:

– reanudación

» ej.: señales de POSIX

– terminación

» ej.: transferencia de control asíncrona en Ada

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 2

Aplicaciones

u Recuperación de errores

– cuando varios procesos colaboran la recuperación hay que hacerla 

conjuntamente

u Cambios de modo

– debidos a cambios en el entrono o a averías

u Cómputo impreciso

– se hace lo que se puede hasta que se agota el tiempo disponible

u Interrupciones del operador

– a veces hay que dejar lo que se está haciendo y empezar de nuevo 

o cambiar de modo

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 3

Señales en POSIX.1

u Una señal representa un suceso asíncrono que afecta a 

uno o más procesos o threads

u Una señal se puede producir o generar de varias formas, 

por ejemplo:
– fallos de hardware
– expiración de temporizadores
– un acción explícita de otro proceso o thread,

invocando la función kill u otra similar

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 4

Identificadores de señal

u Cada tipo de señal se identifica mediante un número 

positivo

u Se definen constantes para dar nombres simbólicos a las 

señales

u Ejemplos:
– SIGABRT
– SIGALRM
– SIGUSR1, SIGUSR2

Terminación anormal
Temporizador
Definidas por el usuario

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 5

Generación y entrega

u Una señal se genera cuando ocurre el suceso que la 

produce

u Una señal se entrega cuando se produce la acción 

asociada en el proceso o thread:
– Ignorar  la señal 
– Ejecutar la acción por defecto asociada a la señal

(normalmente terminar el proceso)

– Manejar la señal mediante una función definida por el programador

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 6

Bloqueo de señales

u Un proceso puede enmascarar  o bloquear  un tipo 

de señales
– cada proceso o thread tiene una máscara que define las 

señales bloqueadas

– la máscara se hereda inicialmente del padre

u Una señal bloqueada se acepta cuando se invoca 

una función sigwait
– esta función se define en POSIX.1b 

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 7

Esquema general

entregar

generar

ignorar

terminar

manejar

thread

fin

pendiente

aceptación

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 8

Señales de tiempo real (POSIX.1b)

u Tienen identificadores en el intervalo 

SIGRTMIN .. SIGRTMAX
– como mínimo 32 señales

u Las señales de tiempo real tienen propiedades especiales:

– se encolan
– se aceptan en orden de prioridad (número de señal)
– tienen un campo adicional de información

u Todas las señales se pueden aceptar de forma síncrona 

mediante la función sigwait
– para ello deben estar enmascaradas (bloqueadas) 

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 9

Señales y threads

u Las señales generadas por un error de un thread se 

envían sólo a ese thread

u Las generadas por un suceso asíncrono (p.ej. E/S) se 

envían al proceso

u Las generadas por programa se pueden enviar a un 

thread o a todo un proceso

u Una señal generada para un thread en el que está 

bloqueda se queda pendiente hasta que se acepta con 
sigwait

u Una señal generada para un proceso que está bloqueada 
en todos los threads  se envía a un solo thread de los que 
hacen sigwait en la señal

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 10

Conjuntos de señales

/* signal.h */

typedef ... sigset_t;

int sigemptyset (sigset_t *set);
int sigfillset (sigset_t *set);
int sigaddset (sigset_t *set, int signo);
int sigdelset (sigset_t *set, int signo);
int sigismember (const sigset_t *set, int signo);

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 11

Bloqueo de señales

/* signal.h */

int sigprocmask (int how,
const sigset_t *set, sigset_t *oset);
int pthread_sigmask (int how,
const sigset_t *set, sigset_t *oset);

u how: indica qué operación se hace:

– SIG_BLOCK : 
– SIG_UNBLOCK: 
– SIG_SETMASK: 

se bloquean las señales de set
se desbloquean las señales de set
se hace la máscara igual a set

u oset: devuelve las señales que estaban bloqueadas antes
u set y oset pueden valer NULL

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 12

Envío y aceptación de señales 

/* signal.h */

int kill (pid_t pid, int sig);
int pthread_kill (pthread_t thread, int sig);

/* signal.h */

int sigwait (const sigset_t *set, int *sig);
int sigwaitinfo (const sigset_t *set, siginfo_t
*siginfo);
int sigtimedwait (const sigset_t *set, siginfo_t
*siginfo,
const struct timespec *timeout);

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 13

Ejemplo (1)

/* thread que acepta SIGINT (^C) y escribe un mensaje */
#include <signal.h>
#include <pthread.h>

void wait_sigint (void)
{
sigset_t set;
int sig;
int counter = 0;

sigemptyset(&set);
sigaddset(&set,SIGINT);
pthread_sigmask(SIG_BLOCK, &set, NULL); /* bloquea SIGINT

*/

/* todos los demás threads deben bloquear también SIGINT

*/

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 14

Ejemplo (2)

if (sigwait(&set, &sig) != 0) {

/* error en sigwait */
pthread_exit( (void *)-1);
}
if (sig == SIGINT) {
printf ("recibido SIGINT\n");
pthread_exit(0);
} else {
/* señal inesperada */
pthread_exit ((void *)-1);
}
}

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 15

Manejadores de señales

/* signal.h */

struct sigaction {

void (*)() sa_handler;

sigset_t sa_mask;
int sa_flags;
void (*)(int, siginfo_t *, void *) sa_sigaction;
}

int sigaction (int sig,
const struct sigaction *reaction,
struct sigaction *old_reaction);

u sa_handler puede ser SIG_DFL, SIG_IGN o un puntero a una función
u sa_sigaction se usa con señales de tiempo real

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 16

Transferencia de control asíncrona 

en Ada

u Es una forma especial de select:

select
suceso;
secuencia de instrucciones
then abort
secuencia de instrucciones
end select;

u El suceso puede ser

– Una llamada a una entrada

Objeto.Entrada (...); -- puede ser una llamada a una

tarea

– Un retardo

delay ...;

STRL ­ sucesos asíncronos ­ 12/04/07

©2001­2002 Juan Antonio de la Puente

 17
  • Links de descarga
http://lwp-l.com/pdf13895

Comentarios de: Sucesos asíncronos (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