Documentos de Académico
Documentos de Profesional
Documentos de Cultura
So Diagram A
So Diagram A
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
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
Procesos e hilos
SO
II
II
ndice
Procesos e hilos
SO
II
II
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.
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
Procesos e hilos
SO
II
II
Concepto de proceso
Qu es un proceso?
Pila
Recursos:
-Procesador
-Zonas de memoria
-Ficheros
-Dispositivos, etc.
Datos
Cdigo
Otros recursos:
-Ficheros abierto
-Dispositivos E/S, etc.
PC
Procesos e hilos
SO
II
II
Concepto de proceso
Jerarqua de procesos:
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
Procesos e hilos
SO
II
II
Concepto de proceso
Procesos e hilos
SO
II
II
Concepto de proceso
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
...
Procesos e hilos
SO
II
II
Concepto de proceso
Grupos de procesos:
10
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
11
Procesos e hilos
SO
II
II
Imagen de memoria:
12
Procesos e hilos
SO
II
II
Registros
generales
Mapa de memoria
del Proceso A
Mapa de memoria
del Proceso B
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
13
Procesos e hilos
SO
II
II
Registros generales
Contador de programa
Puntero de pila
Registro de estado
Registros especiales
14
Procesos e hilos
SO
Mdulo
fuente B
Compilador o
ensamblador
Mdulo
objeto A
Mdulo
objeto B
Otros
objetos
Montador
Objeto
ejecutable
Bibliotecas
del sistema
Cargador
Ejecutable en
memoria
15
Procesos e hilos
II
II
SO
II
II
Imagen de memoria
16
Procesos e hilos
SO
II
II
Imagen de memoria
Memoria
virtual
Memoria
principal
Cdigo
Datos
Pila
Tamao
Disco
Tabla de
pginas
Una tabla de pginas por
proceso
17
Procesos e hilos
SO
II
II
Informacin de identificacin:
18
Procesos e hilos
SO
II
II
Razones de eficiencia
La que se comparte:
19
Procesos e hilos
SO
II
II
Tabla de pginas:
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
21
Procesos e hilos
SO
II
II
Tablas del SO
Tabla de procesos: Tabla con los BCP de los procesos del sistema
22
Procesos e hilos
SO
II
II
Tablas del SO
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
23
Procesos e hilos
SO
II
II
24
Procesos e hilos
SO
II
II
Programas SETUID:
Cambio del bit setuid para el usuario y del bit setgid para el grupo:
-r-x-x-x
-r---x-x
-r-x-x---
25
-r-s--x-x
Bit setuid
-r-S--x-x
Bit setgid
-r-x-s--
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
26
Procesos e hilos
SO
II
II
Estados de un proceso
Ejecucin
CP
U
er
a
ev por
en E
to /S
Ex
p
ul
si
n
U
CP
Exit
Es
p
Listo
27
Bloqueado
Procesos e hilos
SO
II
II
Estados de un proceso
Estados suspendidos:
po
em
i
T
co
um
ns
ido
Listo y
suspendido
Es
pe
o ra p
ev or
en E
to /S
Expulsado al disco
Entra al
sistema
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
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
29
Procesos e hilos
SO
II
II
Formacin de un proceso
Objeto
ejecutable
Biblioteca
sistema
Ca rg a d o r
Mapa de
memoria
Imagen
del proceso
30
Tabla de procesos
BCP
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
31
Procesos e hilos
SO
II
II
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.
32
Procesos e hilos
SO
II
II
Qu es un hilo de ejecucin?
33
Procesos e hilos
SO
II
II
Pila 1
Hilo 1
Pila2
Otros recursos:
-Ficheros abierto
-Dispositivos E/S, etc.
Proceso
Hilo 2
Datos
Cdigo
PC2
PC1
34
Procesos e hilos
SO
II
II
...
...
Hilo j
Espacio de direcciones
...
Otros datos
35
Procesos e hilos
SO
II
II
36
Procesos e hilos
SO
II
II
Proceso
Proceso en ejecucin
Proceso bloqueado
Hilo
Sistemas Operativos II (II-UJI)
37
Procesos e hilos
SO
II
II
Procedimiento 2
F P
Espera
en E/S
Espera
en E/S
Ejecucin
serie
Procedimiento 1
P
Espera
en E/S
Procedimiento 2
P
Ejecucin
paralela
Espera
en E/S
38
Procesamiento
Procesos e hilos
SO
II
II
Hilo distribuidor
Hilo trabajador
Peticiones
Hilos trabajadores:
39
Procesos e hilos
SO
II
II
Sencillo
Prestaciones pobres: permanece bloqueado
40
Procesos e hilos
SO
II
II
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
41
Procesos e hilos
SO
II
II
Concepto de multihilo
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
Tcnica monohilo
Sistemas Operativos II (II-UJI)
Hilo
42
Procesos e hilos
SO
II
II
Implementacin de hilos
Dos categoras:
43
Procesos e hilos
SO
II
II
Biblioteca de hilos
Proceso
Modo usuario
Modo supervisor
44
Procesos e hilos
SO
II
II
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.
45
Procesos e hilos
SO
II
II
Proceso
46
Procesos e hilos
SO
II
II
Ejemplos:
47
Procesos e hilos
SO
II
II
Aproximaciones combinadas
Ejemplo: Solaris
48
Procesos e hilos
SO
II
II
Aproximaciones combinadas
Biblioteca de hilos
Proceso
49
Procesos e hilos
SO
II
II
Modelos multihilo
Relacin de:
Muchos a uno.
Uno a uno.
Muchos a muchos.
HNU:HNN
Descripcin
Ejemplos
M:1
Pthreads POSIX
1:1
M:N
Solaris
50
Procesos e hilos
SO
II
II
Facilidad de implementacin.
51
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Estados de un proceso
Implementacin del descriptor de proceso
52
Procesos e hilos
SO
II
II
Procesos en Minix
pick_proc
sched
Listo
ready
Bloqueado
ready:
unready:
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;
real_time
real_time
real_time
real_time
real_time
/*
/*
/*
/*
/*
user_time;
sys_time;
child_utime;
child_stime;
p_alarm;
54
Procesos e hilos
SO
II
II
Procesos en Minix
/*
/*
/*
/*
} proc[NR_TASKS+NR_PROCS];
55
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
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
SO
II
II
Procesos en Linux
Bloqueo de un proceso:
57
Procesos e hilos
SO
II
II
Procesos en Linux
Descriptor de un proceso:
/*
/*
/*
/*
/*
58
Procesos e hilos
SO
II
II
Procesos en Linux
pid;
pgrp;
session;
uid,euid;
gid,egid;
groups[NGROUPS];
/*
/*
/*
/*
/*
/*
59
Procesos e hilos
SO
II
II
Procesos en Linux
long counter;
long priority;
60
Procesos e hilos
SO
II
II
Procesos en Linux
task_struct
task_struct
task_struct
task_struct
task_struct
*p_opptr;
*p_pptr;
*p_cptr;
*p_ysptr;
*p_osptr;
c
p_
p_
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
/* 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;
62
Procesos e hilos
SO
II
II
Procesos en Linux
/*
/*
/*
/*
63
Procesos e hilos
SO
II
II
Procesos en Linux
64
Procesos e hilos
SO
II
II
Procesos en Linux
/*
/*
/*
/*
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
...
0
1
READ
...
WRITE
READ
5
6
Tabla de ficheros
del proceso
...
...
Tabla de ficheros
del sistema
66
1 /etc/passwd
2 /usr/castano
Tabla de inodos
Procesos e hilos
SO
II
II
Procesos en Linux
int nr_running;
/* Proceso en ejecucin */
procesoinit_task
proceso A
proceso B
next_run
prev_run
67
Procesos e hilos
SO
II
II
Procesos en Linux
proceso A
proceso B
next_task
prev_task
68
Procesos e hilos
SO
II
II
Procesos en Linux
Tabla de procesos:
Operaciones habituales sobre (todos los procesos de) la lista de procesos del
sistema:
69
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
70
Procesos e hilos
SO
II
II
71
Procesos e hilos
SO
II
II
Servicios
del objeto
Atributos
del objeto
Tipo 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.
72
Procesos e hilos
SO
II
II
Descripcin
ID proceso
Acceso
Prioridad base
Tiempo de ejecucin
Puertos comunicacin
Estado de finalizacin
73
Procesos e hilos
SO
II
II
Servicios
del objeto
Atributos
del objeto
Tipo 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.
74
Procesos e hilos
SO
II
II
Descripcin
ID hilo
Contexto
Prioridad dinmica
Prioridad base
Puerto de terminacin
Estado de finalizacin
75
Procesos e hilos
SO
II
II
Finalizado
Finalizacin
nto
Eve
Bloqueado
Esperar evento
Ejecucin
lsar
Expu
Listo
Planificador
Reinicializar
Expulsar
Alerta
A CPU
76
Procesos e hilos
SO
II
II
Alerta:
77
Procesos e hilos
SO
II
II
Objeto
proceso
. . .
Tabla de objetos
Subproceso x
Fichero y
.
.
.
Seccin z
78
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
Planificacin en Minix
Planificacin en Linux
Planificacin en Windows NT/2000
79
Procesos e hilos
SO
II
II
El planificador de Minix
FCFS
TAREAS
PROCESOS
SERVIDOR
FCFS
PROCESOS
USUARIO
RR
Al finalizar un proceso
80
Procesos e hilos
SO
II
II
El planificador de Minix
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
*/
*/
*/
*/
82
Procesos e hilos
SO
II
II
Planificacin en POSIX
Polticas de planificacin:
FIFO (FCFS)
Round Robin (RR)
Otra
83
Procesos e hilos
SO
II
II
El planificador de Linux
Otra (SCHED_OTHER)
84
Procesos e hilos
SO
II
II
El planificador de Linux
Poltica SCHED_OTHER:
85
Procesos e hilos
SO
II
II
El planificador de Linux
Algoritmo de planificacin:
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
87
Procesos e hilos
SO
II
II
El planificador de Linux
88
Procesos e hilos
SO
II
II
El planificador de Linux
89
Procesos e hilos
SO
II
II
El planificador de Linux
90
Procesos e hilos
SO
II
II
Prioridad de un hilo:
Tipos de prioridad:
91
Procesos e hilos
SO
II
II
92
Procesos e hilos
SO
II
II
Prioridades variables:
93
Procesos e hilos
SO
II
II
Prioridades variables:
mayor
+2
+1 encima normal
normal
0
-1 debajo normal
menor
-2
Prioridad
base del
proceso
Prioridad
inicial del
hilo
Prioridad
dinmica
del hilo
94
Procesos e hilos
SO
II
II
NIVEL DE
PRIORIDAD
31
.
.
.
.
.
.
16
Prioridades en
tiempo real
.
.
.
14
.
.
.
.
.
.
Prioridades
variables
15
95
Procesos e hilos
SO
II
II
ndice
Concepto de proceso
Formacin de un proceso
Procesos en Minix
Procesos en Linux
96
Procesos e hilos
SO
97
Procesos e hilos
II
II
SO
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
98
Procesos e hilos
II
II
SO
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
99
Procesos e hilos
II
II
SO
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()
100
Procesos e hilos
II
II
SO
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
101
Procesos e hilos
II
II
SO
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
102
Procesos e hilos
II
II
SO
Jerarqua de hilos:
Hilo 1
No
independiente
pthread_create
pthread_create
pthread_create
Hilo 4
Hilo 3
Hilo 2
pthread_exit
pthread_join
pthread_exit
103
Procesos e hilos
II
II
SO
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);
}
104
Procesos e hilos
II
II
SO
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()
105
Procesos e hilos
SO
Por qu?
106
Procesos e hilos
II
II
SO
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);
}
107
Procesos e hilos
II
II
SO
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?
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.
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);
}
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);
}
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);
}
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.
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.
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
...
...
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
RR
RR
Other FIFO
RR
P1
P2
P4
P5
P6
P7
P8
P3
1020
50
1025
1025
1025
20
1025
1025
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).
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.
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.
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
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