La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Date | Place Señales Práctica I. Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing.

Presentaciones similares


Presentación del tema: "Date | Place Señales Práctica I. Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing."— Transcripción de la presentación:

1 Date | Place Señales Práctica I

2 Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing

3 Name | Company Señales Las señales son interrupciones SW para informar de eventos asíncronos. Cada señal tiene asociado un número que la identifica. Señales más comunesSeñales más comunes El comportamiento frente a una señal: –El proceso detiene su ejecución en la instrucción máquina que está ejecutando. –Captura la señal y pasa a ejecutar una RUTINA DE TRATAMIENTO DE LA SEÑAL (manejador de la señal). –Por último, sigue la ejecución por la instrucción donde fue interrumpido, a no ser que hubiera provocado el fin de la ejecución.

4 Name | Company Ejemplo de Señal Programa Principal Rutina de tratamiento de la señal Señal Llega una señal Se ejecuta el programa principal El programa ejecuta Rutina de tratamiento de la señal Continua la ejecución de programa en el punto donde se había quedado

5 Name | Company Señales II Ejecución del programa Si se produce la señal SIGINT (Ctrl+C), por defecto, finaliza la ejecución del programa. Nosotros podemos capturar dicha señal, y cambiar el tratamiento la señal para que no finalice la ejecución.. Señal Captura de la Señal Ejecución del programa

6 Name | Company Gestor de Señales Los gestores de Señales más importantes son UNIX V, 4.3.BSD y POSIX Nosotros vamos a utilizar POSIX

7 Name | Company Captura de la señal -> Función SIGACTION Esta función sigaction determina la forma que tratará el proceso una determinada señal. Para utilizarla se necesita incluir la librería unistd.h int sigaction(int signo, const struct sigaction *act, struct sigaction *oact); –signo: Número de la señal a tratar –*act: Estructura con información del nuevo tratamiento, si vale NULL, no se cambia nada. (Lo veremos en la siguiente transparencia) –*oact: Estructura donde se guarda la información del antiguo tratamiento, si vale NULL, no se guarda la información antigua

8 Name | Company Estructura con información del tratamiento de la señal-> STRUCT SIGACTION La información de tratamiento de la señal se almacena en una estructura llamada sigaction sa_handler= rutina de tratamiento de la señal. Puede ser una función implementada por nosotros, o SIG_DFL y SIG_IGN sa_mask= mascara de admisión de señales. Si añadimos una señal a la mascara, esta se bloqueara mientras se ejecute la función indicada en el sa_handler. sa_flags= flags y opciones struct sigaction{ void (*sa_handler) (); sigset_t sa_mask; int sa_flags; }

9 Name | Company Ejemplo Vamos a capturar la señal SIGINT (Ctrl+C), y establecer la subrutina “Mirutina” para tratarla. #include int main() { int ret; struct sigaction señal; señal.sa_handler=Mirutina; señal.sa_flags=0; sigemptyset(&señal.sa_mask); ret=sigaction(SIGINT,&señal,NULL); if (ret==-1) printf(“No se pudo realizar el tratamiento de la función”); /* Bucle infinito de espera. pause() deja el proceso dormido hasta que llegue una señal. */ while (1) pause (); return 0; } void Mirutina(int s){ printf (“Estoy tratando la señal SIGINT\n”);} /*SI EL USUARIO TECLEA CTRL+C se produce la señal SIGINT, y en vez de finalizar el programa, se visualizará en pantalla :Estoy tratando la señal SIGINT*/

10 Name | Company Importante Debemos, de crear una estructura sigaction, para cada una de las señales que queramos tratar en nuestro programa Posteriormente, debemos utilizar una función sigaction para cada una de las estructuras que hemos creado inicialmente. Ejemplo: –Si queremos en un mismo programa, capturar dos señales, por ejemplo SIGINT, SIGILL, lo que tenemos que hacer en programa principal es: Primero crear dos estructuras sigaction, una para cada señal –struct sigaction señal1; –struct sigaction señal2; Rellenar los campos de las estructuras (sa_handler,sa_flags,sa_mask) Por ultimo utilizar la función sigaction –sigaction(SIGINT,señal1,NULL); –sigaction(SIGILL,señal2,NULL);

11 Name | Company Mascara de señales Cuando hemos explicado la estructura sigactión, hemos hablado sobre el campo sigset sa_mask, el cual se encarga de admitir que lleguen otras señales mientras estamos tratando una en concreto. Por ahora hemos utilizado la función sigemptyset(sigset_t *set): –se encarga de definir el set, como un conjunto vació de señales, es decir, permite que llegue cualquier señal. Pero hay otras funciones interesantes para la mascara de señales: –sigaddset(sigset_t *set, int signo): añade una señal al conjunto, es decir, bloquea una señal mientras se realiza el tratamiento de otra. –sigfillset(sigset_t): define el set como un conjunto con todas las señales, es decir, bloquea todas las señales mientras se realiza el tratamiento de otra. –sigdelset(sigset_t *set,int signo): quita una señal de un conjunto

12 Name | Company Instrucciones complementarias Para enviar una señal a un proceso, se ejecuta la instrucción: –kill(pid, id señal); # include Para dormir a un proceso, se ejecuta la instrucción: –sleep(nº de segundos); Para dejar dormido a un proceso hasta que llegue una señal se ejecuta: –pause();

13 Name | Company Ejercicio ad0df21 44889922 Cifrar.c Fichero.oculto For (i=indice_min;i<indice_max;i++) Cifra el valor de “i” Lee el fichero.oculto y compara si igual al valor cifrado de i si la comparación es Si comparación =1, muestra en pantalla el valor de i, y termina el bucle Si comparación =0, sigue con la siguiente iteración Programa:./findkey 1 9999999 Indice_min Indice_max

14 Name | Company Ejercicio ad0df21 44889922 Cifrar.c Fichero.oculto findkey.c 127 Fichero chek.txt Señal Rutina de tratamiento de la señal Programa:./findkey 0 9999999


Descargar ppt "Date | Place Señales Práctica I. Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing."

Presentaciones similares


Anuncios Google