Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid



Documentos relacionados
Programación Concurrente

Boletín 5- Señales. Departamento de Lenguajes y Sistemas Informáticos

Sincronización de procesos en C

Prácticas de Sistemas operativos

Tema 4 : señales. Sistemas Operativos: Programación de Sistemas. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez.

Sucesos asíncronos. dit. dit. Juan Antonio de la Puente DIT/UPM UPM UPM

!! Identificar las señales que llegan a la consola.

SISTEMAS OPERATIVOS: PROCESOS. Señales

Señales. CI-2400 Programación Avanzada en Sistemas de Tipo UNIX Prof. Braulio José Solano Rojas ECCI, UCR

Cominicación entre Procesos: SEÑALES

Señales POSIX. Configuración de una Señal. Bloqueo de una señal. Asignar un manejador. Qué vamos a estudiar?

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Octubre 2015

Introducción y Gestión de Procesos

Sistemas Operativos Práctica 3

PRÁCTICAS DE SS.OO. Universidad de Murcia. I.I./I.T.I. Sistemas/I.T.I. Gestión

Práctica 2: Realización de una Alarma Temporizada Diseño de Sistemas Operativos U.L.P.G.C.

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

MC Hilda Castillo Zacatelco PROCESOS

EDITRAN/TR. Windows/Unix. Manual de referencia

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Procesos ligeros. Arquitectura de Computadores II Universidad Carlos III de Madrid

Programación de Sistemas Ricardo Sanz

SISTEMAS OPERATIVOS PROCESOS. Pedro de Miguel Anasagast

T2-Procesos. Índice 17/2/17

Taller de Sistemas Operativos Introducción

El lenguaje de Programación C. Fernando J. Pereda

Tema 4: Gestión de Procesos

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Arquitectura de Computadores: Exámenes y Controles

Teoría. Procesos. Escuela Politécnica Superior Universidad Autónoma de Madrid 1

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Práctica de gsoap. int ns enviar (unsigned nodo, std::string cadena, std::string &resultado); int ns recibir(unsigned nodo, std::string &resultado);

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Sistemas Operativos - IPC

Introducción y Gestión de Procesos

Un ejemplo: UNIX PROCESOS UNIX

Tareas Periódicas en POSIX

Prof. Dr. Paul Bustamante

I. T. en Informática de Sistemas. Facultad de Informática

SOLUCION EXAMEN junio 2006

//Esta función es llamada cuando se produce un evento //de teclado void keycallback (void *userdata, SoEventCallback *eventoteclado) {

Prácticas de Sistemas Operativos

Aprenda a configurar en el modo 3 el termostato universal modelo TDGH-B3

PRACTICA # 3 PROCESOS (CONTINUACION)

Instituto Politécnico Nacional

Examen escrito de Programación 1

Implementación de monitores POSIX

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

SISTEMAS OPERATIVOS: Lección 5: Hilos y Procesos

manual rápido SOLUCION TPV ESPECIAL TIENDAS ALIMENTACIÓN

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

SISTEMAS OPERATIVOS 1. Enxeñería Informática. Curso

ETSISI-UPM Sistemas Operativos [Linux] Curso 18/19 PRÁCTICA 2. Llamadas al sistema

CÓMO CONFIGURAR DHCP EN SUSE LINUX

Procesos y Señales. Laboratorio de Arquitectura de Ordenadores

Administración de Redes

1. Sistema Operativo Unix

Examen de Laboratorio de Sistemas Operativos. Primera Convocatoria. 2007/2008. Tercero Ingeniería Informática. Apellidos: 18 de Junio de 2008

Procesos e hilos y señales en C de GNU/Linux

Unidad 1: Conceptos generales de Sistemas Operativos.

Esquema de un programa en C: bloques básicos

Problemas de Redes de Computadores. Conjunto de problemas 1

FILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura.

Examen Principios de Programación Febrero 2012

OBJETIVOS. Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos.

Se guardan en archivos con extencion c y los cabezales con extension h

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

IBM SPSS Statistics para Linux Instrucciones de instalación (Usuario individual)

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

1. INTRODUCCION. ProLogger 2

CONFIGURACIÓN TERMINAL SERVER EN WINDOWS 2003

Redirecciones y Tuberías

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

MANUAL DE LA APLICACIÓN DE ENVÍO DE SMS

Manual para recuperar el Sistema Operativo de la Computadora Canaima (Canaima GNU/Linux) cuando se queda guindado.

Práctica 1 SISTEMAS OPERATIVOS. Introducción...

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): Se pide:

Manual para realizar compras on-line

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

APLICATECA. didimo Marketing. Manual de usuario. By DIDIMO Servicios Móviles.

BitcodeSoft Plugin XMLparser Velneo 7.x

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Manual del Programa Conecta 3V Para Teléfonos Móviles.

Generador de analizadores sintácticos BISON

INSTALACIÓN DEL SPSS 15.0 DESDE UN SERVIDOR

Biblioteca de sistema

UNIDAD DIDACTICA 3 USUARIOS Y GRUPOS EN REDES WINDOWS 2003 SERVER II

Opciones Bandeja de Entrada Workflow. Mantenimiento Proyecto Génesis. Universidad Complutense de Madrid

LAS FACTURAS ELECTRÓNICAS.COM

7. Manejo de Archivos en C.

Portal Del Emisor MANUAL DEL USUARIO. Plataforma de Facturación Electrónica

Eurowin 8.0 SQL. Manual del módulo TALLAS Y COLORES

Aplicación Multiproceso sobre HTTP Ejemplo -

Transcripción:

Manejo de Señales Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Señales Concepto Evento que interrumpe la ejecución normal de un proceso La acción por defecto suele ser terminar el proceso que la recibe Pueden manejarse (es decir, programarlas para obtener un comportamiento diferente) La mayoría de las señales pueden filtrarse mediante una máscara PROCESO NÚCLEO Ejecución normal del proceso interrumpida por la llegada de una señal Continúa ejecución normal, después de finalizar la ejecución del manejador Ejecución del manejador de la señal Máscara de señales del proceso EUI-SG/INFOR.UVA.ES SO_PR04_20061115 2

Señales Generación de señales Máscara de señales Manejo de señales manejador() SIG_IGN SIG_DFL... Eventos externos (terminal, terminación hijo,...) Errores Señales software kill() raise() alarm() Definición máscara sigemptyset() sigfillset() sigaddset() sigdelset() sigismember() Establecimiento máscara sigprocmask() Establecimiento manejador sigaction() Espera de señales pause() sigsuspend() EUI-SG/INFOR.UVA.ES SO_PR04_20061115 3 Señales Estado de una señal El núcleo del SO memoriza el estado de una señal, dependiendo de si la señal está enmascarada o no y si se ignora o no ( manejador(señal)!= SIG_IGN ) AND (Enmascarada(señal)) ( manejador(señal)!= SIG_IGN ) AND (NOT (Enmascarada(señal))) Pendiente Entregada ( manejador(señal) == SIG_IGN ) Descartada EUI-SG/INFOR.UVA.ES SO_PR04_20061115 4

Señales: llamadas al sistema kill alarm sigemptyset sigfillset sigaddset sigdelset sigismember sigprocmask sigaction sigsuspend Señales Enviar una señal Generar una alarma (señal de reloj) Iniciar una máscara de señales vacía Iniciar una máscara de señales con todas las señales Añadir una señal específica a una máscara Eliminar una señal específica de una máscara Comprobar si una señal pertenece o no a una máscara Consultar/establecer la máscara de señales para un proceso Capturar/manejar señales Esperar por una señal EUI-SG/INFOR.UVA.ES SO_PR04_20061115 5 Lista de señales (representativas) Nº Señal Descripción Acción por defecto 1 SIGHUP Colgado/muerte terminal de control 2 SIGINT Interrupción (Ctrl-C) 3 SIGQUIT Interrupción con core (Ctrl-\) core 6 SIGABRT Terminación anormal core 9 SIGKILL Terminación. Ni manejable, ni enmascarable 13 SIGPIPE Escritura en una tubería sin lector 14 SIGALRM Alarma temporizada, programada por alarm() 15 SIGTERM Terminación por software -- SIGUSR1 Señal 1 definida por el usuario Control de trabajos 17 SIGSTOP Alto (no puede capturarse, ni enmascararse) stop 18 SIGTSTP Alto de teclado (Ctrl-Z) stop 19 SIGCONT Ctrl-C de teclado (interrupción) continue 20 SIGCHLD Terminación/suspensión de un proceso hijo ignore EUI-SG/INFOR.UVA.ES SO_PR04_20061115 6

Señales: kill kill: enviar una señal #include <sys/types.h> int signal(pid_t pid, int sig) Envía la señal sig al proceso o grupo de procesos pid Si (pid==0) la señal se envía al grupo de procesos del emisor (salvo a sí mismo) Si (pid==-1) y el euid del emisor es root, la señal se envía a todos los proceso excepto los del sistema El euid del proceso que envía la señal debe coincidir con el euid del que la recibe o ser root. 0 si la señal es enviada y 1 si hay error Errores Número de señal no válido Permisos EUI-SG/INFOR.UVA.ES SO_PR04_20061115 7 Señales: alarm alarm: establecer un temporizador #include <unistd.h> unsigned int alarm(unsigned int sig) Programa la señal SIGALRM para que ocurra al cabo de un cierto número de segundos (los especificados por el parámetro seconds) Un proceso sólo puede tener una petición de alarma pendiente. Las peticione ssucesivas de alarmas no se encolan, cada nueva petición anula la anterior alarm(0) cancela las alarmas Tiempo restante para que venciese la alarma anterior EUI-SG/INFOR.UVA.ES SO_PR04_20061115 8

Señales: tratamiento de máscaras Llamadas al sistema para definir una máscara de señales int sigemptyset (sigset_t *set) int sigfillset (sigset_t *set) int sigaddset (sigset_t *set, int signum) int sigdelset (sigset_t *set, int signum) int sigismember (const sigset_t *set, int signum) sigemptyset: inicia una máscara para que no tenga señales seleccionadas sigfillset: inicia una máscara para que contenga todas las señales sigaddset: pone una señal específica en un conjunto de señales sigdelset: quita una señal específica de un conjunto de señales sigismember: consulta si una señal pertenece a un conjunto de señales EUI-SG/INFOR.UVA.ES SO_PR04_20061115 9 Señales: sigprocmask sigprocmask: examinar/modificar máscara de señales Examina o modifica la máscara de señales activa para un proceso Si una señal está bloqueada por la máscara, no es procesada hasta el momento en que deja de estar bloqueada por la máscara (se memoriza que llegó) Parámetro how SIG_BLOCK: añade un conjunto de señales a las que se encuentran bloqueadas en la máscara actual SIG_UNBLOCK: elimina un conjunto de señales de las que se encuentran bloqueadas en la máscara actual SIG_SETMASK: especifica un conjunto de señales que serán bloqueados Parámetro set: conjunto de señales que serán utilizadas para la modificación (puede ser NULL) Parámetro oset: máscara previa a la modificación (puede ser NULL) int sigprocmask (int how, const sigset_t *set, sigset_t *o_set) 0 si funciona y 1 si error (activa errno) EUI-SG/INFOR.UVA.ES SO_PR04_20061115 10

Señales: sigprocmask (ejemplo) #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <math.h> int main(int argc, char *argv[]) { double y; sigset_t intmask; int i, ncalc; if (argc!=2) { fprintf (stderr, Uso: %s factor\n, argv[0]); return; ncalc= 1000000*atoi(argv[1]); sigemptyset(&intmask); sigaddset(&intmask, SIGINT); for (;;) { sigprocmask(sig_block, &intmask, NULL); fprintf (stdout, señal SIGINT bloqueada\n ); for (i=0; i<ncalc; i++) y= sin((double)i); fprintf (stdout, Finalizado cálculo con señal bloqueada\n ); sigprocmask(sig_unblock, &intmask, NULL); fprintf (stdout, señal SIGINT desbloqueada\n ); for(i=0; i<ncalc; i++) y= sin((double)i); fprintf (stdout, Finalizado cálculo con señal desbloqueada\n ); EUI-SG/INFOR.UVA.ES SO_PR04_20061115 11 Señales: sigaction sigaction: capturar/manejar señales int sigaction (int signo, const struct sigaction *act, struct sigaction *oact) struct sigaction { void (*sa_handler)();/* SIG_DFL, SIG_IGN o función */ sigset_t sa_mask; /* las señales especificadas por la máscara serán bloqueadas durante la ejecución del manejador */ int sa_flags; /* indicadores y opciones */ EUI-SG/INFOR.UVA.ES SO_PR04_20061115 12

Señales: sigaction Instala los manejadores (handlers) de señal de un proceso La señal se especifica en signo y los manejadores en act, que es una estructura del tipo struct sigaction. El manejador anterior se devuelve en oact Si act es NULL, el manejador no cambia. Si no se necesita oact, puede especificarse NULL Los manejadores son permanentes (no es necesario volverlos a instalar después de la ocurrencia de una señal) A los manejadores no se les pueden pasar parámetros SIG_DFL: instala la acción por defecto (, core,...) SIG_IGN: se maneja la señal ignorándola (diferente a bloquearla) 0 si funciona y 1 si error Errores Señal inválida o no manejable (SIGKILL, SIGSTOP) EUI-SG/INFOR.UVA.ES SO_PR04_20061115 13 Señales: sigaction (ejemplo) #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <math.h> #include <string.h> char msg[]= Pulsado Ctrl-C\n ; struct sigaction act; int main(void) { double y; int i; capturar_ctrl_c(); fprintf (stdout, Capturado CRTL-C durante 10 seg\n ); for (i=0; i<100000000; i++) y= sin((double)i); ignorar_ctrl_c(); fprintf (stdout, Ignorado CTRL-C durante 10 seg\n ); for (i=0; i<100000000; i++) y= sin((double)i); fprintf (stdout, Fin programa\n ); void manejador_ctrl_c(int signo) { fprintf(stdout, %s, msg); fflush(stdout); int capturar_ctrl_c() { act.sa_handler= manejador_ctrl_c; sigemptyset(&act.sa_mask); act.sa_flags= 0; return sigaction(sigint, &act, NULL); int ignorar_ctrl_c() { if (sigaction(sigint, NULL, &act)==-1){ perror( No se puede recuperar manejador anterior SIGINT ); return 1; else if (act.sa_handler==manejador_ctrl_c) { act.sa_handler= SIG_IGN; return sigaction(sigint, &act, NULL); EUI-SG/INFOR.UVA.ES SO_PR04_20061115 14

Señales: sigsuspend sigsuspend: esperar señales int sigsuspend(const sigset_t *sigmask) Establece la máscara de señales sigmask y suspende el proceso hasta que reciba una señal no enmascarada en sigmask Cuando retorna, se restablece la máscara de señales previa Si el proceso captura la señal, retorna después de ejecutar el manejador establecido 0 si éxito y 1 si error EUI-SG/INFOR.UVA.ES SO_PR04_20061115 15 Señales: sigsuspend (ejemplo) #include <unistd.h> #include <stdio.h> int main(int argc, char *argv[]) { sigset_t sigset; int i; char msg1[]= Señal capturada\n ; char msg2[]= Temporizador vencido\n ; struct sigaction act; int signum, s_recibida = 0; void handler(int signo) { if (signo!= SIGALRM) fprintf(stdout, %s, msg1); else { s_recibida= 1; fprint(stdout, %s, msg2); fflush(stdout); if (arg!= 2) { fprintf(stderr, Uso: %s sig\n, argv[0]); return; signum=atoi(argv[1]); act.sa_handler= handler; sigfillset(&act.sa_mask); act.sa_flags= 0; sigaction(sigalrm, &act, NULL); sigaction(signum, &act, NULL); sigfillset(&sigset); sigdelset(&sigset, signum); sigdelset(&sigset, SIGALRM); fprintf(stdout, esperando señal %s...\n, argv[1]); alarm(15); while (s_recibida == 0) sigsuspend(&sigset); fprintf(stdout, Fin programa\n ); EUI-SG/INFOR.UVA.ES SO_PR04_20061115 16