Está en la página 1de 121

Tema 2.

Procesos e hilos
ndice
I I I I I I I I I I

SO

II II

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


ndice
I

SO

II II

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
Procesos e hilos

Sistemas Operativos II (II-UJI)

Tema 2. Procesos e hilos


ndice
I

SO

II II

Planificacin de procesos e hilos  Planificacin en Minix  Planificacin en Linux  Planificacin en Windows NT/2000

Sistemas Operativos II (II-UJI)

Procesos e hilos

Tema 2. Procesos e hilos

SO

II II

Bibliografa
I

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


ndice

SO

II II

I I I I I I I I I I

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

Concepto de proceso
I

II II

Qu es un proceso?
N

Instancia de un programa en ejecucin, requiriendo para ello unos recursos


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

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

Datos Cdigo PC

Programa: estructura pasiva

Proceso: estructura activa

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

Concepto de proceso
I

II II

Jerarqua de procesos:
N

Algunos SO, como Unix, mantienen una estructura jerrquica entre procesos
init Inicio Shell Inicio Inicio Shell Proceso A Proceso B Proceso E Proceso F Proceso D Inicio
Dem. Impr.

Dem. Com..

Editor

Proceso init: G PID = 1 G Ancestro de todos los procesos


Proceso C

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

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

Concepto de proceso
I

II II

El proceso nulo (o la tarea ociosa):


N

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

Sistemas Operativos II (II-UJI)

Procesos e hilos

SO

Concepto de proceso
I

II II

Entorno del proceso:


N N N

Tabla NOMBRE-VALOR que se pasa al proceso en su creacin Se incluye en la pila Se establece: G Por defecto G Mediante mandatos del shell ( export) G Mediante API del SO ( putenv, getenv ) 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 ...


9 Procesos e hilos

Sistemas Operativos II (II-UJI)

SO

Concepto de proceso
I

II II

Grupos de procesos:
N

Los procesos forman grupos de procesos con alguna caracterstica comn


G G G

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


G G

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


ndice
I

SO

II II

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

I I I I I I I I I

Sistemas Operativos II (II-UJI)

11

Procesos e hilos

SO

Informacin del proceso


I

II II

Estado del procesador:


N

Contenido de los registros del modelo de programacin

Imagen de memoria:
N

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

Informacin del proceso


Registros especiales
Mapa de memoria del Proceso A Mapa de memoria del Proceso B

II II

Tablas del sistema operativo Tabla de procesos


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

Registros generales

Mapa de memoria del Proceso C Tablas SO

PC SP Estado

Mapa de Memoria

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

Sistemas Operativos II (II-UJI)

13

Procesos e hilos

SO

Estado del procesador


I

II II

Formado por el contenido de todos los registros del procesador:


N N N N N

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 Compilador o ensamblador Mdulo objeto A Mdulo objeto B Montador Objeto ejecutable Cargador Ejecutable en memoria
Sistemas Operativos II (II-UJI) 15 Procesos e hilos

II II

Mdulo fuente B

Otros objetos

Bibliotecas del sistema

SO

Imagen de memoria
I

II II

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

I I

Sistemas Operativos II (II-UJI)

16

Procesos e hilos

SO

Imagen de memoria
I

II II

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


Registro identificador de estado de direccionamiento

Memoria virtual Cdigo Datos

RIED

Memoria principal

Tamao

Disco

Pila

Tabla de pginas
Una tabla de pginas por proceso

Sistemas Operativos II (II-UJI)

17

Procesos e hilos

SO

Informacin del BCP


I

II II

Informacin de identificacin:
N N N N N

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)
Tabla de ficheros abiertos por el proceso

I I

Estado del procesador Informacin de control del proceso:


N N N N N

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

Informacin del BCP


I

II II

Qu informacin del proceso se saca fuera del BCP?


N

La que tiene tamao variable


G G G

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:
G G

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

Informacin del BCP


I

II II

Tabla de pginas:
N N N N

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:


N

N N

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

Compartir informacin
BCP 4 Tabla de ficheros 0 23 1 4563 2 56 3 4 4 678 BCP 7 Tabla de ficheros 0 23 1 4563 2 56 3 4 4 0 BCP 23 Tabla de ficheros 0 54 1 633 2 5368 3 33 4 2

II II

fd

fd

fd

1 2 3 4

IDFF 24456 34512 28 34512

PP 0 2345 5566 10000


G G

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

Tabla de ficheros del sistema

Sistemas Operativos II (II-UJI)

21

Procesos e hilos

SO

Tablas del SO
I I I

II II

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

Tablas del SO
I

II II

Implementacin de una cola de procesos listos:

Cola de procesos listos

Inicio Fin Proceso 7 Proceso 5 BCP 1 BCP 2

Proceso 3 BCP 3 Proceso 9 BCP 4

Tabla de procesos

Sistemas Operativos II (II-UJI)

23

Procesos e hilos

SO

Usuarios y grupos reales y efectivos


I

II II

Usuarios reales y efectivos:


N

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 GID (real group identifier): EGID (effective group identifier)

Grupos reales y efectivos:


N N

Sistemas Operativos II (II-UJI)

24

Procesos e hilos

SO

Usuarios y grupos reales y efectivos


I

II II

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 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--chmod 4511 ( chmod u+s) chmod 4411 ( chmod u+s) chmod 2510 ( chmod g+s)

N N

-r-s--x-x
Bit setuid

-r-S--x-x -r-x-s--

Bit setgid

Sistemas Operativos II (II-UJI)

25

Procesos e hilos

Tema 2. Procesos e hilos


ndice
I I

SO

II II

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

I I I I I I I I

Sistemas Operativos II (II-UJI)

26

Procesos e hilos

SO

Estados de un proceso
I

II II

Cuando un proceso se ejecuta pasa por distintintos estados Diagrama de transicin entre estados:

Ejecucin

CP U

U CP

Es p

Exit

Listo

Ex p

Fin E/S o llegada evento

ul si n

er a ev por en E to /S

Bloqueado

Sistemas Operativos II (II-UJI)

27

Procesos e hilos

SO

Estados de un proceso
I

II II

Estados suspendidos:
Ejecucin
Pla ic n if o ad
co um ns ido

Exit

Listo Recuperado del disco

po em i T

Fin E/S o llegada evento

Bloqueado

Expulsado al disco

Entra al sistema

Expulsado al disco

Procesos por lotes en espera

Listo y suspendido

Fin E/S

Bloqueado y suspendido

Zona de intercambio
Procesos e hilos

Sistemas Operativos II (II-UJI)

28

Memoria

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

Tema 2. Procesos e hilos


ndice
I I I

SO

II II

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

I I I I I I I

Sistemas Operativos II (II-UJI)

29

Procesos e hilos

SO

Formacin de un proceso

II II

Mapa de memoria Ca rg a d o r

Tabla de procesos

Objeto ejecutable Biblioteca sistema

Imagen del proceso

BCP

Sistemas Operativos II (II-UJI)

30

Procesos e hilos

Tema 2. Procesos e hilos


ndice
I I I I

SO

II II

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

I I I I I I

Sistemas Operativos II (II-UJI)

31

Procesos e hilos

SO

Concepto de hilo de ejecucin


I

II II

Caractersticas bsicas del modelo tradicional de proceso (pesado):


N N

Ejecucin secuencial. Ejecucin independiente.

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. Un programa podra incluir varias actividades concurrentes Ejecucin concurrente dentro de un proceso.

Sistemas Operativos II (II-UJI)

32

Procesos e hilos

SO

Concepto de hilo de ejecucin


I

II II

Qu es un hilo de ejecucin?
N N

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

Concepto de hilo de ejecucin


I

II II

Qu es un hilo de ejecucin (cont.)?

Pila 1 Hilo 1 Pila2 Hilo 2 Datos Cdigo PC2 PC1 Otros recursos: -Ficheros abierto -Dispositivos E/S, etc. Proceso

Hilo: unidad de planificacin

Proceso: unidad de asignacin de recursos

Sistemas Operativos II (II-UJI)

34

Procesos e hilos

SO

Concepto de hilo de ejecucin


I

II II

Descriptor de un proceso y de un hilo:


Hilo 2 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 j ... ...

Sistemas Operativos II (II-UJI)

35

Procesos e hilos

SO

Concepto de hilo de ejecucin


I

II II

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.). 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

Estados de un hilo y de un proceso


I

II II

Estado de un proceso con hilos:


N

Combinacin de los estados de sus hilos:


G G G

Si hay un hilo en ejecucin Si todos sus hilos bloqueados

Proceso en ejecucin Proceso bloqueado

Si no hay hilos en ejecucin pero s preparados Proceso preparado

Proceso

Bloqueado por comunicacin Bloqueado por acceso a disco Activo

Hilo
Sistemas Operativos II (II-UJI) Procesos e hilos

37

SO

Paralelizacin usando hilos


I I

II II

Los hilos permiten paralelizar la ejecucin de una aplicacin Mientras un hilo est bloqueado, otro podra ejecutarse
N

Uso de llamadas al sistema bloqueantes por hilo


Procedimiento 1 P Espera en E/S Procedimiento 2 F P Espera en E/S F Ejecucin serie

Procedimiento 1 Espera en E/S Procedimiento 2 P Espera en E/S P F Ejecucin paralela F Procesamiento

Sistemas Operativos II (II-UJI)

38

Procesos e hilos

SO

Servidor con mltiples hilos


Hilo distribuidor Proceso

II II

Hilo trabajador Peticiones


I

Hilos trabajadores:
N

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 G Ms eficiente (evita el trabajo de crear y destruir hilos)

Sistemas Operativos II (II-UJI)

39

Procesos e hilos

SO

Servidor con mltiples hilos


I

II II

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 }
G G

Sencillo Prestaciones pobres: permanece bloqueado

Sistemas Operativos II (II-UJI)

40

Procesos e hilos

SO

Servidor con mltiples hilos


I

II II

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


Hilo distribuidor Hilo trabajador

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 }
G G

Mayor complejidad Buenas prestaciones

Sistemas Operativos II (II-UJI)

41

Procesos e hilos

SO

Concepto de multihilo
I

II II

Capacidad de un SO para mantener varios hilos de ejecucin dentro de un mismo proceso.


Proceso

Mono Proce Sado res

Un proceso Un hilo/proceso

Un proceso Mltiples hilos/proceso

Hilo

Ej: MS-DOS

Ej: Java

Multi Proce sado res

Mltiples procesos Un hilo/proceso

Mltiples procesos Mltiples hilos/proceso

Ej: Algunos UNIX Tcnica monohilo


Sistemas Operativos II (II-UJI)

Ej: Windows 2000, Solaris, OS/2 Tcnica multihilo


42 Procesos e hilos

SO

Implementacin de hilos
I

II II

Dos categoras:
N N

Hilos a nivel de usuario Hilos a nivel de ncleo

Sistemas Operativos II (II-UJI)

43

Procesos e hilos

SO

Hilos a nivel de usuario


I

II II

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.

I I

Hilo a nivel de usuario P Modo usuario Modo supervisor P Proceso

Biblioteca de hilos

Sistemas Operativos II (II-UJI)

44

Procesos e hilos

SO

Hilos a nivel de usuario


I

II II

Ventajas frente a hilos a nivel de ncleo:


N N N

No necesario acceder al ncleo para intercambio de hilos. Algoritmos de planificacin ad-hoc para cada aplicacin. Pueden ejecutarse en cualquier SO.

Desventajas frente a hilos a nivel de ncleo:


N

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:
N

Pthreads de POSIX.

Sistemas Operativos II (II-UJI)

45

Procesos e hilos

SO

Hilos a nivel de ncleo


I I

II II

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 P Proceso

Sistemas Operativos II (II-UJI)

46

Procesos e hilos

SO

Hilos a nivel de ncleo


I

II II

Ventajas frente a hilos a nivel de usuario:


N

N I

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.

Desventajas frente a hilos a nivel de usuario:


N

El intercambio de hilos se realiza accediendo al ncleo.

Ejemplos:
N

Linux, Windows 2000, OS/2.

Sistemas Operativos II (II-UJI)

47

Procesos e hilos

SO

Aproximaciones combinadas
I

II II

Ejemplo: Solaris
N

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

Aproximaciones combinadas
I

II II

Ejemplo: Solaris (cont.)

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

Biblioteca de hilos

Sistemas Operativos II (II-UJI)

49

Procesos e hilos

SO

Modelos multihilo
I

II II

Relacin de:
N N N

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

HNU:HNN M:1

Descripcin

Ejemplos Pthreads POSIX

1:1

Windows 2000, OS/2

Hilo a nivel de usuario (HNU) Hilo a nivel de ncleo (HNN)

M:N

Solaris

Sistemas Operativos II (II-UJI)

50

Procesos e hilos

SO

Concepto de hilo de ejecucin


I

II II

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). Mayor eficiencia que con mltiples procesos en: G Creacin/eliminacin de unidades de planificacin. G Cambio de contexto. Una buena solucin para sistemas cliente/servidor. Facilidad de implementacin.

N N

Sistemas Operativos II (II-UJI)

51

Procesos e hilos

Tema 2. Procesos e hilos


ndice
I I I I I

SO

II II

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

Procesos en Minix
I

II II

Diagrama de transicin entre estados:


En ejecucin
pick_proc sched unready

Listo

ready

Bloqueado

ready: unready:

Pone el proceso en alguna de las colas de procesos listos del planificador Activa el proceso 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: Pone al final de la cola el proceso de usuario en ejecucin pues ste ha agotado su quantum de CPU
53 Procesos e hilos

Sistemas Operativos II (II-UJI)

SO

Procesos en Minix
I

II II

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; real_time real_time real_time real_time real_time user_time; sys_time; child_utime; child_stime; p_alarm; /* process id passed in from MM*/ /* P_SLOT_FREE, SENDING, RECEIVING, */ /* or 0 if the process is runnable */ /* /* /* /* /* 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 */

Sistemas Operativos II (II-UJI)

54

Procesos e hilos

SO

Procesos en Minix
I

II II

Descriptor de un proceso (cont.):


struct proc *p_callerq; struct proc *p_sendlink; message *p_messbuf; int p_getfrom; stuct proc *p_nextready; int p_pending; } proc[NR_TASKS+NR_PROCS]; /* /* /* /* 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? */

/* pointer to next ready process */ /* bit map for pending signals */

Sistemas Operativos II (II-UJI)

55

Procesos e hilos

Tema 2. Procesos e hilos


ndice
I I I I I I

SO

II II

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
56 Procesos e hilos

Sistemas Operativos II (II-UJI)

SO

Procesos en Linux
I I

II II

Diagrama de transicin entre estado tpico. Bloqueo de un proceso:


N N

Espera a que ocurra un cierto evento 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 Proceso bloqueado e ininterrumplible: G No acepta seales G Puede desbloquearle: Una interrupcin HW Liberacin de un recurso por el que esperaba
57 Procesos e hilos

Sistemas Operativos II (II-UJI)

SO

Procesos en Linux
I

II II

Descriptor de un proceso:
N

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

Procesos en Linux
I

II II

Identificativos del proceso:


pid_t pid_t pid_t uid_t gid_t gid_t pid; pgrp; session; uid,euid; gid,egid; groups[NGROUPS]; /* /* /* /* /* /* 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 */

Sistemas Operativos II (II-UJI)

59

Procesos e hilos

SO

Procesos en Linux
I

II II

Planificacin del proceso:


unsigned long policy; #define SCHED_FIFO #define SCHED_RR #define SCHED_OTHER long counter; /* Tres posibles polticas de planificacin */ 1 2 0 /* Procesos SCHED_OTHER: Tiempo de CPU por consumir */ /* Procesos RR: Valor actual del quantum de CPU (prioridad dinmica) */ /* Procesos RR: Valor inicial del quantum de CPU (prioridad esttica) */

long priority;

Los tiempos de CPU se miden en tics de reloj

Sistemas Operativos II (II-UJI)

60

Procesos e hilos

SO

Procesos en Linux
I

II II

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; /* /* /* /* /* Original parent */ Parent */ Youngest child */ Younger sibling */ Older sibling */

c p_

ptr
p_ tr pp

padre

p_p
p_pptr

ptr

hijo ms joven

p_osptr p_ysptr hijo

p_osptr p_ysptr

hijo ms viejo

Sistemas Operativos II (II-UJI)

61

Procesos e hilos

SO

Procesos en Linux
I

II II

Seales del proceso:


struct sigset_t signal; struct sigset_t blocked; struct sigset_t sigpending; struct signal_struct *sig; /* Mapa de bits /* Mapa de bits /* Mapa de bits y pendientes de seales recibidas */ de seales bloqueadas */ de seales no bloqueadas */

/* 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 */ hijos */ struct wait_queue *wait_chldexit; /* Lista de espera de finalizacin de

Sistemas Operativos II (II-UJI)

62

Procesos e hilos

SO

Procesos en Linux
I

II II

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

unsigned long it_real_value; unsigned long it_prof_value, unsigned long it_virt_value; struct timer_list real_timer;

Temporizador vs. Alarma?

Sistemas Operativos II (II-UJI)

63

Procesos e hilos

SO

Procesos en Linux
I

II II

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; unsigned long start_data, end_data; unsigned long start_stack; ... }; /* 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 */

Sistemas Operativos II (II-UJI)

64

Procesos e hilos

SO

Procesos en Linux
I

II II

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

Procesos en Linux
I

II II

Sistema de ficheros del proceso (cont.):

0 1 2 3 4 5 6
1 1 1

... ...
READ

1 /etc/passwd 2 /usr/castano

WRITE

... ...

READ

Tabla de ficheros del proceso

Tabla de ficheros del sistema

Tabla de inodos

Sistemas Operativos II (II-UJI)

66

Procesos e hilos

SO

Procesos en Linux
I

II II

Lista de procesos preparados:


N

Incluye el proceso en ejecucin

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; struct task_struct *current;


proceso init_task

/* Num. total de procesos listos */ /* Proceso en ejecucin */


proceso B proceso A

next_run prev_run

Sistemas Operativos II (II-UJI)

67

Procesos e hilos

SO

Procesos en Linux
I

II II

Lista de procesos del sistema:


N

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 */ proceso init_task proceso A proceso B

next_task prev_task

Sistemas Operativos II (II-UJI)

68

Procesos e hilos

SO

Procesos en Linux
I

II II

Tabla de procesos:
N

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

69

Procesos e hilos

Tema 2. Procesos e hilos


ndice
I I I I I I I

SO

II II

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

Procesos en Windows NT/2000


I

II II

Caractersticas de un proceso de Windows NT/2000:


N

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

Procesos en Windows NT/2000


I

II II

Objeto tipo proceso:

Tipo del objeto


Atributos del objeto

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.

Servicios del objeto

Sistemas Operativos II (II-UJI)

72

Procesos e hilos

SO

Procesos en Windows NT/2000


I

II II

Objeto tipo proceso (cont.): Atributo ID proceso Acceso Prioridad base Descripcin Valor nico que identifica al proceso Objeto con informacin de seguridad sobre el usuario que gener el objeto Prioridad base de sus hilos

Afinidad del procesador Procesadores en los que se pueden ejecutar sus hilos Lmites de cuotas Tiempo de ejecucin Puertos comunicacin Estado de finalizacin
Sistemas Operativos II (II-UJI)

Cantidad mxima de memoria paginada y no paginada, de tiempo de ejecucin, etc. Tiempo total de ejecucin de todos sus hilos Canal de comunicacin al que enviar un mensaje si un hilo genera una excepcin Motivo de la finalizacin del proceso
Procesos e hilos

73

SO

Procesos en Windows NT/2000


I

II II

Objeto tipo hilo:

Tipo del objeto


Atributos del objeto

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.

Servicios del objeto

Sistemas Operativos II (II-UJI)

74

Procesos e hilos

SO

Procesos en Windows NT/2000


I

II II

Objeto tipo hilo (cont.): Atributo ID hilo Contexto Prioridad dinmica Prioridad base Tiempo de ejecucin Puerto de terminacin Estado de finalizacin Descripcin Valor nico que identifica al hilo Valores de los registros y de otros datos que definen su estado de ejecucin Prioridad de ejecucin en ese instante Lmite inferior de la prioridad dinmica Tiempo de ejecucin transcurrido en modo usuario y en modo supervisor Canal de comunicacin al que enviar un mensaje cuando finaliza Motivo de la finalizacin del subproceso
75 Procesos e hilos

Afinidad del procesador Procesadores en los que se puede ejecutar

Sistemas Operativos II (II-UJI)

SO

Procesos en Windows NT/2000


I

II II

Diagrama de transicin entre estados (de un hilo):


Inicializado
nto Eve

Reinicializar

Finalizado
Finalizacin

Listo
Planificador Expulsar

Bloqueado
lsar Expu
A CPU

Esperar evento

Ejecucin

Alerta

Sistemas Operativos II (II-UJI)

76

Procesos e hilos

SO

Procesos en Windows NT/2000


I

II II

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

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

Procesos en Windows NT/2000


I

II II

Implementacin de procesos e hilos en Windows NT/2000:


Objeto de aceeso Objeto proceso Tabla de objetos Subproceso x Fichero y . . . Seccin z Descripcin del espacio virtual de direccionamiento . . .

Sistemas Operativos II (II-UJI)

78

Procesos e hilos

Tema 2. Procesos e hilos


ndice
I I I I I I I I

SO

II II

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  Planificacin en Minix  Planificacin en Linux  Planificacin en Windows NT/2000

Sistemas Operativos II (II-UJI)

79

Procesos e hilos

SO

El planificador de Minix
I

II II

Sistema de colas multinivel (sin realimentacin) con prioridades expulsivas


+ PRIORIDAD TAREAS PROCESOS SERVIDOR PROCESOS USUARIO FCFS FCFS RR

Se invoca al planificador (rutina pick_proc) cuando:


N N N N

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

El planificador de Minix
I

II II

Implementacin del planificador:


rdy_head[TASK_Q] + PRIORIDAD TAREAS PROCESOS SERVIDOR PROCESOS USUARIO FCFS FCFS RR rdy_head[SERVER_Q] rdy_head[USER_Q]

Sistemas Operativos II (II-UJI)

81

Procesos e hilos

SO

El planificador de Minix
I

II II

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

Planificacin en POSIX
I

II II

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:
N N N

I I

FIFO (FCFS) Round Robin (RR) Otra

Sistemas Operativos II (II-UJI)

83

Procesos e hilos

SO

El planificador de Linux
I

II II

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)

84

Procesos e hilos

SO

El planificador de Linux
I

II II

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


N

Poltica SCHED_OTHER:
G G G

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

El planificador de Linux
I

II II

Algoritmo de planificacin:
N

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: G Aparece otro proceso listo con mayor prioridad G El proceso finaliza 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)

N N

Sistemas Operativos II (II-UJI)

86

Procesos e hilos

SO

El planificador de Linux
I

II II

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

El planificador de Linux
I

II II

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

El planificador de Linux
I

II II

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

El planificador de Linux
I

II II

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

El planificador de Windows NT/2000


I

II II

Prioridad de un hilo:
N N N

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:
N N

Prioridades en tiempo real Prioridades variables

Sistemas Operativos II (II-UJI)

91

Procesos e hilos

SO

El planificador de Windows NT/2000


I

II II

Prioridades en tiempo real:


N N

N N

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

El planificador de Windows NT/2000


I

II II

Prioridades variables:
N N N

Prioridades ms bajas (rango 15..0) Cola RR en cada nivel de prioridad Prioridad inicial del hilo: G Prioridad del proceso + Prioridad base del hilo (-2..+2) 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)

93

Procesos e hilos

SO

El planificador de Windows NT/2000


I

II II

Prioridades variables:
N

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

Prioridad inicial del hilo

Prioridad dinmica del hilo

Sistemas Operativos II (II-UJI)

94

Procesos e hilos

SO

El planificador de Windows NT/2000


I

II II

Algoritmo de planificacin de hilos:


N

. . .

. . . 16

15 Prioridades variables

. . .

14 . . . . . . 0

Sistemas Operativos II (II-UJI)

95

Procesos e hilos

Prioridades en tiempo real

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

NIVEL DE PRIORIDAD 31

Tema 2. Procesos e hilos


ndice
I I I I I I I I I

SO

II II

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

II II

Sistemas Operativos II (II-UJI)

97

Procesos e hilos

SO

Servicios POSIX sobre atributos de hilos


I

II II

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)

98

Procesos e hilos

SO

Servicios POSIX sobre atributos de hilos


I

II II

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)

99

Procesos e hilos

SO

Servicios POSIX sobre atributos de hilos


I

II II

Establecimiento del estado de terminacin:


N

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

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) 100 Procesos e hilos

SO

Servicios POSIX sobre gestin de hilos


I

II II

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

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)

101

Procesos e hilos

SO

Servicios POSIX sobre gestin de hilos


I

II II

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

Identificacin de hilos:
N

Sintaxis:
pthread_t pthread_self(void);

Descripcin: G Devuelve el identificador del hilo que ejecuta la llamada


102 Procesos e hilos

Sistemas Operativos II (II-UJI)

SO

Servicios POSIX sobre gestin de hilos


I

II II

Jerarqua de hilos:
Hilo 1
Hilo principal (main)

pthread_create

pthread_create

pthread_create

Hilo 4
No independiente

Hilo 3

Hilo 2

pthread_exit

pthread_join

pthread_exit
Procesos e hilos

Sistemas Operativos II (II-UJI)

103

SO

Servicios POSIX para gestin de hilos


I

II II

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, exit(0); }

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

Sistemas Operativos II (II-UJI)

104

Procesos e hilos

SO

Servicios POSIX para gestin de hilos


I

II II

Ejemplo 2:
#include <pthread.h> #include <stdio.h> int cont=0; void *hilo(void *arg) { sleep(2); cont=cont+1; printf("Hilo pthread_exit(0); } int main()

Ojo a la exclucin mutua!

(%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


I

II II

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) Procesos e hilos

106

SO

Servicios POSIX para gestin de hilos


I

II II

Ejemplo 3:
#include #include #include #include #include <pthread.h> <stdio.h> <unistd.h> <stdlib.h> <time.h> 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); }

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)

107

Procesos e hilos

SO

Servicios POSIX para gestin de hilos


I

II II

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

SO

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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

...

Proceso 1

...

Proceso 2

...

Proceso 3

...

Proceso 4

...

Proceso 5

...

Proceso 6

...
RR 25 25

Proceso 7

...

Proceso 8

...

...

FIFO 20 20

...

OTHER 50 75

...

RR 0 25

...

FIFO 25 25

...

RR 20 25

...

...

OTHER 20 20

...

FIFO 25 25

...

Sistemas Operativos II (II-UJI)

115

Procesos e hilos

SO

Ejercicios
I

II II

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 P1 1020 P2 50 P4 1025 RR

RR P6 1025

Other FIFO P7 20 P8 1025

RR P3 1025

P5 1025

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

Sistemas Operativos II (II-UJI)

116

Procesos e hilos

SO

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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

Ejercicios
I

II II

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


PROCESO Poltica Prior. Esttica Prior. Dinmica Weight P1 FIFO 50 50 1050 P2 RR 40 30 1040 P3 FIFO 50 50 1050 P4 Other 80 75 75 P5 Other 60 60 60 P6 FIFO 30 30 1030 P7 RR 25 20 1025 P8 FIFO 50 50 1050

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

Ejercicios
I

II II

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, exit(0); }

imprimir, &num);

Sistemas Operativos II (II-UJI)

121

Procesos e hilos

También podría gustarte