Está en la página 1de 121

Sistemas Operativos II (II-UJI)

Procesos e hilos
1
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos
Sistemas Operativos II (II-UJI)
Procesos e hilos
2
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Procesos en Minix
Estados de un proceso
Implementacin del descriptor de proceso
I Procesos en Linux
Estados de un proceso
Implementacin del descriptor de proceso
Implementacin de la tabla de procesos
Implementacin de la lista de procesos preparados
I Procesos en Windows NT/2000
Objetos tipo proceso e hilo
Estados de un hilo
Implementacin del procesos e hilos
Sistemas Operativos II (II-UJI)
Procesos e hilos
3
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Planificacin de procesos e hilos
Planificacin en Minix
Planificacin en Linux
Planificacin en Windows NT/2000
Sistemas Operativos II (II-UJI)
Procesos e hilos
4
S S
O O
II II
II II
Bibliografa
I J. Carretero et al. Sistemas Operativos: Una Visin Aplicada. McGraw-
Hill. 2001. Captulo 3
I W. Stallings. Sistemas Operativos. Prenctice-Hall. 2001. Captulos 3, 4,
9 y 10
I A.S. Tanenbaum, A.S. Woodnull. Operating Systems. Design and
Implementation. Prentice-Hall International, 2a. edicin. 1996.
I H. Custer. Inside Windows NT. Microsoft Press. 1993.
Tema 2. Procesos e hilos
Sistemas Operativos II (II-UJI)
Procesos e hilos
5
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
6
S S
O O
II II
II II
Concepto de proceso
I Qu es un proceso?
N Instancia de un programa en ejecucin, requiriendo para ello unos
recursos
Programa: estructura pasiva Proceso: estructura activa
Proceso
PC
Recursos:
-Procesador
-Zonas de memoria
-Ficheros
-Dispositivos, etc.
Programa Pila
Datos
Cdigo
Otros recursos:
-Ficheros abierto
-Dispositivos E/S, etc.
Sistemas Operativos II (II-UJI)
Procesos e hilos
7
S S
O O
II II
II II
Concepto de proceso
I Jerarqua de procesos:
N Algunos SO, como Unix, mantienen una estructura jerrquica entre
procesos
N Otros, como Windows NT/2000 (en adelante WNT/2K), no la mantienen
Proceso init:
G PID = 1
G Ancestro de todos los procesos
init
Inicio Inicio
Shell Shell
Editor
Dem. Impr.
Dem. Com..
Proceso A
Proceso B Proceso D Proceso C
Proceso E Proceso F
Inicio Inicio
Sistemas Operativos II (II-UJI)
Procesos e hilos
8
S S
O O
II II
II II
Concepto de proceso
I El proceso nulo (o la tarea ociosa):
N Qu ocurre cuando el procesador est ocioso?
G Se ejecuta el proceso nulo
N Qu hace el proceso nulo?
G Ejecuta un bucle infinito que no realiza ninguna operacin til
G En sistemas Unix suele tener PID=0
N Objetivo:
G Entretener al procesador cuando no hay ninguna otra tarea
Sistemas Operativos II (II-UJI)
Procesos e hilos
9
S S
O O
II II
II II
Concepto de proceso
I Entorno del proceso:
N Tabla NOMBRE-VALOR que se pasa al proceso en su creacin
N Se incluye en la pila
N Se establece:
G Por defecto
G Mediante mandatos del shell (
export
)
G Mediante API del SO (
putenv
,
getenv
)
N Ejemplo de entorno de un proceso en Unix:
G
$env
LOGNAME=castano
SHELL=/bin/bash
TERM=vt100
HOME=/users/icc/castano
PATH=/usr/local/bin:/bin:/usr/bin:/users/castano/bin
...
Sistemas Operativos II (II-UJI)
Procesos e hilos
10
S S
O O
II II
II II
Concepto de proceso
I Grupos de procesos:
N Los procesos forman grupos de procesos con alguna caracterstica
comn
G Conjunto de procesos creados por el mismo padre
G Conjunto de procesos creados a partir de un shell
G Conjunto de procesos dependientes de un terminal
N Se pueden realizar ciertas operaciones sobre un grupo de procesos
G Matar todos los procesos de un grupo de procesos
G Envo de seales a todos los procesos de un grupo de procesos
Sistemas Operativos II (II-UJI)
Procesos e hilos
11
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
12
S S
O O
II II
II II
Informacin del proceso
I Estado del procesador:
N Contenido de los registros del modelo de programacin
I Imagen de memoria:
N Contenido de los segmentos de memoria en los que reside el cdigo y
los datos del proceso
I Bloque de control de proceso (BCP)
Sistemas Operativos II (II-UJI)
Procesos e hilos
13
S S
O O
II II
II II
Informacin del proceso
Mapa de
Memoria
Mapa de memoria
del Proceso A
Tablas SO
PC
SP
Estado
Mapa de memoria
del Proceso B
Mapa de memoria
del Proceso C
Registros
generales
Registros
especiales
Tablas del sistema operativo
Tabla de procesos
- Tabla de memoria
- Tabla de E/S
- Tabla de ficheros
BCP Proceso B BCP Proceso A BCP Proceso C
-
- Identificacin
- Control
Estado (registros) -
- Identificacin
- Control
Estado (registros) -
- Identificacin
- Control
Estado (registros)
Sistemas Operativos II (II-UJI)
Procesos e hilos
14
S S
O O
II II
II II
Estado del procesador
I Formado por el contenido de todos los registros del procesador:
N Registros generales
N Contador de programa
N Puntero de pila
N Registro de estado
N Registros especiales
I Cuando un proceso est ejecutando su estado del procesador reside en los
registros del computador
I Cuando un proceso no se est ejecutando su estado del procesador reside
en el BCP
Sistemas Operativos II (II-UJI)
Procesos e hilos
15
S S
O O
II II
II II
Preparacin del cdigo de un proceso
Mdulo
fuente A
Mdulo
fuente B
Compilador o
ensamblador
Mdulo
objeto A
Mdulo
objeto B
Otros
objetos
Montador
Objeto
ejecutable
Cargador
Editor
Ejecutable en
memoria
Problema
Bibliotecas
del sistema
Sistemas Operativos II (II-UJI)
Procesos e hilos
16
S S
O O
II II
II II
Imagen de memoria
I Formada por los espacios de memoria que un proceso est autorizado a
utilizar
I La memoria del proceso la asigna el gestor de memoria del SO
I Si un proceso genera una direccin que esta fuera del espacio de direcciones
el HW genera una interrupcin HW interna
I La imagen de memoria, dependiendo del computador, puede estar referida a
memoria virtual o memoria fsica
Sistemas Operativos II (II-UJI)
Procesos e hilos
17
S S
O O
II II
II II
Imagen de memoria
I Imagen de memoria de un proceso en un sistema con memoria virtual:
Memoria
virtual
Cdigo
Datos
Pila
Disco
Memoria
principal
Tabla de
pginas
Una tabla de pginas por
proceso
RIED
Tamao
Registro identificador de estado de
direccionamiento
Sistemas Operativos II (II-UJI)
Procesos e hilos
18
S S
O O
II II
II II
Informacin del BCP
I Informacin de identificacin:
N PID del proceso, PID del padre
N ID de usuario real (uid real)
N ID de grupo real (gid real)
N ID de usuario efectivo (uid efectivo)
N ID de grupo efectivo (gid efectivo)
I Estado del procesador
I Informacin de control del proceso:
N Informacin de planificacin y estado
N Descripcin de los segmentos de memoria del proceso
N Recursos asignados (ficheros abiertos, ...)
N Comunicacin entre procesos (seales, ...)
N Punteros para estructurar los procesos en listas o colas
Tabla de ficheros abiertos
por el proceso
Sistemas Operativos II (II-UJI)
Procesos e hilos
19
S S
O O
II II
II II
Informacin del BCP
I Qu informacin del proceso se saca fuera del BCP?
N La que tiene tamao variable
G Ejemplo: Tabla de pginas
G Razones de eficiencia
G La tabla de procesos se construye como una estructura esttica,
formada por un nmero de BCP del mismo tamao
N La que se comparte:
G El BCP es de acceso restringido al proceso que lo ocupa
G Ejemplo: Punteros de posicin de ficheros abiertos por el proceso
Sistemas Operativos II (II-UJI)
Procesos e hilos
20
S S
O O
II II
II II
Informacin del BCP
I Tabla de pginas:
N Describe la imagen de memoria del proceso
N Tamao variable
N El BCP contiene el puntero a la tabla de pginas
N La comparticin de memoria requiere que sea externa al BCP
I Punteros de posicin de los ficheros:
N Si se asocian a la tabla de ficheros abiertos por los procesos (en el BCP)
no se pueden compartir
N Si se asocian al i-nod se comparten siempre
N Se ponen en una estructura comn a los procesos y se asigna uno
nuevo en cada servicio open
Sistemas Operativos II (II-UJI)
Procesos e hilos
21
S S
O O
II II
II II
Compartir informacin
G El proceso con BCP7 es hijo del proceso con BCP4
G Los procesos con BCP7 y BCP4 comparten
punteros a los mismos ficheros
G El proceso con BCP23 abre uno de los ficheros
compartido por los procesos con BCP7 y BCP4
Tabla de
ficheros
BCP 4 BCP 7 BCP 23
23 23
24456
IDFF PP
0
54
4563 4563
34512 2345
633
56 56
28 5566
5368
4 4
34512 10000
33
678 2
0 0 0
1 1
1
1
2 2
2
2
3 3
3
3
4 4
4
4
fd
0
fd fd
Tabla de
ficheros
Tabla de
ficheros
Tabla de ficheros
del sistema
IDFF = Identificativo de fichero
PP = Posicin puntero al fichero
Sistemas Operativos II (II-UJI)
Procesos e hilos
22
S S
O O
II II
II II
Tablas del SO
I Tabla de procesos: Tabla con los BCP de los procesos del sistema
I Tabla de memoria: Informacin sobre el uso de la memoria
I Tabla de E/S: Informacin asociada a los perifricos y a las operaciones de
E/S
I Tabla de ficheros: Informacin sobre los ficheros abiertos en el sistema
Sistemas Operativos II (II-UJI)
Procesos e hilos
23
S S
O O
II II
II II
Tablas del SO
I Implementacin de una cola de procesos listos:
Proceso 7
Proceso 5
Proceso 3
Proceso 9
Inicio
Tabla de procesos Tabla de procesos
Cola de procesos Cola de procesos
listos listos
Fin
BCP 1
BCP 2
BCP 3
BCP 4
Sistemas Operativos II (II-UJI)
Procesos e hilos
24
S S
O O
II II
II II
Usuarios y grupos reales y efectivos
I Usuarios reales y efectivos:
N UID (real user identifier): Identificativo real del usuario
Usuario responsable del proceso en ejecucin
N EUID (effective user id.): Identificativo efectivo del usuario
Se usa para:
Acceder a ficheros de otros usuarios
Enviar seales a procesos
Ejecutar programas setuid
I Grupos reales y efectivos:
N GID (real group identifier):
N EGID (effective group identifier)
Sistemas Operativos II (II-UJI)
Procesos e hilos
25
S S
O O
II II
II II
Usuarios y grupos reales y efectivos
I Programas SETUID:
N Cuando un proceso ejecuta un programa setuid el ncleo asigna al EUID
del proceso el identificativo del propietario de dicho programa y al EGID del
proceso el identificativo del grupo del propietario de dicho programa
N Ejemplos de programas setuid: login, mount, passwd, mkdir, etc.
N Cambio del bit setuid para el usuario y del bit setgid para el grupo:
-r-x-x-x -r-s--x-x
-r---x-x -r-S--x-x
-r-x-x--- -r-x-s--
chmod 4511 ( chmod u+s)
chmod 4411 ( chmod u+s)
chmod 2510 ( chmod g+s)
Bit setuid
Bit setgid
Sistemas Operativos II (II-UJI)
Procesos e hilos
26
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
27
S S
O O
II II
II II
Estados de un proceso
I Cuando un proceso se ejecuta pasa por distintintos estados
I Diagrama de transicin entre estados:
Ejecucin
Listo Bloqueado
Fin E/S o llegada evento
Exit
E
s
p
e
r
a

p
o
r
E
/
S
o

e
v
e
n
t
o
A

C
P
U
E
x
p
u
l
s
i

n

C
P
U
Sistemas Operativos II (II-UJI)
Procesos e hilos
28
S S
O O
II II
II II
Estados de un proceso
I Estados suspendidos:
Ejecucin
Listo y
suspendido
Listo
Bloqueado y
suspendido
Bloqueado
P
la
n
i
fi
c
a
d
o
T
i
e
m
p
o
c
o
n
s
u
m
id
o
Fin E/S o llegada evento
Exit
Fin E/S
E
x
p
u
l
s
a
d
o
a
l
d
i
s
c
o
E
x
p
u
l
s
a
d
o
a
l
d
i
s
c
o
R
e
c
u
p
e
r
a
d
o
d
e
l
d
i
s
c
o
Entra al
sistema
M
e
m
o
r
i
a
Procesos por lotes
en espera
E
s
p
e
r
a

p
o
r
E
/
S
o

e
v
e
n
t
o
Z
o
n
a

d
e

i
n
t
e
r
c
a
m
b
i
o
Sistemas Operativos II (II-UJI)
Procesos e hilos
29
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
30
S S
O O
II II
II II
Formacin de un proceso
Mapa de
memoria
Imagen
del proceso
Tabla de procesos
BCP
C
a
r
g
a
d
o
r
Objeto
ejecutable
Biblioteca
sistema
Sistemas Operativos II (II-UJI)
Procesos e hilos
31
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
32
S S
O O
II II
II II
Concepto de hilo de ejecucin
I Caractersticas bsicas del modelo tradicional de proceso (pesado):
N Ejecucin secuencial.
N Ejecucin independiente.
I Planteamiento:
N Varios procesos pueden cooperar para resolver una misma tarea del SO
Ejecucin concurrente entre procesos Comunicacin entre
procesos, por ejemplo, a travs de memoria.
N Un programa podra incluir varias actividades concurrentes Ejecucin
concurrente dentro de un proceso.
Sistemas Operativos II (II-UJI)
Procesos e hilos
33
S S
O O
II II
II II
Concepto de hilo de ejecucin
I Qu es un hilo de ejecucin?
N Tambin llamado hebra, proceso ligero, flujo, subproceso o thread.
N Programa en ejecucin que comparte la imagen de memoria y otros
recursos del proceso con otros hilos.
N Desde el punto de vista de programacin: Funcin cuya ejecucin se
puede lanzar en paralelo con otras.
N Un proceso puede contener uno o ms hilos.
Sistemas Operativos II (II-UJI)
Procesos e hilos
34
S S
O O
II II
II II
Concepto de hilo de ejecucin
I Qu es un hilo de ejecucin (cont.)?
Hilo: unidad de planificacin Proceso: unidad de asignacin de recursos
Proceso
Hilo 2
PC2
PC1
Pila 1
Pila2
Datos
Cdigo
Otros recursos:
-Ficheros abierto
-Dispositivos E/S, etc.
Hilo 1
Sistemas Operativos II (II-UJI)
Procesos e hilos
35
S S
O O
II II
II II
Concepto de hilo de ejecucin
I Descriptor de un proceso y de un hilo:
. . .
. . .
Hilo 1 (principal)
Hilos
Zonas de memoria
Gestin de E/S
Otros datos
Estado, tiempo de CPU,
registros de CPU, pila, etc.
Espacio de direcciones
Ficheros abiertos, dispositivos abiertos, etc.
Hilo 2
Hilo j
. . .
Sistemas Operativos II (II-UJI)
Procesos e hilos
36
S S
O O
II II
II II
Concepto de hilo de ejecucin
I Descriptor de un proceso y de un hilo:
N Todos los hilos de un proceso comparten el mismo entorno de ejecucin
(variables globales, espacio de direcciones, ficheros abiertos, etc.).
N Cada hilo tiene su propio juego de registros de CPU, pila, variables
locales, etc.
N No existe proteccin entre hilos: un error en un hilo puede estropear la
pila de otro.
N Para ordenar la forma en la que los hilos acceden a datos comunes hay
que emplear mecanismos de sincronizacin.
Sistemas Operativos II (II-UJI)
Procesos e hilos
37
S S
O O
II II
II II
Estados de un hilo y de un proceso
I Estado de un proceso con hilos:
N Combinacin de los estados de sus hilos:
G Si hay un hilo en ejecucin Proceso en ejecucin
G Si no hay hilos en ejecucin pero s preparados Proceso preparado
G Si todos sus hilos bloqueados Proceso bloqueado
Proceso
Hilo
Activo
Bloqueado por acceso a disco
Bloqueado por comunicacin
Sistemas Operativos II (II-UJI)
Procesos e hilos
38
S S
O O
II II
II II
Paralelizacin usando hilos
I Los hilos permiten paralelizar la ejecucin de una aplicacin
I Mientras un hilo est bloqueado, otro podra ejecutarse
N Uso de llamadas al sistema bloqueantes por hilo
Procedimiento 2
Procedimiento 1
Espera
en E/S
P F
Procedimiento 1
Ejecucin
paralela
Ejecucin
serie
Espera
en E/S
P F
Procedimiento 2
Espera
en E/S
P F
Espera
en E/S
P F
Procesamiento
Sistemas Operativos II (II-UJI)
Procesos e hilos
39
S S
O O
II II
II II
Servidor con mltiples hilos
I Hilos trabajadores:
N Pueden crearse a medida que se necesitan y destruirse al finalizar la
tarea encomendada
N Pueden existir siempre y quedar libres al finalizar la tarea encomendada
G Ms eficiente (evita el trabajo de crear y destruir hilos)
Hilo distribuidor
Hilo trabajador
Peticiones
Proceso
Sistemas Operativos II (II-UJI)
Procesos e hilos
40
S S
O O
II II
II II
I Ejemplo: Servidor secuencial de ficheros
Algoritmo
Mientras no haya que terminar {
Esperar a que llegue una peticin
Comprobar que la peticin es correcta
Si (los datos no estn en la cach) {
Realizar operacin de E/S bloqueante sobre disco
}
Enviar resultado
}
G Sencillo
G Prestaciones pobres: permanece bloqueado
Servidor con mltiples hilos
Cach para bloques
accedidos recientemente
Sistemas Operativos II (II-UJI)
Procesos e hilos
41
S S
O O
II II
II II
Servidor con mltiples hilos
I Ejemplo (cont.): Servidor de ficheros con mltiples hilos
G Mayor complejidad
G Buenas prestaciones
Algoritmo 1
Mientras no haya que terminar {
Esperar a que llegue una peticin
Esperar trabajador libre
}
Enviar resultado
}
Algoritmo 2
Mientras no haya que terminar {
Esperar trabajo
Comprobar que la peticin es correcta
Si (los datos no estn en la cach) {
Realizar operacin de E/S
bloqueante sobre disco
}
Enviar resultado
Avisar que est libre
}
Hilo distribuidor
Hilo trabajador
Sistemas Operativos II (II-UJI)
Procesos e hilos
42
S S
O O
II II
II II
Concepto de multihilo
I Capacidad de un SO para mantener varios hilos de ejecucin dentro de un
mismo proceso.
Mltiples procesos
Mltiples hilos/proceso
Ej: Windows 2000, Solaris, OS/2
Tcnica Tcnica multihilo multihilo
Un proceso
Mltiples hilos/proceso
Ej: Java
Un proceso
Un hilo/proceso
Ej: MS-DOS
Mltiples procesos
Un hilo/proceso
Ej: Algunos UNIX
Mono Mono
Proce Proce
Sado Sado
res res
Tcnica Tcnica monohilo monohilo
Proceso
Hilo
Multi Multi
Proce Proce
sado sado
res res
Sistemas Operativos II (II-UJI)
Procesos e hilos
43
S S
O O
II II
II II
Implementacin de hilos
I Dos categoras:
N Hilos a nivel de usuario
N Hilos a nivel de ncleo
Sistemas Operativos II (II-UJI)
Procesos e hilos
44
S S
O O
II II
II II
Hilos a nivel de usuario
I Gestin de hilos realizada por la aplicacin a nivel de usuario mediante una
biblioteca de hilos.
I El ncleo no es consciente de la existencia de hilos.
I Es posible programar cualquier aplicacin como multihilo.
Biblioteca de hilos
Modo supervisor
Modo usuario
P
Hilo a nivel de usuario
Proceso P
Sistemas Operativos II (II-UJI)
Procesos e hilos
45
S S
O O
II II
II II
Hilos a nivel de usuario
I Ventajas frente a hilos a nivel de ncleo:
N No necesario acceder al ncleo para intercambio de hilos.
N Algoritmos de planificacin ad-hoc para cada aplicacin.
N Pueden ejecutarse en cualquier SO.
I Desventajas frente a hilos a nivel de ncleo:
N Una llamada al sistema realizada por un hilo bloquea a todos los hilos
del proceso.
N Una aplicacin multihilo no puede aprovechar las ventajas del
multiprocesamiento.
I Ejemplo:
N Pthreads de POSIX.
Sistemas Operativos II (II-UJI)
Procesos e hilos
46
S S
O O
II II
II II
Hilos a nivel de ncleo
I Gestin de hilos realizada por el ncleo.
I Es posible programar cualquier aplicacin como multihilo.
Modo supervisor
Modo usuario
Proceso
Hilo a nivel de usuario
P
Hilo a nivel de ncleo
P
Sistemas Operativos II (II-UJI)
Procesos e hilos
47
S S
O O
II II
II II
Hilos a nivel de ncleo
I Ventajas frente a hilos a nivel de usuario:
N El bloqueo de un hilo no supone (necesariamente) bloquear todo el
proceso.
N Planificacin de mltiples hilos de un proceso en mltiples
procesadores.
N Las funciones del ncleo pueden ser multihilo.
I Desventajas frente a hilos a nivel de usuario:
N El intercambio de hilos se realiza accediendo al ncleo.
I Ejemplos:
N Linux, Windows 2000, OS/2.
Sistemas Operativos II (II-UJI)
Procesos e hilos
48
S S
O O
II II
II II
Aproximaciones combinadas
I Ejemplo: Solaris
N Creacin, sincronizacin y planificacin de hilos de una
aplicacin en modo usuario.
N Planificacin de mltiples hilos de un proceso en mltiples
procesadores.
N El bloqueo de un hilo no supone (necesariamente) bloquear todo
el proceso.
Sistemas Operativos II (II-UJI)
Procesos e hilos
49
S S
O O
II II
II II
Aproximaciones combinadas
I Ejemplo: Solaris (cont.)
Modo usuario
Biblioteca de hilos
Modo supervisor
Proceso
Hilo a nivel de usuario
P
Hilo a nivel de ncleo
P P
Sistemas Operativos II (II-UJI)
Procesos e hilos
50
S S
O O
II II
II II
Modelos multihilo
I Relacin de:
N Muchos a uno.
N Uno a uno.
N Muchos a muchos.
Descripcin HNU:HNN Ejemplos
Pthreads POSIX
Windows 2000, OS/2
Solaris
M:1
1:1
M:N
Hilo a nivel de usuario (HNU)
Hilo a nivel de ncleo (HNN)
Sistemas Operativos II (II-UJI)
Procesos e hilos
51
S S
O O
II II
II II
Concepto de hilo de ejecucin
I Ventajas de utilizar mltiples hilos:
N La ejecucin concurrente de hilos de un mismo proceso puede mejorar
la eficiencia del sistema.
G Paralelismo dentro del proceso (en multiprocesadores).
G Las operaciones bloqueantes no paralizan al proceso (completo).
N Mayor eficiencia que con mltiples procesos en:
G Creacin/eliminacin de unidades de planificacin.
G Cambio de contexto.
N Una buena solucin para sistemas cliente/servidor.
N Facilidad de implementacin.
Sistemas Operativos II (II-UJI)
Procesos e hilos
52
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
Estados de un proceso
Implementacin del descriptor de proceso

Sistemas Operativos II (II-UJI)


Procesos e hilos
53
S S
O O
II II
II II
Procesos en Minix
I Diagrama de transicin entre estados:
N ready: Pone el proceso en alguna de las colas de procesos listos del
planificador Activa el proceso
N unready: Elimina el proceso de las colas de procesos listos Suspende
el proceso
N pick_proc: Selecciona el proceso listo a ser ejecutado por la CPU
Planificador
N sched: Pone al final de la cola el proceso de usuario en ejecucin pues
ste ha agotado su quantum de CPU
ready
sched
En ejecucin
unready
pick_proc
Bloqueado Listo
Sistemas Operativos II (II-UJI)
Procesos e hilos
54
S S
O O
II II
II II
Procesos en Minix
I Descriptor de un proceso:
EXTERN struct proc{
int p_reg[NR_REGS]; /* process registers */
int *p_sp; /* stack pointer */
struct pc_psw p_pcpsw; /* pc and psw as pushed by interrupt*/
struct mem_map p_map[NR_SEGS];/* memory map */
int *p_splimit; /* lowest legal stack value */
int p_pid; /* process id passed in from MM*/
int p_flags; /* P_SLOT_FREE, SENDING, RECEIVING, */
/* or 0 if the process is runnable */
real_time user_time; /* user time in ticks */
real_time sys_time; /* sys time in ticks */
real_time child_utime; /* cumulative user time of children */
real_time child_stime; /* cumulative sys time of children */
real_time p_alarm; /* time of next alarm in ticks, or 0 */
Sistemas Operativos II (II-UJI)
Procesos e hilos
55
S S
O O
II II
II II
Procesos en Minix
I Descriptor de un proceso (cont.):
struct proc *p_callerq; /* head of list of procs wishing to send */
struct proc *p_sendlink; /* link to next proc wishing to send */
message *p_messbuf; /* pointer to message buffer */
int p_getfrom; /* from whom does process want to receive? */
stuct proc *p_nextready; /* pointer to next ready process */
int p_pending; /* bit map for pending signals */
} proc[NR_TASKS+NR_PROCS];
Sistemas Operativos II (II-UJI)
Procesos e hilos
56
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
Estados de un proceso
Implementacin del descriptor de proceso
Implementacin de la tabla de procesos
Implementacin de la lista de procesos preparados

Sistemas Operativos II (II-UJI)


Procesos e hilos
57
S S
O O
II II
II II
Procesos en Linux
I Diagrama de transicin entre estado tpico.
I Bloqueo de un proceso:
N Espera a que ocurra un cierto evento
N Proceso bloqueado e interrumplible:
G Puede ser interrumpido por seales
G Puede desbloquearle:
Una interrupcin HW
Liberacin de un recurso por el que esperaba
Una seal
N Proceso bloqueado e ininterrumplible:
G No acepta seales
G Puede desbloquearle:
Una interrupcin HW
Liberacin de un recurso por el que esperaba
Sistemas Operativos II (II-UJI)
Procesos e hilos
58
S S
O O
II II
II II
Procesos en Linux
I Descriptor de un proceso:
N Estructura
task_struct
del fichero
include/linux/sched.h
I Estado del proceso:
volatile long state;
#define TASK_RUNNING 0 /* Proceso listo o en ejecucin */
#define TASK_INTERRUPTIBLE 1 /* Proceso bloqueado interrumpible */
#define TASK_UNINTERRUPTIBLE 2 /* Proceso bloquea ininterrumpible */
#define TASK_ZOMBIE 3 /* Proceso finalizado */
#define TASK_STOPPED 4 /* Proceso parado tras llegar una
seal SIGSTOP*/
unsigned long flags; /* Combinacin de las banderas de estado */
#define PF_STARTING 0x00000002 /* Recin creado */
#define PF_EXITING 0x00000004 /* Finalizando */
Variable current: Puntero a la estructura task_struct del proceso en ejecucin
Sistemas Operativos II (II-UJI)
Procesos e hilos
59
S S
O O
II II
II II
Procesos en Linux
I Identificativos del proceso:
pid_t pid; /* Identificativo del proceso */
pid_t pgrp; /* Identificativo del grupo del proceso*/
pid_t session; /* Nmero de sesin del proceso */
uid_t uid,euid; /* Identificativo real y efectivo del usuario */
gid_t gid,egid; /* Identificativo real y efectivo del grupo */
gid_t groups[NGROUPS]; /* Lista grupos a los que pertenece el proceso */
Sistemas Operativos II (II-UJI)
Procesos e hilos
60
S S
O O
II II
II II
Procesos en Linux
I Planificacin del proceso:
unsigned long policy; /* Tres posibles polticas de planificacin */
#define SCHED_FIFO 1
#define SCHED_RR 2
#define SCHED_OTHER 0
long counter; /* Procesos SCHED_OTHER: Tiempo de CPU por
consumir */
/* Procesos RR: Valor actual del quantum de CPU
(prioridad dinmica) */
long priority; /* Procesos RR: Valor inicial del quantum de CPU
(prioridad esttica) */
Los tiempos de CPU se miden en tics de reloj
Sistemas Operativos II (II-UJI)
Procesos e hilos
61
S S
O O
II II
II II
Procesos en Linux
I Jerarqua del proceso:
struct task_struct *p_opptr; /* Original parent */
struct task_struct *p_pptr; /* Parent */
struct task_struct *p_cptr; /* Youngest child */
struct task_struct *p_ysptr; /* Younger sibling */
struct task_struct *p_osptr; /* Older sibling */
hijo ms
joven
hijo
hijo ms
viejo
padre
p
_
p
p
t
r
p_osptr
p_ysptr
p_osptr
p_ysptr
p_pptr
p
_
p
p
t
r
p
_
c
p
tr
Sistemas Operativos II (II-UJI)
Procesos e hilos
62
S S
O O
II II
II II
Procesos en Linux
I Seales del proceso:
struct sigset_t signal; /* Mapa de bits de seales recibidas */
struct sigset_t blocked; /* Mapa de bits de seales bloqueadas */
struct sigset_t sigpending; /* Mapa de bits de seales no bloqueadas
y pendientes */
struct signal_struct *sig; /* Manejadores de seales */
struct signal_struct {
atomic_t count;
struct sigaction action[NSIG];/* Funcin que modifica el tratamiento
por defecto de la seal */
};
int exit_signal; /* Nmero de seal que mat al proceso */
struct wait_queue *wait_chldexit; /* Lista de espera de finalizacin de
hijos */
Sistemas Operativos II (II-UJI)
Procesos e hilos
63
S S
O O
II II
II II
Procesos en Linux
I Monitorizacin del proceso:
long per_cpu_utime[NR_CPU]; /* Tiempo del proceso en modo usuario */
long per_cpu_stime [NR_CPU]; /* Tiempo del proceso en modo supervisor */
long start_time; /* Tiempo de creacin del proceso */
/* Tiempos sobre temporizadores y alarmas */
unsigned long it_real_value; /* Tiempo real */
unsigned long it_prof_value, /* Tiempo en ejecucin o estado listo */
unsigned long it_virt_value; /* Tiempo en ejecucin sin contar la
ejecucin de llamadas al sistema */
struct timer_list real_timer
;
/* Lista de alarmas */
Temporizador vs. Alarma?
Sistemas Operativos II (II-UJI)
Procesos e hilos
64
S S
O O
II II
II II
Procesos en Linux
I Segmentos de memoria del proceso:
struct mm_struct *mm;
struct mm_struct {
...
struct vm_area_struct *mmap;
struct vm_area_struct *mmap_avl;
struct vm_area_struct *mmap_cache;
unsigned long start_code, end_code; /* Direccin de inicio y fin del
segmento de cdigo */
unsigned long start_data, end_data; /* Direccin de inicio y fin del
segmento de datos */
unsigned long start_stack; /* Direccin del tope del segmento
de pila de usuario */
...
};
Sistemas Operativos II (II-UJI)
Procesos e hilos
65
S S
O O
II II
II II
Procesos en Linux
I Sistema de ficheros del proceso:
struct fs_struct *fs; /* Informacin del sistema de ficheros */
struct files_struct *files; /* Informacin de ficheros abiertos por el proceso */
struct fs_struct {
atomic_t count; /* Nmero de procesos que comparten esta estructura */
int umask; /* Mscara de creacin de ficheros */
struct dentry * root; /* Directorio raz del proceso */
struct dentry * pwd; /* Directorio de trabajo */
};
struct files_struct {
tomic_t count; /* Num. procs que comparten estos ficheros abiertos */
fd_set * close_on_exec;/* Ficheros a cerrar ante una llamada exec */
fd_set * open_fds; /* Mscara bits de los descriptores de fichs usados */
struct file * fd_array[NR_OPEN_DEFAULT];
/* Tabla de ficheros abiertos por el proceso*/
};
Sistemas Operativos II (II-UJI)
Procesos e hilos
66
S S
O O
II II
II II
Procesos en Linux
I Sistema de ficheros del proceso (cont.):
Tabla de inodos Tabla de ficheros
del sistema
Tabla de ficheros
del proceso
0
1
2
3
4
5
6
1 READ
. . .
1 WRITE
1 READ
. . .
. . .
1 /etc/passwd
2 /usr/castano
. . .
Sistemas Operativos II (II-UJI)
Procesos e hilos
67
S S
O O
II II
II II
Procesos en Linux
I Lista de procesos preparados:
N Lista circular doblemente enlazada que comienza y finaliza con el proceso
init_task
(PID=0)
struct task_struct *next_run; /* Siguiente proceso de esta lista */
struct task_struct *prev_run; /* Anterior proceso de esta lista */
extern struct task_struct init_task; /* Cabeza y cola de la lista */
int nr_running; /* Num. total de procesos listos */
struct task_struct *current; /* Proceso en ejecucin */
procesoinit_task proceso A proceso B
next_run
prev_run
Incluye el proceso en ejecucin
Sistemas Operativos II (II-UJI)
Procesos e hilos
68
S S
O O
II II
II II
Procesos en Linux
I Lista de procesos del sistema:
N Lista circular doblemente enlazada que comienza y finaliza con el proceso
init_task
struct task_struct *next_task; /* Siguiente proceso de esta lista */
struct task_struct *prev_task; /* Anterior proceso de esta lista */
extern struct task_struct init_task; /* Cabeza y cola de la lista */
procesoinit_task proceso A proceso B
next_task
prev_task
Sistemas Operativos II (II-UJI)
Procesos e hilos
69
S S
O O
II II
II II
Procesos en Linux
I Tabla de procesos:
N Vector
task
del fichero
kernel/sched.c
struct task_struct * task[NR_TASKS] = {&init_task, };
struct task_struct init_task;
I Operaciones habituales sobre (todos los procesos de) la lista de procesos del
sistema:
N Vector
task
del fichero
kernel/sched.c
#define for_each_task(p) \
for (p = &init_task ; (p = p->next_task) != &init_task ;
)
Sistemas Operativos II (II-UJI)
Procesos e hilos
70
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
Objetos tipo proceso e hilo
Estados de un hilo
Implementacin del procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
71
S S
O O
II II
II II
Procesos en Windows NT/2000
I Caractersticas de un proceso de Windows NT/2000:
N Los procesos NT se implementan como objetos y son accedidos
mediante servicios de objetos
N Un proceso NT tiene asociados varios hilos que se ejecutan en su
espacio de direccionamiento
N El gestor de procesos NT no mantiene ninguna relacin entre los
procesos que crea
Sistemas Operativos II (II-UJI)
Procesos e hilos
72
S S
O O
II II
II II
Procesos en Windows NT/2000
I Objeto tipo proceso:
Identificativo de proceso
Objeto de acceso
Prioridad base
Afinidad del procesador
Tiempo de ejecucin
Puertos de comunicacin
Estado de finalizacin
etc.
PROCESO
T
i
p
o

d
e
l

o
b
j
e
t
o
A
t
r
i
b
u
t
o
s

d
e
l

o
b
j
e
t
o
S
e
r
v
i
c
i
o
s

d
e
l

o
b
j
e
t
o
Crear proceso
Abrir proceso
Pedir informacin del proceso
Aadir informacin del proceso
Finalizar proceso
Asignar/liberar memoria virtual
Leer/escribir memoria virtual
etc.
Sistemas Operativos II (II-UJI)
Procesos e hilos
73
S S
O O
II II
II II
Procesos en Windows NT/2000
I Objeto tipo proceso (cont.):
Atributo Descripcin
ID proceso Valor nico que identifica al proceso
Acceso Objeto con informacin de seguridad sobre el
usuario que gener el objeto
Prioridad base Prioridad base de sus hilos
Afinidad del procesador Procesadores en los que se pueden ejecutar sus
hilos
Lmites de cuotas Cantidad mxima de memoria paginada y no
paginada, de tiempo de ejecucin, etc.
Tiempo de ejecucin Tiempo total de ejecucin de todos sus hilos
Puertos comunicacin Canal de comunicacin al que enviar un mensaje si
un hilo genera una excepcin
Estado de finalizacin Motivo de la finalizacin del proceso
Sistemas Operativos II (II-UJI)
Procesos e hilos
74
S S
O O
II II
II II
Procesos en Windows NT/2000
I Objeto tipo hilo:
Identificativo de hilo
Contexto
Prioridad base
Prioridad dinmica
Afinidad del procesador
Tiempo de ejecucin
Puerto de terminacin
Estado de finalizacin
etc.
HILO
T
i
p
o

d
e
l

o
b
j
e
t
o
A
t
r
i
b
u
t
o
s

d
e
l

o
b
j
e
t
o
S
e
r
v
i
c
i
o
s

d
e
l

o
b
j
e
t
o
Crear hilo
Abrir hilo
Pedir informacin del hilo
Aadir informacin del hilo
Finalizar hilo
Suspender/continuar hilo
Guardar/cargar contexto
etc.
Sistemas Operativos II (II-UJI)
Procesos e hilos
75
S S
O O
II II
II II
Procesos en Windows NT/2000
I Objeto tipo hilo (cont.):
Atributo Descripcin
ID hilo Valor nico que identifica al hilo
Contexto Valores de los registros y de otros datos que
definen su estado de ejecucin
Prioridad dinmica Prioridad de ejecucin en ese instante
Prioridad base Lmite inferior de la prioridad dinmica
Afinidad del procesador Procesadores en los que se puede ejecutar
Tiempo de ejecucin Tiempo de ejecucin transcurrido en modo usuario y
en modo supervisor
Puerto de terminacin Canal de comunicacin al que enviar un mensaje
cuando finaliza
Estado de finalizacin Motivo de la finalizacin del subproceso
Sistemas Operativos II (II-UJI)
Procesos e hilos
76
S S
O O
II II
II II
Procesos en Windows NT/2000
I Diagrama de transicin entre estados (de un hilo):
Inicializado
Finalizado
Ejecucin
Bloqueado
Alerta
Listo
E
v
e
n
t
o
E
x
p
u
l
s
a
r
Reinicializar
Finalizacin
A CPU
Esperar evento
E
x
p
u
l
s
a
r
P
l
a
n
i
f
i
c
a
d
o
r
Sistemas Operativos II (II-UJI)
Procesos e hilos
77
S S
O O
II II
II II
Procesos en Windows NT/2000
I Algunos estados de un hilo:
N Alerta: Seleccionado como el siguiente hilo a ser ejecutado en un
procesador dado
Operacin (planificacin) previa a la invocacin de un cambio
de contexto
N Bloqueado: Espera a que un objeto de sincronizacin pase a una situacin
de marcado ("signaled") que indique la llegada del evento de
espera
Sistemas Operativos II (II-UJI)
Procesos e hilos
78
S S
O O
II II
II II
Procesos en Windows NT/2000
I Implementacin de procesos e hilos en Windows NT/2000:
Objeto
proceso
Objeto
de aceeso
Descripcin del espacio virtual de direccionamiento
Subproceso x
Fichero y
Seccin z
Tabla de objetos
. . .
.
.
.
Sistemas Operativos II (II-UJI)
Procesos e hilos
79
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos

Planificacin en Minix
Planificacin en Linux
Planificacin en Windows NT/2000
Sistemas Operativos II (II-UJI)
Procesos e hilos
80
S S
O O
II II
II II
El planificador de Minix
I Sistema de colas multinivel (sin realimentacin) con prioridades expulsivas
I Se invoca al planificador (rutina pick_proc) cuando:
N Se bloquea un proceso (en ejecucin) con SEND o RECEIVE
N Tras cada interrupcin
N Tras la finalizacin del cuantum de CPU de un proceso de usuario
N Al finalizar un proceso
FCFS TAREAS
FCFS
PROCESOS
SERVIDOR
RR
PROCESOS
USUARIO
-
+
PRIORIDAD
Sistemas Operativos II (II-UJI)
Procesos e hilos
81
S S
O O
II II
II II
El planificador de Minix
FCFS TAREAS
FCFS
PROCESOS
SERVIDOR
RR
PROCESOS
USUARIO
-
+
PRIORIDAD
rdy_head[TASK_Q]
rdy_head[SERVER_Q]
rdy_head[USER_Q]
I Implementacin del planificador:
Sistemas Operativos II (II-UJI)
Procesos e hilos
82
S S
O O
II II
II II
El planificador de Minix
I Implementacin del planificador (cont.):
PUBLIC pick_proc ()
{ register int q;/* Cola a usar: */
/* - Cola de tareas: TASK_Q */
/* - Cola de procesos servidor: SERVER_Q */
/* - Cola de procesos de usuario: USER_Q */
if (rdy_head [TASK_Q] != NIL_PROC) q = TASK_Q;
else if (rdy_head [SERVER_Q] != NIL_PROC) q = SERVER_Q;
else q = USER_Q;
prev_proc = cur_proc;
if (rdy_head [q] != NIL_PROC)
{ cur_proc = rdy_head [q]; /* Someone is runable */
} else{
cur_proc = IDLE; /* No one id runable */
}
}
Sistemas Operativos II (II-UJI)
Procesos e hilos
83
S S
O O
II II
II II
Planificacin en POSIX
I Cada poltica de planificacin lleva asociado un rango con al menos 32
niveles de prioridad
I El planificador elegir el proceso o hilo con la prioridad ms alta
I Polticas de planificacin:
N FIFO (FCFS)
N Round Robin (RR)
N Otra
Sistemas Operativos II (II-UJI)
Procesos e hilos
84
S S
O O
II II
II II
El planificador de Linux
I Prioridad y algoritmo de planificacin de un proceso de Linux:
N Todo proceso del sistema tiene asociadas
G una prioridad
G una poltica de planificacin, que puede ser:
FIFO (
SCHED_FIFO
)
RR (
SCHED_RR
)
Otra (
SCHED_OTHER
)
N Se asigna poltica de planificacin FIFO y RR a los procesos en tiempo
real (procesos que tienen que reaccionar muy rpidamente a sucesos
externos)
Sistemas Operativos II (II-UJI)
Procesos e hilos
85
S S
O O
II II
II II
El planificador de Linux
I Prioridad y algoritmo de planificacin de un proceso de Linux (cont.):
N Poltica
SCHED_OTHER
:
G Favorece procesos interactivos
G Prioridad dinmica = Prioridad_base + (Estimacin_CPU_restante / 2)
G Objetivo prioridad base: Dividir los procesos en bandas fijas de
prioridad
Sistemas Operativos II (II-UJI)
Procesos e hilos
86
S S
O O
II II
II II
El planificador de Linux
I Algoritmo de planificacin:
N Algoritmo expulsivo con prioridades (selecciona el proceso con mxima
prioridad)
N Los procesos con planificacin FIFO y RR tienen mayor prioridad
N Un proceso FIFO abandona la CPU cuando:
G Aparece otro proceso listo con mayor prioridad
G El proceso finaliza
N Un proceso RR abandona la CPU cuando:
G Aparece otro proceso listo con mayor prioridad
G El proceso finaliza
G Acaba su quantum de CPU y otro proceso tiene igual prioridad (y es
la mxima)
Sistemas Operativos II (II-UJI)
Procesos e hilos
87
S S
O O
II II
II II
El planificador de Linux
I Funcin de planificacin:
void
schedule
(void)
{
int c;
struct task_struct * p, * prev, * next;
prev = current;
cli();
/* move an exhausted RR process to be last */
if (!prev->counter && prev->policy == SCHED_RR) {
prev->counter = prev->priority;
move_last_runqueue(prev);
}
p = init_task.next_run;
sti();
Deshabilitar interrupciones
Habilitar interrupciones
Sistemas Operativos II (II-UJI)
Procesos e hilos
88
S S
O O
II II
II II
El planificador de Linux
I Funcin de planificacin (cont.):
/* this is the scheduler proper: */
c = -1000;
next = idle_task;
while (p != &init_task) {
int weight = goodness(p, prev, this_cpu);
if (weight > c)
c = weight, next = p;
p = p->next_run;
}
/* if all runnable processes have "counter == 0",
re-calculate counters */
if (!c) { for_each_task(p)
p->counter = (p->counter >> 1) + p->priority;
}
if (prev != next) { switch_to(prev,next); }
return;
}
Cambio de proceso
Sistemas Operativos II (II-UJI)
Procesos e hilos
89
S S
O O
II II
II II
El planificador de Linux
I Funcin de planificacin (cont.):
/* This is the function that decides how desirable a process is
* Return values:
* -1000: never select this
* 0: out of time, recalculate counters
* +ve: "goodness" value (the larger, the better)
* +1000: realtime process, select this.
*/
int
goodness
(struct task_struct * p,
struct task_struct * prev)
{ int weight;
...
if (p->policy != SCHED_OTHER)
return 1000 + p->rt_priority;
Sistemas Operativos II (II-UJI)
Procesos e hilos
90
S S
O O
II II
II II
El planificador de Linux
I Funcin de planificacin (cont.):
/* Give the process a first-approximation goodness value
* according to the number of clock-ticks it has left.
* Don't do any other calculations if the time slice is over */
weight = p->counter;
if (weight) {
/* Give a slight advantage to the current process */
if (p == prev)
weight += 1;
}
return weight;
}
Sistemas Operativos II (II-UJI)
Procesos e hilos
91
S S
O O
II II
II II
El planificador de Windows NT/2000
I Prioridad de un hilo:
N Dentro del rango 0..31
N Depende del tipo de trabajo que est haciendo
N Una cola de hilos listos por cada posible nivel de prioridad
I Tipos de prioridad:
N Prioridades en tiempo real
N Prioridades variables
Sistemas Operativos II (II-UJI)
Procesos e hilos
92
S S
O O
II II
II II
El planificador de Windows NT/2000
I Prioridades en tiempo real:
N Prioridades ms altas (rango 31..16)
N Asignadas cuando el tiempo de respuesta del subproceso es crtico
(operaciones de comunicaciones, tareas de tiempo real, etc.)
N La prioridad del hilo no cambia nunca
N Poltica RR para los hilos de un nivel de prioridad dado
Sistemas Operativos II (II-UJI)
Procesos e hilos
93
S S
O O
II II
II II
El planificador de Windows NT/2000
I Prioridades variables:
N Prioridades ms bajas (rango 15..0)
N Cola RR en cada nivel de prioridad
N Prioridad inicial del hilo:
G Prioridad del proceso + Prioridad base del hilo (-2..+2)
N La prioridad del hilo puede variar durante su vida
G No puede ser superior a 15
G No puede ser inferior a la prioridad inicial
G El ncleo baja la prioridad (dinmica) de un hilo cada vez que finaliza
su quantum de CPU asignado
G La prioridad (dinmica) de un hilo aumenta tras una operacin de E/S
Los hilos interactivos tienden a prioridades ms altas dentro de la clase
de prioridad variable
Sistemas Operativos II (II-UJI)
Procesos e hilos
94
S S
O O
II II
II II
El planificador de Windows NT/2000
I Prioridades variables:
N Ejemplo de relacin entre prioridades
menor
debajo normal
normal
encima normal
mayor
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Prioridad
base del
proceso
Prioridad
inicial del
hilo
Prioridad
dinmica
del hilo
+2
+1
-1
-2
0
Sistemas Operativos II (II-UJI)
Procesos e hilos
95
S S
O O
II II
II II
El planificador de Windows NT/2000
I Algoritmo de planificacin de hilos:
N Esquema expulsivo con prioridades
y colas multinivel realimentadas
(selecciona el hilo con mxima
prioridad de todas las colas)
NIVEL DE
PRIORIDAD
31
.
.
.
.
.
.
.
.
.
16
15
14
0
.
.
.
.
.
.
P
r
i
o
r
i
d
a
d
e
s

e
n

t
i
e
m
p
o

r
e
a
l
P
r
i
o
r
i
d
a
d
e
s

v
a
r
i
a
b
l
e
s
Sistemas Operativos II (II-UJI)
Procesos e hilos
96
S S
O O
II II
II II
Tema 2. Procesos e hilos
ndice
I Concepto de proceso
I Informacin del proceso
I Estados del proceso
I Formacin de un proceso
I Concepto de hilo de ejecucin
I Procesos en Minix
I Procesos en Linux
I Procesos en Windows NT/2000
I Planificacin de procesos e hilos
I Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)


Procesos e hilos
97
S S
O O
II II
II II
Servicios POSIX para gestin de hilos
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy (pthread_attr_t *attr);
int pthread_create (pthread_t *thread,
const pthread_attr_t *attr, void *(*func)(void *),
void *arg);
int pthread_exit(void *value);
int pthread_join(pthread_t thid, void **value);
pthread_t pthread_self(void);
int pthread_attr_setdetachstate(pthread_attr_t *attr,
int detachstate);
Pthreads
Sistemas Operativos II (II-UJI)
Procesos e hilos
98
S S
O O
II II
II II
Servicios POSIX sobre atributos de hilos
I Creacin de atributos:
N Sintaxis:
int pthread_attr_init(pthread_attr_t *attr);
N Descripcin:
G Inicia un objeto atributo de tipo
pthread_attr_t
con las
propiedades que tendrn los hilos que se creen posteriormente
G Los atributos permiten especificar: tamao de pila, prioridad, poltica
de planificacin, etc.
G Existen diversas llamadas para modificar los atributos
Sistemas Operativos II (II-UJI)
Procesos e hilos
99
S S
O O
II II
II II
Servicios POSIX sobre atributos de hilos
I Destruccin de atributos:
N Sintaxis:
int pthread_attr_destroy (pthread_attr_t *attr);
N Descripcin:
G Destruye el objeto atributo de tipo
pthread_attr_t
pasado como
argumento a la misma
Sistemas Operativos II (II-UJI)
Procesos e hilos
100
S S
O O
II II
II II
Servicios POSIX sobre atributos de hilos
I Establecimiento del estado de terminacin:
N Sintaxis:
int pthread_attr_setdetachstate(pthread_attr_t *attr,
int detachstate);
N Descripcin:
G Establece el estado de terminacin de un hilo:
Si "detachstate" = PTHREAD_CREATE_DETACHED
El hilo se considerar como independiente
El hilo liberar sus recursos cuando finalice su ejecucin
Si "detachstate" = PTHREAD_CREATE_JOINABLE
El hilo se considerar como no independiente
El hilo no liberar todos los recursos (descriptor y pila)
cuando finalice su ejecucin, es necesario utilizar
pthread_join()
Habitualmente, valor por defecto
Sistemas Operativos II (II-UJI)
Procesos e hilos
101
S S
O O
II II
II II
Servicios POSIX sobre gestin de hilos
I Creacin de hilos:
N Sintaxis:
int pthread_create (pthread_t *thread,
const pthread_attr_t *attr, void *(*func)(void *),
void *arg);
N Descripcin:
G Crea un hilo con atributos
attr
que ejecuta
func
con argumentos
arg
I Finalizacin de hilos:
N Sintaxis:
int pthread_exit(void *value);
N Descripcin:
G Finaliza la ejecucin de un hilo, indicando su estado de terminacin
Sistemas Operativos II (II-UJI)
Procesos e hilos
102
S S
O O
II II
II II
Servicios POSIX sobre gestin de hilos
I Suspensin de hilos:
N Sintaxis:
int pthread_join(pthread_t thid, void **value);
N Descripcin:
G Suspende la ejecucin de un hilo hasta que termina el hilo con
identificador
thid
(no necesariamente un hilo hijo)
G Deja el estado de terminacin del hilo en la posicin apuntada por
value
G Slo se puede solicitar este servicio sobre hilos no independientes
I Identificacin de hilos:
N Sintaxis:
pthread_t pthread_self(void);
N Descripcin:
G Devuelve el identificador del hilo que ejecuta la llamada
Sistemas Operativos II (II-UJI)
Procesos e hilos
103
S S
O O
II II
II II
Servicios POSIX sobre gestin de hilos
I Jerarqua de hilos:
Hilo 1
pthread_create
Hilo 4
pthread_exit
pthread_create
Hilo 2
pthread_create
Hilo 3
pthread_join
pthread_exit
No
independiente
Hilo principal (main)
Sistemas Operativos II (II-UJI)
Procesos e hilos
104
S S
O O
II II
II II
Servicios POSIX para gestin de hilos
#include <pthread.h>
#include <stdio.h>
void *
hilo
(void *cadena)
{
int i;
for (i=0; i<10; i++)
printf("Hilo (%d): %d %s \n",
pthread_self
(),i,(char *)cadena);
pthread_exit
(0);
}
int
main
()
{
char *cadena1="Hola";
char *cadena2="Adios";
pthread_t hilo1, hilo2;
pthread_create
(&hilo1, NULL, hilo, (void *)cadena1);
pthread_create
(&hilo2, NULL, hilo, (void *)cadena2);
exit(0);
}
I Ejemplo 1:
A partir de aqu, el hilo principal, hilo1 e
hilo2 se ejecutan concurrentemente.
Cualquiera puede acabar 1, 2o ltimo
Sistemas Operativos II (II-UJI)
Procesos e hilos
105
S S
O O
II II
II II
Servicios POSIX para gestin de hilos
#include <pthread.h>
#include <stdio.h>
int cont=0;
void *
hilo
(void *arg)
{ sleep(2);
cont=cont+1;
printf("Hilo (%d): cont=%d \n",
pthread_self
(),cont);
pthread_exit
(0);
}
int
main
()
{ pthread_t hilo1, hilo2;
printf("Hilo principal (%d): cont=%d \n",pthread_self(),cont);
pthread_create
(&hilo1, NULL, hilo, NULL);
pthread_create
(&hilo2, NULL, hilo, NULL);
pthread_join
(hilo1,NULL); /* Punto de sincronizacin con hilo1 */
/* Hilo2 sigue su marcha. Puede o no haber acabado*/
pthread_join
(hilo2,NULL); /* Punto de sincronizacin con hilo2 */
printf("Hilo principal (%d): cont=%d \n",pthread_self(),cont);
exit(0);
}
I Ejemplo 2:
Ojo a la exclucin mutua!
Sistemas Operativos II (II-UJI)
Procesos e hilos
106
S S
O O
II II
II II
Servicios POSIX para gestin de procesos
#include <stdio.h>
int main()
{ int estado, cont=0;
printf("Padre (%d): cont=%d \n",getpid(),cont);
if (fork() != 0)
{
if (fork() != 0)
{ wait(&estado);
wait(&estado);
printf("Padre (%d): cont=%d \n",getpid(),cont);
} else { /* HIJO 2 */
cont=cont+1;
printf("Hijo 2 (%d): cont=%d \n",getpid(),cont);
}
} else { /* HIJO 1 */
cont=cont+1;
printf("Hijo 1 (%d): cont=%d \n",getpid(),cont);
}
exit(0);
}
I Ejemplo 2: Cdigo pseudo-equivalente con gestin de procesos pesados:
Por qu?
Sistemas Operativos II (II-UJI)
Procesos e hilos
107
S S
O O
II II
II II
Servicios POSIX para gestin de hilos
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
int x=0;
void *
fhilo1
(void *arg) void *
fhilo2
(void *arg)
{ int i, cont; { int i, cont;
for (i=0; i<3; i++) { for (i=0; i<3; i++) {
cont=x+1; cont=x-1;
printf (Suma 1\n); printf (Resta 1\n);
sleep (random()%3); sleep (random()%3);
x=cont; x=cont;
} }
pthread_exit (NULL); pthread_exit (NULL);
} }
I Ejemplo 3:
Sistemas Operativos II (II-UJI)
Procesos e hilos
108
S S
O O
II II
II II
Servicios POSIX para gestin de hilos
main
()
{ pthread_t hilo1, hilo2;
time_t t;
srandom (time(&t);
printf ("Valor inicial de x: %d \n",x);
pthread_create(&hilo1, NULL, fhilo1, NULL);
pthread_create(&hilo2, NULL, fhilo2, NULL);
pthread_join(hilo1,NULL);
pthread_join(hilo2,NULL);
printf ("Valor final de x: %d \n",x);
exit(0);
}
I Ejemplo 3 (cont.):
Funcionamiento correcto?
Sistemas Operativos II (II-UJI)
Procesos e hilos
109
S S
O O
II II
II II
Ejercicios
I Ejercicio 1:
Realizar un algoritmo o programa en el que, dado el nmero de identificacin de
un proceso, se obtenga el nmero de hijos que tiene dicho proceso y sus
correspondientes nmeros de identificacin.
Sistemas Operativos II (II-UJI)
Procesos e hilos
110
S S
O O
II II
II II
Ejercicios
I Ejercicio 1 (solucin):
Solucin I:
void muetra_hijos (int pidPadre);
{struct task_struct *p;
int n_hijos=0;
p=&init_task->next_task;
while ((p->pid!=pidPadre) && (p!=&init_task))
p=p->next_task;
if (p==&init_task) return (-1);
if (p=p->cptr!=NULL)
do
printf (%d \n,p-> pid);
n_hijos++1;
while (p=p->p_osptr!=NULL);
printf (El proceso %d tiene %d hijos \n,pidPadre,n_hijos);
return (0);
}
Sistemas Operativos II (II-UJI)
Procesos e hilos
111
S S
O O
II II
II II
Ejercicios
I Ejercicio 1 (solucin):
Solucin II:
void muetra_hijos (int pidPadre);
{struct task_struct *p;
int n_hijos=0;
p=&init_task->next_task;
while ((p->pid!=pidPadre) && (p!=&init_task))
p=p->next_task;
if (p==&init_task) return (-1);
for each_task (p)
if (p->p_pptr->pid==pidPadre)
{printf (%d \n,p->p_pptr->pid);
n_hijos++1;}
printf (El proceso %d tiene %d hijos\n,pidPadre,n_hijos);
return (0);
}
Sistemas Operativos II (II-UJI)
Procesos e hilos
112
S S
O O
II II
II II
Ejercicios
I Ejercicio 2:
Desarrollar un algoritmo o un programa que genere una salida similar a la del
comando
pstree
en el sistema operativo Linux.
void pstree2 ();
{struct task_struct *p;
void pstree2_rec (struct task_struct *h);
{ hh=h->p_cptr;
while (hh!=NULL)
{ printf (Proc padre %d. Proc hijo %d\n,h->pid,hh->pid);
pstree2_rec (hh);
hh=hh->p_osptr;
}
return (0);
}
p=&init_task;
pstree2_rec (p);
return (0);
}
Sistemas Operativos II (II-UJI)
Procesos e hilos
113
S S
O O
II II
II II
Ejercicios
I Ejercicio 3:
Desarrollar un algoritmo o un programa que calcule de la forma ms
eficiente posible el nmero de procesos hurfanos que hay en un sistema
Linux en un instante dado.
Sistemas Operativos II (II-UJI)
Procesos e hilos
114
S S
O O
II II
II II
Ejercicios
I Ejercicio 4:
Desarrollar un algoritmo o un programa en el que, dado el nmero de
identificacin de un proceso Linux, se muestre el proceso hijo preparado
para ejecucin (en estado listo) que lleva ms tiempo ejecutndose, ya sea
en modo usuario o supervisor.
Sistemas Operativos II (II-UJI)
Procesos e hilos
115
S S
O O
II II
II II
Ejercicios
I Ejercicio 5:
Supongamos que, en un instante dado, la lista de procesos preparados para
ejecucin de un sistema operativo linux es la que aparece a continuacin y
que el proceso en ejecucin es el proceso 3. Qu proceso pasara a
ejecucin si se invoca al planificador de linux? Justificar la respuesta.
. . .
. . .
Poltica planificacin
Prioridad dinmica
Prioridad esttica
Proceso init
. . .
. . .
Proceso 1
FIFO
20
20
. . .
. . .
Proceso 2
OTHER
50
75
. . .
. . .
Proceso 3
RR
0
25
. . .
. . .
Proceso 4
FIFO
25
25
. . .
. . .
Proceso 5
RR
20
25
. . .
. . .
Proceso 6
RR
25
25
. . .
. . .
Proceso 7
OTHER
20
20
. . .
. . .
Proceso 8
FIFO
25
25
c
o
u
n
t
e
r
p
r
i
o
r
i
t
y
c
o
u
n
t
e
r
r
t
_
p
r
i
o
r
i
t
y
r
t
_
p
r
i
o
r
i
t
y
Sistemas Operativos II (II-UJI)
Procesos e hilos
116
S S
O O
II II
II II
Ejercicios
I Ejercicio 5 (solucin):
1. El proceso 3 se mueve al final de la lista
2. La funcin goodness proporciona las siguientes prioridades a los
procesos de la lista de procesos listos:
3. Tras el bucle while c=1025 y next apunta al proceso P4
FIFO Other FIFO RR RR Other FIFO RR
Proceso P1 P2 P4 P5 P6 P7 P8 P3
Weight 1020 50 1025 1025 1025 20 1025 1025
Sistemas Operativos II (II-UJI)
Procesos e hilos
117
S S
O O
II II
II II
Ejercicios
I Ejercicio 6:
Qu proceso seleccionara el planificador de linux en un instante dado en
el que hay dos procesos con la mxima prioridad y uno tiene asignada la
poltica FIFO y otro RR?
Solucin:
El primero que se encuentre en la lista (ver ejemplo del ejercicio 5).
Sistemas Operativos II (II-UJI)
Procesos e hilos
118
S S
O O
II II
II II
Ejercicios
I Ejercicio 8:
En qu variara la poltica de planificacin de procesos de linux si en la
funcin schedule se sustituye la lnea
if (weight > c)
por lo siguiente:
if (weight >= c)
?
Solucin:
En este caso, ante varios procesos con mxima prioridad se seleccionara el
ltimo de ellos que est en la lista de procesos listos del sistema.
Consecuentemente, si estos procesos con la mxima prioridad tuviesen
asignada una poltica de planificacin FIFO, dejara que cumplirse dicha
poltica. Y lo mismo ocurrira con la poltica de planificacin RR.
Sistemas Operativos II (II-UJI)
Procesos e hilos
119
S S
O O
II II
II II
Ejercicios
I Ejercicio 9:
Explicar cmo se cumple la poltica FIFO en el planificador de procesos de
linux cuando varios procesos con este tipo de poltica tienen la mxima
prioridad.
Sistemas Operativos II (II-UJI)
Procesos e hilos
120
S S
O O
II II
II II
Ejercicios
I Ejercicio 9 (solucin):
Vemoslo con el siguiente ejemplo:
Tras el bucle while c=1050 y next apunta al proceso P1. Si no apareciesen ms
procesos listos, cuando acabe la ejecucin del proceso P1 el planificador
seleccionar al siguiente proceso de la lista ms prioritario, esto es, P3, que
entr despus de P1 en la lista. Si no hubiesen aparecido ms procesos listos,
cuando P3 finalice el proceso ms prioritario sera P8, que haba entrado en la
lista tras P1 y P3. Resumiendo, los tres procesos FIFO con la prioridad mxima
se ejecutan en el orden en que entraron en la lista.
PROCESO P1 P2 P3 P4 P5 P6 P7 P8
Poltica FIFO RR FIFO Other Other FIFO RR FIFO
Prior. Esttica 50 40 50 80 60 30 25 50
Prior. Dinmica 50 30 50 75 60 30 20 50
Weight 1050 1040 1050 75 60 1030 1025 1050
Sistemas Operativos II (II-UJI)
Procesos e hilos
121
S S
O O
II II
II II
Ejercicios
I Ejercicio 10:
Explicar la validez del siguiente cdigo:
#include <pthread.h>
#include <stdio.h>
#define MAX_THREADS 10
void *
imprimir
(int *n)
{ sleep (3);
printf("Hilo (%d): %d \n",
pthread_self
(),*n);
pthread_exit
(0);
}
int
main
()
{ int num;
pthread_t hilo;
pthread_attr_t attr;
pthread_attr_init
(&attr);
pthread_attr_setdetachstate
(&attr, PTHREAD_CREATE_DETACHED);
while (1) {
scanf (%d, &num);
pthread_create
(&hilo, &attr, imprimir, &num);
exit(0);
}

También podría gustarte