Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas Operativos: Lección 5: Hilos y Procesos
Sistemas Operativos: Lección 5: Hilos y Procesos
Lección 5:
Hilos y Procesos
Jesús Carretero Pérez
Alejandro Calderón Mateos
José Daniel García Sánchez
Francisco Javier García Blas
José Manuel Pérez Lobato
María Gregoria Casares Andrés
• Introducción y conceptos básicos
Sistemas
Opera,vos
1
ADVERTENCIA
• Este
material
es
un
simple
guión
de
la
clase:
no
son
los
apuntes
de
la
asignatura.
Sistemas
Opera,vos
2
Contenido
Sistemas
Opera,vos
3
Aplicaciones
con
tareas
concurrente
Sistemas
Opera,vos
4
Rendimiento
de
aplicaciones
concurrentes
Sistemas
Opera,vos
5
Hilo,
Proceso
ligero
o
Thread
Sistemas
Opera,vos
6
Hilos
Sistemas
Opera,vos
7
Beneficios
Sistemas
Opera,vos
8
Soporte
de
hilos
Sistemas
Opera,vos
9
Contenido
Sistemas
Opera,vos
10
Modelos
de
múlBples
hilos:
Muchos
a
uno
• Hace
corresponder
múlBples
hilos
de
usuario
a
un
único
hilo
del
núcleo.
h1 h2 … hn
• Biblioteca
de
hilos
en
espacio
de
usuario.
• Llamada
bloqueante:
Biblioteca de hilos
– Se
bloquean
todos
los
hilos.
• En
mulBprocesadores
no
se
pueden
ejecutar
varios
k1
hilos
a
la
vez.
Sistemas
Opera,vos
11
Modelo
de
múlBples
hilos:
Uno
a
uno
Sistemas
Opera,vos
12
Modelos
de
múlBples
hilos:
Muchos
a
muchos
Sistemas
Opera,vos
14
Llamadas
a
fork
y
exec
• En
los
sistemas
Bpo
UNIX
¿Qué
se
debe
hacer
si
se
llama
a
fork
desde
un
hilo?
– Duplicar
el
proceso
con
todos
sus
hilos.
• Apropiado
si
no
se
va
a
llamar
luego
a
exec
para
susBtuir
la
imagen
del
proceso.
– Duplicar
el
proceso
solo
con
el
hilo
que
llama
a
fork.
• Más
eficiente
si
se
va
a
llamar
a
exec
y
se
van
a
cancelar
todos
los
hilos.
• Solución
en
Linux:
Dos
versiones
de
fork.
Sistemas
Opera,vos
15
Cancelación
de
hilos
• Situación
en
la
que
un
hilo
noBfica
a
otros
que
deben
terminar.
• Opciones:
– Cancelación
asíncrona:
Se
fuerza
la
terminación
inmediata
del
hilo.
• Problemas
con
los
recursos
asignados
al
hilo.
– Cancelación
diferida:
El
hilo
comprueba
periódicamente
si
debe
terminar.
• Preferible.
Sistemas
Opera,vos
16
Hilos
y
procesamiento
de
solicitudes
• Pero:
– El
Bempo
de
creación/destrucción
del
hilo
supone
un
retraso
(aunque
sea
menor
que
el
de
creación/destrucción
de
un
proceso).
– No
se
establece
un
límite
en
el
número
de
hilos
concurrentes.
– Si
llega
una
avalancha
de
peBciones
se
pueden
agotar
los
recursos
del
sistema.
Sistemas
Opera,vos
17
Thread
Pools
o
Conjuntos
de
Hilos
• Ventajas:
– Se
minimiza
el
retardo:
El
hilo
ya
existe.
– Se
manBene
un
límite
sobre
el
número
de
hilos
concurrentes.
Sistemas
Opera,vos
18
Contenido
Sistemas
Opera,vos
19
Creación
de
hilos
#include <stdio.h>
#include <pthread.h> int main() {
pthread_t th1, th2;
struct sumapar { sumapar_t s1 = {1,50,0};
int n, m, r; sumapar_t s2 = {51,100,0};
};
typedef struct sumapar sumapar_t; pthread_create(&th1, NULL,
(void*)suma, (void*)&s1);
pthread_create(&th2, NULL,
void suma(sumapar_t * par) { (void*)suma, (void*)&s2);
int i;
int suma=0; pthread_join(th1, NULL);
for (i=par->n;i<=par->m;i++) { pthread_join(th2, NULL);
suma +=i;
} printf("Suma=%d\n",
par->r=suma; s1.r+s2.r);
} }
Sistemas
Opera,vos
22
Atributos
de
un
hilo
Sistemas
Opera,vos
23
Atributos
Sistemas
Opera,vos
24
Hilos
dependientes
e
hilos
independientes
Sistemas
Opera,vos
25
Ejemplo:
Hilos
independientes
#include <stdio.h>
#include <pthread.h>
#define MAX_THREADS 10
void func(void) {
printf("Thread %d \n", pthread_self());
pthread_exit(0);
}
int main() {
int j;
pthread_attr_t attr;
pthread_t thid[MAX_THREADS];
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
for(j = 0; j < MAX_THREADS; j ++)
pthread_create(&thid[j], &attr, func, NULL);
sleep(5);
}
Sistemas
Opera,vos
26
Contenido
Sistemas
Opera,vos
27
Entorno
de
un
proceso
• Ejemplo
PATH=/usr/bin:/home/pepe/bin
TERM=vt100
HOME=/home/pepe
PWD=/home/pepe/libros/primero
TIMEZONE=MET
Sistemas
Opera,vos
28
Entorno
de
un
proceso
• El
entorno
de
un
proceso
se
coloca
en
la
pila
del
proceso
al
iniciarlo.
• Acceso:
– El
sistema
operaBvo
coloca
algunos
valores
por
defecto
(p.
ej.
PATH).
– Acceso
mediante
mandatos
(set,
export).
– Acceso
mediante
API
de
SO
(putenv,
getenv).
Sistemas
Opera,vos
29
Entorno
de
un
proceso
#include <stdio.h>
#include <stdlib.h>
Sistemas
Opera,vos
30
Entorno
de
un
proceso
Sistemas
Opera,vos
31
Contenido
Sistemas
Opera,vos
32
Señales
• 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.
• Envío
o
generación
– Proceso-‐
Proceso
(dentro
del
grupo)
con
el
kill
– SO
-‐
Proceso
Sistemas
Opera,vos
34
Señales
• Otras
señales
– SIGILL
instrucción
ilegal
– SIGALRM
vence
el
temporizador
– SIGKILL
mata
al
proceso
Sistemas
Opera,vos
35
Señales
• Otras
señales
– SIGALRM
vence
el
temporizador
– SIGKILL
mata
al
proceso
Sistemas
Opera,vos
37
La
estructura
sigacBon
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
Opera,vos
38
Conjuntos
de
señales
Sistemas
Opera,vos
39
Ejemplo
Sistemas
Opera,vos
40
Servicios
POSIX
para
la
gesBón
de
señales
• int pause(void)
– Bloquea
al
proceso
hasta
la
recepción
de
una
señal.
– No
se
puede
especificar
un
plazo
para
desbloqueo.
– No
permite
indicar
el
Bpo
de
señal
que
se
espera.
– No
desbloquea
el
proceso
ante
señales
ignoradas.
Sistemas
Opera,vos
42
Temporizadores
Sistemas
Opera,vos
43
Servicios
POSIX
para
temporización
Sistemas
Opera,vos
44
Ejemplo:
Imprimir
un
mensaje
cada
10
segundos
#include <signal.h>
#include <stdio.h>
void tratar_alarma(void) {
printf("Activada \n");
}
int main() {
struct sigaction act;
Sistemas
Opera,vos
45
Finalización
temporizada
Sistemas
Opera,vos
46
Contenido
Sistemas
Opera,vos
47
Excepciones
Sistemas
Opera,vos
48
Código
de
excepción
• DWORD
GetExcepBonCode()
– No
es
una
llamada
al
sistema:
Macro.
– Solamente
se
puede
usar
dentro
de
tratamiento
de
excepciones.
– Existe
una
lista
larga
de
valores
que
puede
devolver:
• EXCEPTION_ACCESS_VIOLATION
• EXCEPTION_ILLEGAL_INSTRUCTION
• EXCEPTION_PRIV_INSTRUCTION
• ...
Sistemas
Opera,vos
49
Copia
de
cadenas
segura
Sistemas
Opera,vos
50
Puntos
a
recordar
Sistemas
Opera,vos
51
Puntos
a
recordar
Sistemas
Opera,vos
52
Lecturas
recomendadas
• Básica
• Complementaria
Sistemas
Opera,vos
53
SISTEMAS OPERATIVOS:
Lección 5:
Hilos y Procesos
Material Complementario
Sistemas
Opera,vos
54
Entorno
de
un
proceso
en
Windows
Sistemas
Opera,vos
55
Listado
de
variables
de
entorno
en
Windows
#include <windows.h>
#include <stdio.h> char * p = lpszVar;
while (p!=NULL) {
int main() { printf(“%s\n”,p);
char * lpszVar; while (p!=NULL) p++;
void * lpvEnv; p++;
}
lpvEnv =GetEnvironmentStrings();
if (lpvEnv == NULL) { printf(“\n”);
exit(-1); FreeEnvironmentStrings(lpszVar);
}
return 0;
}
Sistemas
Opera,vos
56
Temporizadores
en
Windows
#include <windows.h>
#include <stdio.h>
VOID Mensaje(HWND,UINT,UINT,DWORD) {
printf(“Tiempo finalizado”);
}
int main() {
tid = SetTimer(NULL,2,10,Mensaje); /* 2 msec */
realizar_tarea();
KillTimer(NULL,tid);
return 0;
}
Sistemas Opera,vos 58