Publicado el 3 de Junio del 2019
502 visualizaciones desde el 3 de Junio del 2019
218,8 KB
39 paginas
SISTEMAS OPERATIVOS:
PROCESOS
Señales
ADVERTENCIA
2
¨ Este material es un simple guión de la clase: no son
los apuntes de la asignatura.
¨ El conocimiento exclusivo de este material no
garantiza que el alumno pueda alcanzar los
objetivos de la asignatura.
¨ Se recomienda que el alumno utilice los materiales
complementarios propuestos.
Sistemas Operativos – Hilos y procesos
Contenido
3
¨ Señales.
¨ Temporizadores.
¨ Excepciones.
¨ Entorno de un proceso
Sistemas Operativos – Hilos y procesos
Señales. Concepto
4
¨ Las señales son un mecanismo para comunicar
eventos a los procesos
¨ Cuando un proceso recibe una señal, la procesa
inmediatamente.
¨ Cuando un proceso recibe una señal puede:
¤ Ignorar a la señal, cuando es inmune a la misma
¤ Invocar la rutina de tratamiento por defecto
¤ Invocar a una rutina de tratamiento propia
Sistemas Operativos – Hilos y procesos
Señales. Concepto
5
¨ Permite avisar a un proceso de la ocurrencia de un
evento.
¤ Y reaccionar a dicho evento
¨ Ejemplos:
¤ Un proceso padre recibe la señal SIGCHLD cuando
termina un proceso hijo.
¤ Un proceso recibe una señal SIGILL cuando intenta
ejecutar una instrucción máquina ilegal.
Son un mecanismo propio de los sistemas UNIX
Sistemas Operativos – Hilos y procesos
Señales: interrupciones al proceso
6
¨ Las señales son interrupciones al proceso
¨ Envío o generación
¤ Proceso- Proceso (dentro del grupo) con el kill
¤ SO - Proceso
Sistemas Operativos – Hilos y procesos
Señales. Tratamiento
7
¨ El SO las transmite al proceso
¤ El proceso debe estar preparado para recibirla
n Especificando un procedimiento de señal con sigaction.
n Dirección de la rutina de tratamiento (nombre)
¨ Enmascarando la señal con sigprogmask.
¨ Ignorando la señal
¤ Trtamiento con SIG_IGN
¨ Si no está preparado à acción por defecto (SIG_DFL)
n El proceso, en general, muere.
n Hay algunas señales que se ignoran o tienen otro efecto.
¨ Para enviar una señal a un proceso:
¤ int kill(pid_t pid, int sig);
¨ El servicio pause() para el proceso hasta que recibe una señal
Sistemas Operativos – Hilos y procesos
Señales. Envío y espera
8
¨ Para enviar una señal a un proceso:
int kill(pid_t pid, int sig);
¤ CTRL-C -> SIGINT
¤ CTRL-Z -> SIGSTOP
¨ Un proceso se puede enviar una señal a sí mismo
#include <signal.h>
int raise(int sig);
¨ El servicio pause() bloquea el proceso hasta que
recibe una señal cualquiera
Sistemas Operativos – Hilos y procesos
Lista de señales
9
¨ El sistema operativo cuenta con un conjunto definido
de señales
¤ Archivo en “include”: signal.h
¨ Señales importantes:
¤ SIGILL instrucción ilegal
¤ SIGALRM vence el temporizador
¤ SIGKILL mata al proceso
¤ SIGSGEV violación segmento memoria
¤ SIGUSR1 y SIGUSR2 reservadas para el uso del
programador.
Sistemas Operativos – Hilos y procesos
Señales predefinidas
10
Sistemas Operativos – Hilos y procesos
Servicios POSIX para la gestión de
señales
¨ int kill(pid_t pid, int sig)
11
¤ Envía al proceso "pid" la señal "sig“.
¤ Casos especiales:
n pid=0 à Señal a todos los procesos con gid igual al gid
del proceso.
n pid < -1 à Señal a todos los proceso con gid igual al
valor absolute de pid.
¨ int sigaction(int sig,
struct sigaction *act,
struct sigaction *oact)
¤ Permite especificar la acción a realizar como
tratamiento de la señal "sig”
¤ La configuración anterior se puede guardar en “oact”.
Sistemas Operativos – Hilos y procesos
La estructura sigaction
12
struct sigaction {
void (*sa_handler)(); /* Manejador */
sigset_t sa_mask; /* Señales bloqueadas */
int sa_flags; /* Opciones */
};
¨ Manejador:
¤ SIG_DFL: Acción por defecto (normalmente termina el proceso).
¤ SIG_IGN: Ignora la señal.
¤ Dirección de una función de tratamiento.
¨ Máscara de señales a bloquear durante el manejador.
¨ Opciones normalmente a cero.
Sistemas Operativos – Hilos y procesos
Conjuntos de señales
13
¨ int sigemptyset(sigset_t * set);
¤ Crea un conjunto vacío de señales.
¨ int sigfillset(sigset_t * set);
¤ Crea un conjunto lleno con todas la señales posibles.
¨ int sigaddset(sigset_t * set, int signo);
¤ Añade una señal a un conjunto de señales.
¨ int sigdelset(sigset_t * set, int signo);
¤ Borra una señal de un conjunto de señales.
¨ int sigismember(sigset_t * set, int signo);
¤ Comprueba si una señal pertenece a un conjunto.
Sistemas Operativos – Hilos y procesos
Ejemplo
14
¨ Ignorar la señal SIGINT
¤ Se produce cuando se pulsa la combinación de teclas
Ctrl+C
struct sigaction act;
act.sa_handler = SIG_IGN;
act.flags = 0;
sigemptyset(&act.sa_mask);
Sigaction(SIGINT, &act, NULL);
Sistemas Operativos – Hilos y procesos
Servicios POSIX para la gestión de
señales
¨ int pause(void)
15
¤Bloquea al proceso hasta la recepción de una
señal.
¤No se puede especificar un plazo para
desbloqueo.
¤No permite indicar el tipo de señal que se espera.
¤No desbloquea el proceso ante señales ignoradas.
¨ int sleep(unsigned int sec)
¤Suspende un proceso hasta que vence un plazo o
se recibe una señal.
Sistemas Operativos – Hilos y procesos
Ejemplo: capturar SIGSEV
16
/*Programa que provoca que se eleve la seneal SIGSEGV
escribiendo en la posicion 0 de memoria la captura. */
#include …
#include <signal.h>
void capturar_senyal(int senyal){
printf(“Error por ocupacion indebida de memoria\n");
signal(SIGSEGV,SIG_DFL);}
main(void){
int *p;
signal(SIGSEGV,capturar_senyal);
printf ("Ya he colocado el manejador\n");
p=0;
printf ("Voy a poner un 5 en la variable\n");
*p=5; }
Sistemas Operativos – Hilos y procesos
Contenido
17
¨ Señales.
¨ Temporizadores.
¨ Excepciones.
¨ Entorno de un proceso
Sistemas Operativos – Hilos y procesos
Temporizadores
18
¨ El sistema operativo mantiene un temporizador por
proceso (caso UNIX).
¤ Se mantiene en el BCP del proceso un contador del
tiempo que falta para que venza el temporizador.
¤ La rutina del sistema operativo actualiza todos los
temporizadores.
¤ Si un temporizador llega a cero se ejecuta la función
de tratamiento.
¨ En UNIX el sistema operativo envía una señal
SIGALRM al proceso cuando vence su temporizador.
Sistemas Operativos – Hilos y procesos
Servicios POSIX para temporización
19
¨ int alarm(unsigned int sec)
¤Establece un temporizador.
¤Si el parámetro es cero, desactiva el temporizador.
Sistemas Operativos – Hilos y procesos
Ejemplo: Imprimir un mensaje cada 10
segundos
20
#include <signal.h>
#include <stdio.h>
void tratar_alarma(void) {
printf("Activada \n");
}
int main() {
struct sigaction act;
/* establece el manejador para SIGALRM */
act.sa_handler = tratar_alarma;
act.sa_flags = 0; /* ninguna acción especifica */
sigaction(SIGALRM, &act, NULL);
act.sa_handler = SIG_IGN;
sigaction(SIGINT, &act, NULL);
for(;;){ /* recibe SIGALRM cada 10 segundos */
/* ignora SIGINT */
alarm(10);
pause();
}
}
Sistemas Operativos – Hilos y procesos
Finalización temporizada
21
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
pid_t pid;
void tratar_alarma(void) {
}
main(int argc, char **argv) {
kill(pid, SIGKILL);
int status;
char **argumentos;
struct sigaction act;
argumentos = &argv[1];
pid = fork();
}
switch(pid) {
perror ("fork");
case -1: /* error del fork() */
exit(-1);
case 0: /* proceso hijo */
default: /* padre */
execvp(argumentos[0], argumentos);
perror("exec");
exit(-1);
/* establece el manejador */
act.sa_handler = tratar_alarma;
act.sa_flags = 0;
sigaction(SIGALRM, &act, NULL);
alarm(5);
wait(&status);
}
exit(0);
Sistemas Operativos – Hilos y procesos
Contenido
22
¨ Señales.
¨ Temporizadores.
¨ Excepciones
¨ Entorno de un proceso.
Sistemas Operativos – Hilos y procesos
Excepciones
23
¨ El hardware detecta conditiones especiales:
¤ Fallo de página, escritura a página de solo lectura,
desbordamientos de pila, violación de segmento, syscall,
…
¨ Transfiere control al SO para su tratamiento, que:
¤ Salva contexto proceso
¤ Ejecuta rutina si es necesario
¤ Envía una señal al proceso indicando la excepción
¨ Las excepciones son una optimización de
rendimiento:
¤ Evitan mucho código extra de comprobación en
programas
Sistemas Operativos – Hilos y procesos
Exceptions
24
¨ Many languages (Java, C++, ..) use a mechanism
know as Exceptions to handle errors at runtime
¤ Try {} Catch (exception) {}
¨ In Java, for example, Exception is a class with many
descendants.
¤ ArrayIndexOutOfBoundsException
¤ NullPointerException
¤ FileNotFoundException
¤ ArithmeticException
¤ IllegalArgumentException
Contenido
25
¨ Señales.
¨ Temporizadores.
¨ Excepciones.
¨ Entorno de un proceso.
Sistemas Operativos – Hilos y procesos
Concepto
26
¨ El entorno de un proceso se hereda del padre los siguientes
datos:
¤ Vector de argumentos con el que se ejecutó el comando del
programa
¤ Vector de entorno, una lista de variables <nombre, valor> que
el padre pasa al hijo
¨ El paso de variable de entorno entre padre e hijo
¤ Es una forma flexible de comunicar ambos procesos y determinar
aspectos de la ejecución del hijo en modo usuario
¨ El mecanismo de las variables de entorno permite
particularizar aspectos a nive de cada proceso particular
¤ En lugar de tener una configuración común para todo el sistema
Sistemas Operativos – Hilos y procesos
Entorno de un proceso
27
¨ Variables de entorno:
¤ Mecanismo de paso de información a un proceso.
¨ ¿Se puede ver? Comando: “env”
¨ Ejemplo:
PATH=/usr/bin:/home/pepe/bin
TERM=vt100
HOME=/home/pepe
PWD=/home/pepe/libros/primero
TIMEZONE=MET
Sistemas Operativos – Hilos y procesos
Entorno de un proceso
28
¨ El entorno de un proceso se coloca en la pila del
proceso al iniciarlo.
¨ Acceso:
¤ El sistema operativo coloca algunos valores por defecto
(p. ej. PATH).
¤ Acceso mediante mandatos (set, export).
¤ Acceso mediante API de SO (putenv, geten
Comentarios de: Sistemas Operativos: Procesos (0)
No hay comentarios