1 / 7

Bloques de Recuperación

Bloques de Recuperación. Práctica I-Ejercicio 2. Saltos en el tiempo. Las funciones sigsetjmp y siglongjmp , permiten a un proceso volver a un estado anterior. Es similar a un GOTO.

Download Presentation

Bloques de Recuperación

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bloques de Recuperación Práctica I-Ejercicio 2

  2. Saltos en el tiempo • Las funciones sigsetjmp y siglongjmp, permiten a un proceso volver a un estado anterior. Es similar a un GOTO. • La idea es la siguiente :Si vamos a realizar una función, la cual pude producir algún tipo de señal no deseada, lo que debemos hacer es lo siguiente: • 1º Salvar el estado de la ejecución (sigsetjmp) • 2º Llamar a la función • 3º Si se ha producido alguna señal no deseada, volver a tras en el tiempo (siglongjmp), para recuperar, el estado de la ejecución, que habíamos guardado en el paso 1º, y seguir con el programa.

  3. Salvar el estado: sigsetjmp • int sigsetjmp(jmp_buf env, 1); • Esta función guarda el estado de la ejecución en la variable env, de tipo jmp buf. • La función sigsetjmp, devuelve 0, cuando se invoca por primera vez, y no cero (el valor colocado en el parámetro val que envía la función siglongjmp(jmp_buf env, int val);) cuando es invocada por segunda vez printf(“No error\n”); NO Ha salvado el estado y devuelve 0 Función sigsetjmp ¿Señal? SI siglongjmp Va hacia atrás SOLO para recuperar el estado salvado en el 1º paso , y la función sigsetjmp devuelve algo distinto de 0

  4. Recuperar el estado: siglongjmp • void siglongjmp(jmp_buf env, int val); • Esta función lo que hace es ejecutar por segunda vez a la función sigsetjmp, y consigue tener en la variable env de tipo jmp_buf, el valor que habíamos guardado cuando ejecutamos la primera vez sigsetjmp. Además, ahora, al ejecutar por segunda vez, la función sigsetjmp, esta devuelve el valor que le ha enviado siglongjmp en su segundo paramento • Ejemplo static jmp_buf env; if(sigsetjmp(env,1)==0) {/*La he ejecutado la primera vez*/ funcion();/*Llama a una función*/ siglongjmp(env,1);/*Obligo a ir a tras en el tiempo*/ }else { /*he ejecutado sigsetjmp por segunda vez, porque la ha llamado siglongjmp y nos ha devuelto un 1*/….. }

  5. Bloques de recuperación I • Los bloques de recuperación se componen en dos partes: • Detención del fallo • Recuperación de fallo

  6. Detención del fallo • La detención del fallo, en nuestro caso, es detectar si se ha producido una serie de señales. Es decir, tendremos que capturar algunas señales en caso de que se produzcan, y darles un tratamiento especial, ejecutando una subrutina, que se encargue de modificar el valor de una variable en concreto. Para saber si se ha producido esas señales, solo tendremos que ver si se ha producido una modificación en esa variable.

  7. Recuperación del fallo • Para la recuperación del fallo, simplemente, tendremos que ir a tras en el tiempo, y recuperar el estado del la ejecución del programa, antes de que se produjesen las señales.

More Related