46K - Departamento de Informática - Universidad Técnica Federico

Anuncio
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Relaciones entre Procesos
Grupos de procesos, sesiones, terminales
de control
1
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Login de Terminal en BSD
Driver
Driver
Terminal
Terminal
init
init
pid == 1
init
init
exec
getty exec login
login exec
getty
fork
Abre dispositivo
y lee nombre de
usuario
+
variables de
ambiente básicos
Lee /etc/ttys
Valida usuario,
define home,
cambia permisos,
define group IDs,
más variables de
ambiente
y uid
Raúl Monge
shell
shell
Llama a
script de
partida
(e.g.
.cshrc y .login
en csh)
V-2
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Login de Red en BSD
Solicitud
de Conexión
TCP
pid == 1
init
init
Lee /etc/rc
Raúl Monge
fork/
exec
fork/
exec
Pseudo
Pseudo
Terminal
Terminal
telnetd exec login
login exec shell
shell
telnetd
inetd
inetd
Abre dispositivo Valida usuario,
y lee nombre de
define home,
usuario
cambia permisos,
+
define group IDs,
variables de
más variables de
ambiente básicos
ambiente
y uid
Llama a
script de
partida
(e.g.
.cshrc y .login
en csh)
V-3
1
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Grupos de Procesos
• Cada proceso tiene un pid (process ID) y un
pgid (process group ID)
• Un grupo posee uno o más proceso
• Cada grupo tiene un ID único en el sistema
• El líder de grupo es aquel proceso donde
pid == pgid.
• El concepto de grupo de procesos es
independiente de grupo de usuarios!!
Raúl Monge
V-4
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: getpgrp
#include <sys/types.h>
#include <unistd.h>
pid_t getpgrp(void);
return: process group ID del proceso que llama
• Permite obtener el ID del grupo de procesos (pgid) al que
pertenece el que llama.
• El líder puede crear un grupo de procesos y procesos en
ese grupo y después terminar
• Grupo de procesos existe mientras existan miembros
Raúl Monge
V-5
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: setpgid
#include <sys/types.h>
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
return: 0 si OK, -1 si existe error
• Permite unirse a un grupo existente o crear un nuevo grupo
• Si pid == pgid, proceso pid se convierte en líder de grupo
• Un proceso sólo puede cambiar su propio grupo o el de sus
hijos (siempre que éstos no hayan llamado a exec).
– Si pid == 0, se usa pid de proceso que llama
– Si pgid == 0, se usa para el grupo pid de argumento
• Retorna error si no existe soporte para control de trabajos.
Raúl Monge
V-6
2
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Sesiones
• Una sesión es un conjunto de uno o más grupos de
procesos.
• Generalmente una shell agrupa procesos de un
comando en un grupo.
• Ejemplo:
proc1 | proc2 &
proc3 | proc4 | proc5
shell
proc1
grupo1
proc2
grupo2
proc3
proc4
proc5
grupo3
sesión
Raúl Monge
V-7
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: setsid
#include <sys/types.h>
#include <unistd.h>
pid_t setsid(void);
return: process group ID si OK, -1 si exisste error
• Permite crear una sesión (session ID) si el proceso que
llama no es líder de grupo (sino es error).
• Con el procesdo que llama sucede lo siguiente:
– El proceso se convierte en líder de sesión siendo inicialmente el
único proceso de la sesión.
– Se convierte en líder de grupo con pgid igual a su pid
– El proceso no tiene terminal de control (si lo tenía antes de setsid,
esta asociación se rompe con la llamada)
Raúl Monge
V-8
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Terminal de Control
• Una sesión puede tener un único terminal de control, que
normalmente corresponde al terminal (o pseudo) de login.
• El líder de sesión que estableció la conexión al terminal de
control es el proceso de control .
• Los grupos de procesos de una sesión se clasifican en:
– Un único grupo de procesos frontales (foreground)
– Cero o más grupos de procesos traseros (background)
• Tecla de interrupción (e.g. CTL-C) o de renuncia (e.g.
CTL-\) causa envío de señal SIGINT o SIGQUIT al grupo
de procesos frontales.
• Si se desconecta un modem, se envía señal SIGHUP
(hang-up) a proceso de control.
Raúl Monge
V-9
3
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
E/S Forzada de Procesos con
Terminal de Control
• Existen situaciones donde los procesos
pueden haber redireccionado sus E/S, pero
desean realizar una E o S con terminal de
control
• Se asegura abriendo archivo /dev/tty
• Un ejemplo típico es crypt (para cifrado o
descifrado de texto usando una clave)
Raúl Monge
V-10
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Funciones: tcgetpgrp y tcsetpgrp
#include <sys/types.h>
#include <unistd.h>
pid_t tcgetpgrp(int fildes);
return: process group ID grupo de procesos frontales si OK,
-1 si existe error
pid_t tcsetpgrp(int fildes, pid_t pgrpid);
return: 0 si OK, -1 si existe error
• Permiten ver cual es o modificar el grupo de procesos
frontales del terminal abierto en filedes.
• En una sesión se puede cambiar el grupo de procesos
frontales usando pgrpid adecuado.
• Estas funciones normalmente son usadas por la shell con
soporte para control de trabajos.
Raúl Monge
V-11
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Generación Típica de Señales
• Drivers de terminales a procesos frontales:
– SIGINT: caracter de interrupción (e.g. DEL o
CTL-C)
– SIGQUIT: caracter de renuncia (e.g. CTL-\)
– SIGSTP: carácter de suspensión (e.g. CTL-Z)
• De la shell a procesos frontales:
– SIGCONT: para que continúen procesos
frontales que habían sido suspendidos.
Raúl Monge
V-12
4
Descargar