00 Ejercicios resueltos
de Sistemas Operativos
José Ribelles Miguel
José Martínez Sotoca
Pedro García Sevilla
Departament De llenguatges i sistemes informàtics
Codi d’assignatura IG
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
00 Ejercicios resueltos de Sistemas Operativos - UJI
Edita: Publicacions de la Universitat Jaume I. Servei de Comunicació i Publicacions
Campus del Riu Sec. Edifici Rectorat i Serveis Centrals. 07 Castelló de la Plana
http://www.tenda.uji.es e-mail:
[email protected]
Col·lecció Sapientia, 30
www.sapientia.uji.es
ISBN: 978-84-693-048-7
Aquest text està subjecte a una llicència Reconeixement-NoComercial-CompartirIgual de Creative
Commons, que permet copiar, distribuir i comunicar públicament l’obra sempre que especifique
l’autor i el nom de la publicació i sense objectius comercials, i també permet crear obres derivades,
sempre que siguen distribuïdes amb aquesta mateixa llicència.
http://creativecommons.org/licenses/by-nc-sa/.5/es/deed.ca
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
00 Ejercicios resueltos de Sistemas Operativos - UJI
.
.
.
.
.
.
.
.
. . . . . . . . . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . . . . . . . . . . . . .
.
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. .
15
15
19
1
1
8
13
´Indice general
´Indice general
Prefacio
1. Procesos e Hilos
.
.
.
.
1.1. Procesos .
.
1. Procesos e Hilos
1.2. Planificaci´on .
.
.
1.3. Hilos .
.
.
.
.
.
1.1. Procesos .
.
.
1.2. Planificaci´on .
.
1.3. Hilos .
.
2.1. Tuber´ıas .
.
.
.
2.2. Sem´aforos .
.
.
.
.
.
.
.
.
.
.
.
.
2. Comunicaci´on y Sincronizaci´on de Procesos
2. Comunicaci´on y Sincronizaci´on de Procesos
3. Gesti´on de Archivos y Directorios
2.1. Tuber´ıas .
.
3.1. Sistemas de Archivos . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Sem´aforos .
3.2. Archivos y Directorios
. . . . . . . .
.
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
29
29
31
.
.
. .
3. Gesti´on de Archivos y Directorios
4. Gesti´on de Memoria
.
3.1. Sistemas de Archivos . . . . . . . . . . . . . . . . . . . . . . . .
4.1. Paginaci´on .
. . . . . . . . . . . . . . . . . . . . . . . .
3.2. Archivos y Directorios
. . . . . . . . . . . . . . . . . . . . . . .
4.2. Pol´ıticas de Reemplazo . . . . . . . . . . . . . . . . . . . . . . .
35
35
36
.
.
.
.
4. Gesti´on de Memoria
5. Ejercicios Generales
4.1. Paginaci´on .
. . . . . . . . . . . . . . . . . . . . . . . . . .
.
4.2. Pol´ıticas de Reemplazo . . . . . . . . . . . . . . . . . . . . . . .
6. Soluciones
39
57
.
.
5. Ejercicios Generales
6. Soluciones
4
6
1
6
1
13
8
18
13
15
20
20
15
24
19
29
33
33
29
35
31
35
38
38
35
39
36
39
41
58
57
V
V
3
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
00 Ejercicios resueltos de Sistemas Operativos - UJI
Prefacio
Los Sistemas Operativos han constituido tradicionalmente una materia troncal
en los planes de estudio de todas las titulaciones de Inform´atica. Las asignaturas
que desarrollan estos contenidos incluyen aspectos te´oricos fundamentales como
procesos e hilos, gesti´on de memoria, comunicaci´on, sincronizaci´on y sistemas de
archivos. Adem´as, es frecuente incluir una parte pr´actica que permite que el alumno
conozca no s´olo los principios te´oricos, sino tambi´en c´omo se aplican en sistemas
operativos reales.
El objetivo de este libro es proporcionar suficiente material pr´actico para apo-
yar la docencia, tanto presencial, desarrollada en clases de problemas o en labo-
ratorio, como no presencial, proporcionando al estudiante un material de apoyo al
estudio de un nivel y contenido adecuado a una asignatura real.
En concreto, las cuestiones, ejercicios y problemas que se recogen en este li-
bro son el resultado de su recopilaci´on a lo largo de cuatro cursos, desde el a˜no
2004, del material utilizado en la asignatura de Sistemas Operativos de la Inge-
nier´ıa T´ecnica en Inform´atica de Gesti´on de la Universitat Jaume I de Castell´on.
Dicha asignatura se estructura en 3 cr´editos de teor´ıa, 1,5 cr´editos de problemas y
1,5 cr´editos de laboratorio. No obstante, el material incluido es bastante gen´erico
y puede ser empleado en cualquier asignatura b´asica de Sistemas Operativos.
El contenido de este libro se divide en 6 cap´ıtulos cuya descripci´on se indica a
continuaci´on:
1. Gesti´on de Procesos e Hilos: planificaci´on de procesos, jerarqu´ıa de procesos
y uso de las llamadas al sistema para la gesti´on de procesos e hilos.
2. Comunicaci´on y Sincronizaci´on de Procesos: problemas cl´asicos de la sec-
ci´on cr´ıtica, productor-consumidor y lector-escritor; y llamadas al sistema
para el manejo de sem´aforos y tuber´ıas.
3. Gesti´on de Archivos y Directorios: sistemas de archivos tipo FAT y nodo-i,
llamadas al sistema para la gesti´on de archivos y directorios.
4. Gesti´on de Memoria: memoria virtual, paginaci´on y pol´ıticas de reemplazo.
5. Problemas generales: problemas cuya resoluci´on incluya conceptos tratados
en varios de los cap´ıtulos anteriores.
III
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
4
00 Ejercicios resueltos de Sistemas Operativos - UJI
6. Soluciones: en este cap´ıtulo se encuentran las soluciones a los ejercicios
planteados en todos los cap´ıtulos anteriores.
Se ha creado la p´agina Web http://ig11.uji.es como apoyo a este ma-
terial, para mantenerlo actualizado incluyendo m´as ejercicios, p´aginas de ayuda, fe
de erratas, etc.
Por ´ultimo, no queremos dejar de expresar nuestro agradecimiento a los pro-
fesores Gustavo Casa˜n, Isabel Gracia y Antonio Castellanos, todos ellos del De-
partamento de Lenguajes y Sistemas Inform´aticos de la Universitat Jaume I, que
tambi´en han participado en la impartici´on de la asignatura durante otros cursos y,
como no, en la elaboraci´on de algunos de los ejercicios propuestos de este libro.
Marzo, 2010
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
5
00 Ejercicios resueltos de Sistemas Operativos - UJI
Cap´ıtulo 1
Procesos e Hilos
1.1. Procesos
1. Observa el siguiente c´odigo y escribe la jerarqu´ıa de procesos resultante.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char ∗argv[]) {
int num;
pid t pid;
for (num= 0; num< 3; num++) {
pid= fork();
printf ("Soy el proceso de PID %d y mi padre tiene %d de PID.\n",
if (pid!= 0)
getpid(), getppid());
break;
srandom(getpid());
sleep (random() %3);
}if (pid!= 0)
printf ("Fin del proceso de PID %d.\n", wait (NULL));
return 0;
}
Ahora compila y ejecuta el c´odigo para comprobarlo. Contesta a las siguien-
tes preguntas:
¿Por qu´e aparecen mensajes repetidos?
Presta atenci´on al orden de terminaci´on de los procesos,
• ¿qu´e observas?
• ¿por qu´e?
1
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
6
00 Ejercicios resueltos de Sistemas Operativos - UJI
2. Observa el siguiente c´odigo y escribe la jerarqu´ıa de procesos resultante.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char ∗argv[]) {
int num;
pid t pid;
srandom(getpid());
for (num= 0; num< 3; num++) {
pid= fork();
printf ("Soy el proceso de PID %d y mi padre tiene %d de PID.\n",
if (pid== 0)
getpid(), getppid());
break;
}if (pid== 0)
sleep(random() %5);
else
for (num= 0; num< 3; num++)
printf ("Fin del proceso de PID %d.\n", wait (NULL));
return 0;
}
Ahora compila y ejecuta el c´odigo para comprobarlo. Presta atenci´on al or-
den de terminaci´on de los procesos, ¿qu´e observas? ¿por qu´e?
3. Dibuja la estructura del ´arbol de procesos que obtendr´ıamos al ejecutar el
siguiente fragmento de c´odigo:
for (num= 0; num< 2; num++) {
nuevo= fork();
if (nuevo== 0)
/∗ 1 ∗/
break;
}nuevo= fork();
nuevo= fork();
printf("Soy el proceso %d y mi padre es %d\n", getpid(), getppid());
/∗ 2 ∗/
/∗ 3 ∗/
4. Considerando el siguiente fragmento de c´odigo:
for (num= 1; num<= n; num++){
nuevo= fork();
if ((num== n) && (nuevo== 0))
execlp ("ls", "ls", "-l", NULL);
}
a) Dibuja la jerarqu´ıa de procesos generada cuando se ejecuta y n es 3.
b) Indica en qu´e procesos se ha cambiado la imagen del proceso usando
la funci´on execlp.
2
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-048-7
7
00 Ejercicios resueltos de Sistemas Operativos - UJI
5. Dibuja la jerarqu´ıa de procesos que resulta de la ejecuci´on del siguiente c´odi-
go. Indica para cada nuevo proceso el valor de las variables i y j en el mo-
mento de su creaci´on.
for (i= 0; i< 2; i++) {
pid= getpid();
for (j= 0; j< i+2; j++) {
nuevo= fork();
if (nuevo!= 0) {
/∗ 1 ∗/
nuevo= fork(); /∗ 2 ∗/
break;
}
}if (pid!= getpid())
break;
}
6. Estudia el siguiente c´odigo y escribe la jerarqu´ıa de procesos resultante. Des-
pu´es, compila y ejecuta el c´odigo para comprobarlo (deber´as a˜nadir llamadas
al sistema getpid, getppid y wait para conseguirlo).
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define L1 2
#define L2 3
int main (int argc, char ∗argv[]) {
int cont1, cont2;
pid t pid;
for (cont2= 0; cont2< L2; cont2++) {
for (cont1= 0; cont1< L1; cont1++) {
pid= fork();
if (pid== 0)
break;
}if (pid!= 0)
break;
}return 0;
}
7. Dibuja la jerarqu´ıa de procesos que resulta de la ejecuci´on del siguiente c´odi-
go. Introduce las llamadas al sistema wait para que una vez generado el ´arbol
de procesos los hijos sean esperados por sus respectivos padres. Adem´as,
haz q
Comentarios de: 100 ejercicios resueltos de sistemas operativos (1)