Está en la página 1de 121

Tema 2.

Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Procesos en Minix
Estados de un proceso
Implementacin del descriptor de proceso
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
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

Tema 2. Procesos e hilos

SO

II
II

ndice

Planificacin de procesos e hilos


Planificacin en Minix
Planificacin en Linux
Planificacin en Windows NT/2000

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

II
II

Tema 2. Procesos e hilos

Bibliografa

J. Carretero et al. Sistemas Operativos: Una Visin Aplicada. McGrawHill. 2001. Captulo 3
W. Stallings. Sistemas Operativos. Prenctice-Hall. 2001. Captulos 3, 4,
9 y 10
A.S. Tanenbaum, A.S. Woodnull. Operating Systems. Design and
Implementation. Prentice-Hall International, 2a. edicin. 1996.
H. Custer. Inside Windows NT. Microsoft Press. 1993.

Sistemas Operativos II (II-UJI)

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

II
II

Concepto de proceso

Qu es un proceso?

Instancia de un programa en ejecucin, requiriendo para ello unos


recursos
Proceso
Programa

Pila

Recursos:
-Procesador
-Zonas de memoria
-Ficheros
-Dispositivos, etc.

Datos
Cdigo

Programa: estructura pasiva

Sistemas Operativos II (II-UJI)

Otros recursos:
-Ficheros abierto
-Dispositivos E/S, etc.

PC

Proceso: estructura activa

Procesos e hilos

SO

II
II

Concepto de proceso

Jerarqua de procesos:

Algunos SO, como Unix, mantienen una estructura jerrquica entre


procesos
init
Inicio

Inicio

Shell

Dem. Impr.

Inicio

Proceso A
Proceso B

Proceso E

Proceso D

Dem. Com..

Proceso init:
PID = 1
Ancestro de todos los procesos

Shell

Editor

Inicio

Proceso C

Proceso F

Otros, como Windows NT/2000 (en adelante WNT/2K), no la mantienen

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

II
II

Concepto de proceso

El proceso nulo (o la tarea ociosa):

Qu ocurre cuando el procesador est ocioso?


Se ejecuta el proceso nulo
Qu hace el proceso nulo?
Ejecuta un bucle infinito que no realiza ninguna operacin til
En sistemas Unix suele tener PID=0
Objetivo:
Entretener al procesador cuando no hay ninguna otra tarea

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

II
II

Concepto de proceso

Entorno del proceso:

Tabla NOMBRE-VALOR que se pasa al proceso en su creacin

Se incluye en la pila

Se establece:
Por defecto
Mediante mandatos del shell (
export)
Mediante API del SO (
putenv, getenv )
Ejemplo de entorno de un proceso en Unix:

$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

SO

II
II

Concepto de proceso

Grupos de procesos:

Los procesos forman grupos de procesos con alguna caracterstica


comn

Conjunto de procesos creados por el mismo padre


Conjunto de procesos creados a partir de un shell
Conjunto de procesos dependientes de un terminal

Se pueden realizar ciertas operaciones sobre un grupo de procesos

Matar todos los procesos de un grupo de procesos


Envo de seales a todos los procesos de un grupo de procesos

Sistemas Operativos II (II-UJI)

10

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

11

Procesos e hilos

SO

II
II

Informacin del proceso

Estado del procesador:

Imagen de memoria:

Contenido de los registros del modelo de programacin

Contenido de los segmentos de memoria en los que reside el cdigo y


los datos del proceso

Bloque de control de proceso (BCP)

Sistemas Operativos II (II-UJI)

12

Procesos e hilos

SO

II
II

Informacin del proceso


Registros
especiales

Registros
generales

Mapa de memoria
del Proceso A
Mapa de memoria
del Proceso B

Tablas del sistema operativo

Mapa de memoria
del Proceso C

BCP Proceso A
BCP Proceso B
BCP Proceso C
- Estado (registros) - Estado (registros) - Estado (registros)
- Identificacin
- Identificacin
- Identificacin
- Control
- Control
- Control

Tabla de procesos

- Tabla de memoria
- Tabla de E/S
- Tabla de ficheros

Tablas SO

PC
SP
Estado

Mapa de
Memoria

Sistemas Operativos II (II-UJI)

13

Procesos e hilos

SO

II
II

Estado del procesador

Formado por el contenido de todos los registros del procesador:

Registros generales
Contador de programa
Puntero de pila
Registro de estado
Registros especiales

Cuando un proceso est ejecutando su estado del procesador reside en los


registros del computador
Cuando un proceso no se est ejecutando su estado del procesador reside
en el BCP

Sistemas Operativos II (II-UJI)

14

Procesos e hilos

SO

Preparacin del cdigo de un proceso


Problema
Editor
Mdulo
fuente A

Mdulo
fuente B
Compilador o
ensamblador

Mdulo
objeto A

Mdulo
objeto B

Otros
objetos

Montador
Objeto
ejecutable

Bibliotecas
del sistema
Cargador
Ejecutable en
memoria

Sistemas Operativos II (II-UJI)

15

Procesos e hilos

II
II

SO

II
II

Imagen de memoria

Formada por los espacios de memoria que un proceso est autorizado a


utilizar
La memoria del proceso la asigna el gestor de memoria del SO
Si un proceso genera una direccin que esta fuera del espacio de direcciones
el HW genera una interrupcin HW interna
La imagen de memoria, dependiendo del computador, puede estar referida a
memoria virtual o memoria fsica

Sistemas Operativos II (II-UJI)

16

Procesos e hilos

SO

II
II

Imagen de memoria

Imagen de memoria de un proceso en un sistema con memoria virtual:


Registro identificador de estado de
direccionamiento
RIED

Memoria
virtual

Memoria
principal

Cdigo
Datos

Pila

Tamao

Disco

Tabla de
pginas
Una tabla de pginas por
proceso

Sistemas Operativos II (II-UJI)

17

Procesos e hilos

SO

II
II

Informacin del BCP

Informacin de identificacin:

PID del proceso, PID del padre


ID de usuario real (uid real)
ID de grupo real (gid real)
ID de usuario efectivo (uid efectivo)
ID de grupo efectivo (gid efectivo)

Estado del procesador

Tabla de ficheros abiertos


por el proceso

Informacin de control del proceso:

Informacin de planificacin y estado


Descripcin de los segmentos de memoria del proceso
Recursos asignados (ficheros abiertos, ...)
Comunicacin entre procesos (seales, ...)
Punteros para estructurar los procesos en listas o colas

Sistemas Operativos II (II-UJI)

18

Procesos e hilos

SO

II
II

Informacin del BCP

Qu informacin del proceso se saca fuera del BCP?

La que tiene tamao variable

Ejemplo: Tabla de pginas

Razones de eficiencia

La tabla de procesos se construye como una estructura esttica,


formada por un nmero de BCP del mismo tamao

La que se comparte:

El BCP es de acceso restringido al proceso que lo ocupa

Ejemplo: Punteros de posicin de ficheros abiertos por el proceso

Sistemas Operativos II (II-UJI)

19

Procesos e hilos

SO

II
II

Informacin del BCP

Tabla de pginas:

Describe la imagen de memoria del proceso


Tamao variable
El BCP contiene el puntero a la tabla de pginas
La comparticin de memoria requiere que sea externa al BCP

Punteros de posicin de los ficheros:

Si se asocian a la tabla de ficheros abiertos por los procesos (en el BCP)


no se pueden compartir
Si se asocian al i-nod se comparten siempre
Se ponen en una estructura comn a los procesos y se asigna uno
nuevo en cada servicio open

Sistemas Operativos II (II-UJI)

20

Procesos e hilos

SO

II
II

Compartir informacin
BCP 4

fd

Tabla de
ficheros
0 23
1 4563
2 56
3 4
4 678

BCP 7

fd

BCP 23

Tabla de
ficheros
0 23
1 4563
2 56
3 4
4 0

1
2
3
4

IDFF
24456
34512
28
34512

fd

Tabla de
ficheros
0 54
1 633
2 5368
3 33
4 2

PP
0
2345
5566
10000

Tabla de ficheros
del sistema

El proceso con BCP7 es hijo del proceso con BCP4


Los procesos con BCP7 y BCP4 comparten
punteros a los mismos ficheros
El proceso con BCP23 abre uno de los ficheros
compartido por los procesos con BCP7 y BCP4
IDFF = Identificativo de fichero
= Posicin puntero al fichero
PP

Sistemas Operativos II (II-UJI)

21

Procesos e hilos

SO

II
II

Tablas del SO

Tabla de procesos: Tabla con los BCP de los procesos del sistema

Tabla de memoria: Informacin sobre el uso de la memoria

Tabla de E/S: Informacin asociada a los perifricos y a las operaciones de


E/S
Tabla de ficheros: Informacin sobre los ficheros abiertos en el sistema

Sistemas Operativos II (II-UJI)

22

Procesos e hilos

SO

II
II

Tablas del SO

Implementacin de una cola de procesos listos:

Cola de procesos
listos

Inicio
Fin
Proceso 7

BCP 1

Proceso 5

BCP 2

Proceso 3 BCP 3
Proceso 9 BCP 4

Tabla de procesos

Sistemas Operativos II (II-UJI)

23

Procesos e hilos

SO

II
II

Usuarios y grupos reales y efectivos

Usuarios reales y efectivos:

UID (real user identifier): Identificativo real del usuario


Usuario responsable del proceso en ejecucin
EUID (effective user id.): Identificativo efectivo del usuario
Se usa para:
Acceder a ficheros de otros usuarios
Enviar seales a procesos
Ejecutar programas setuid

Grupos reales y efectivos:

GID (real group identifier):

EGID (effective group identifier)

Sistemas Operativos II (II-UJI)

24

Procesos e hilos

SO

II
II

Usuarios y grupos reales y efectivos

Programas SETUID:

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

Ejemplos de programas setuid: login, mount, passwd, mkdir, etc.

Cambio del bit setuid para el usuario y del bit setgid para el grupo:
-r-x-x-x
-r---x-x
-r-x-x---

Sistemas Operativos II (II-UJI)

chmod 4511 ( chmod u+s)


chmod 4411 ( chmod u+s)
chmod 2510 ( chmod g+s)

25

-r-s--x-x
Bit setuid

-r-S--x-x

Bit setgid

-r-x-s--

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

26

Procesos e hilos

SO

II
II

Estados de un proceso

Cuando un proceso se ejecuta pasa por distintintos estados

Diagrama de transicin entre estados:

Ejecucin

CP
U

er
a
ev por
en E
to /S

Ex
p

ul
si
n

U
CP

Exit

Es
p

Listo

Sistemas Operativos II (II-UJI)

Fin E/S o llegada evento

27

Bloqueado

Procesos e hilos

SO

II
II

Estados de un proceso
Estados suspendidos:

Procesos por lotes


en espera

Sistemas Operativos II (II-UJI)

po
em
i
T

co

um
ns

ido

Listo y
suspendido

Es
pe
o ra p
ev or
en E
to /S

Fin E/S o llegada evento

Expulsado al disco

Entra al
sistema

Recuperado del disco

Listo

o
ad

Bloqueado

Expulsado al disco

Pla

ic
n if

Exit

Fin E/S

28

Bloqueado y
suspendido

Memoria

Ejecucin

Zona de
intercambio

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

29

Procesos e hilos

SO

II
II

Formacin de un proceso

Objeto
ejecutable
Biblioteca
sistema

Sistemas Operativos II (II-UJI)

Ca rg a d o r

Mapa de
memoria

Imagen
del proceso

30

Tabla de procesos

BCP

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

31

Procesos e hilos

SO

II
II

Concepto de hilo de ejecucin

Caractersticas bsicas del modelo tradicional de proceso (pesado):

Ejecucin secuencial.
Ejecucin independiente.

Planteamiento:

Varios procesos pueden cooperar para resolver una misma tarea del SO
Ejecucin concurrente entre procesos Comunicacin entre
procesos, por ejemplo, a travs de memoria.
Un programa podra incluir varias actividades concurrentes Ejecucin
concurrente dentro de un proceso.

Sistemas Operativos II (II-UJI)

32

Procesos e hilos

SO

II
II

Concepto de hilo de ejecucin

Qu es un hilo de ejecucin?

Tambin llamado hebra, proceso ligero, flujo, subproceso o thread.


Programa en ejecucin que comparte la imagen de memoria y otros
recursos del proceso con otros hilos.
Desde el punto de vista de programacin: Funcin cuya ejecucin se
puede lanzar en paralelo con otras.
Un proceso puede contener uno o ms hilos.

Sistemas Operativos II (II-UJI)

33

Procesos e hilos

SO

II
II

Concepto de hilo de ejecucin

Qu es un hilo de ejecucin (cont.)?

Pila 1
Hilo 1
Pila2

Otros recursos:
-Ficheros abierto
-Dispositivos E/S, etc.
Proceso

Hilo 2
Datos
Cdigo

PC2
PC1

Hilo: unidad de planificacin

Sistemas Operativos II (II-UJI)

Proceso: unidad de asignacin de recursos

34

Procesos e hilos

SO

II
II

Concepto de hilo de ejecucin

Descriptor de un proceso y de un hilo:


Hilo 2
Hilo 1 (principal)
Hilos
Zonas de memoria
Gestin de E/S

Estado, tiempo de CPU,


registros de CPU, pila, etc.

...
...
Hilo j

Espacio de direcciones

...

Ficheros abiertos, dispositivos abiertos, etc.

Otros datos

Sistemas Operativos II (II-UJI)

35

Procesos e hilos

SO

II
II

Concepto de hilo de ejecucin

Descriptor de un proceso y de un hilo:

Todos los hilos de un proceso comparten el mismo entorno de ejecucin


(variables globales, espacio de direcciones, ficheros abiertos, etc.).
Cada hilo tiene su propio juego de registros de CPU, pila, variables
locales, etc.
No existe proteccin entre hilos: un error en un hilo puede estropear la
pila de otro.
Para ordenar la forma en la que los hilos acceden a datos comunes hay
que emplear mecanismos de sincronizacin.

Sistemas Operativos II (II-UJI)

36

Procesos e hilos

SO

II
II

Estados de un hilo y de un proceso

Estado de un proceso con hilos:

Combinacin de los estados de sus hilos:

Si hay un hilo en ejecucin

Si no hay hilos en ejecucin pero s preparados Proceso preparado

Si todos sus hilos bloqueados

Proceso

Proceso en ejecucin
Proceso bloqueado

Bloqueado por comunicacin


Bloqueado por acceso a disco
Activo

Hilo
Sistemas Operativos II (II-UJI)

37

Procesos e hilos

SO

II
II

Paralelizacin usando hilos

Los hilos permiten paralelizar la ejecucin de una aplicacin

Mientras un hilo est bloqueado, otro podra ejecutarse

Uso de llamadas al sistema bloqueantes por hilo


Procedimiento 1
P

Procedimiento 2
F P

Espera
en E/S

Espera
en E/S

Ejecucin
serie

Procedimiento 1
P

Espera
en E/S
Procedimiento 2
P

Sistemas Operativos II (II-UJI)

Ejecucin
paralela
Espera
en E/S

38

Procesamiento

Procesos e hilos

SO

II
II

Servidor con mltiples hilos


Proceso

Hilo distribuidor

Hilo trabajador
Peticiones

Hilos trabajadores:

Pueden crearse a medida que se necesitan y destruirse al finalizar la


tarea encomendada
Pueden existir siempre y quedar libres al finalizar la tarea encomendada
Ms eficiente (evita el trabajo de crear y destruir hilos)

Sistemas Operativos II (II-UJI)

39

Procesos e hilos

SO

II
II

Servidor con mltiples hilos

Ejemplo: Servidor secuencial de ficheros


Cach para bloques
Algoritmo
accedidos recientemente
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
}

Sencillo
Prestaciones pobres: permanece bloqueado

Sistemas Operativos II (II-UJI)

40

Procesos e hilos

SO

II
II

Servidor con mltiples hilos

Ejemplo (cont.): Servidor de ficheros con mltiples hilos


Hilo trabajador

Hilo distribuidor

Algoritmo 1
Algoritmo 2
Mientras no haya que terminar {
Mientras no haya que terminar {
Esperar a que llegue una peticin
Esperar trabajo
Esperar trabajador libre
Comprobar que la peticin es correcta
}
Si (los datos no estn en la cach) {
Enviar resultado
Realizar operacin de E/S
}
bloqueante sobre disco
}
Enviar resultado
Avisar que est libre
}

Mayor complejidad
Buenas prestaciones

Sistemas Operativos II (II-UJI)

41

Procesos e hilos

SO

II
II

Concepto de multihilo

Capacidad de un SO para mantener varios hilos de ejecucin dentro de un


mismo proceso.
Proceso

Mono
Proce
Sado
res

Multi
Proce
sado
res

Un proceso
Un hilo/proceso

Un proceso
Mltiples hilos/proceso

Ej: MS-DOS

Ej: Java

Mltiples procesos
Un hilo/proceso

Mltiples procesos
Mltiples hilos/proceso

Ej: Algunos UNIX

Ej: Windows 2000, Solaris, OS/2


Tcnica multihilo

Tcnica monohilo
Sistemas Operativos II (II-UJI)

Hilo

42

Procesos e hilos

SO

II
II

Implementacin de hilos

Dos categoras:

Hilos a nivel de usuario

Hilos a nivel de ncleo

Sistemas Operativos II (II-UJI)

43

Procesos e hilos

SO

II
II

Hilos a nivel de usuario

Gestin de hilos realizada por la aplicacin a nivel de usuario mediante una


biblioteca de hilos.

El ncleo no es consciente de la existencia de hilos.

Es posible programar cualquier aplicacin como multihilo.

Hilo a nivel de usuario

Biblioteca de hilos

Proceso

Modo usuario
Modo supervisor

Sistemas Operativos II (II-UJI)

44

Procesos e hilos

SO

II
II

Hilos a nivel de usuario

Ventajas frente a hilos a nivel de ncleo:

Desventajas frente a hilos a nivel de ncleo:

No necesario acceder al ncleo para intercambio de hilos.


Algoritmos de planificacin ad-hoc para cada aplicacin.
Pueden ejecutarse en cualquier SO.

Una llamada al sistema realizada por un hilo bloquea a todos los hilos
del proceso.
Una aplicacin multihilo no puede aprovechar las ventajas del
multiprocesamiento.

Ejemplo:

Pthreads de POSIX.

Sistemas Operativos II (II-UJI)

45

Procesos e hilos

SO

II
II

Hilos a nivel de ncleo

Gestin de hilos realizada por el ncleo.

Es posible programar cualquier aplicacin como multihilo.


Hilo a nivel de usuario
Hilo a nivel de ncleo
Modo usuario
Modo supervisor

Proceso

Sistemas Operativos II (II-UJI)

46

Procesos e hilos

SO

II
II

Hilos a nivel de ncleo

Ventajas frente a hilos a nivel de usuario:

Desventajas frente a hilos a nivel de usuario:

El bloqueo de un hilo no supone (necesariamente) bloquear todo el


proceso.
Planificacin de mltiples hilos de un proceso en mltiples
procesadores.
Las funciones del ncleo pueden ser multihilo.

El intercambio de hilos se realiza accediendo al ncleo.

Ejemplos:

Linux, Windows 2000, OS/2.

Sistemas Operativos II (II-UJI)

47

Procesos e hilos

SO

II
II

Aproximaciones combinadas

Ejemplo: Solaris

Creacin, sincronizacin y planificacin de hilos de una


aplicacin en modo usuario.
Planificacin de mltiples hilos de un proceso en mltiples
procesadores.
El bloqueo de un hilo no supone (necesariamente) bloquear todo
el proceso.

Sistemas Operativos II (II-UJI)

48

Procesos e hilos

SO

II
II

Aproximaciones combinadas

Ejemplo: Solaris (cont.)

Hilo a nivel de usuario

Biblioteca de hilos

Hilo a nivel de ncleo


Modo usuario
Modo supervisor

Sistemas Operativos II (II-UJI)

Proceso

49

Procesos e hilos

SO

II
II

Modelos multihilo

Relacin de:

Muchos a uno.
Uno a uno.
Muchos a muchos.

Hilo a nivel de usuario (HNU)

HNU:HNN

Descripcin

Ejemplos

M:1

Pthreads POSIX

1:1

Windows 2000, OS/2

M:N

Solaris

Hilo a nivel de ncleo (HNN)

Sistemas Operativos II (II-UJI)

50

Procesos e hilos

SO

II
II

Concepto de hilo de ejecucin

Ventajas de utilizar mltiples hilos:

La ejecucin concurrente de hilos de un mismo proceso puede mejorar


la eficiencia del sistema.
Paralelismo dentro del proceso (en multiprocesadores).
Las operaciones bloqueantes no paralizan al proceso (completo).
Mayor eficiencia que con mltiples procesos en:
Creacin/eliminacin de unidades de planificacin.
Cambio de contexto.

Una buena solucin para sistemas cliente/servidor.

Facilidad de implementacin.

Sistemas Operativos II (II-UJI)

51

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix
Estados de un proceso
Implementacin del descriptor de proceso

Sistemas Operativos II (II-UJI)

52

Procesos e hilos

SO

II
II

Procesos en Minix

Diagrama de transicin entre estados:


En ejecucin
unready

pick_proc
sched

Listo

ready

Bloqueado

ready:

Pone el proceso en alguna de las colas de procesos listos del


planificador Activa el proceso

unready:

Elimina el proceso de las colas de procesos listos Suspende


el proceso

pick_proc: Selecciona el proceso listo a ser ejecutado por la CPU


Planificador
sched:

Sistemas Operativos II (II-UJI)

Pone al final de la cola el proceso de usuario en ejecucin pues


ste ha agotado su quantum de CPU
53

Procesos e hilos

SO

II
II

Procesos en Minix

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;
int p_flags;

/* process id passed in from MM*/


/* P_SLOT_FREE, SENDING, RECEIVING, */
/* or 0 if the process is runnable */

real_time
real_time
real_time
real_time
real_time

/*
/*
/*
/*
/*

Sistemas Operativos II (II-UJI)

user_time;
sys_time;
child_utime;
child_stime;
p_alarm;

user time in ticks */


sys time in ticks */
cumulative user time of children */
cumulative sys time of children */
time of next alarm in ticks, or 0 */

54

Procesos e hilos

SO

II
II

Procesos en Minix

Descriptor de un proceso (cont.):


struct proc *p_callerq;
struct proc *p_sendlink;
message *p_messbuf;
int p_getfrom;

/*
/*
/*
/*

head of list of procs wishing to send */


link to next proc wishing to send */
pointer to message buffer */
from whom does process want to receive? */

stuct proc *p_nextready;


int p_pending;

/* pointer to next ready process */


/* bit map for pending signals */

} proc[NR_TASKS+NR_PROCS];

Sistemas Operativos II (II-UJI)

55

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

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)

56

Procesos e hilos

SO

II
II

Procesos en Linux

Diagrama de transicin entre estado tpico.

Bloqueo de un proceso:

Espera a que ocurra un cierto evento


Proceso bloqueado e interrumplible:
Puede ser interrumpido por seales
Puede desbloquearle:
Una interrupcin HW
Liberacin de un recurso por el que esperaba
Una seal
Proceso bloqueado e ininterrumplible:
No acepta seales
Puede desbloquearle:
Una interrupcin HW
Liberacin de un recurso por el que esperaba

Sistemas Operativos II (II-UJI)

57

Procesos e hilos

SO

II
II

Procesos en Linux

Descriptor de un proceso:

Estructura task_struct del fichero include/linux/sched.h

Estado del proceso:


volatile long state;
#define TASK_RUNNING
0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE
3
#define TASK_STOPPED
4
unsigned long flags;
#define PF_STARTING
#define PF_EXITING

/*
/*
/*
/*
/*

Proceso listo o en ejecucin */


Proceso bloqueado interrumpible */
Proceso bloquea ininterrumpible */
Proceso finalizado */
Proceso parado tras llegar una
seal SIGSTOP*/

/* Combinacin de las banderas de estado */


0x00000002
/* Recin creado
*/
0x00000004
/* Finalizando
*/

Variable current: Puntero a la estructura task_struct del proceso en ejecucin


Sistemas Operativos II (II-UJI)

58

Procesos e hilos

SO

II
II

Procesos en Linux

Identificativos del proceso:


pid_t
pid_t
pid_t
uid_t
gid_t
gid_t

pid;
pgrp;
session;
uid,euid;
gid,egid;
groups[NGROUPS];

Sistemas Operativos II (II-UJI)

/*
/*
/*
/*
/*
/*

Identificativo del proceso */


Identificativo del grupo del proceso*/
Nmero de sesin del proceso */
Identificativo real y efectivo del usuario */
Identificativo real y efectivo del grupo */
Lista grupos a los que pertenece el proceso */

59

Procesos e hilos

SO

II
II

Procesos en Linux

Planificacin del proceso:


unsigned long policy;
#define SCHED_FIFO
#define SCHED_RR
#define SCHED_OTHER

/* Tres posibles polticas de planificacin */


1
2
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)

60

Procesos e hilos

SO

II
II

Procesos en Linux

Jerarqua del proceso:


struct
struct
struct
struct
struct

task_struct
task_struct
task_struct
task_struct
task_struct

*p_opptr;
*p_pptr;
*p_cptr;
*p_ysptr;
*p_osptr;

c
p_

p_

Sistemas Operativos II (II-UJI)

Original parent */
Parent */
Youngest child */
Younger sibling */
Older sibling */

padre

ptr

hijo ms
joven

/*
/*
/*
/*
/*

p_p

tr
pp

ptr

p_pptr
p_osptr

p_osptr
p_ysptr

hijo

p_ysptr

61

hijo ms
viejo

Procesos e hilos

SO

II
II

Procesos en Linux

Seales del proceso:


struct sigset_t signal;
struct sigset_t blocked;
struct sigset_t sigpending;

/* Mapa de bits
/* Mapa de bits
/* Mapa de bits
y pendientes

de seales recibidas */
de seales bloqueadas */
de seales no bloqueadas
*/

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)

62

Procesos e hilos

SO

II
II

Procesos en Linux

Monitorizacin del proceso:


long per_cpu_utime[NR_CPU];
long per_cpu_stime [NR_CPU];
long start_time;

/* Tiempo del proceso en modo usuario */


/* Tiempo del proceso en modo supervisor */
/* Tiempo de creacin del proceso */

unsigned long it_real_value;


unsigned long it_prof_value,
unsigned long it_virt_value;

/*
/*
/*
/*

struct timer_list real_timer;

Tiempos sobre temporizadores y alarmas */


Tiempo real */
Tiempo en ejecucin o estado listo */
Tiempo en ejecucin sin contar la
ejecucin de llamadas al sistema */
/* Lista de alarmas */

Temporizador vs. Alarma?

Sistemas Operativos II (II-UJI)

63

Procesos e hilos

SO

II
II

Procesos en Linux

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 */
/* Direccin de inicio y fin del
segmento de datos */
/* Direccin del tope del segmento
de pila de usuario */

unsigned long start_data, end_data;


unsigned long start_stack;
...
};

Sistemas Operativos II (II-UJI)

64

Procesos e hilos

SO

II
II

Procesos en Linux

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;
int umask;
struct dentry * root;
struct dentry * pwd;
};

/*
/*
/*
/*

Nmero de procesos que comparten esta estructura */


Mscara de creacin de ficheros */
Directorio raz del proceso */
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)

65

Procesos e hilos

SO

II
II

Procesos en Linux

Sistema de ficheros del proceso (cont.):

...

0
1

READ

...

WRITE

READ

5
6

Tabla de ficheros
del proceso

Sistemas Operativos II (II-UJI)

...
...

Tabla de ficheros
del sistema

66

1 /etc/passwd
2 /usr/castano

Tabla de inodos

Procesos e hilos

SO

II
II

Procesos en Linux

Incluye el proceso en ejecucin

Lista de procesos preparados:

Lista circular doblemente enlazada que comienza y finaliza con el proceso


init_task (PID=0)
struct task_struct *next_run;
struct task_struct *prev_run;

/* Siguiente proceso de esta lista */


/* 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

Sistemas Operativos II (II-UJI)

67

Procesos e hilos

SO

II
II

Procesos en Linux

Lista de procesos del sistema:

Lista circular doblemente enlazada que comienza y finaliza con el proceso


init_task
struct task_struct *next_task;
struct task_struct *prev_task;

/* Siguiente proceso de esta lista */


/* 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)

68

Procesos e hilos

SO

II
II

Procesos en Linux

Tabla de procesos:

Vector task del fichero kernel/sched.c


struct task_struct * task[NR_TASKS] = {&init_task, };
struct task_struct init_task;

Operaciones habituales sobre (todos los procesos de) la lista de procesos del
sistema:

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)

69

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000


Objetos tipo proceso e hilo
Estados de un hilo
Implementacin del procesos e hilos

Sistemas Operativos II (II-UJI)

70

Procesos e hilos

SO

II
II

Procesos en Windows NT/2000

Caractersticas de un proceso de Windows NT/2000:

Los procesos NT se implementan como objetos y son accedidos


mediante servicios de objetos
Un proceso NT tiene asociados varios hilos que se ejecutan en su
espacio de direccionamiento
El gestor de procesos NT no mantiene ninguna relacin entre los
procesos que crea

Sistemas Operativos II (II-UJI)

71

Procesos e hilos

SO

II
II

Objeto tipo proceso:

Servicios
del objeto

Atributos
del objeto

Tipo del
objeto

Procesos en Windows NT/2000

Sistemas Operativos II (II-UJI)

PROCESO
Identificativo de proceso
Objeto de acceso
Prioridad base
Afinidad del procesador
Tiempo de ejecucin
Puertos de comunicacin
Estado de finalizacin
etc.
Crear proceso
Abrir proceso
Pedir informacin del proceso
Aadir informacin del proceso
Finalizar proceso
Asignar/liberar memoria virtual
Leer/escribir memoria virtual
etc.

72

Procesos e hilos

SO

II
II

Procesos en Windows NT/2000

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)

73

Procesos e hilos

SO

II
II

Objeto tipo hilo:

Servicios
del objeto

Atributos
del objeto

Tipo del
objeto

Procesos en Windows NT/2000

Sistemas Operativos II (II-UJI)

HILO
Identificativo de hilo
Contexto
Prioridad base
Prioridad dinmica
Afinidad del procesador
Tiempo de ejecucin
Puerto de terminacin
Estado de finalizacin
etc.
Crear hilo
Abrir hilo
Pedir informacin del hilo
Aadir informacin del hilo
Finalizar hilo
Suspender/continuar hilo
Guardar/cargar contexto
etc.

74

Procesos e hilos

SO

II
II

Procesos en Windows NT/2000

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)

75

Procesos e hilos

SO

II
II

Procesos en Windows NT/2000


Diagrama de transicin entre estados (de un hilo):
Inicializado

Finalizado
Finalizacin

nto
Eve

Bloqueado

Esperar evento

Ejecucin

lsar
Expu

Listo
Planificador

Reinicializar

Expulsar

Alerta

A CPU

Sistemas Operativos II (II-UJI)

76

Procesos e hilos

SO

II
II

Procesos en Windows NT/2000

Algunos estados de un hilo:

Alerta:

Seleccionado como el siguiente hilo a ser ejecutado en un


procesador dado
Operacin (planificacin) previa a la invocacin de un cambio
de contexto

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)

77

Procesos e hilos

SO

II
II

Procesos en Windows NT/2000

Implementacin de procesos e hilos en Windows NT/2000:


Objeto
de aceeso
Descripcin del espacio virtual de direccionamiento

Objeto
proceso

. . .

Tabla de objetos
Subproceso x
Fichero y
.
.
.

Sistemas Operativos II (II-UJI)

Seccin z

78

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin en Minix

Planificacin de procesos e hilos

Planificacin en Linux
Planificacin en Windows NT/2000

Sistemas Operativos II (II-UJI)

79

Procesos e hilos

SO

II
II

El planificador de Minix

Sistema de colas multinivel (sin realimentacin) con prioridades expulsivas


+
PRIORIDAD
-

FCFS

TAREAS
PROCESOS
SERVIDOR

FCFS

PROCESOS
USUARIO

RR

Se invoca al planificador (rutina pick_proc) cuando:

Se bloquea un proceso (en ejecucin) con SEND o RECEIVE

Tras cada interrupcin

Tras la finalizacin del cuantum de CPU de un proceso de usuario

Al finalizar un proceso

Sistemas Operativos II (II-UJI)

80

Procesos e hilos

SO

II
II

El planificador de Minix

Implementacin del planificador:


rdy_head[TASK_Q]
+
PRIORIDAD
-

Sistemas Operativos II (II-UJI)

FCFS

TAREAS
PROCESOS
SERVIDOR

FCFS

PROCESOS
USUARIO

RR

81

rdy_head[SERVER_Q]
rdy_head[USER_Q]

Procesos e hilos

SO

II
II

El planificador de Minix

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)

82

Procesos e hilos

SO

II
II

Planificacin en POSIX

Cada poltica de planificacin lleva asociado un rango con al menos 32


niveles de prioridad

El planificador elegir el proceso o hilo con la prioridad ms alta

Polticas de planificacin:

FIFO (FCFS)
Round Robin (RR)
Otra

Sistemas Operativos II (II-UJI)

83

Procesos e hilos

SO

II
II

El planificador de Linux

Prioridad y algoritmo de planificacin de un proceso de Linux:

Todo proceso del sistema tiene asociadas


una prioridad
una poltica de planificacin, que puede ser:
FIFO (SCHED_FIFO)
RR (SCHED_RR)

Otra (SCHED_OTHER)

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)

84

Procesos e hilos

SO

II
II

El planificador de Linux

Prioridad y algoritmo de planificacin de un proceso de Linux (cont.):

Poltica SCHED_OTHER:

Favorece procesos interactivos


Prioridad dinmica = Prioridad_base + (Estimacin_CPU_restante / 2)
Objetivo prioridad base: Dividir los procesos en bandas fijas de
prioridad

Sistemas Operativos II (II-UJI)

85

Procesos e hilos

SO

II
II

El planificador de Linux

Algoritmo de planificacin:

Algoritmo expulsivo con prioridades (selecciona el proceso con mxima


prioridad)
Los procesos con planificacin FIFO y RR tienen mayor prioridad
Un proceso FIFO abandona la CPU cuando:
Aparece otro proceso listo con mayor prioridad
El proceso finaliza
Un proceso RR abandona la CPU cuando:
Aparece otro proceso listo con mayor prioridad
El proceso finaliza
Acaba su quantum de CPU y otro proceso tiene igual prioridad (y es
la mxima)

Sistemas Operativos II (II-UJI)

86

Procesos e hilos

SO

II
II

El planificador de Linux

Funcin de planificacin:
void schedule(void)
{
int c;
struct task_struct * p, * prev, * next;
prev = current;

Deshabilitar interrupciones

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();
Habilitar interrupciones

Sistemas Operativos II (II-UJI)

87

Procesos e hilos

SO

II
II

El planificador de Linux

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)

88

Procesos e hilos

SO

II
II

El planificador de Linux

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)

89

Procesos e hilos

SO

II
II

El planificador de Linux

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)

90

Procesos e hilos

SO

II
II

El planificador de Windows NT/2000

Prioridad de un hilo:

Dentro del rango 0..31


Depende del tipo de trabajo que est haciendo
Una cola de hilos listos por cada posible nivel de prioridad

Tipos de prioridad:

Prioridades en tiempo real


Prioridades variables

Sistemas Operativos II (II-UJI)

91

Procesos e hilos

SO

II
II

El planificador de Windows NT/2000

Prioridades en tiempo real:

Prioridades ms altas (rango 31..16)


Asignadas cuando el tiempo de respuesta del subproceso es crtico
(operaciones de comunicaciones, tareas de tiempo real, etc.)
La prioridad del hilo no cambia nunca
Poltica RR para los hilos de un nivel de prioridad dado

Sistemas Operativos II (II-UJI)

92

Procesos e hilos

SO

II
II

El planificador de Windows NT/2000

Prioridades variables:

Prioridades ms bajas (rango 15..0)


Cola RR en cada nivel de prioridad
Prioridad inicial del hilo:
Prioridad del proceso + Prioridad base del hilo (-2..+2)
La prioridad del hilo puede variar durante su vida
No puede ser superior a 15
No puede ser inferior a la prioridad inicial
El ncleo baja la prioridad (dinmica) de un hilo cada vez que finaliza
su quantum de CPU asignado
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)

93

Procesos e hilos

SO

II
II

El planificador de Windows NT/2000

Prioridades variables:

Ejemplo de relacin entre prioridades


15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0

mayor
+2
+1 encima normal
normal
0
-1 debajo normal
menor
-2

Prioridad
base del
proceso

Sistemas Operativos II (II-UJI)

Prioridad
inicial del
hilo

Prioridad
dinmica
del hilo

94

Procesos e hilos

SO

II
II

El planificador de Windows NT/2000


Algoritmo de planificacin de hilos:

NIVEL DE
PRIORIDAD

Esquema expulsivo con prioridades


y colas multinivel realimentadas
(selecciona el hilo con mxima
prioridad de todas las colas)

31
.
.
.

.
.
.
16

Prioridades en
tiempo real

.
.
.

14
.
.
.

.
.
.

Prioridades
variables

15

Sistemas Operativos II (II-UJI)

95

Procesos e hilos

Tema 2. Procesos e hilos

SO

II
II

ndice

Concepto de proceso

Informacin del proceso

Estados del proceso

Formacin de un proceso

Concepto de hilo de ejecucin

Procesos en Minix

Procesos en Linux

Procesos en Windows NT/2000

Planificacin de procesos e hilos

Servicios POSIX para gestin de procesos e hilos

Sistemas Operativos II (II-UJI)

96

Procesos e hilos

SO

Servicios POSIX para gestin de hilos


Pthreads
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);

Sistemas Operativos II (II-UJI)

97

Procesos e hilos

II
II

SO

Servicios POSIX sobre atributos de hilos

Creacin de atributos:
Sintaxis:
int pthread_attr_init(pthread_attr_t *attr);

Descripcin:
Inicia un objeto atributo de tipo
pthread_attr_t con las
propiedades que tendrn los hilos que se creen posteriormente
Los atributos permiten especificar: tamao de pila, prioridad, poltica
de planificacin, etc.
Existen diversas llamadas para modificar los atributos

Sistemas Operativos II (II-UJI)

98

Procesos e hilos

II
II

SO

Servicios POSIX sobre atributos de hilos

Destruccin de atributos:
Sintaxis:
int pthread_attr_destroy (pthread_attr_t *attr);

Descripcin:
Destruye el objeto atributo de tipo
pthread_attr_t pasado como
argumento a la misma

Sistemas Operativos II (II-UJI)

99

Procesos e hilos

II
II

SO

Servicios POSIX sobre atributos de hilos

Establecimiento del estado de terminacin:

Sintaxis:
int pthread_attr_setdetachstate(pthread_attr_t *attr,
int detachstate);

Descripcin:
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)

100

Procesos e hilos

II
II

SO

Servicios POSIX sobre gestin de hilos

Creacin de hilos:
Sintaxis:
int pthread_create (pthread_t *thread,
const pthread_attr_t *attr, void *(*func)(void *),
void *arg);

Descripcin:
Crea un hilo con atributos
attr que ejecuta func con argumentos arg

Finalizacin de hilos:
Sintaxis:
int pthread_exit(void *value);

Descripcin:
Finaliza la ejecucin de un hilo, indicando su estado de terminacin

Sistemas Operativos II (II-UJI)

101

Procesos e hilos

II
II

SO

Servicios POSIX sobre gestin de hilos

Suspensin de hilos:
Sintaxis:
int pthread_join(pthread_t thid, void **value);

Descripcin:
Suspende la ejecucin de un hilo hasta que termina el hilo con
identificador thid (no necesariamente un hilo hijo)
Deja el estado de terminacin del hilo en la posicin apuntada por
value
Slo se puede solicitar este servicio sobre hilos no independientes

Identificacin de hilos:

Sintaxis:
pthread_t pthread_self(void);

Descripcin:
Devuelve el identificador del hilo que ejecuta la llamada

Sistemas Operativos II (II-UJI)

102

Procesos e hilos

II
II

SO

Servicios POSIX sobre gestin de hilos

Jerarqua de hilos:
Hilo 1

No
independiente

Hilo principal (main)

pthread_create

pthread_create

pthread_create

Hilo 4

Hilo 3

Hilo 2

pthread_exit

pthread_join

pthread_exit

Sistemas Operativos II (II-UJI)

103

Procesos e hilos

II
II

SO

Servicios POSIX para gestin de hilos

Ejemplo 1:
#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,
pthread_create(&hilo2, NULL,

A partir de aqu, el hilo principal, hilo1 e


hilo2 se ejecutan concurrentemente.
Cualquiera puede acabar 1, 2o ltimo

hilo, (void *)cadena1);


hilo, (void *)cadena2);

exit(0);
}

Sistemas Operativos II (II-UJI)

104

Procesos e hilos

II
II

SO

Servicios POSIX para gestin de hilos

II
II

Ejemplo 2:
#include <pthread.h>
#include <stdio.h>

Ojo a la exclucin mutua!

int cont=0;
void *hilo(void *arg)
{ sleep(2);
cont=cont+1;
printf("Hilo
pthread_exit(0);
}
int main()

(%d): cont=%d \n",pthread_self(),cont);

{ 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);
}
Sistemas Operativos II (II-UJI)

105

Procesos e hilos

SO

Servicios POSIX para gestin de procesos

Ejemplo 2: Cdigo pseudo-equivalente con gestin de procesos pesados:


#include <stdio.h>
int main()
{ int estado, cont=0;

Por qu?

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);
}
Sistemas Operativos II (II-UJI)

106

Procesos e hilos

II
II

SO

Servicios POSIX para gestin de hilos

Ejemplo 3:
#include
#include
#include
#include
#include

<pthread.h>
<stdio.h>
<unistd.h>
<stdlib.h>
<time.h>

int x=0;
void *fhilo1(void *arg)
{ int i, cont;
for (i=0; i<3; i++) {
cont=x+1;
printf (Suma 1\n);
sleep (random()%3);
x=cont;
}
pthread_exit (NULL);
}

Sistemas Operativos II (II-UJI)

void *fhilo2(void *arg)


{ int i, cont;
for (i=0; i<3; i++) {
cont=x-1;
printf (Resta 1\n);
sleep (random()%3);
x=cont;
}
pthread_exit (NULL);
}

107

Procesos e hilos

II
II

SO

Servicios POSIX para gestin de hilos

Ejemplo 3 (cont.):
main()
{ pthread_t hilo1, hilo2;
time_t t;
srandom (time(&t);
printf ("Valor inicial de x: %d \n",x);
pthread_create(&hilo1, NULL,
pthread_create(&hilo2, NULL,

fhilo1, NULL);
fhilo2, NULL);

pthread_join(hilo1,NULL);
pthread_join(hilo2,NULL);
printf ("Valor final de x: %d \n",x);
exit(0);
}

Funcionamiento correcto?

Sistemas Operativos II (II-UJI)

108

Procesos e hilos

II
II

SO

II
II

Ejercicios

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)

109

Procesos e hilos

SO

II
II

Ejercicios

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)

110

Procesos e hilos

SO

II
II

Ejercicios

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)

111

Procesos e hilos

SO

II
II

Ejercicios

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)

112

Procesos e hilos

SO

II
II

Ejercicios

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)

113

Procesos e hilos

SO

II
II

Ejercicios

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)

114

Procesos e hilos

SO

II
II

Ejercicios

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.
r
er ity
te
t
ity
n
n
r
r
y
u it
u io
rio
co rior
co _pr
p
p
rt
rt_
Proceso init

Poltica planificacin
Prioridad dinmica
Prioridad esttica

...

...

Sistemas Operativos II (II-UJI)

Proceso 1

Proceso 2

Proceso 3

Proceso 4

Proceso 5

Proceso 6

Proceso 7

Proceso 8

FIFO
20
20

OTHER
50
75

RR
0
25

FIFO
25
25

RR
20
25

RR
25
25

OTHER
20
20

FIFO
25
25

...

...

...

...

...

...

...

...

115

...

...

...

...

...

...

...

...

Procesos e hilos

SO

II
II

Ejercicios

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:


FIFO Other FIFO
Proceso
Weight

RR

RR

Other FIFO

RR

P1

P2

P4

P5

P6

P7

P8

P3

1020

50

1025

1025

1025

20

1025

1025

3. Tras el bucle while c=1025 y next apunta al proceso P4

Sistemas Operativos II (II-UJI)

116

Procesos e hilos

SO

II
II

Ejercicios

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)

117

Procesos e hilos

SO

II
II

Ejercicios

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)

118

Procesos e hilos

SO

II
II

Ejercicios

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)

119

Procesos e hilos

SO

II
II

Ejercicios

Ejercicio 9 (solucin):
Vemoslo con el siguiente ejemplo:
PROCESO
Poltica

P1
FIFO

P2
RR

P3

P4

P5

P6

FIFO

Other

Other

FIFO

P7
RR

P8
FIFO

Prior. Esttica

50

40

50

80

60

30

25

50

Prior. Dinmica

50

30

50

75

60

30

20

50

1050

1040

1050

75

60

1030

1025

1050

Weight

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.
Sistemas Operativos II (II-UJI)

120

Procesos e hilos

SO

II
II

Ejercicios

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);
}
Sistemas Operativos II (II-UJI)

121

Procesos e hilos

También podría gustarte