SlideShare una empresa de Scribd logo
1 de 140
Descargar para leer sin conexión
100 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 IG11

J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 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. 12071 Castelló de la Plana
http://www.tenda.uji.es	 e-mail: publicacions@uji.es
Col·lecció Sapientia, 30
www.sapientia.uji.es
ISBN: 978-84-693-0148-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/2.5/es/deed.ca

J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 Ejercicios resueltos de Sistemas Operativos - UJI
´
Indice general

´
Indice general
Prefacio	

	

1. Procesos e Hilos
1.1. Procesos . . . . .
o
1. 1.2. Planificaci´ n . .
Procesos e Hilos
1.3. Hilos . . . .. . . . ..
1.1. Procesos

	
.
.
..

	
.
.
..

.
.
.
.

.
.
..

	

. . . . .
. . . . .
.. .. . . . ..

.
.
..

	
.
.
..

.
.
.
.

.
.
..

1.2. Planificaci´ n . . . . . . . . . . . .
o

. . . . .
. . . . .
.. .. . . . ..

	
.
.
..

	

.
.
..

.
.
.
.

.
.
..

4

	

1
. . . .
1
6
. . . .
8
.. .. . . . . . 13 . . 6
.

1
1
. . . . . . . . . . . . . 15 . . 13 8
.
. .. . . . .. .. .. . .. .. .. . . . . . 15 . . 1813
.
.
.

2. Comunicaci´ n y Sincronizaci´ n de Procesos
o
o
1.3. Tuber´as. .. .. . . . .. .. .. . .. .. .. . . . .. .. .. . ..
Hilos
2.1.
ı
.
.
2.2. Sem´ foros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a

19

3.2. Archivos y Directorios . . . . . . . . . . . . . . . . . . . . . . .

31

2. Comunicaci´ n y Sincronizaci´ n de Procesos
o
o
2015
3. Gesti´ n de Archivos y Directorios . . . . . . . . . . . . . . . . . . . 29 . . 2015
2.1. o Tuber´as . . . . . . . . .
ı
.
3.1. Sistemas de Archivos . .. .. .. . . . .. .. .. . .. .. .. . . . .. .. .. . .. .. .. . . . . . 29 . . 2419
.
.
.
2.2. Sem´ foros . . . .
a
.
3. Gesti´ n de Archivos y Directorios
o

4. Gesti´ n de Memoria
o
3.1. Sistemas de Archivos . . . .
4.1. Paginaci´ n . . . . . . . . . . . . .
o
3.2. Pol´ticas de y Directorios. .. . . . ..
Archivos Reemplazo .
4.2.
ı

.
.
..

.
.
..

4. Gesti´ n Generales
o
5. Ejerciciosde Memoria

.
.
.
.

. . . . . . . . .

. . . . . . . . . .
.. .. .. . . . .. .. .. . ..
.

29

33
35
. . . . . . . . 3329
. . . . 35
.
.. .. . . . . . 36 . . 3531

3835
4.1. Paginaci´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3835
o
6. Solucionesıticas de Reemplazo . . . . . . . . . . . . . . . . . . . . 57 . .
4.2. Pol´
.
3936
39

5. Ejercicios Generales

4139

6. Soluciones

5857

V

V
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 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´ tica. Las asignaturas
a
que desarrollan estos contenidos incluyen aspectos te´ ricos fundamentales como
o
procesos e hilos, gesti´ n de memoria, comunicaci´ n, sincronizaci´ n y sistemas de
o
o
o
archivos. Adem´ s, es frecuente incluir una parte pr´ ctica que permite que el alumno
a
a
conozca no s´ lo los principios te´ ricos, sino tambi´ n c´ mo se aplican en sistemas
o
o
e o
operativos reales.
El objetivo de este libro es proporcionar suficiente material pr´ ctico para apoa
yar la docencia, tanto presencial, desarrollada en clases de problemas o en laboratorio, 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 libro son el resultado de su recopilaci´ n a lo largo de cuatro cursos, desde el a˜ o
o
n
2004, del material utilizado en la asignatura de Sistemas Operativos de la Ingenier´a T´ cnica en Inform´ tica de Gesti´ n de la Universitat Jaume I de Castell´ n.
ı e
a
o
o
Dicha asignatura se estructura en 3 cr´ ditos de teor´a, 1,5 cr´ ditos de problemas y
e
ı
e
1,5 cr´ ditos de laboratorio. No obstante, el material incluido es bastante gen´ rico
e
e
y puede ser empleado en cualquier asignatura b´ sica de Sistemas Operativos.
a
El contenido de este libro se divide en 6 cap´tulos cuya descripci´ n se indica a
ı
o
continuaci´ n:
o
1. Gesti´ n de Procesos e Hilos: planificaci´ n de procesos, jerarqu´a de procesos
o
o
ı
y uso de las llamadas al sistema para la gesti´ n de procesos e hilos.
o
2. Comunicaci´ n y Sincronizaci´ n de Procesos: problemas cl´ sicos de la seco
o
a
ci´ n cr´tica, productor-consumidor y lector-escritor; y llamadas al sistema
o
ı
para el manejo de sem´ foros y tuber´as.
a
ı
3. Gesti´ n de Archivos y Directorios: sistemas de archivos tipo FAT y nodo-i,
o
llamadas al sistema para la gesti´ n de archivos y directorios.
o
4. Gesti´ n de Memoria: memoria virtual, paginaci´ n y pol´ticas de reemplazo.
o
o
ı
5. Problemas generales: problemas cuya resoluci´ n incluya conceptos tratados
o
en varios de los cap´tulos anteriores.
ı
III
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 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´ gina Web http://ig11.uji.es como apoyo a este maa
terial, para mantenerlo actualizado incluyendo m´ s ejercicios, p´ ginas de ayuda, fe
a
a
de erratas, etc.
´
Por ultimo, no queremos dejar de expresar nuestro agradecimiento a los profesores Gustavo Casa˜ , Isabel Gracia y Antonio Castellanos, todos ellos del Den
partamento de Lenguajes y Sistemas Inform´ ticos de la Universitat Jaume I, que
a
tambi´ n han participado en la impartici´ n de la asignatura durante otros cursos y,
e
o
como no, en la elaboraci´ n de algunos de los ejercicios propuestos de este libro.
o
Marzo, 2010

J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 Ejercicios resueltos de Sistemas Operativos - UJI
Cap´tulo 1
ı

Procesos e Hilos
1.1.

Procesos

1. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante.
o
ı
#include
#include
#include
#include
#include

sys/types.h
sys/wait.h
unistd.h
stdio.h
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,
getpid(), getppid());
if (pid!= 0)
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´ digo para comprobarlo. Contesta a las siguieno
tes preguntas:
¿Por qu´ aparecen mensajes repetidos?
e
Presta atenci´ n al orden de terminaci´ n de los procesos,
o
o
• ¿qu´ observas?
e
• ¿por qu´ ?
e
1
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 Ejercicios resueltos de Sistemas Operativos - UJI
2. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante.
o
ı
#include
#include
#include
#include
#include

sys/types.h
sys/wait.h
unistd.h
stdio.h
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,
getpid(), getppid());
if (pid== 0)
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´ digo para comprobarlo. Presta atenci´ n al oro
o
den de terminaci´ n de los procesos, ¿qu´ observas? ¿por qu´ ?
o
e
e
´
3. Dibuja la estructura del arbol de procesos que obtendr´amos al ejecutar el
ı
siguiente fragmento de c´ digo:
o
for (num= 0; num 2; num++) {
nuevo= fork(); /∗ 1 ∗/
if (nuevo== 0)
break;
}
nuevo= fork();
/∗ 2 ∗/
nuevo= fork();
/∗ 3 ∗/
printf(Soy el proceso %d y mi padre es %dn, getpid(), getppid());

4. Considerando el siguiente fragmento de c´ digo:
o
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´ procesos se ha cambiado la imagen del proceso usando
e
la funci´ n execlp.
o
2
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 Ejercicios resueltos de Sistemas Operativos - UJI
5. Dibuja la jerarqu´a de procesos que resulta de la ejecuci´ n del siguiente c´ diı
o
o
go. Indica para cada nuevo proceso el valor de las variables i y j en el momento de su creaci´ n.
o
for (i= 0; i 2; i++) {
pid= getpid();
for (j= 0; j i+2; j++) {
nuevo= fork();
/∗ 1 ∗/
if (nuevo!= 0) {
nuevo= fork(); /∗ 2 ∗/
break;
}
}
if (pid!= getpid())
break;
}

6. Estudia el siguiente c´ digo y escribe la jerarqu´a de procesos resultante. Deso
ı
pu´ s, compila y ejecuta el c´ digo para comprobarlo (deber´ s a˜ adir llamadas
e
o
a n
al sistema getpid, getppid y wait para conseguirlo).
#include
#include
#include
#include
#include

sys/types.h
sys/wait.h
unistd.h
stdio.h
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´ n del siguiente c´ diı
o
o
´
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´ s,
a
haz que se informe de los tiempos de ejecuci´ n de las aplicaciones xload y
o
kcalc que se generen as´ como del tiempo total de ejecuci´ n. Para calcular el
ı
o
tiempo transcurrido, puedes utilizar la funci´ n time() de la librer´a est´ ndar
o
ı
a
time.h. La llamada time(NULL) devuelve los segundos transcurridos desde
las 00:00:00 del 1/1/1970 hasta el instante de la llamada.

3
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 Ejercicios resueltos de Sistemas Operativos - UJI
int main (int argc, char ∗argv[]) {
int i, j;
pid t pid, nuevo, nuevo1;
time t ini, fin;
for (i= 0; i 2; i++){
pid= getpid();
for (j= 0; j i+2; j++){
nuevo= fork();
if(nuevo== 0){
break;
nuevo1= fork();
if(nuevo1== 0)
execlp (xload, xload, NULL);
}
}
if (pid!= getpid())
execlp (kcalc, kcalc, NULL);
}
return 0;
}

´
8. Escribe un programa que genere un arbol de procesos similar al que apa´
rece en la figura 1.1. Los valores de profundidad y anchura del arbol ser´ n
a
dados como par´ metros de entrada por el usuario en cada ejecuci´ n. En el
a
o
ejemplo, se considera que la profundidad es 5 y la anchura 3. Tu programa
podr´ empezar, por ejemplo, de la siguiente manera:
a
#include stdio.h
#include unistd.h
#include stdlib.h
int main (int argc, char ∗argv[]) {
int i;
int prof, anch;
if (argc!= 3) exit(0);
profundidad= atoi(argv[1]); /∗ profundidad ∗/
anchura=
atoi(argv[2]); /∗ anchura
∗/
/∗ completar aqu´ ∗/
ı
printf(Soy el proceso %d y mi padre es %dn, getpid(), getppid());
sleep (2);
return 0;
}

´
Modifica el programa anterior para que la expansi´ n en anchura del arbol se
o
produzca s´ lo en aquellos niveles de profundidad par (y distinta de cero). En
o
la figura 1.2 se muestra un ejemplo.
9. Escribe el fragmento de c´ digo que genera la jerarqu´a de procesos que se
o
ı
muestra en la figura 1.3 para profundidad n.
4
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7



100 Ejercicios resueltos de Sistemas Operativos - UJI
´
Figura 1.1: Arbol de profundidad 5 y anchura 3.

´
Figura 1.2: Arbol de profundidad 5 y anchura 3, que s´ lo
o
se expande en anchura para
los niveles pares distintos de
cero.

Figura 1.3: Jerarqu´a de procesos con profundidad n = 3.
ı
10. Observa el siguiente fragmento de c´ digo que trata de medir el tiempo de
o
ejecuci´ n del programa prueba.exe. Indica qu´ problemas se producen, por
o
e
qu´ y c´ mo resolverlos.
e o
time t inicio= 0, fin= 0;
if (fork()!= 0) {
wait (NULL);
fin= time (NULL);
printf (Tiempo empleado: %ldn, fin-inicio);
} else {
inicio= time (NULL);
execlp (prueba.exe, prueba.exe, NULL);
}

11. El programa siguiente pretende lanzar a ejecuci´ n una calculadora, kcalc, y
o
otra aplicaci´ n, xload, utilizando dos llamadas al sistema execlp consecutio
vas. Antes de compilar y ejecutar el programa, piensa qu´ va a ocurrir.
e
#include
#include
#include
#include
#include

sys/types.h
sys/wait.h
unistd.h
stdio.h
stdlib.h

5
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

10

100 Ejercicios resueltos de Sistemas Operativos - UJI
int main (int argc, char ∗argv[]) {
execlp
printf
execlp
printf
return

(kcalc, kcalc, NULL);
(¿Se imprimira este mensaje?n);
(xload, xload, NULL);
(¿Y este otro?n);
0;

}

Ahora, comp´lalo y ejecut´ lo y observa qu´ ocurre. ¿Has acertado? ¿Sabes
ı
a
e
por qu´ ? Modif´calo para que el usuario vea las dos aplicaciones al mismo
e
ı
tiempo. Haz adem´ s que el proceso principal espere a la finalizaci´ n de ama
o
bas aplicaciones e informe de la finalizaci´ n de cada una especificando si
o
termin´ kcalc o xload.
o
12. A˜ ade al programa resultado del problema 11 el c´ lculo del tiempo que cada
n
a
uno de los procesos ha estado en ejecuci´ n, incluido el proceso padre, y sea
o
el proceso padre el que informe de ellos antes de finalizar.
13. Escribe un programa en C que pida por teclado dos cadenas de caracteres y
despu´ s escriba cada cadena por pantalla car´ cter a car´ cter. La escritura de
e
a
a
cada cadena deber´ hacerla un proceso diferente. Recuerda utilizar la funci´ n
a
o
fflush despu´ s de escribir cada car´ cter. El proceso padre deber´ esperar a
e
a
a
que termine el proceso hijo. Obtendr´ s resultados interesantes si despu´ s de
a
e
escribir cada car´ cter introduces un retardo aleatorio para simular que su
a
escritura consume un cierto tiempo.
14. El siguiente programa en C lee repetidamente por teclado el nombre de un
programa a ejecutar y pregunta si se debe esperar a que termine la ejecuci´ n
o
del mismo. El programa termina de ejecutarse cuando el usuario introduce
como programa a ejecutar salir.
#include stdio.h
#include string.h
#include stdbool.h
int main (int argc, char ∗argv[]) {
bool fin= false;
char nombre prog[50], esperar[5];
while (!fin) {
printf (Programa: ); scanf ( %s, nombre prog);
if (strcmp(nombre prog, salir)!=0) {
printf (Esperar? ); scanf ( %s, esperar);
/∗ completar aqu´ ∗/
ı
}
else
fin= true;
}
return 0;
}

6
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

11

100 Ejercicios resueltos de Sistemas Operativos - UJI
Realiza las modificaciones oportunas para que el programa cree un nuevo
proceso que se encargue de ejecutar el programa indicado. Se debe utilizar
la variable PATH para buscar el programa a ejecutar. Si dicho programa no
se pudiese ejecutar por cualquier motivo, se deber´ mostrar un mensaje de
a
error e informar al usuario del valor actual de la variable PATH. En cualquier
caso, el proceso inicial esperar´ o no la finalizaci´ n del programa dado en
a
o
funci´ n de lo que el usuario haya indicado. Cuando no se espere la finalizao
ci´ n del programa dado, se debe indicar el identificador del proceso creado.
o
Para comprobar el correcto funcionamiento de este programa se aconseja escribir otro programa que muestre por pantalla los n´ meros del 1 al 20 con
u
´
un intervalo de 1 segundo entre cada n´ mero. Pide que sea este el programa
u
que se ejecute, unas veces esperando su finalizaci´ n y otras no.
o
15. El siguiente programa recibe como par´ metro de entrada un n´ mero entero
a
u
y muestra como resultado su factorial.
#include stdio.h
#include stdlib.h
#include unistd.h
long long int factorial (int n) {
long long int resultado= 1;
int num;
for (num= 2; num= n; num++) {
resultado= resultado∗ num;
printf (Factorial de %d, resultado parcial %lldn, n, resultado);
sleep (random() %3);
}
return resultado;
}
int main (int argc, char ∗argv[]) {
if (argc== 2)
printf (El factorial de %s es %lldn,
argv[1], factorial (atoi (argv[1])));
return 0;
}

a) Escr´belo, comp´lalo y ejec´ talo para comprobar su funcionamiento.
ı
ı
u
b) Escribe un nuevo programa que reciba dos n´ meros enteros como par´ meu
a
tros de entrada y cree dos procesos de manera que cada uno calcule el
factorial de uno de los n´ meros, de forma concurrente, y utilizando el
u
fichero ejecutable obtenido en el apartado anterior.
´
c) Haz que el proceso padre sea el ultimo en terminar, es decir, que espere
a la terminaci´ n de sus procesos hijos.
o
16. Generaliza la soluci´ n del problema 15 de manera que no est´ limitado a 2
o
e
el n´ mero de factoriales a calcular. Procede de la siguiente manera:
u
7
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

12

100 Ejercicios resueltos de Sistemas Operativos - UJI
a) Crea un proceso por cada factorial a calcular, y que todos los procesos
se ejecuten de forma concurrente.
b) El proceso padre deber´ esperar a todos los procesos hijos y mostrar un
a
mensaje a medida que vayan terminando indicando el PID del proceso
finalizado.
c) Modif´calo para que no se imprima mensaje cuando el primer proceso
ı
hijo finalice, pero si para los dem´ s.
a
17. Escribe un programa, al que llamar´ s tiempo.c, cuyo objetivo es lanzar a ejea
´
cuci´ n un segundo programa que ser´ indicado en la l´nea de ordenes (junto
o
a
ı
con sus argumentos) como por ejemplo: $ tiempo ls -R -l /tmp. Adem´ s, haz
a
que se contabilice de forma aproximada el tiempo que tarda en ejecutarse el
segundo programa.

1.2.

Planificaci´ n
o

Para la realizaci´ n de los siguientes ejercicios ten en cuenta que:
o
La simulaci´ n comienza siempre con una interrupci´ n de reloj.
o
o
Cuando un proceso cambia su estado de bloqueado a listo, y si en el enunciado no se indica nada al respecto, el proceso se situar´ siempre al final de
a
la cola de espera.
18. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 4 unidades de tiempo.
o
Las rutinas de tratamiento de las interrupciones hardware y de la interrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamieno
to de la interrupci´ n software consume 2 unidades de tiempo.
o
Existen dos dispositivos de entrada/salida sobre los que se pueden realizar operaciones en paralelo.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo 1
a
o
(IH1)
- Nivel 1: Interrupci´ n de reloj (IR)
o
- Nivel 2: Interrupci´ n hardware del dispositivo 2 (IH2)
o
- Nivel 3 (menos prioritario): Interrupci´ n software (IS)
o
Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia
cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa
cesos es el siguiente:
8
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

13

100 Ejercicios resueltos de Sistemas Operativos - UJI
Proc A

CPU (2ut.)

E/S D1 (2ut.)

CPU (3ut.)

Proc B

CPU (5ut.)

E/S D1 (1ut.)

E/S D2 (5ut.)

CPU (1ut)

CPU (1ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S
e
est´ n siendo utilizados.
a
19. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 5 unidades de tiempo.
o
Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo
ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento
o
de la interrupci´ n software consume 2 unidades de tiempo.
o
Existe un dispositivo de entrada/salida sobre el que se pueden realizar
operaciones en paralelo con la CPU.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de
a
o
E/S (IH)
- Nivel 1: Interrupci´ n de reloj (IR)
o
- Nivel 2 (menos prioritario): Interrupci´ n software (IS)
o
Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia
cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa
cesos es el siguiente:
Proc A

CPU (3ut.)

E/S (3ut.)

CPU (2ut.)

Proc B

CPU (8ut.)

E/S (1ut.)

E/S (1ut.)

CPU (1ut.)

CPU (1ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S
e
est´ n siendo utilizados.
a
20. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 4 unidades de tiempo.
o
Las rutinas de tratamiento de las interrupciones hardware y de la interrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamieno
to de la interrupci´ n software consume 2 unidades de tiempo.
o
Existen un dispositivo de entrada/salida sobre el que se pueden realizar
operaciones en paralelo con la CPU.
9
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

14

100 Ejercicios resueltos de Sistemas Operativos - UJI
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de
a
o
E/S (IH)
- Nivel 1: Interrupci´ n de reloj (IR)
o
- Nivel 2 (menos prioritario): Interrupci´ n software (IS)
o
Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia
cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa
cesos es el siguiente:
Proc A

CPU (6ut.)

E/S (1ut.)

CPU (2ut.)

Proc B

CPU (2ut.)

E/S (6ut.)

CPU (3ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S
e
est´ n siendo utilizados.
a
21. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 4 unidades de tiempo.
o
Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo
ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento
o
de la interrupci´ n software consume 1 unidad de tiempo.
o
Existe un dispositivo de entrada/salida sobre el que se pueden realizar
operaciones en paralelo con la CPU.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de
a
o
E/S (IH)
- Nivel 1: Interrupci´ n de reloj (IR)
o
- Nivel 2 (menos prioritario): Interrupci´ n software (IS)
o
Existen tres procesos A, B y C que est´ n listos para ejecutar, y que, inia
cialmente, ser´ n atendidos en ese orden. El modelo que siguen estos tres
a
procesos es el siguiente:
Proc A

CPU (3ut.)

Proc B

CPU (6ut.)

Proc C

CPU (3ut.)

E/S (10ut.)

CPU (4ut.)

E/S (4ut.)

CPU (1ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo teniendo en cuenta que cuando un proceso pasa de bloqueado a listo
se sit´ a al principio de la cola de espera. Indica tambi´ n aquellos instantes
u
e
en los que los dispositivos de E/S est´ n siendo utilizados.
a
10
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

15

100 Ejercicios resueltos de Sistemas Operativos - UJI
22. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 4 unidades de tiempo.
o
Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo
ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento
o
de la interrupci´ n software consume 2 unidades de tiempo.
o
Existe un dispositivo de entrada/salida sobre el que se pueden realizar
operaciones en paralelo con la CPU.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de
a
o
E/S (IH)
- Nivel 1: Interrupci´ n de reloj (IR)
o
- Nivel 2 (menos prioritario): Interrupci´ n software (IS)
o
Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia
cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa
cesos es el siguiente:
Proc A

CPU (3ut.)

Proc B

E/S (1ut.)

CPU (1ut.)

E/S (1ut.)

CPU (1ut.)

CPU (4ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S
e
est´ n siendo utilizados.
a
23. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 4 unidades de tiempo.
o
Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo
ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento
o
de la interrupci´ n software consume 1 unidad de tiempo.
o
Existe un dispositivo de entrada/salida sobre el que se pueden realizar
operaciones en paralelo con la CPU.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de
a
o
E/S (IH)
- Nivel 1: Interrupci´ n de reloj (IR)
o
- Nivel 2 (menos prioritario): Interrupci´ n software (IS)
o
11
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

16

100 Ejercicios resueltos de Sistemas Operativos - UJI
Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia
cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa
cesos es el siguiente:
Proc A

CPU (14ut.)

Proc B

CPU (2ut.)

E/S (1ut.)

CPU (1ut.)

E/S (1ut.)

CPU (1ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S
e
est´ n siendo utilizados.
a
24. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
La interrupci´ n de reloj se produce cada 4 unidades de tiempo.
o
Las rutinas de tratamiento de las interrupciones hardware y de la interrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamieno
to de la interrupci´ n software consume 2 unidades de tiempo.
o
Existen dos dispositivos de entrada/salida sobre los que se pueden realizar operaciones en paralelo.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo 1
a
o
(IH1)
- Nivel 1: Interrupci´ n hardware del dispositivo 2 (IH2)
o
- Nivel 2: Interrupci´ n de reloj (IR)
o
- Nivel 3 (menos prioritario): Interrupci´ n software (IS)
o
Existen tres procesos A, B y C que est´ n listos para ejecutar en ese mismo
a
orden. El modelo que siguen estos dos procesos es el siguiente:
Proc A

CPU (1ut.)

E/S D1 (8ut.)

CPU (1ut.)

Proc B

CPU (2ut.)

E/S D2 (2ut.)

CPU (7ut.)

Proc C

CPU (4ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo teniendo en cuenta adem´ s que cuando los procesos pasan de bloa
queados a listos se sit´ an al principio de la cola de espera. Indica tambi´ n
u
e
aquellos instantes en los que los dispositivos de E/S est´ n siendo utilizados.
a
25. Considera un sistema con las siguientes caracter´sticas:
ı
Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum
o
de dos interrupciones de reloj.
12
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

17

100 Ejercicios resueltos de Sistemas Operativos - UJI
La interrupci´ n de reloj se produce cada 5 unidades de tiempo.
o
Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo
ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento
o
de la interrupci´ n software consume 1 unidad de tiempo.
o
Existe un dispositivo de entrada/salida sobre el que se pueden realizar
operaciones en paralelo con la CPU.
Los niveles de prioridad de las interrupciones son:
- Nivel 0 (m´ s prioritario): Interrupci´ n de reloj (IR)
a
o
- Nivel 1: Interrupci´ n hardware del dispositivo de E/S (IH)
o
- Nivel 2 (menos prioritario): Interrupci´ n software (IS)
o
Existen tres procesos A, B y C que est´ n listos para ejecutar en ese mismo
a
orden. El modelo que siguen estos tres procesos es el siguiente:
Proc A

CPU (15ut.)

Proc B

CPU (2ut.)

E/S (1ut.)

CPU (3ut.)

Proc C

CPU (1ut.)

E/S (6ut.)

CPU (4ut.)

Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de
e
o
a
tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S
e
est´ n siendo utilizados.
a

1.3.

Hilos

26. Modifica el programa que se ilustra en el enunciado del problema 15 de manera que reciba dos n´ meros enteros como par´ metros de entrada y calcule
u
a
sus factoriales de forma concurrente utilizando dos hilos que se ejecutan en
paralelo con el hilo principal. El hilo principal deber´ esperar a que terminen
a
los otros dos hilos. Recuerda que para compilarlo se debe a˜ adir -lpthread a
n
la orden gcc.
27. Modifica el programa resultado del problema 26 de manera que no est´ lie
mitado a 2 el n´ mero de factoriales a calcular. Haz que se creen tantos hilos
u
como par´ metros de entrada y que todos se ejecuten de forma concurrente.
a
El hilo principal debe esperar a que terminen el resto de hilos y, a medida
que vayan terminando, muestre un mensaje que indique un identificador del
hilo finalizado.
28. Modifica el programa soluci´ n del problema 13 para que la escritura de cao
da cadena la haga un hilo diferente que se ejecutan en paralelo con el hilo
principal. El hilo principal debe esperar a que terminen los otros dos hilos.
13
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

18

100 Ejercicios resueltos de Sistemas Operativos - UJI
29. El siguiente programa cuenta el n´ mero de veces que el car´ cter ’a’ o ’A’
u
a
aparece en el fichero indicado como par´ metro de entrada. Modif´calo para
a
ı
´
que ahora se cree un hilo y sea este el que ejecute la funci´ n cuenta.
o
#include
#include
#include
#include
#include
#include

unistd.h
stdlib.h
stdio.h
sys/types.h
sys/stat.h
fcntl.h

#define MAXLON 1000
void cuenta (char ∗nombre) {
int pos, cont= 0, leidos;
char cadena[MAXLON];
int fd;
fd= open (nombre, O RDONLY);
while ((leidos= read (mf, cadena, MAXLON))!= 0)
for (pos= 0; pos leidos; pos++)
if ((cadena[pos]== ’a’) || (cadena[pos]== ’A’))
cont++;
printf (Fichero %s: %d caracteres ’a’ o ’A’ encontradosn, nombre, cont);
close (fd);
}
int main (int argc, char ∗argv[]) {
if (argc!= 2) {
printf (Indica el nombre de un fichero.n);
exit(0);
}
cuenta (argv[1]);
return 0;
}

30. Modifica el programa resultado del problema 29 para que se creen tantos
hilos como ficheros especificados como par´ metros de entrada, y que todos
a
los hilos creados se ejecuten de forma concurrente.
31. Modifica el programa resultado del problema 30 para que el resultado de la
b´ squeda lo informe el hilo principal cuando hayan terminado el resto de
u
hilos. Haz uso del paso de par´ metros a un hilo para que cada hilo pueda
a
devolver el resultado de la b´ squeda al hilo principal.
u
32. Modifica el programa soluci´ n del problema 30 para obtener el n´ mero de
o
u
espacios en blanco que hay en cada uno de los ficheros dados como par´ mea
tros. Inicialmente, se deben crear tantos procesos como ficheros especificados. Cada proceso crear´ los hilos necesarios, que son los que realizar´ n la
a
a
b´ squeda, atendiendo a la restricci´ n de que un hilo procesar´ como m´ xiu
o
a
a
mo K caracteres, donde K es una constante predefinida. Todos los hilos y
procesos se han de ejecutar de forma concurrente. Cada proceso esperar´ a
a
que terminen sus hilos y mostrar´ el total de espacios encontrados.
a
14
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

19

100 Ejercicios resueltos de Sistemas Operativos - UJI
Cap´tulo 2
ı

Comunicaci´ n y Sincronizaci´ n
o
o
de Procesos
2.1.

Tuber´as
ı

´
33. Se desea informar del tiempo invertido en ejecutar las ordenes ls | wc -l. Para
ello se escribe el siguiente programa. Sin embargo, no informa de forma
correcta. Modif´calo para que lo haga sin cambiar el n´ mero de procesos
ı
u
que se est´ n generando.
a
#include
#include
#include
#include
#include
#include

stdio.h
stdlib.h
unistd.h
time.h
sys/types.h
sys/wait.h

int main (int argc, char ∗argv[]){
int tubo[2];
time t ini, fin;
pipe(tubo);
if(fork()==0){
if(fork()==0){
dup2(tubo[1],STDOUT FILENO);
close(tubo[0]);
close(tubo[1]);
execlp(ls,ls,NULL);
}else{
dup2(tubo[0],STDIN FILENO);
close(tubo[0]);
close(tubo[1]);
execlp(wc,wc,-l,NULL);
}
}
else{
printf(Tiempo invertido: %ld segundosn, fin-ini);
}
return 0;
}

15
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

20

100 Ejercicios resueltos de Sistemas Operativos - UJI
34. Observa el siguiente fragmento de c´ digo que trata de realizar lo mismo que
o
si un usuario escribiera ls | sort en la l´nea de comandos de un sistema UNIX.
ı
Indica qu´ problemas se producen, por qu´ y c´ mo resolverlos.
e
e o
int tubo[2];
pipe(tubo);
if (fork()!=0) {
dup2(tubo[1], STDIN FILENO);
execlp(sort, sort, NULL);
close(tubo[0]);
close(tubo[1]);
} else {
dup2(tubo[0], STDOUT FILENO);
close(tubo[1]);
close(tubo[0]);
execlp(ls, ls, NULL);
}

35. Al ejecutar el siguiente programa, el proceso no termina. Explica por qu´ .
e
Da una soluci´ n que no cambie el n´ mero de procesos que se generan.
o
u
int main(int argc, char ∗argv[]) {
int tubo[2];
pipe(tubo);
if (fork()==0) {
if (fork()== 0) {
dup2 (tubo[1], STDOUT FILENO);
close(tubo[0]);
close(tubo[1]);
execlp(ls, ls, NULL);
} else {
dup2 (tubo[0], STDIN FILENO);
close(tubo[0]);
close(tubo[1]);
execlp(wc, wc, -l, NULL);
}
} else {
wait(NULL);
printf (Fin del proceson);
}
}

36. Describe todas las situaciones que se producen o podr´an producirse al ejeı
cutar el siguiente programa:
int main (int argc,char ∗ argv[]) {
int tubo[2];
FILE ∗fichero;
char linea[MAX];
pipe(tubo);
if(!(fichero=fopen(argv[1],r))){
printf(Error al abrir el fichero %sn,argv[1]);
exit(2);
}

16
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

21

100 Ejercicios resueltos de Sistemas Operativos - UJI
while(fgets(linea,MAX,fichero))
write(tubo[1],linea,strlen(linea));
fclose(fichero);
close (tubo[1]);
dup2 (tubo[0],STDIN FILENO);
close (tubo[0]);
execlp(sort,sort,NULL);
exit(0);
}

37. Describe todas las situaciones que se producen o podr´an producirse al ejeı
cutar el siguiente programa:
int main(int argc, char ∗argv[]) {
int tubo[2];
pipe(tubo);
if (fork()==0) {
close(tubo[0]);
dup2(tubo[1], STDOUT FILENO);
close(tubo[1]);
execlp(ls, ls, NULL);
} else {
dup2(tubo[0], STDIN FILENO);
close(tubo[0]);
close(tubo[1]);
wait(NULL);
execlp(wc, wc, -l, NULL);
}
exit(0);
}

´
38. Escribe un programa que ejecute la siguiente l´nea de ordenes igual que lo
ı
har´a un int´ rprete de comandos: paste fich1 fich2 | sort | nl  fich3. Debes
ı
e
considerar que fich1, fich2 y fich3 ser´ n par´ metros dados a tu programa en
a
a
la l´nea de comandos.
ı
39. Escribe un programa que genere tres procesos en paralelo que colaboran para
realizar las siguientes tareas:
El primer proceso, utilizando la orden grep, encontrar´ las l´neas de un
a
ı
fichero (fich1) que contienen una palabra (ambos dados como par´ mea
tros en la l´nea de comandos) y las escribir´ en una tuber´a.
ı
a
ı
El segundo proceso, utilizando la orden grep, encontrar´ las l´neas de
a
ı
un fichero (fich2) que contienen la misma palabra (ambos dados como
par´ metros en la l´nea de comandos) y las escribir´ en la misma tuber´a.
a
ı
a
ı
El tercer proceso, utilizando la orden wc, leer´ de la tuber´a las l´neas
a
ı
ı
producidas por los otros dos, las contar´ y escribir´ el resultado en un
a
a
nuevo fichero (fich3) pasado como par´ metro en la l´nea de comandos.
a
ı
As´, el programa se utilizar´ en la l´nea de comandos de la siguiente forma:
ı
a
ı
17
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

22

100 Ejercicios resueltos de Sistemas Operativos - UJI
$ programa palabra fich1 fich2 fich3. La figura 2.1 muestra gr´ ficamente la
a
comunicaci´ n requerida entre los procesos.
o

Figura 2.1: Esquema de funcionamiento.
40. Escribe un programa que genere tres procesos en paralelo que colaboran para
realizar las siguientes tareas:
El primer proceso leer´ l´neas de un fichero de texto dado como par´ mea ı
a
tro y escribir´ alternativamente en dos tuber´as las l´neas pares e impaa
ı
ı
res del mismo.
El segundo proceso, utilizando la orden grep, leer´ de la tuber´a que
a
ı
contiene las l´neas pares y seleccionar´ aquellas l´neas que contengan
ı
a
ı
una palabra dada como par´ metro en la l´nea de comandos. El resultado
a
ı
se almacenara en un fichero cuyo nombre estar´ formado por la palabra
a
dada seguido de .txt.
El tercer proceso realiza una funci´ n similar sobre la tuber´a que cono
ı
tiene las l´neas impares, pero utilizando otra palabra tambi´ n dada coı
e
mo par´ metro.
a
La figura 2.2 muestra gr´ ficamente los procesos y c´ mo se comunican estos
a
o
cuando el programa se ejecuta con los siguientes par´ metros: $ programa
a
fichero.txt uno dos

Figura 2.2: Esquema de funcionamiento.
41. Escribe un programa que genere los procesos necesarios para que colaboren
en realizar las siguientes tareas:
Tarea 1: leer l´neas de un fichero de texto dado como par´ metro de
ı
a
entrada y escribir alternativamente en dos tuber´as (tuber´a 1 y tuber´a
ı
ı
ı
2) las l´neas pares e impares del mismo.
ı
18
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

23

100 Ejercicios resueltos de Sistemas Operativos - UJI
Tarea 2: utilizando el comando grep, leer de la tuber´a que contiene las
ı
l´neas pares y seleccionar aquellas l´neas que contengan una palabra
ı
ı
dada como par´ metro en la l´nea de comandos. El resultado se enviar´ a
a
ı
a
trav´ s de la tuber´a 3.
e
ı
Tarea 3: realizar una funci´ n similar a la tarea 2 pero sobre la tuber´a
o
ı
que contiene las l´neas impares y utilizando otra palabra diferente tamı
bi´ n dada como par´ metro de entrada.
e
a
Tarea 4: ejecutar el comando sort sobre la informaci´ n que se recoja
o
por la tuber´a 3 de manera que se muestren de forma ordenada las l´neas
ı
ı
recogidas.
Observa la siguiente figura 2.3. En ella se representa de forma gr´ fica una
a
propuesta de los procesos que se deben generar y de c´ mo se comunican eso
tos cuando el programa se ejecute con los siguientes par´ metros: $ programa
a
fichero.txt uno dos. Antes de comenzar a escribir la soluci´ n, determina si
o
est´ s de acuerdo o no con el esquema de funcionamiento propuesto. Si no lo
a
est´ s explica porqu´ .
a
e

Figura 2.3: Esquema de funcionamiento.

2.2.

Sem´ foros
a

42. Dados los siguientes procesos y sus respectivas secuencias de c´ digo, indica
o
si existir´a o no situaci´ n de interbloqueo y explica por qu´ . En cualquier
ı
o
e
caso, indica tambi´ n la salida por pantalla y el valor final de los sem´ foros.
e
a
Sup´ n que inicialmente todos los sem´ foros tienen valor cero.
o
a
Proceso 1
--------printf(3);
sem_post(s3);
printf(4);
sem_post(s2);
sem_post(s1);

Proceso 2
--------sem_wait(s1);
printf(1);
sem_wait(s3);
sem_post(s4);
sem_wait(s3);

Proceso 3
--------sem_wait(s2);
sem_wait(s4);
printf(2);
printf(5);
sem_post(s3);

19
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

24

100 Ejercicios resueltos de Sistemas Operativos - UJI
43. Considera que los siguientes fragmentos de c´ digo se ejecutan en paralelo:
o
C´digo A:
o
--------printf(A1);
sem_post(s1);
sem_wait(s2);
printf(A2);
sem_wait(s2);
sem_post(s1);
printf(A3);

C´digo B:
o
--------printf(B1);
sem_wait(s1);
printf(B2);
sem_post(s3);
sem_wait(s3);
printf(B3);
sem_post(s2);
sem_wait(s1);
sem_post(s2);
printf(B4);

Sabiendo que todos los sem´ foros est´ n inicializados a 0, indica todas las
a
a
posibles salidas que puede proporcionar su ejecuci´ n y si se produce o no
o
interbloqueo para cada una de ellas.
44. Modifica el programa resultado del problema 31 para que, utilizando una
variable global a la cual acceden todos los hilos (ll´ mala cuenta blancos),
a
estos acumulen el total de blancos encontrados. Utiliza un sem´ foro para
a
asegurar que los accesos a dicha variable se realizan de forma adecuada.
Haz que el programa principal informe tambi´ n del resultado.
e
45. Escribe un programa que ejecute tres hilos en paralelo a los que llamaremos
A, B y C. El hilo A consta de tres bloques de c´ digo (a1, a2 y a3), el hilo B
o
de otros cuatro (b1, b2, b3 y b4) y el C de 3 (c1, c2 y c3). Haz que el c´ digo
o
de cada uno de estos bloques consista en repetir cinco veces los siguientes
pasos: escribir un mensaje que lo identifique y realizar un retardo aleatorio.
Ejecuta el programa para comprobar que los hilos A, B y C se ejecutan en
paralelo y que sus bloques de c´ digo pueden alternarse de varias formas
o
distintas. Ahora, modifica el programa anterior para que los tres hilos se
sincronicen de la siguiente forma:
c1 no debe comenzar hasta que acabe a1
a2 no debe comenzar hasta que acabe b1
c2 no debe comenzar hasta que acabe b2
b3 no debe comenzar hasta que acabe a2
a3 no debe comenzar hasta que acabe c2
´
b4 debe acabar el ultimo
46. Se crean tres hilos de manera que uno ejecuta escribirA, otro escribirB y el
tercero escribirC. Introduce los sem´ foros oportunos para que la salida sea
a
ABCABCABCABCABCABC.
#include stdio.h
#include stdlib.h
#include time.h

20
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

25

100 Ejercicios resueltos de Sistemas Operativos - UJI
#include unistd.h
#include pthread.h
#define MAX 6
void ∗escribirA (void ∗nada){
int num;
for(num=0;numMAX;num++){
printf(A);
fflush(NULL);
sleep(random() %3);
}
pthread exit(NULL);
}
void ∗escribirB (void ∗nada){
int num;
for(num=0;numMAX;num++){
printf(B);
fflush(NULL);
sleep(random() %2);
}
pthread exit(NULL);
}
void ∗escribirC (void ∗nada){
int num;
for(num=0;numMAX;num++){
printf(C);
fflush(NULL);
sleep(random() %2);
}
pthread exit(NULL);
}
int main (int argc, char ∗argv[]) {
pthread t th1, th2, th3;
srandom(time(NULL));
pthread create(th1, NULL, escribirA, NULL);
pthread create(th2, NULL, escribirB, NULL);
pthread create(th3, NULL, escribirC, NULL);
pthread join(th1, NULL);
pthread join(th2, NULL);
pthread join(th3, NULL);
return 0;
}

47. Observa el siguiente fragmento de c´ digo donde los sem´ foros sem1 y sem2
o
a
est´ n inicializados a cero, un hilo ejecuta la funci´ n incrementa y otro la
a
o
funci´ n decrementa. Describe los valores que, durante la ejecuci´ n, puede
o
o
adoptar la variable num as´ como las posibles situaciones de interbloqueo
ı
que pudieran darse.

21
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

26

100 Ejercicios resueltos de Sistemas Operativos - UJI
int num=10;
void ∗ incrementa(void ∗nada) {
int i;
for (i=0;i3;i++){
sem wait(sem1);
num++;
printf(Inc. N´ mero = %dn,num);
u
sem post(sem1);
}
sem post(sem2);
sleep(random() %3);
sem wait(sem2);
pthread exit(NULL);
}
void ∗ decrementa(void ∗nada){
int i;
for (i=0;i3;i++){
sem post(sem1);
sleep(random() %3);
sem wait(sem2);
num--;
printf(Dec. N´ mero = %dn,num);
u
sem post(sem2);
sem wait(sem1);
}
sem wait(sem1);
pthread exit(NULL);
}

48. Se crean dos hilos de manera que uno ejecuta escribirA y el otro escribirB.
Introduce los sem´ foros oportunos para que la salida sea BABABABABA.
a
No olvides indicar los valores iniciales de los sem´ foros que utilices.
a
void ∗escribirA (void ∗p) {
int i;
for (i= 0; i 5; i++) {
printf (A);
fflush(NULL);
sleep(random() %2);
}
pthread exit(NULL);
}
void ∗escribirB (void ∗p) {
int i;
for (i= 0;i 5; i++) {
printf (B);
fflush(NULL);
sleep(random() %2);
}
pthread exit(NULL);
}

49. Dado el siguiente c´ digo indica si existe o no interbloqueo. En el caso de
o
existir, indica claramente para cada hilo en qu´ l´nea de c´ digo se queda
e ı
o
bloqueado y en qu´ iteraci´ n del bucle ocurre (valores de las variables i, j,
e
o
k). Observa los valores de inicializaci´ n de los sem´ foros.
o
a
22
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

27

100 Ejercicios resueltos de Sistemas Operativos - UJI
sem t s1, s2, s3;
void ∗escribirA (void ∗p){
int i;
srandom (pthread self ());
for (i= 0; i MAX; i++){
printf (A);
sem post (s2);
sem wait (s1);
fflush (NULL);
sleep (random() %3);
}
pthread exit (NULL);
}
void ∗escribirB (void ∗p){
int j;
srandom (pthread self ());
for (j= 0; j MAX; j++){
sem wait (s2);
printf (B);
sem post (s3);
sem wait (s2);
fflush (NULL);
sleep (random() %2);
}
pthread exit (NULL);
}
void ∗escribirC (void ∗p){
int k;
srandom (pthread self ());
for (k= 0; k MAX; k++){
sem wait (s3);
printf (C);
sem post (s1);
sem wait (s3);
fflush (NULL);
sleep (random() %2);
}
pthread exit (NULL);
}
int main (int argc, char ∗argv[]) {
pthread t th1, th2, th3;
sem init (s1, 0, 1);
sem init (s2, 0, 1);
sem init (s3, 0, 0);
pthread create (th1, NULL, escribirA, NULL);
pthread create (th2, NULL, escribirB, NULL);
pthread create (th3, NULL, escribirC, NULL);
pthread join (th1, NULL);
pthread join (th2, NULL);
pthread join (th3, NULL);
return 0;
}

50. Considera el siguiente trozo de c´ digo del problema productor-consumidor:
o
#include stdio.h
#include stdlib.h
#include semaphore.h

23
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

28

100 Ejercicios resueltos de Sistemas Operativos - UJI
#include pthread.h
#include unistd.h
#include stdbool.h
#define MAX 10
#define FIN -1
int buffer[MAX];
sem t huecos, elementos;
int generar dato (void) { return random() %256;}
int numero aleatorio(void) { return random() %100;}
void ∗productor (void ∗p) {
int pos productor= 0;
int num, dato, n;
n= numero aleatorio();
printf (Productor con %d datosn, n);
for(num= 0; num n; num++) {
dato= generar dato();
sem wait (huecos);
buffer[pos productor]= dato;
pos productor= (pos productor+ 1) %MAX;
sem post (elementos);
}
buffer[pos productor]= FIN;
pthread exit (NULL);
}
void ∗consumidor(void ∗p){
int pos consumidor, dato;
bool continuar= true;
while (continuar) {
sem wait (elementos);
dato= buffer[pos consumidor];
pos consumidor= (pos consumidor+1) %MAX;
if (dato== FIN)
continuar= false;
sem post (huecos);
printf (Numero aleatorio: %dn, dato);
}
pthread exit (NULL);
}

Este c´ digo contiene errores y est´ incompleto. Corrige y completa. Haz que
o
a
el hilo consumidor muestre en pantalla todos los datos producidos por el hilo
productor.
51. Realiza las modificaciones oportunas al c´ digo resultado del problema 50
o
para que en lugar de un hilo productor hayan tres que se ejecuten en paralelo. El consumidor terminar´ cuando haya consumido todos los datos produa
cidos.
52. Escribe un programa que ejecute dos hilos en paralelo para realizar las siguientes tareas:
24
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

29

100 Ejercicios resueltos de Sistemas Operativos - UJI
El primer hilo calcular´ los n´ meros primos que hay entre dos n´ meros
a
u
u
que el programa recibe como par´ metros. Para enviar estos datos al
a
segundo hilo, los almacenar´ en un buffer intermedio de 5 elementos
a
de capacidad.
El segundo hilo tomar´ los datos que aparezcan en el buffer intermedio
a
y calcular´ la suma de los d´gitos de cada n´ mero. Para cada n´ mero
a
ı
u
u
primo se mostrar´ en la salida est´ ndar una l´nea que contendr´ dicho
a
a
ı
a
n´ mero y la suma de sus d´gitos.
u
ı
Deber´ s utilizar sem´ foros para que los dos hilos se sincronicen en el acceso
a
a
al buffer intermedio. Estas son las funciones para comprobar si un n´ mero
u
es primo y para calcular la suma de los d´gitos de un n´ mero.
ı
u
/∗ Devuelve la suma de los d´gitos del n´mero dado ∗/
ı
u
int suma digitos (int numero) {
int suma= 0;
while (numero 0) {
suma+= numero %10;
numero/= 10;
}
return suma;
}
/∗ Indica si el n´mero dado es primo ∗/
u
bool es primo (int numero) {
int divisor;
for (divisor= 2; divisor= sqrt(numero); divisor++)
if (numero %divisor== 0)
return false;
return true;
}

53. Escribe un programa que realice una simulaci´ n de la evoluci´ n del estado
o
o
de las reservas en una aula de libre acceso. Para simplificar, sup´ n que el aula
o
tiene s´ lo un ordenador que se puede reservar en per´odos de 1 hora, desde
o
ı
las 9:00 hasta las 21:00. 25 alumnos pueden reservar per´odos individuales
ı
de 1 hora, cancelar reservas y consultar el estado de las reservas.
La simulaci´ n debe consistir en que cada alumno realice cuatro operacioo
nes, cada una de las cuales podr´ ser una reserva, cancelaci´ n o consulta. La
a
o
elecci´ n de la operaci´ n ser´ aleatoria, pero con mayor probabilidad para la
o
o
a
realizaci´ n de reservas (50 %) que para la realizaci´ n de consultas y cancelao
o
ciones (25 % cada una). Cuando la operaci´ n a realizar sea una reserva, debe
o
elegirse aleatoriamente la hora que el alumno va a reservar.
El programa debe implementar un hilo principal que lanza 25 hilos en paralelo, uno por cada alumno. Mediante el empleo de sem´ foros debe garantizarse
a
25
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

30

100 Ejercicios resueltos de Sistemas Operativos - UJI
que los accesos a la tabla de reservas sean correctos. En concreto, cuando se
realice una reserva o cancelaci´ n no puede realizarse ninguna otra operaci´ n
o
o
en paralelo sobre la tabla, pero una consulta puede simultanear su acceso a
la tabla con otras consultas.
En la implementaci´ n de la consulta de la tabla, muestra por pantalla el estao
do de cada per´odo de una hora en una l´nea distinta. Para realizar una reserı
ı
va, comprueba que el per´odo que se solicita reservar est´ libre. Al realizar
ı
e
una cancelaci´ n, deben quedar libres todas las horas que tuviese reservadas
o
el estudiante que la solicita. Si ese estudiante no tuviese ninguna reserva se
debe mostrar un mensaje de error.
Como todas las operaciones est´ n controladas por sem´ foros, escribe mensaa
a
jes que indiquen el estado de las operaciones diferenciando cu´ ndo se solicita
a
realizar una acci´ n (a´ n no se tiene autorizaci´ n), y cu´ ndo se realiza efeco
u
o
a
tivamente (ya se tiene autorizaci´ n). As´, se puede seguir la evoluci´ n de las
o
ı
o
operaciones y los efectos que producen en el estado de la tabla de reservas.
A continuaci´ n tienes un ejemplo del tipo de traza que se espera obtener.
o
Solicitud de reserva de al012: 9-10
Reserva de al012: 9-10
Solicitud de consulta de al004
Solicitud de cancelaci´n de al006
o
Solicitud de reserva de al000: 15-16
Solicitud de consulta de al019
Consulta de al019: 9-10 = al012
Consulta de al019: 10-11 = LIBRE
Consulta de al019: 11-12 = LIBRE
Consulta de al019: 12-13 = LIBRE
Consulta de al019: 13-14 = LIBRE
Consulta de al019: 14-15 = LIBRE
Consulta de al019: 15-16 = LIBRE
Consulta de al019: 16-17 = LIBRE
Consulta de al019: 17-18 = LIBRE
Consulta de al004: 9-10 = al012
Consulta de al004: 10-11 = LIBRE
Consulta de al004: 11-12 = LIBRE
Consulta de al004: 12-13 = LIBRE
Consulta de al004: 13-14 = LIBRE
Consulta de al004: 14-15 = LIBRE
Consulta de al004: 15-16 = LIBRE
Consulta de al004: 16-17 = LIBRE
Consulta de al004: 17-18 = LIBRE
Consulta de al004: 18-19 = LIBRE
Consulta de al004: 19-20 = LIBRE
Consulta de al004: 20-21 = LIBRE
Consulta de al019: 18-19 = LIBRE
Consulta de al019: 19-20 = LIBRE
Consulta de al019: 20-21 = LIBRE
Denegada cancelaci´n de al006: No tiene reservas
o
Reserva de al000: 15-16

26
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

31

100 Ejercicios resueltos de Sistemas Operativos - UJI
Solicitud de reserva de al010: 9-10
Denegada reserva de al010: 9-10 est´ ocupada
a
Solicitud de cancelaci´n de al012
o
Cancelaci´n de al012: 9-10
o
...

´
54. Un puente es estrecho y s´ lo permite pasar veh´culos en un unico sentido
o
ı
al mismo tiempo. Si pasa un coche en un sentido y hay coches en el mismo
sentido que quieren pasar, entonces estos tienen prioridad frente a los del otro
sentido (si hubiera alguno esperando para entrar en el puente). No hay l´mite
ı
al n´ mero de veh´culos que pueden haber en el puente al mismo tiempo.
u
ı
Simula el sistema suponiendo que los coches son hilos y el puente el recurso
compartido. Utiliza sem´ foros para garantizar que se cumplen las condicioa
nes de acceso al puente. Cada hilo debe mostrar por pantalla cu´ ndo entra
a
en el puente y cu´ ndo lo abandona.Se generar´ n un total de 100 veh´culos,
a
a
ı
50 en un sentido y 50 en el otro. Tras un tiempo de espera al azar (utilizar sleep(random() %20) o algo similar) los veh´culos intentan entrar en el
ı
´
puente y, si lo consiguen, permanecer´ n en el durante un segundo (sleep(1))
a
antes de abandonarlo. Se apreciar´ m´ s el comportamiento del sistema si se
a a
alterna la creaci´ n de hilos en un sentido u otro.
o

27
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

32

100 Ejercicios resueltos de Sistemas Operativos - UJI
Cap´tulo 3
ı

Gesti´ n de Archivos y Directorios
o
3.1.

Sistemas de Archivos

55. Disponemos de un disco duro de 20 GB de capacidad. Hay establecida sobre
´
´
el una unica partici´ n que contiene un sistema de ficheros del tipo FAT32 en
o
el que cada agrupamiento (cluster) consta de 16 sectores de 512 bytes cada
uno. ¿Cu´ ntos sectores del disco se necesitar´ n para almacenar cada copia
a
a
de la FAT? Razona tu respuesta.
56. La polic´a ha arrestado al sospechoso de un delito. Al analizar el contenido
ı
de su ordenador piensan que pueden inculparle pues el contenido del mismo
es el siguiente:
N´ m de bloque de datos
u
10
11
12
13
14
15

Contenido
he
sido
yo
no
sigan
buscando

Como experto inform´ tico, pides consultar el contenido de la FAT, que es el
a
siguiente:
N´ m de entrada en la FAT
u
10
11
12
13
14
15

Contenido
11
EOF
13
10
15
12

¿Apoyar´as la opini´ n de la polic´a? Razona tu respuesta.
ı
o
ı
29
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

33

100 Ejercicios resueltos de Sistemas Operativos - UJI
57. Tenemos un sistema de ficheros tipo FAT sobre el que hay almacenado un
fichero de 160 Kbytes. Sabemos que para dicho fichero se emplean 10 entradas de la FAT y que cada sector del disco contiene 512 bytes. ¿Cu´ ntos
a
sectores como m´nimo forman cada bloque o agrupamiento en dicho sisteı
ma? Razona tu respuesta.
58. Se dispone de una partici´ n de disco con sistema de ficheros basado en
o
FAT16. Si el tama˜ o de bloque es de 1KB, ¿cu´ ntos KB de dicha partici´ n
n
a
o
podr´ n direccionarse como m´ ximo? Si la partici´ n resulta tener un tama˜ o
a
a
o
n
de 2GB, ¿qu´ tama˜ o deber´a como m´nimo tener el bloque para poder die
n
ı
ı
reccionar la partici´ n por completo?
o
59. Se dispone de una partici´ n de disco con sistema de ficheros basado en
o
FAT16. A la hora de ponerle formato el usuario especifica que los bloques
sean de tama˜ o 4Kbytes ¿Cu´ ntos Kbytes te´ ricamente podr´ n direccionarn
a
o
a
se como m´ ximo? Si la partici´ n resulta tener un tama˜ o de 8Gbytes, ¿cona
o
n
sideras adecuado el tama˜ o de bloque escogido por el usuario? Justifica la
n
respuesta. En caso de que no est´ s de acuerdo prop´ n un tama˜ o de bloque
e
o
n
e indica en cu´ ntos de esos bloques se almacena la FAT.
a
60. Para una partici´ n de 8GB y tama˜ o de bloque de 1 KB,
o
n
Si se utiliza un sistema de ficheros basado en FAT16, ¿qu´ cantidad de
e
espacio en disco queda inutilizable?
Si se utiliza un sistema de ficheros basado en nodos-i, donde cada nodoi consta de dos ´ndices directos, dos indirectos simples y dos indirectos
ı
dobles, y para referenciar un bloque se utilizan 128 bits, ¿qu´ cantidad
e
de datos de un fichero que en concreto ocupa 131 KB puede ser irrecuperable en el caso de que un bloque de la partici´ n resultara ilegible?
o
Analiza todos los casos posibles.
61. Considera un sistema de ficheros basado en nodos-i, en el que cada nodo-i
contiene cinco ´ndices directos, tres indirectos simples, dos indirectos dobles
ı
y uno indirecto triple. Si el tama˜ o de un bloque de datos es de 2 Kbytes y
n
para referenciar a un bloque se utilizan 64 bits, ¿cu´ ntos bloques de disco
a
almacenar´ n enlaces para un fichero que contiene 1548 Kbytes de datos?
a
Razona tu respuesta.
62. Sea una partici´ n de disco donde el tama˜ o de bloque es de 4KB. Se utiliza
o
n
un sistema de ficheros basado en nodos-i, donde cada nodo-i consta de dos
´ndices directos, dos indirectos simples y uno indirecto doble. Si para refeı
renciar a un bloque se utilizan 32 bits, ¿cu´ l es el n´ mero de bloques que
a
u
contendr´ n enlaces si el fichero ocupa el m´ ximo tama˜ o posible?
a
a
n
30
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

34

100 Ejercicios resueltos de Sistemas Operativos - UJI
3.2.

Archivos y Directorios

63. La siguiente funci´ n muestra el nombre de todas las entradas del directorio
o
que se le pasa como par´ metro:
a
void listado(char nomdir[]) {
DIR
∗d;
struct dirent ∗entrada;
char
∗ruta;

}

d= opendir(nomdir);
if (d== NULL)
printf(Error al abrir el directorion);
else {
entrada= readdir(d);
while (entrada!= NULL) {
ruta= malloc(strlen(nomdir)+strlen(entrada-d name)+2);
sprintf(ruta, %s/ %s, nomdir, entrada-d name);
printf( %sn, ruta);
free(ruta);
entrada= readdir(d);
}
closedir(d);
}

´
Modif´cala para que unicamente muestre aquellas entradas que se corresponı
dan con enlaces simb´ licos a directorios.
o
64. La siguiente funci´ n muestra el nombre de todas las entradas del directorio
o
que se le pasa como par´ metro:
a
void listado(char nomdir[]) {
DIR
∗d;
struct dirent ∗entrada;
char
∗ruta;

}

d= opendir(nomdir);
if (d== NULL)
printf(Error al abrir el directorion);
else {
entrada= readdir(d);
while (entrada!= NULL) {
ruta= malloc(strlen(nomdir)+strlen(entrada-d name)+2);
sprintf(ruta, %s/ %s, nomdir, entrada-d name);
printf( %sn, ruta);
free(ruta);
entrada= readdir(d);
}
closedir(d);
}

Modif´cala para que por cada fichero regular que haya en el directorio se
ı
cree un archivo zip en el directorio /tmp y se muestre la diferencia de espacio
entre el archivo original y el nuevo archivo zip. Crea el archivo zip con la
orden zip ruta.zip ruta.
31
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

35

100 Ejercicios resueltos de Sistemas Operativos - UJI
65. Escribe un programa que dado un directorio como argumento de entrada
elimine los ficheros, enlaces y directorios (s´ lo los vac´os) que hubiesen en
o
ı
´
el. El programa debe informar de si el directorio dado como par´ metro existe
a
as´ como de cada uno de los elementos eliminados. No hagas un recorrido
ı
´
recursivo del arbol de directorios.
66. Escribe un programa que borre una serie de nombres de ficheros y/o directorios recibidos como par´ metros. Adem´ s, el programa debe mostrar para
a
a
cada par´ metro dado:
a
si se trata de un fichero regular, un enlace simb´ lico, un directorio, o
o
bien si el nombre dado no es v´ lido
a
si dicho nombre pudo borrarse correctamente, as´ como el n´ mero de
ı
u
bloques de disco que ser´ n liberados en tal caso. Ten en cuenta que, en
a
el caso de ficheros regulares, los bloques de disco s´ lo ser´ n liberados
o
a
´
si se trata del ultimo enlace f´sico sobre el fichero.
ı
67. Escribe un programa que, a partir de un directorio dado como par´ metro,
a
informe de los ficheros regulares que encuentre a partir de dicho directorio
´
(deber´ recorrer el arbol de directorios a partir de dicho directorio) tales
a
que pertenezcan al usuario que ejecuta el programa, y se hayan accedido
desde una hora antes del comienzo de la ejecuci´ n del programa. Durante el
o
recorrido recursivo del directorio dado, se deben ignorar aquellos directorios
que no puedan ser abiertos por no tener los permisos necesarios.
68. Escribe un programa que calcule la suma de los bytes ocupados por todos
los ficheros y directorios que est´ n contenidos a partir de un directorio dado
e
como par´ metro. ¿Qu´ ocurre cuando hay dos enlaces duros que hacen refea
e
rencia al mismo fichero? Haz que en estos casos el espacio ocupado se considere s´ lo una vez. Ten en cuenta que la estructura stat contiene el n´ mero
o
u
de nodo-i asignado al fichero.
69. Escribe un programa que reciba como argumentos un fichero regular y un directorio, y cambie por enlaces simb´ licos al fichero regular todos los enlaces
o
´
duros referidos a el que encuentre a partir del directorio dado. Para simplificar, considera que tanto el fichero como el directorio se pasan al programa
como caminos absolutos que no contienen el nombre ., ni el nombre .., ni
ning´ n enlace simb´ lico.
u
o
70. Un reproductor multimedia recorre de forma recursiva el directorio /media
(y sus subdirectorios) a la b´ squeda de ficheros con extensi´ n jpeg, avi y
u
o
mp3. En la ruta /resultado hay tres carpetas de nombres jpeg, avi y mp3. Por
cada fichero regular que encuentra con la extensi´ n adecuada en el proceso
o
de b´ squeda, crea un enlace simb´ lico en la carpeta correspondiente a la exu
o
tensi´ n del archivo. Por ejemplo, si encuentra un fichero con extensi´ n avi
o
o
32
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

36

100 Ejercicios resueltos de Sistemas Operativos - UJI
crea el enlace simb´ lico a dicho fichero en el directorio /resultado/avi. Eso
cribe un programa en C que funcione de acuerdo al enunciado del problema.
´
Adem´ s, haz que no haya que crear el enlace al archivo si este ya existe.
a

33
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

37

100 Ejercicios resueltos de Sistemas Operativos - UJI
Cap´tulo 4
ı

Gesti´ n de Memoria
o
4.1.

Paginaci´ n
o

71. Considera un sistema de paginaci´ n en el que se puede direccionar como
o
m´ ximo 1 Gbyte de memoria, el tama˜ o de p´ gina es de 16 Kbytes y cada
a
n
a
byte se direcciona independientemente ¿Cu´ ntas p´ ginas podr´ tener asiga
a
a
nadas como m´ ximo un proceso en este sistema? Si empleamos una tabla
a
de p´ ginas con dos niveles, en el que la tabla de primer nivel contiene 1024
a
entradas, ¿cu´ ntas tablas de segundo nivel son necesarias para un proceso
a
que requiere 6401 p´ ginas? Razona tu respuesta.
a
72. Considera un sistema de paginaci´ n en el que las direcciones l´ gicas son
o
o
de 22 bits y el tama˜ o de p´ gina es de 2 Kbytes. Sabiendo que cada byn
a
te se direcciona independientemente, calcula el ahorro de memoria que obtendr´amos para representar la tabla de p´ ginas de un proceso que est´ utiliı
a
a
zando 90 Kbytes de memoria, cuando empleamos una tabla de p´ ginas con
a
dos niveles en lugar de tener una tabla de un solo nivel. En el sistema con
dos niveles, debes considerar que se emplean 5 bits de la direcci´ n para el
o
segundo nivel. Adem´ s, cada entrada de las tablas de p´ ginas precisa 8 bytes.
a
a
Razona la respuesta.
73. Considera un sistema de paginaci´ n en el que las direcciones l´ gicas son de
o
o
20 bits y el tama˜ o de p´ gina de 4 Kbytes. Sabiendo que cada byte se direcn
a
ciona independientemente, calcula el ahorro de memoria que obtendr´amos
ı
para representar la tabla de p´ ginas de un proceso que est´ utilizando 192
a
a
Kbytes de memoria, cuando empleamos un tabla de p´ ginas con dos niveles
a
en lugar de tener una tabla de un solo nivel. En el sistema con dos niveles
debes considerar que se emplea el mismo n´ mero de bits de la direcci´ n para
u
o
cada nivel. Cada entrada de las tablas de p´ ginas precisa 16 bytes. Razona tu
a
respuesta.
74. Considera un sistema de paginaci´ n en el que las direcciones l´ gicas son de
o
o
22 bits y el tama˜ o de p´ gina de 2 Kbytes, y que cada byte se direcciona inn
a
35
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

38

100 Ejercicios resueltos de Sistemas Operativos - UJI
dependientemente ¿Cu´ ntas p´ ginas podr´ tener asignadas como m´ ximo un
a
a
a
a
proceso en este sistema? Si empleamos una tabla de p´ ginas de dos niveles,
a
´
en la que la tabla de primer nivel contiene unicamente 8 entradas, ¿cu´ ntas
a
tablas de segundo nivel son necesarias para un proceso que requiere 1000
p´ ginas? Razona la respuesta.
a
75. Lee las siguientes afirmaciones y razona si est´ s de acuerdo o no. Pon un
a
ejemplo que apoye tu respuesta.
En un sistema de paginaci´ n, utilizar una tabla de p´ ginas de dos niveo
a
les suele producir un ahorro en el consumo de memoria en comparaci´ n
o
con el uso de una tabla de p´ ginas de un nivel.
a
En un sistema de paginaci´ n, el n´ mero de p´ ginas que como m´ ximo
o
u
a
a
se le puede asignar a un proceso es mayor en el caso de utilizar una
´
tabla de p´ ginas de dos niveles que en el caso de utilizar una unica
a
tabla de p´ ginas.
a
76. Considera un sistema de paginaci´ n en donde se puede puede direccionar
o
un m´ ximo de 1GB y el tama˜ o de p´ gina es de 32KB. Sabiendo que cada
a
n
a
palabra de 16 bits se direcciona independientemente, calcula el ahorro de
memoria que obtendriamos de representar la tabla de p´ ginas de un procea
so que est´ utilizando 90MB de memoria, cuando empleamos una tabla de
a
p´ ginas de dos niveles en lugar de tener una tabla de un solo nivel. En el
a
sistema de dos niveles, debes considerar que se emplear´ el mismo n´ mero
a
u
de bits para cada nivel. Adem´ s, cada entrada en la tabla de p´ ginas precisa
a
a
de 16 bytes. Razona la respuesta.
77. Se considera un sistema de paginaci´ n en donde se puede direccionar un
o
m´ ximo de 1GB y el tama˜ o de p´ gina es de 32KB. Sabiendo que el tama˜ o
a
n
a
n
de la palabra es de 64 bits y que cada palabra se direcciona independientemente, calcula el ahorro de memoria que obtendr´amos de representar la taı
bla de p´ ginas de un proceso que est´ utilizando 256 MB de memoria cuando
a
a
se emplea una tabla de p´ ginas de dos niveles en lugar de tener una tabla de
a
un solo nivel. En el de dos niveles, debes considerar que se emplear´ el misa
mo n´ mero de bits para cada nivel. Adem´ s cada entrada de p´ ginas precisa
u
a
a
de 8 bytes. Razona la respuesta.

4.2.

Pol´ticas de Reemplazo
ı

Para realizar los siguientes ejercicios ten en cuenta que:
Inicialmente los marcos est´ n libres.
a
La pol´tica de reemplazo s´ lo se utiliza a partir del momento en que no hayan
ı
o
marcos libres.
36
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

39

100 Ejercicios resueltos de Sistemas Operativos - UJI
78. Considera un sistema de paginaci´ n bajo demanda en el que un proceso que
o
tiene asignados 3 marcos de p´ gina genera la siguiente secuencia de referena
cias a p´ ginas:
a
2,3,1,2,4,5,2,3,1,5,6,1
Indica qu´ accesos producir´an un fallo de p´ gina cuando se utilizan las
e
ı
a
pol´ticas de reemplazo local FIFO y LRU. Sabemos que este proceso se va a
ı
ejecutar muy a menudo en el sistema y nos interesa tener el mejor sistema de
´
paginaci´ n para el. ¿Valdr´a la pena aumentar el n´ mero de marcos de p´ gio
ı
u
a
na asignados al proceso hasta 4 para alguna de estas dos pol´ticas? Indica el
ı
n´ mero de fallos de p´ gina que se producir´an en esta nueva situaci´ n para
u
a
ı
o
cada algoritmo.
79. Considera un sistema de paginaci´ n bajo demanda en el que un proceso que
o
tiene asignados 4 marcos de p´ gina genera la siguiente secuencia de referena
cias a p´ ginas:
a
4,2,4,1,6,3,2,5,6,4,1,3,5,3
Indica qu´ accesos producir´an un fallo de p´ gina cuando se utiliza cada una
e
ı
a
´
de las pol´ticas de reemplazo local FIFO, LRU y optima.
ı
80. Se ha de dise˜ ar un sistema de paginaci´ n bajo demanda en el que se utiliza
n
o
una pol´tica de reemplazo local con tres marcos de p´ gina asignados para
ı
a
cada proceso. Para la siguiente secuencia de referencias a p´ ginas: 1, 2, 3,
a
2, 1, 5, 6, 3, 2, 1 ¿qu´ pol´tica de reemplazo producir´a un resultado m´ s
e
ı
ı
a
´
cercano a la optima, FIFO o LRU? Demu´ stralo indicando los accesos que
e
producir´an fallo de p´ gina para cada uno de los m´ todos.
ı
a
e

37
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

40

100 Ejercicios resueltos de Sistemas Operativos - UJI
Cap´tulo 5
ı

Ejercicios Generales
81. Escribe un programa para limpiar el directorio /tmp. Recorriendo todos los
subdirectorios que se encuentren a partir de /tmp, el programa debe eliminar
todos los ficheros (de cualquier tipo) que pertenezcan al usuario que ejecuta
el programa para los que haga m´ s de 2 semanas que no se acceden. En el
a
caso concreto de los directorios, se deben eliminar los que ya estaban vac´os
ı
o queden vac´os al eliminar los ficheros que conten´an, independientemente
ı
ı
´
del tiempo transcurrido desde su ultimo acceso. Adem´ s, debe identificar
a
los ficheros para los que haga m´ s de 1 semana pero menos de 2 que no se
a
acceden e informar al usuario de que ser´ n borrados pr´ ximamente.
a
o
El programa recibir´ como par´ metro una direcci´ n de correo electr´ nico a
a
a
o
o
la que enviar´ dos mensajes. El primer mensaje indicar´ en el asunto Fichea
a
ros borrados de /tmp y contendr´ el nombre de cada fichero o directorio que
a
se haya eliminado. El segundo mensaje indicar´ en el asunto Ficheros que se
a
borrar´ n en breve y contendr´ los nombres de los ficheros para los que haga
a
a
m´ s de 1 semana pero menos de 2 que no se acceden. Los nombres de los
a
ficheros en los dos mensajes deber´ n estar ordenados alfab´ ticamente. Para
a
e
el env´o de los mensajes de correo electr´ nico se emplear´ la orden: mail
ı
o
a
 direcci´ n correo  -s asunto Para realizar las acciones requeridas, el
o
programa deber´ crear procesos y tuber´as de acuerdo al esquema que se
a
ı
muestra en la figura 5.1.

Figura 5.1: Esquema de funcionamiento.
´
F´jate en que un unico proceso recorre el directorio /tmp y escribe en una
ı
tuber´a los nombres de los ficheros y directorios que borra y en otra tuber´a
ı
ı
39
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

41

100 Ejercicios resueltos de Sistemas Operativos - UJI
distinta los nombres de los ficheros que se borrar´ n pr´ ximamente. Otros dos
a
o
procesos independientes son los encargados de la ordenaci´ n de los nombres
o
´
almacenados en las tuber´as y, por ultimo, dos procesos m´ s enviar´ n los
ı
a
a
mensajes de correo electr´ nico. En total, debes manejar 5 procesos y cuatro
o
tuber´as como se muestra en la figura 5.1.
ı
82. Escribe un programa que cree dos procesos de manera que, a partir de dos
directorios dados como par´ metros de entrada, uno de los procesos realice
a
una b´ squeda de los ficheros con terminaci´ n .c y .h que se encuentren a
u
o
´
partir del primer directorio dado (deber´ s recorrer el arbol de directorios) y
a
env´e su ruta a trav´ s de una tuber´a a un segundo proceso que crear´ una
ı
e
ı
a
copia en el segundo directorio. La copia s´ lo se debe realizar si se dan las
o
dos siguientes condiciones:
El fichero encontrado no existe en el segundo directorio.
´
El fichero existe en el segundo directorio, pero el tiempo de ultima
modificaci´ n de la copia es anterior al del original.
o
Para realizar la copia de cada fichero otro proceso deber´ ejecutar el siguiente
a
comando: cp ruta fichero segundo directorio
83. Escribe un programa en C que convierta ficheros en formato postscript a formato pdf. El programa recibir´ como par´ metros una serie de nombres de
a
a
directorios y, para cada uno de ellos, deber´ crear un proceso que lo recorra
a
recursivamente. Todos estos procesos deben ejecutarse en paralelo. Cada vez
que se encuentre un fichero cuyo nombre termine en .ps, se considerar´ que
a
se trata de un fichero en formato postscript y se obtendr´ un fichero equivaa
lente en formato pdf mediante el comando:
ps2pdf  ruta f ichero.ps   ruta f ichero.pdf 
Una vez generado el fichero pdf, se debe borrar el fichero postscript correspondiente. Puedes suponer que el n´ mero de enlaces duros de cada fichero
u
postscript ser´ siempre uno.
a
Antes de la finalizaci´ n de cada proceso, se deber´ informar de los siguientes
o
a
aspectos:
- N´ mero de ficheros transformados.
u
- Ahorro de espacio en disco medido en n´ mero de bloques.
u
- Tiempo total en segundos que se ha empleado en procesar el directorio
correspondiente.
84. Escribe un programa en C que realice una simulaci´ n de la asignaci´ n de
o
o
grupos de pr´ cticas a los estudiantes matriculados en una determinada asiga
natura. El programa recibir´ como par´ metros en la l´nea de comandos:
a
a
ı
40
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

42

100 Ejercicios resueltos de Sistemas Operativos - UJI
- el n´ mero de estudiantes matriculados en la asignatura,
u
- la cantidad de grupos de pr´ cticas que existen, y
a
- el n´ mero de plazas en cada grupo de pr´ cticas.
u
a
Puedes suponer que el n´ mero de estudiantes siempre ser´ menor o igual que
u
a
el n´ mero total de plazas de pr´ cticas disponibles, es decir, que
u
a
numero estudiantes ≤ cantidad de grupos × plazas por grupo
El programa deber´ crear una serie de hilos que se ejecuten en paralelo, de
a
modo que haya un hilo que simule el comportamiento de cada estudiante.
Adem´ s, habr´ otro hilo gestor que ser´ el encargado de realizar la asignaa
a
a
ci´ n de estudiantes a grupos de pr´ cticas, teniendo en cuenta las preferencias
o
a
de cada estudiante. Cada hilo correspondiente a un estudiante debe realizar
las siguientes acciones:
a) Decidir el orden de preferencia de los grupos de pr´ cticas.
a
b) Enviar de una en una al gestor una serie de peticiones de inclusi´ n en
o
los grupos de pr´ cticas seg´ n el orden decidido en el punto anterior. La
a
u
petici´ n que se env´a al gestor debe contener dos datos:
o
ı
- n´ mero de estudiante que hace la petici´ n, y
u
o
- n´ mero de grupo que se solicita.
u
Para cada petici´ n recibida, el hilo gestor debe mostrar en la pantalla un
o
mensaje que indique:
- Si la acepta porque hay plazas libres en el grupo y el estudiante a´ n no
u
tiene ning´ n grupo asignado.
u
- Si la rechaza porque el grupo solicitado no tiene plazas disponibles.
- Si la rechaza porque a ese alumno ya se le hab´a asignado otro grupo
ı
de pr´ cticas (es decir, se le hab´a aceptado una petici´ n anterior).
a
ı
o
F´jate en que los estudiantes env´an peticiones para todos los grupos de
ı
ı
pr´ cticas ordenadas seg´ n sus preferencias. El gestor procesar´ todas las soa
u
a
licitudes y rechazar´ las correspondientes a estudiantes que ya tienen asiga
nado un grupo de pr´ cticas o a grupos que est´ n llenos.
a
a
La comunicaci´ n entre los hilos correspondientes a los estudiantes y el hilo
o
gestor debe realizarse a trav´ s de un buffer intermedio en el que se podr´ n
e
a
almacenar como m´ ximo 20 peticiones. Debes garantizar que todos los aca
cesos al buffer sean correctos.
Para simplificar la soluci´ n del problema, considera que ya est´ n definidas
o
a
las siguientes variables globales, estructuras y funciones:
41
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

43

100 Ejercicios resueltos de Sistemas Operativos - UJI
/* Variables globales.
IMPORTANTE. Debes inicializarlas en el programa principal seg´n los
u
par´metros de la l´nea de comandos.
a
ı
int num_estudiantes, cantidad_grupos, plazas_por_grupo;

*/

/* Tipos de datos */
typedef struct {
int num_estudiante;
int num_grupo;
} TipoPeticion;
/* Funciones */
int *decide_preferencias(int num_estudiante);
/* Devuelve un vector de enteros en el que los grupos de pr´cticas
a
est´n ordenados seg´n las preferencias del estudiante */
a
u
int grupo_asignado(int num_estudiante);
/* Devuelve el n´mero de grupo de pr´cticas asignado a un estudiante.
u
a
Si todav´a no se le ha asignado ning´n grupo devuelve -1 */
ı
u
int hay_plazas_libres(int num_grupo);
/* Devuelve 1 si hay plazas libres en el grupo dado o 0 en caso contrario */
void asignar_grupo(int num_estudiante, int num_grupo);
/* Asigna el estudiante al grupo indicado */

En concreto, se te pide que proporciones:
- La funci´ n que simula el comportamiento de un estudiante.
o
- La funci´ n que simula el gestor de peticiones.
o
- El programa principal, que debe incluir todas las inicializaciones que
sean necesarias, la creaci´ n de todos los hilos y la espera hasta que
o
todos ellos terminen.
- Todos los tipos, variables, etc. que puedas necesitar y que no aparezcan
ya definidos en el enunciado.
85. Escribe un programa en C que imprima los ficheros regulares que encuentre en una serie de directorios dados como par´ metros. Para cada directorio
a
se deber´ crear un proceso que lo recorra recursivamente de modo que toa
dos ellos se ejecuten en paralelo. Los ficheros cuyo tama˜ o sea menor de
n
2 Mbytes se enviar´ n a la cola de impresi´ n ps1 y el resto se enviar´ a la
a
o
a
cola de impresi´ n ps2. Para enviar un fichero a una cola de impresi´ n se deo
o
ber´ ejecutar el siguiente comando: lpr -P cola fichero. Antes de la
a
finalizaci´ n del programa se deber´ indicar el tiempo total empleado en la
o
a
ejecuci´ n del mismo.
o
NOTA: Se incluye una versi´ n de la funci´ n de recorrido recursivo de un
o
o
directorio:

42
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

44

100 Ejercicios resueltos de Sistemas Operativos - UJI
void recorre(char ∗nombredir) {
DIR ∗d;
struct dirent ∗entrada;
struct stat datos;
char ∗ruta;
printf(empiezo a recorrer %sn, nombredir);
d= opendir(nombredir);
if (d== NULL) {
printf(Error al abrir el directorion);
return;
}
entrada= readdir(d);
while (entrada!= NULL) {
if (strcmp(entrada-d name, .) 
strcmp(entrada-d name, ..)) {
ruta= malloc(strlen(nombredir)+strlen(entrada-d name)+2);
sprintf(ruta, %s/ %s, nombredir, entrada-d name);
lstat (ruta, datos);
if (S ISDIR (datos.st mode))
recorre (ruta);
printf (Procesando %sn, ruta);
free (ruta);
}
entrada= readdir(d);
}
closedir(d);
}

86. Se desea realizar una simulaci´ n de una granja de gallos en la que hay dos
o
tipos de gallos: dom´ sticos y salvajes. En la granja, la vida de un gallo cuale
quiera consiste b´ sicamente en comer, beber y dormir en este orden. Para
a
realizar la acci´ n de beber se accede a una fuente de agua com´ n para todos
o
u
los gallos y se evita que un gallo salvaje se junte con gallos dom´ sticos o con
e
otros gallos salvajes mientras dure la acci´ n. Por contra, un gallo dom´ stico
o
e
si que puede realizar la acci´ n de beber junto a otros gallos dom´ sticos. Reso
e
pecto a las acciones de comer y dormir no se establece ninguna condici´ n.
o
La granja cuenta con un total de 30 gallos, 25 de ellos dom´ sticos y el resto
e
salvajes. Utiliza el programa que se acompa˜ a para resolver las siguientes
n
cuestiones:
a) En primer lugar, se desea mejorar la funci´ n dormir de manera que ahoo
ra tendr´ dos par´ metros de entrada: void dormir (int id, int tiempo);.
a
a
La variable id es un identificador del gallo y tiempo ser´ el tiempo que
a
va a dormir (un valor entero aleatorio entre 7 y 10). Modifica el programa principal de manera que, para cada gallo de la simulaci´ n, se env´e
o
ı
ambos par´ metros a las funciones correspondientes galloDomestico y
a
´
galloSalvaje, y modifica estas tambi´ n de forma conveniente.
e
b) Realiza las modificaciones oportunas de manera que se simule la vida
de los gallos dom´ sticos y salvajes tal y como se explica en el enunciae
do.
43
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

45

100 Ejercicios resueltos de Sistemas Operativos - UJI
c) Limita el n´ mero de gallos dom´ sticos realizando la acci´ n de beber al
u
e
o
mismo tiempo a 6.
#include stdio.h
#include stdlib.h
#include semaphore.h
#include pthread.h
#include unistd.h
#include time.h
#define N 30;
/∗ simula la vida de un gallo salvaje ∗/
void ∗galloSalvaje (void ∗nada){
while (1) {
comer(); /∗ funci´n que simula la acci´n de comer ∗/
o
o
beber(); /∗ funci´n que simula la acci´n de beber ∗/
o
o
dormir(); /∗ funci´n que simula la acci´n de dormir ∗/
o
o
}
pthread exit(NULL);
}
/∗ simula la vida de un gallo dom´stico ∗/
e
void ∗galloDomestico (void ∗nada){
while (1) {
comer();
/∗ funci´n que simula la acci´n de comer ∗/
o
o
beber();
/∗ funci´n que simula la acci´n de beber ∗/
o
o
dormir(); /∗ funci´n que simula la acci´n de dormir ∗/
o
o
}
pthread exit(NULL);
}
int main (int argc, char ∗argv[]) {
pthread t th[N];
int i;
for (i= 0; i 25; i++) /∗
pthread create (th[i],
for (i= 25; i N; i++) /∗
pthread create (th[i],

crea los gallos dom´sticos ∗/
e
NULL, galloDomestico, NULL);
crea los gallos salvajes ∗/
NULL, galloSalvaje, NULL);

for (i= 0; i N; i++)
pthread join(th[i], NULL);
exit(0);
}

87. Escribe un programa en C que ejecute en paralelo cuatro hilos. De ellos, tres
ser´ n productores de datos y uno consumidor. Los hilos se comunicar´ n a
a
a
trav´ s de un buffer intermedio en el que se podr´ n almacenar como m´ ximo
e
a
a
5 datos.
Cada hilo productor se encarga de generar como m´ ximo 1000 n´ meros aleaa
u
torios. Para cada n´ mero generado, comprueba si es un n´ mero primo y, de
u
u
ser as´, lo almacena en el buffer. El hilo consumidor extrae n´ meros del bufı
u
fer y escribe en pantalla aquellos n´ meros para los que la suma de sus d´gitos
u
ı
44
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

46

100 Ejercicios resueltos de Sistemas Operativos - UJI
sea impar.
El programa terminar´ cuando el hilo consumidor haya escrito cincuenta
a
n´ meros en pantalla o cuando cada productor haya generado sus 1000 n´ meu
u
ros aleatorios. Antes de terminar, el programa informar´ de la cantidad de
a
n´ meros primos procesados y la cantidad de n´ meros aleatorios generados.
u
u
Puedes considerar que las siguientes funciones ya est´ n definidas:
a
int numero_aleatorio(void);
int es_primo(int numero);
int suma_digitos(int numero);

88. Escribe un programa para limpiar el directorio /tmp. Recorriendo todos los
subdirectorios que se encuentren a partir de /tmp, el programa debe eliminar
todos los ficheros regulares que pertenezcan al usuario que ejecuta el programa y cuyo tama˜ o sea superior a 2 Mbytes. Adem´ s, se deben eliminar
n
a
los directorios que ya estaban vac´os o queden vac´os al eliminar los ficheros
ı
ı
que conten´an. Tambi´ n se deben identificar los ficheros regulares que ocuı
e
pen m´ s de 1 Mbyte pero menos de 2 Mbytes para informar al usuario de
a
que esos ficheros est´ n ocupando una gran cantidad de espacio en disco.
a
El programa recibir´ como par´ metro una direcci´ n de correo electr´ nico a
a
a
o
o
la que enviar´ dos mensajes. El primer mensaje indicar´ en el asunto Fichea
a
ros borrados de /tmp y contendr´ el nombre de cada fichero o directorio que
a
se haya eliminado. El segundo mensaje indicar´ en el asunto Ficheros que
a
ocupan mucho espacio en /tmp y contendr´ el nombre y tama˜ o en bytes de
a
n
cada fichero cuyo tama˜ o est´ entre 1 y 2 Mbytes.
n
e
Para el env´o de los mensajes de correo electr´ nico se emplear´ la orden:
ı
o
a
mail direcci´ n correo -s asunto
o
Para realizar las acciones requeridas, el programa deber´ crear procesos y
a
tuber´as de acuerdo al esquema que se muestra en la figura 5.2.
ı

Figura 5.2: Esquema de funcionamiento.
´
F´jate en que un unico proceso recorre el directorio /tmp y escribe en una
ı
tuber´a los nombres de los ficheros y directorios que borra y en otra tuber´a
ı
ı
distinta los nombres de los ficheros que ocupan m´ s de 1 Mbyte. Otros dos
a
45
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

47

100 Ejercicios resueltos de Sistemas Operativos - UJI
procesos independientes son los encargados de enviar los mensajes de correo
electr´ nico. En total, debes manejar 3 procesos y 2 tuber´as como se muestra
o
ı
en la figura.
89. Un programador quiere simular el movimiento de camiones y barcos en una
estaci´ n petroqu´mica. Los barcos llegan a la estaci´ n para descargar de sus
o
ı
o
bodegas el producto crudo que posteriormente se refina y se carga en los
tanques de los camiones que van llegando a la estaci´ n. Las condiciones de
o
funcionamiento de la estaci´ n que ha de tener en cuenta el programador son:
o
a) La estaci´ n tiene capacidad para atender a tantos camiones como lleo
guen.
b) La estaci´ n tiene capacidad para atender a los barcos de uno en uno.
o
c) Mientras se atiende a un barco no se puede atender a nuevos camiones
pero s´ a los camiones que hubiesen ya en la estaci´ n.
ı
o
En base a estas condiciones, el programador escribe el siguiente c´ digo:
o
#include
#include
#include
#include
#include

stdio.h
stdlib.h
semaphore.h
pthread.h
unistd.h

#define N vehiculos 200
sem t estacion;
void ∗camion (void ∗ nada) {
long int n= (long int) pthread self();
printf (Llega camion: %ldn, n);
sem wait(estacion);
printf (Se atiende camion: %ldn, n);
sleep(random() %3+2); /∗ tiempo invertido en atender al camion ∗/
printf (Sale camion: %ldn, n);
pthread exit(NULL);
}
void ∗barco (void ∗ nada) {
long int n= (long int) pthread self();
printf (Llega barco: %ldn, n);
sem wait(estacion);
printf(Se atiende barco: %ldn, n);
sleep(random() %5+5); /∗ tiempo invertido en atender al barco ∗/
printf (Sale barco: %ldn, n);
sem post(estacion);
pthread exit(NULL);
}
int main(int argc, char ∗argv[]) {
int i;
pthread t th;

46
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

48

100 Ejercicios resueltos de Sistemas Operativos - UJI
for (i= 0; i N vehiculos; i++) {
sleep(random() %3);
if (random() %100  95)
pthread create(th, NULL, camion, NULL);
else
pthread create(th, NULL, barco, NULL);
}
for (i= 0; i N vehiculos; i++)
pthread join(th, NULL);
return 0;
}

Se pide:
a) Puesto que el c´ digo anterior contiene errores y no satisface las tres
o
condiciones descritas en el enunciado, corrige los errores e indica las
modificaciones necesarias para que se satisfagan.
b) Haz las modificaciones oportunas (al programa resultado del apartado
anterior) para que, sin dejar de cumplirse las condiciones de funcionamiento a) y b), se cumpla tambi´ n la siguiente nueva condici´ n:
e
o
1) Mientras se atiende a un barco no se puede atender a nuevos camiones y el barco s´ lo puede ser atendido cuando no hayan cao
miones utilizando la estaci´ n.
o
´
90. Escribe un programa que ejecute la siguiente l´nea de ordenes igual que lo
ı
har´a un int´ rprete de comandos:
ı
e
grep palabra file1 | sort -r | uniq  file salida

y que adem´ s nos diga cu´ nto tiempo (en segundos) ha tardado en ejecua
a
a
a
tarse completamente. Tanto file1, file salida como palabra ser´ n par´ metros
dados por tu programa en la l´nea de comandos en ese orden.
ı

91. Simula el movimiento de personas que entran y salen de una sucursal bancaria teniendo en cuenta las siguientes condiciones. En dicha sucursal, durante
el horario de atenci´ n al p´ blico, un furg´ n blindado puede llegar para la
o
u
o
carga y descarga de dinero. Para que se realice esta operaci´ n, es necesario
o
que no haya clientes en el interior de la sucursal, por lo que los guardias de
seguridad del furg´ n deben esperar a que la sucursal se encuentre vac´a ano
ı
tes de iniciar la operaci´ n. La sucursal puede atender a tantos clientes como
o
lleguen, no hay l´mite de capacidad. Utiliza el programa que se acompa˜ a,
ı
n
que contiene alg´ n error, y da dos soluciones al problema, una por cada una
u
de las siguientes condiciones respecto al momento de llegada del furg´ n a la
o
sucursal:
a) Que no se impida la entrada de nuevos clientes a la sucursal mientras
existan clientes en su interior.
b) Que s´ se impida la entrada de nuevos clientes a la sucursal.
ı
47
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

49

100 Ejercicios resueltos de Sistemas Operativos - UJI
(Recuerda que en ambos casos, la operaci´ n no puede empezar hasta que la
o
sucursal est´ sin clientes, como ya se deja claro en el enunciado)
e
#include
#include
#include
#include
#include
#include

stdlib.h
stdio.h
semaphore.h
pthread.h
unistd.h
time.h

#define N hilos 200
void ∗cliente (void ∗n){
int id= ∗(int ∗)n;
sleep
printf
sleep
printf
sleep
printf

(random() %100);
(Llega el cliente %dn, id);
(random() %3+2); /∗ tiempo de espera en la cola ∗/
(Se atiende al cliente: %dn, id);
(random() %3+2); /∗ tiempo invertido en la operacion ∗/
(Sale el cliente %dn,id);

pthread exit(NULL);
}

void ∗furgon (void ∗n){
int id= ∗(int ∗)n;
sleep
printf
printf
sleep
printf

(random() %100);
(LLega el furgon %dn, id);
(Se atiende a los guardias %dn, id);
(random() %5 + 5); /∗ tiempo invertido en la operacion ∗/
(Se va el furgon %dn,id);

pthread exit(NULL);
}
int main ( int argc, char ∗ argv[]) {
pthread t hilo;
int i, furgon creado= 0;
for (i= 0; i N hilos; i++)
if (furgon creado== 1)
pthread create(hilo, NULL, cliente, (void ∗) i);
else
if (random() %100  95)
pthread create(hilo, NULL, cliente, (void ∗) i);
else {
pthread create(hilo, NULL, furgon, (void ∗) i);
furgon creado= 1;
}
return 0;
}

92. Se desea realizar una implementaci´ n en C del problema cl´ sico del productoro
a
consumidor. Las caracter´sticas propias de esta implementaci´ n son:
ı
o
48
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

50

100 Ejercicios resueltos de Sistemas Operativos - UJI
Los hilos se comunican a trav´ s de un b´ ffer intermedio de capacidad
e
u
10.
El hilo productor produce un n´ mero aleatorio de datos.
u
El hilo consumidor escribe el n´ mero consumido en la pantalla.
u
El programa termina cuando se hayan consumido los datos producidos.
En concreto, se pide:
a) Escribe el programa principal que: crea, inicializa y destruye los sem´ foa
ros; crea dos hilos, uno productor y otro consumidor; espera a que se
cumpla la condici´ n de terminaci´ n del programa.
o
o
b) Escribe el c´ digo del hilo productor y del consumidor.
o
c) Escribe las modificaciones oportunas para que en lugar de un hilo productor hayan tres que se ejecuten en paralelo y garantizando que se
consumen todos los datos.
d) Escribe las modificaciones oportunas para que en lugar de un hilo consumidor hayan dos que se ejecuten en paralelo (es decir, tendremos tres
productores y dos consumidores).
NOTA: Se incluye una versi´ n incompleta del c´ digo.
o
o
#include
#include
#include
#include
#include
#include

stdio.h
stdlib.h
semaphore.h
pthread.h
unistd.h
time.h

#define MAX 10
int buffer[MAX];
int pos productor= 0, pos consumidor= 0;
int menos uno= 0;
int genera dato(void);
int numero aleatorio(void);
void ∗productor (void ∗nada) {
int i, dato, n= numero aleatorio();
for(i=0; i n; i++){
dato= generar dato();
sleep(random() %2);
buffer[pos productor]= dato;
pos productor= (pos productor+1) %MAX;
}
buffer[pos productor]= -1;
pos productor= (pos productor+1) %MAX;
pthread exit(NULL);
}

49
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

51

100 Ejercicios resueltos de Sistemas Operativos - UJI
void ∗consumidor (void ∗nada) {
int i,dato;
while(menos uno!= 1){
dato= buffer[pos consumidor];
pos consumidor= (pos consumidor+1) %MAX;
if (dato== -1)
menos uno++;
printf ( %d , dato);
sleep(random( %2));
}
pthread exit(NULL);
}

93. Escribe un programa en C que, a partir de una serie de directorios que se proporcionan como par´ metros, los recorra recursivamente y calcule cu´ ntos ena
a
laces simb´ licos hay dentro de ellos. El programa debe crear un hilo por cada
o
directorio dado, de modo que el recorrido de cada uno de ellos se ejecute en
paralelo con el resto. Por simplicidad, se considerar´ que nunca habr´ m´ s
a
a a
de 10 directorios como par´ metros. Tanto para los directorios dados como
a
par´ metros como para los que aparezcan en el recorrido recursivo de los
a
mismos, s´ lo se deben tener en cuenta aquellos directorios que pertenezcan
o
al usuario que ejecuta el programa. El resto de directorios simplementen se
ignorar´ n.
a
Nota. No se pide el n´ mero de enlaces que hay en cada uno de los directorios
u
dados, sino la suma de todos ellos. Es decir, el resultado del programa debe
´
ser un unico n´ mero.
u
94. Se desea escribir un programa que implemente una primera aproximaci´ n a
o
la generaci´ n de un cierto tipo de claves criptogr´ ficas. Para ello, se deben
o
a
encontrar pares de n´ meros p y q tales que:
u
p y q sean primos;
(p − 1)/2 y (q − 1)/2 tambi´ n sean primos.
e
Si se cumplen estas dos condiciones, entonces el producto p ∗ q nos proporciona una clave criptogr´ fica. Para resolver el problema planteado se utiliza
a
una estrategia productor-consumidor mediante tres procesos que se ejecutan
en paralelo de la siguiente forma:
Dos procesos productores se encargan de analizar secuencialmente todos los n´ meros de un rango dado para averiguar cu´ les de ellos son
u
a
primos.
Un proceso consumidor que, repetidamente, toma un par cualquiera de
n´ meros primos de los encontrados por los productores y comprueba
u
si dicho par de n´ meros cumplen los requisitos necesarios para generar
u
una clave criptogr´ fica. En caso afirmativo, muestra por pantalla los
a
dos n´ meros utilizados y el valor de la clave criptogr´ fica generada. En
u
a
50
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

52

100 Ejercicios resueltos de Sistemas Operativos - UJI
cualquier caso, estos dos n´ meros utilizados ser´ n descartados y no se
u
a
volver´ n a considerar.
a
Al acabar la ejecuci´ n, el programa debe indicar la cantidad total de n´ meros
o
u
primos que han encontrado los productores, as´ como el n´ mero de claves
ı
u
criptogr´ ficas generadas.
a
Escribe un programa en C que proporcione una soluci´ n v´ lida al problema
o a
utilizando tuber´as.
ı
95. Resuelve el ejercicio 94 utilizando 3 hilos (2 productores y 1 consumidor)
que ahora se comunican a trav´ s de un buffer intermedio de capacidad 20
e
elementos en lugar de utilizar tuber´as. La sincronizaci´ n en la ejecuci´ n de
ı
o
o
los hilos se debe realizar mediante sem´ foros.
a
96. Escribe un programa que, a partir de un directorio dado como par´ metro
a
comprima y a˜ ada al fichero /tmp/comprimido.zip todos los ficheros regun
´
lares que encuentre a partir de dicho directorio (deber´ recorrer el arbol de
a
directorios a partir de dicho directorio) tales que:
Pertenezcan al usuario que ejecuta el programa.
´
Se hayan modificado desde la ultima hora (medida desde el inicio de la
ejecuci´ n del programa).
o
Para comprimir un fichero fich y a˜ adirlo al fichero /tmp/comprimido.zip utin
liza el programa zip de la siguiente forma: $ zip /tmp/comprimido.zip fich.
Ten en cuenta que no se pueden hacer varias acciones zip sobre el mismo archivo de manera simult´ nea. Adem´ s, por cada fichero regular que encuena
a
tres que cumpla las condiciones anteriores deber´ s enviar su ruta a trav´ s
a
e
de una tuber´a a otro proceso que crear´ un fichero llamado usuario.log que
ı
a
contendr´ un informe ordenado, utiliza el comando sort, de las rutas de los
a
ficheros regulares a˜ adidos al archivo zip.
n
97. En una reuni´ n de atletismo, hay tres tipos de atletas participantes. Por un
o
lado los lanzadores de jabalina, por otro los lanzadores de martillo y por
´
ultimo los corredores. A primera hora del d´a se les da acceso libre a las insı
talaciones para entrenar. Por seguridad, se han establecido unas restricciones
de uso de las instalaciones:
a) Un atleta lanzador de martillo o de jabalina debe esperar para entrar
en las instalaciones a que no haya ning´ n atleta, sea del tipo que sea,
u
utiliz´ ndolas.
a
b) Si hay un atleta lanzador de jabalina o de martillo utilizando las instalaciones, un nuevo atleta que llegue, sea del tipo que sea, debe esperar
para entrar en las instalaciones a que el que ya hay la abandone.
51
J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7

53

100 Ejercicios resueltos de Sistemas Operativos - UJI
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos
100 Ejercicios resueltos de Sistemas Operativos

Más contenido relacionado

La actualidad más candente

Unidad 4-generacion-de-numeros-pseudoaleatorios1
Unidad 4-generacion-de-numeros-pseudoaleatorios1Unidad 4-generacion-de-numeros-pseudoaleatorios1
Unidad 4-generacion-de-numeros-pseudoaleatorios1Juan Carlos Martinez Garcia
 
Modelos de Simulacion
Modelos de SimulacionModelos de Simulacion
Modelos de SimulacionJammil Ramos
 
1.5 Procesos de simulación.
1.5 Procesos de simulación. 1.5 Procesos de simulación.
1.5 Procesos de simulación. avengers92
 
Mapa Mental I.O #InvestigaciónDeOperaciones #ISC
Mapa Mental I.O #InvestigaciónDeOperaciones #ISCMapa Mental I.O #InvestigaciónDeOperaciones #ISC
Mapa Mental I.O #InvestigaciónDeOperaciones #ISCRenè Nvt
 
Analisis sensibilidad
Analisis sensibilidadAnalisis sensibilidad
Analisis sensibilidadevo_perro
 
Expo Simscript
Expo SimscriptExpo Simscript
Expo SimscriptAdaluisa
 
Presentacion sistemas distribuidos
Presentacion sistemas distribuidosPresentacion sistemas distribuidos
Presentacion sistemas distribuidosYohany Acosta
 
Analisis grafico de sensibilidad
Analisis grafico de sensibilidadAnalisis grafico de sensibilidad
Analisis grafico de sensibilidadTito Ibarra
 
Presentación simulacion
Presentación simulacionPresentación simulacion
Presentación simulacionisakatime
 
practica-de-simulacion-con-arena
practica-de-simulacion-con-arenapractica-de-simulacion-con-arena
practica-de-simulacion-con-arenafelroc
 
“APLICACIÓN DEL MODELO PERT CPM”
“APLICACIÓN DEL MODELO PERT  CPM”“APLICACIÓN DEL MODELO PERT  CPM”
“APLICACIÓN DEL MODELO PERT CPM”patovg12
 

La actualidad más candente (20)

Unidad 4-generacion-de-numeros-pseudoaleatorios1
Unidad 4-generacion-de-numeros-pseudoaleatorios1Unidad 4-generacion-de-numeros-pseudoaleatorios1
Unidad 4-generacion-de-numeros-pseudoaleatorios1
 
Modelos de Simulacion
Modelos de SimulacionModelos de Simulacion
Modelos de Simulacion
 
1.5 Procesos de simulación.
1.5 Procesos de simulación. 1.5 Procesos de simulación.
1.5 Procesos de simulación.
 
Mapa Mental I.O #InvestigaciónDeOperaciones #ISC
Mapa Mental I.O #InvestigaciónDeOperaciones #ISCMapa Mental I.O #InvestigaciónDeOperaciones #ISC
Mapa Mental I.O #InvestigaciónDeOperaciones #ISC
 
Analisis sensibilidad
Analisis sensibilidadAnalisis sensibilidad
Analisis sensibilidad
 
Unidad 1. admón de op. 1 sistemas de producción
Unidad 1. admón de op. 1 sistemas de producciónUnidad 1. admón de op. 1 sistemas de producción
Unidad 1. admón de op. 1 sistemas de producción
 
Programación dinámica
Programación  dinámicaProgramación  dinámica
Programación dinámica
 
SISTEMAS DE APOYO A LA TOMA DE DECISIONES
SISTEMAS DE APOYO A LA TOMA DE DECISIONESSISTEMAS DE APOYO A LA TOMA DE DECISIONES
SISTEMAS DE APOYO A LA TOMA DE DECISIONES
 
Expo Simscript
Expo SimscriptExpo Simscript
Expo Simscript
 
Dinamica de-sistemas
Dinamica de-sistemasDinamica de-sistemas
Dinamica de-sistemas
 
Clasificacion de modelos
Clasificacion de modelosClasificacion de modelos
Clasificacion de modelos
 
Presentacion sistemas distribuidos
Presentacion sistemas distribuidosPresentacion sistemas distribuidos
Presentacion sistemas distribuidos
 
Analisis grafico de sensibilidad
Analisis grafico de sensibilidadAnalisis grafico de sensibilidad
Analisis grafico de sensibilidad
 
METODOS Y MODELOS POO
METODOS Y MODELOS POOMETODOS Y MODELOS POO
METODOS Y MODELOS POO
 
Presentación simulacion
Presentación simulacionPresentación simulacion
Presentación simulacion
 
practica-de-simulacion-con-arena
practica-de-simulacion-con-arenapractica-de-simulacion-con-arena
practica-de-simulacion-con-arena
 
Sintesis de simulacion
Sintesis de simulacionSintesis de simulacion
Sintesis de simulacion
 
“APLICACIÓN DEL MODELO PERT CPM”
“APLICACIÓN DEL MODELO PERT  CPM”“APLICACIÓN DEL MODELO PERT  CPM”
“APLICACIÓN DEL MODELO PERT CPM”
 
Metodologia estructurada
Metodologia estructuradaMetodologia estructurada
Metodologia estructurada
 
Mapa conceptual "Simulaciones"
Mapa conceptual "Simulaciones"Mapa conceptual "Simulaciones"
Mapa conceptual "Simulaciones"
 

Destacado

100 ejercicios de estadistica resueltos
100 ejercicios de estadistica resueltos100 ejercicios de estadistica resueltos
100 ejercicios de estadistica resueltosLuis Elias
 
Ejercicios sistemas operativos I
Ejercicios sistemas operativos IEjercicios sistemas operativos I
Ejercicios sistemas operativos IINÉS ARABIA DíAZ
 
Fundamentos Computadores II
Fundamentos Computadores IIFundamentos Computadores II
Fundamentos Computadores IIIván BM
 
Ingenieria de control ic09002
Ingenieria de control ic09002Ingenieria de control ic09002
Ingenieria de control ic09002Maestros Online
 
Control pid discreto.........
Control pid discreto.........Control pid discreto.........
Control pid discreto.........Marcos Abreu
 
Practica 4 sistema operativo
Practica 4 sistema operativoPractica 4 sistema operativo
Practica 4 sistema operativoEsa_chiqui_96
 
practica windows
practica windowspractica windows
practica windowssusinina
 
Ejercicios de sistemas operativos
Ejercicios de sistemas operativosEjercicios de sistemas operativos
Ejercicios de sistemas operativosdaw106
 
Practica pid labview
Practica pid labviewPractica pid labview
Practica pid labviewPablo Lopez
 
Practica taller bios setup
Practica taller bios setupPractica taller bios setup
Practica taller bios setupProfvilca
 
Sistemas operaticos modernos
Sistemas operaticos modernosSistemas operaticos modernos
Sistemas operaticos modernosnelvi francisco
 
Ejercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos IIEjercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos IIPablo Macon
 

Destacado (20)

100 ejercicios de estadistica resueltos
100 ejercicios de estadistica resueltos100 ejercicios de estadistica resueltos
100 ejercicios de estadistica resueltos
 
Ejercicios sistemas operativos I
Ejercicios sistemas operativos IEjercicios sistemas operativos I
Ejercicios sistemas operativos I
 
Ejercicios Resueltos LEVIN
Ejercicios Resueltos LEVINEjercicios Resueltos LEVIN
Ejercicios Resueltos LEVIN
 
Monegros
MonegrosMonegros
Monegros
 
Fundamentos Computadores II
Fundamentos Computadores IIFundamentos Computadores II
Fundamentos Computadores II
 
Ingenieria de control ic09002
Ingenieria de control ic09002Ingenieria de control ic09002
Ingenieria de control ic09002
 
Ingenieria de control mr
Ingenieria de control mrIngenieria de control mr
Ingenieria de control mr
 
Control pid discreto.........
Control pid discreto.........Control pid discreto.........
Control pid discreto.........
 
Practica 4 sistema operativo
Practica 4 sistema operativoPractica 4 sistema operativo
Practica 4 sistema operativo
 
practica windows
practica windowspractica windows
practica windows
 
Controlador PID
Controlador PIDControlador PID
Controlador PID
 
Ejercicios de sistemas operativos
Ejercicios de sistemas operativosEjercicios de sistemas operativos
Ejercicios de sistemas operativos
 
100 ejercicios resueltos estadistica
100 ejercicios resueltos estadistica100 ejercicios resueltos estadistica
100 ejercicios resueltos estadistica
 
EJERCICIO DE WINDOWS 03
EJERCICIO DE WINDOWS 03EJERCICIO DE WINDOWS 03
EJERCICIO DE WINDOWS 03
 
EJERCICIO DE WINDOWS 02
EJERCICIO DE WINDOWS 02EJERCICIO DE WINDOWS 02
EJERCICIO DE WINDOWS 02
 
Practica pid labview
Practica pid labviewPractica pid labview
Practica pid labview
 
Practica taller bios setup
Practica taller bios setupPractica taller bios setup
Practica taller bios setup
 
Inf 4º ejercicios unidad 1
Inf 4º ejercicios unidad 1Inf 4º ejercicios unidad 1
Inf 4º ejercicios unidad 1
 
Sistemas operaticos modernos
Sistemas operaticos modernosSistemas operaticos modernos
Sistemas operaticos modernos
 
Ejercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos IIEjercicios de planificación Sistemas Operativos II
Ejercicios de planificación Sistemas Operativos II
 

Similar a 100 Ejercicios resueltos de Sistemas Operativos

100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativosPatriciaDavila16
 
Tutorial de visual_c_3
Tutorial de visual_c_3Tutorial de visual_c_3
Tutorial de visual_c_3Luis TC
 
Tutorial wampserver
Tutorial wampserverTutorial wampserver
Tutorial wampservererika_ortiz
 
Sistema_de_gestion_de_asistencias_de_ase.pdf
Sistema_de_gestion_de_asistencias_de_ase.pdfSistema_de_gestion_de_asistencias_de_ase.pdf
Sistema_de_gestion_de_asistencias_de_ase.pdfasantosz
 
Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1Pedro Garcia Mtz
 
Manual análisis de algoritmos
Manual análisis de algoritmosManual análisis de algoritmos
Manual análisis de algoritmosBeat Winehouse
 
Manual de análisis y diseño de algoritmos
Manual de análisis y diseño de algoritmosManual de análisis y diseño de algoritmos
Manual de análisis y diseño de algoritmosJaro
 
Investigación de operaciones
Investigación de operacionesInvestigación de operaciones
Investigación de operacionesabelino0909
 
Investigación de operaciones
Investigación de operaciones Investigación de operaciones
Investigación de operaciones Abelino Almanza
 
Curso de lab view seis horas
Curso de lab view seis horasCurso de lab view seis horas
Curso de lab view seis horasRaul Carrillo
 
19441255 manual-de-reparacion-pc
19441255 manual-de-reparacion-pc19441255 manual-de-reparacion-pc
19441255 manual-de-reparacion-pcAndresDominguez20
 
Manual de reparación pc bolilla i - introduccion - ver2
Manual de reparación pc   bolilla i - introduccion - ver2Manual de reparación pc   bolilla i - introduccion - ver2
Manual de reparación pc bolilla i - introduccion - ver2Aldo Hernán Zanabria Gálvez
 

Similar a 100 Ejercicios resueltos de Sistemas Operativos (20)

100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos
 
Operativos
OperativosOperativos
Operativos
 
Rcorlandorondon301305 17
Rcorlandorondon301305 17Rcorlandorondon301305 17
Rcorlandorondon301305 17
 
Tutorial de visual_c_3
Tutorial de visual_c_3Tutorial de visual_c_3
Tutorial de visual_c_3
 
Tutorial de visual c++3
Tutorial  de visual c++3Tutorial  de visual c++3
Tutorial de visual c++3
 
00
0000
00
 
Guia de trabajo 05
Guia de trabajo 05Guia de trabajo 05
Guia de trabajo 05
 
01.introduccion metricauml
01.introduccion metricauml01.introduccion metricauml
01.introduccion metricauml
 
Tutorial wampserver
Tutorial wampserverTutorial wampserver
Tutorial wampserver
 
Sistema_de_gestion_de_asistencias_de_ase.pdf
Sistema_de_gestion_de_asistencias_de_ase.pdfSistema_de_gestion_de_asistencias_de_ase.pdf
Sistema_de_gestion_de_asistencias_de_ase.pdf
 
Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1Algoritmos y estructura de datos 1
Algoritmos y estructura de datos 1
 
Maple 10 para matemáticas básicas
Maple 10 para matemáticas básicasMaple 10 para matemáticas básicas
Maple 10 para matemáticas básicas
 
Manual analisis-de-algoritmos
Manual analisis-de-algoritmosManual analisis-de-algoritmos
Manual analisis-de-algoritmos
 
Manual análisis de algoritmos
Manual análisis de algoritmosManual análisis de algoritmos
Manual análisis de algoritmos
 
Manual de análisis y diseño de algoritmos
Manual de análisis y diseño de algoritmosManual de análisis y diseño de algoritmos
Manual de análisis y diseño de algoritmos
 
Investigación de operaciones
Investigación de operacionesInvestigación de operaciones
Investigación de operaciones
 
Investigación de operaciones
Investigación de operaciones Investigación de operaciones
Investigación de operaciones
 
Curso de lab view seis horas
Curso de lab view seis horasCurso de lab view seis horas
Curso de lab view seis horas
 
19441255 manual-de-reparacion-pc
19441255 manual-de-reparacion-pc19441255 manual-de-reparacion-pc
19441255 manual-de-reparacion-pc
 
Manual de reparación pc bolilla i - introduccion - ver2
Manual de reparación pc   bolilla i - introduccion - ver2Manual de reparación pc   bolilla i - introduccion - ver2
Manual de reparación pc bolilla i - introduccion - ver2
 

Más de Viviana Trujillo

Sistemas de Operacion - Presentación Servidor NAS
Sistemas de Operacion - Presentación Servidor NASSistemas de Operacion - Presentación Servidor NAS
Sistemas de Operacion - Presentación Servidor NASViviana Trujillo
 
Sistemas de Operacion - Presentación Servidor LDAP
Sistemas de Operacion - Presentación Servidor LDAPSistemas de Operacion - Presentación Servidor LDAP
Sistemas de Operacion - Presentación Servidor LDAPViviana Trujillo
 
Sistemas de Operacion - Presentación Servidor de Correo
Sistemas de Operacion - Presentación Servidor de CorreoSistemas de Operacion - Presentación Servidor de Correo
Sistemas de Operacion - Presentación Servidor de CorreoViviana Trujillo
 
Sistemas de Operacion - Presentación Servidor DNS
Sistemas de Operacion - Presentación Servidor DNSSistemas de Operacion - Presentación Servidor DNS
Sistemas de Operacion - Presentación Servidor DNSViviana Trujillo
 
Ejemplo de una Matriz de Comparación de Estudio de Factibilidad
Ejemplo de una Matriz de Comparación de Estudio de FactibilidadEjemplo de una Matriz de Comparación de Estudio de Factibilidad
Ejemplo de una Matriz de Comparación de Estudio de FactibilidadViviana Trujillo
 
Presentación Multimedia - Inbound Marketing
Presentación Multimedia - Inbound MarketingPresentación Multimedia - Inbound Marketing
Presentación Multimedia - Inbound MarketingViviana Trujillo
 
Presentación Multimedia - Responsive vs Adaptive
Presentación Multimedia - Responsive vs AdaptivePresentación Multimedia - Responsive vs Adaptive
Presentación Multimedia - Responsive vs AdaptiveViviana Trujillo
 
Presentación Multimedia - Django
Presentación Multimedia - DjangoPresentación Multimedia - Django
Presentación Multimedia - DjangoViviana Trujillo
 
Presentación Multimedia - HTML5
Presentación Multimedia - HTML5Presentación Multimedia - HTML5
Presentación Multimedia - HTML5Viviana Trujillo
 
Parcial II de Sistema de Operación – Semestre 201415
Parcial II de Sistema de Operación – Semestre 201415Parcial II de Sistema de Operación – Semestre 201415
Parcial II de Sistema de Operación – Semestre 201415Viviana Trujillo
 
Parcial II de Sistema de Operación – Semestre 201322
Parcial II de Sistema de Operación – Semestre 201322Parcial II de Sistema de Operación – Semestre 201322
Parcial II de Sistema de Operación – Semestre 201322Viviana Trujillo
 
Parcial I de Sistema de Operación – Semestre 201415
Parcial I de Sistema de Operación – Semestre 201415Parcial I de Sistema de Operación – Semestre 201415
Parcial I de Sistema de Operación – Semestre 201415Viviana Trujillo
 
Parcial II Multimedia - Semestre 201322
Parcial II Multimedia - Semestre 201322Parcial II Multimedia - Semestre 201322
Parcial II Multimedia - Semestre 201322Viviana Trujillo
 
Parcial I de Multimedia - Semestre 201322
Parcial I de Multimedia - Semestre 201322Parcial I de Multimedia - Semestre 201322
Parcial I de Multimedia - Semestre 201322Viviana Trujillo
 
Manejo de archivos y directorios
Manejo de archivos y directoriosManejo de archivos y directorios
Manejo de archivos y directoriosViviana Trujillo
 

Más de Viviana Trujillo (17)

Sistemas de Operacion - Presentación Servidor NAS
Sistemas de Operacion - Presentación Servidor NASSistemas de Operacion - Presentación Servidor NAS
Sistemas de Operacion - Presentación Servidor NAS
 
Sistemas de Operacion - Presentación Servidor LDAP
Sistemas de Operacion - Presentación Servidor LDAPSistemas de Operacion - Presentación Servidor LDAP
Sistemas de Operacion - Presentación Servidor LDAP
 
Sistemas de Operacion - Presentación Servidor de Correo
Sistemas de Operacion - Presentación Servidor de CorreoSistemas de Operacion - Presentación Servidor de Correo
Sistemas de Operacion - Presentación Servidor de Correo
 
Sistemas de Operacion - Presentación Servidor DNS
Sistemas de Operacion - Presentación Servidor DNSSistemas de Operacion - Presentación Servidor DNS
Sistemas de Operacion - Presentación Servidor DNS
 
Ejemplo de una Matriz de Comparación de Estudio de Factibilidad
Ejemplo de una Matriz de Comparación de Estudio de FactibilidadEjemplo de una Matriz de Comparación de Estudio de Factibilidad
Ejemplo de una Matriz de Comparación de Estudio de Factibilidad
 
Presentación Multimedia - Inbound Marketing
Presentación Multimedia - Inbound MarketingPresentación Multimedia - Inbound Marketing
Presentación Multimedia - Inbound Marketing
 
Presentación Multimedia - Responsive vs Adaptive
Presentación Multimedia - Responsive vs AdaptivePresentación Multimedia - Responsive vs Adaptive
Presentación Multimedia - Responsive vs Adaptive
 
Presentación Multimedia - Django
Presentación Multimedia - DjangoPresentación Multimedia - Django
Presentación Multimedia - Django
 
Presentación Multimedia - HTML5
Presentación Multimedia - HTML5Presentación Multimedia - HTML5
Presentación Multimedia - HTML5
 
Parcial II de Sistema de Operación – Semestre 201415
Parcial II de Sistema de Operación – Semestre 201415Parcial II de Sistema de Operación – Semestre 201415
Parcial II de Sistema de Operación – Semestre 201415
 
Parcial II de Sistema de Operación – Semestre 201322
Parcial II de Sistema de Operación – Semestre 201322Parcial II de Sistema de Operación – Semestre 201322
Parcial II de Sistema de Operación – Semestre 201322
 
Parcial I de Sistema de Operación – Semestre 201415
Parcial I de Sistema de Operación – Semestre 201415Parcial I de Sistema de Operación – Semestre 201415
Parcial I de Sistema de Operación – Semestre 201415
 
Parcial II Multimedia - Semestre 201322
Parcial II Multimedia - Semestre 201322Parcial II Multimedia - Semestre 201322
Parcial II Multimedia - Semestre 201322
 
Parcial I de Multimedia - Semestre 201322
Parcial I de Multimedia - Semestre 201322Parcial I de Multimedia - Semestre 201322
Parcial I de Multimedia - Semestre 201322
 
Parcial I
Parcial IParcial I
Parcial I
 
Manejo de archivos y directorios
Manejo de archivos y directoriosManejo de archivos y directorios
Manejo de archivos y directorios
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 

Último

FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVGiustinoAdesso1
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperiomiralbaipiales2016
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoJosDanielEstradaHern
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIIsauraImbrondone
 

Último (20)

FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCV
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° grado
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 

100 Ejercicios resueltos de Sistemas Operativos

  • 1.
  • 2. 100 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 IG11 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 3. Edita: Publicacions de la Universitat Jaume I. Servei de Comunicació i Publicacions Campus del Riu Sec. Edifici Rectorat i Serveis Centrals. 12071 Castelló de la Plana http://www.tenda.uji.es e-mail: publicacions@uji.es Col·lecció Sapientia, 30 www.sapientia.uji.es ISBN: 978-84-693-0148-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/2.5/es/deed.ca J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 4. ´ Indice general ´ Indice general Prefacio 1. Procesos e Hilos 1.1. Procesos . . . . . o 1. 1.2. Planificaci´ n . . Procesos e Hilos 1.3. Hilos . . . .. . . . .. 1.1. Procesos . . .. . . .. . . . . . . .. . . . . . . . . . . .. .. . . . .. . . .. . . .. . . . . . . .. 1.2. Planificaci´ n . . . . . . . . . . . . o . . . . . . . . . . .. .. . . . .. . . .. . . .. . . . . . . .. 4 1 . . . . 1 6 . . . . 8 .. .. . . . . . 13 . . 6 . 1 1 . . . . . . . . . . . . . 15 . . 13 8 . . .. . . . .. .. .. . .. .. .. . . . . . 15 . . 1813 . . . 2. Comunicaci´ n y Sincronizaci´ n de Procesos o o 1.3. Tuber´as. .. .. . . . .. .. .. . .. .. .. . . . .. .. .. . .. Hilos 2.1. ı . . 2.2. Sem´ foros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 19 3.2. Archivos y Directorios . . . . . . . . . . . . . . . . . . . . . . . 31 2. Comunicaci´ n y Sincronizaci´ n de Procesos o o 2015 3. Gesti´ n de Archivos y Directorios . . . . . . . . . . . . . . . . . . . 29 . . 2015 2.1. o Tuber´as . . . . . . . . . ı . 3.1. Sistemas de Archivos . .. .. .. . . . .. .. .. . .. .. .. . . . .. .. .. . .. .. .. . . . . . 29 . . 2419 . . . 2.2. Sem´ foros . . . . a . 3. Gesti´ n de Archivos y Directorios o 4. Gesti´ n de Memoria o 3.1. Sistemas de Archivos . . . . 4.1. Paginaci´ n . . . . . . . . . . . . . o 3.2. Pol´ticas de y Directorios. .. . . . .. Archivos Reemplazo . 4.2. ı . . .. . . .. 4. Gesti´ n Generales o 5. Ejerciciosde Memoria . . . . . . . . . . . . . . . . . . . . . . . .. .. .. . . . .. .. .. . .. . 29 33 35 . . . . . . . . 3329 . . . . 35 . .. .. . . . . . 36 . . 3531 3835 4.1. Paginaci´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3835 o 6. Solucionesıticas de Reemplazo . . . . . . . . . . . . . . . . . . . . 57 . . 4.2. Pol´ . 3936 39 5. Ejercicios Generales 4139 6. Soluciones 5857 V V J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 5. Prefacio Los Sistemas Operativos han constituido tradicionalmente una materia troncal en los planes de estudio de todas las titulaciones de Inform´ tica. Las asignaturas a que desarrollan estos contenidos incluyen aspectos te´ ricos fundamentales como o procesos e hilos, gesti´ n de memoria, comunicaci´ n, sincronizaci´ n y sistemas de o o o archivos. Adem´ s, es frecuente incluir una parte pr´ ctica que permite que el alumno a a conozca no s´ lo los principios te´ ricos, sino tambi´ n c´ mo se aplican en sistemas o o e o operativos reales. El objetivo de este libro es proporcionar suficiente material pr´ ctico para apoa yar la docencia, tanto presencial, desarrollada en clases de problemas o en laboratorio, 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 libro son el resultado de su recopilaci´ n a lo largo de cuatro cursos, desde el a˜ o o n 2004, del material utilizado en la asignatura de Sistemas Operativos de la Ingenier´a T´ cnica en Inform´ tica de Gesti´ n de la Universitat Jaume I de Castell´ n. ı e a o o Dicha asignatura se estructura en 3 cr´ ditos de teor´a, 1,5 cr´ ditos de problemas y e ı e 1,5 cr´ ditos de laboratorio. No obstante, el material incluido es bastante gen´ rico e e y puede ser empleado en cualquier asignatura b´ sica de Sistemas Operativos. a El contenido de este libro se divide en 6 cap´tulos cuya descripci´ n se indica a ı o continuaci´ n: o 1. Gesti´ n de Procesos e Hilos: planificaci´ n de procesos, jerarqu´a de procesos o o ı y uso de las llamadas al sistema para la gesti´ n de procesos e hilos. o 2. Comunicaci´ n y Sincronizaci´ n de Procesos: problemas cl´ sicos de la seco o a ci´ n cr´tica, productor-consumidor y lector-escritor; y llamadas al sistema o ı para el manejo de sem´ foros y tuber´as. a ı 3. Gesti´ n de Archivos y Directorios: sistemas de archivos tipo FAT y nodo-i, o llamadas al sistema para la gesti´ n de archivos y directorios. o 4. Gesti´ n de Memoria: memoria virtual, paginaci´ n y pol´ticas de reemplazo. o o ı 5. Problemas generales: problemas cuya resoluci´ n incluya conceptos tratados o en varios de los cap´tulos anteriores. ı III J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 6. 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´ gina Web http://ig11.uji.es como apoyo a este maa terial, para mantenerlo actualizado incluyendo m´ s ejercicios, p´ ginas de ayuda, fe a a de erratas, etc. ´ Por ultimo, no queremos dejar de expresar nuestro agradecimiento a los profesores Gustavo Casa˜ , Isabel Gracia y Antonio Castellanos, todos ellos del Den partamento de Lenguajes y Sistemas Inform´ ticos de la Universitat Jaume I, que a tambi´ n han participado en la impartici´ n de la asignatura durante otros cursos y, e o como no, en la elaboraci´ n de algunos de los ejercicios propuestos de este libro. o Marzo, 2010 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 7. Cap´tulo 1 ı Procesos e Hilos 1.1. Procesos 1. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante. o ı #include #include #include #include #include sys/types.h sys/wait.h unistd.h stdio.h 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, getpid(), getppid()); if (pid!= 0) 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´ digo para comprobarlo. Contesta a las siguieno tes preguntas: ¿Por qu´ aparecen mensajes repetidos? e Presta atenci´ n al orden de terminaci´ n de los procesos, o o • ¿qu´ observas? e • ¿por qu´ ? e 1 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 8. 2. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante. o ı #include #include #include #include #include sys/types.h sys/wait.h unistd.h stdio.h 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, getpid(), getppid()); if (pid== 0) 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´ digo para comprobarlo. Presta atenci´ n al oro o den de terminaci´ n de los procesos, ¿qu´ observas? ¿por qu´ ? o e e ´ 3. Dibuja la estructura del arbol de procesos que obtendr´amos al ejecutar el ı siguiente fragmento de c´ digo: o for (num= 0; num 2; num++) { nuevo= fork(); /∗ 1 ∗/ if (nuevo== 0) break; } nuevo= fork(); /∗ 2 ∗/ nuevo= fork(); /∗ 3 ∗/ printf(Soy el proceso %d y mi padre es %dn, getpid(), getppid()); 4. Considerando el siguiente fragmento de c´ digo: o 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´ procesos se ha cambiado la imagen del proceso usando e la funci´ n execlp. o 2 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 9. 5. Dibuja la jerarqu´a de procesos que resulta de la ejecuci´ n del siguiente c´ diı o o go. Indica para cada nuevo proceso el valor de las variables i y j en el momento de su creaci´ n. o for (i= 0; i 2; i++) { pid= getpid(); for (j= 0; j i+2; j++) { nuevo= fork(); /∗ 1 ∗/ if (nuevo!= 0) { nuevo= fork(); /∗ 2 ∗/ break; } } if (pid!= getpid()) break; } 6. Estudia el siguiente c´ digo y escribe la jerarqu´a de procesos resultante. Deso ı pu´ s, compila y ejecuta el c´ digo para comprobarlo (deber´ s a˜ adir llamadas e o a n al sistema getpid, getppid y wait para conseguirlo). #include #include #include #include #include sys/types.h sys/wait.h unistd.h stdio.h 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´ n del siguiente c´ diı o o ´ 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´ s, a haz que se informe de los tiempos de ejecuci´ n de las aplicaciones xload y o kcalc que se generen as´ como del tiempo total de ejecuci´ n. Para calcular el ı o tiempo transcurrido, puedes utilizar la funci´ n time() de la librer´a est´ ndar o ı a time.h. La llamada time(NULL) devuelve los segundos transcurridos desde las 00:00:00 del 1/1/1970 hasta el instante de la llamada. 3 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 10. int main (int argc, char ∗argv[]) { int i, j; pid t pid, nuevo, nuevo1; time t ini, fin; for (i= 0; i 2; i++){ pid= getpid(); for (j= 0; j i+2; j++){ nuevo= fork(); if(nuevo== 0){ break; nuevo1= fork(); if(nuevo1== 0) execlp (xload, xload, NULL); } } if (pid!= getpid()) execlp (kcalc, kcalc, NULL); } return 0; } ´ 8. Escribe un programa que genere un arbol de procesos similar al que apa´ rece en la figura 1.1. Los valores de profundidad y anchura del arbol ser´ n a dados como par´ metros de entrada por el usuario en cada ejecuci´ n. En el a o ejemplo, se considera que la profundidad es 5 y la anchura 3. Tu programa podr´ empezar, por ejemplo, de la siguiente manera: a #include stdio.h #include unistd.h #include stdlib.h int main (int argc, char ∗argv[]) { int i; int prof, anch; if (argc!= 3) exit(0); profundidad= atoi(argv[1]); /∗ profundidad ∗/ anchura= atoi(argv[2]); /∗ anchura ∗/ /∗ completar aqu´ ∗/ ı printf(Soy el proceso %d y mi padre es %dn, getpid(), getppid()); sleep (2); return 0; } ´ Modifica el programa anterior para que la expansi´ n en anchura del arbol se o produzca s´ lo en aquellos niveles de profundidad par (y distinta de cero). En o la figura 1.2 se muestra un ejemplo. 9. Escribe el fragmento de c´ digo que genera la jerarqu´a de procesos que se o ı muestra en la figura 1.3 para profundidad n. 4 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 11. ´ Figura 1.1: Arbol de profundidad 5 y anchura 3. ´ Figura 1.2: Arbol de profundidad 5 y anchura 3, que s´ lo o se expande en anchura para los niveles pares distintos de cero. Figura 1.3: Jerarqu´a de procesos con profundidad n = 3. ı 10. Observa el siguiente fragmento de c´ digo que trata de medir el tiempo de o ejecuci´ n del programa prueba.exe. Indica qu´ problemas se producen, por o e qu´ y c´ mo resolverlos. e o time t inicio= 0, fin= 0; if (fork()!= 0) { wait (NULL); fin= time (NULL); printf (Tiempo empleado: %ldn, fin-inicio); } else { inicio= time (NULL); execlp (prueba.exe, prueba.exe, NULL); } 11. El programa siguiente pretende lanzar a ejecuci´ n una calculadora, kcalc, y o otra aplicaci´ n, xload, utilizando dos llamadas al sistema execlp consecutio vas. Antes de compilar y ejecutar el programa, piensa qu´ va a ocurrir. e #include #include #include #include #include sys/types.h sys/wait.h unistd.h stdio.h stdlib.h 5 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 10 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 12. int main (int argc, char ∗argv[]) { execlp printf execlp printf return (kcalc, kcalc, NULL); (¿Se imprimira este mensaje?n); (xload, xload, NULL); (¿Y este otro?n); 0; } Ahora, comp´lalo y ejecut´ lo y observa qu´ ocurre. ¿Has acertado? ¿Sabes ı a e por qu´ ? Modif´calo para que el usuario vea las dos aplicaciones al mismo e ı tiempo. Haz adem´ s que el proceso principal espere a la finalizaci´ n de ama o bas aplicaciones e informe de la finalizaci´ n de cada una especificando si o termin´ kcalc o xload. o 12. A˜ ade al programa resultado del problema 11 el c´ lculo del tiempo que cada n a uno de los procesos ha estado en ejecuci´ n, incluido el proceso padre, y sea o el proceso padre el que informe de ellos antes de finalizar. 13. Escribe un programa en C que pida por teclado dos cadenas de caracteres y despu´ s escriba cada cadena por pantalla car´ cter a car´ cter. La escritura de e a a cada cadena deber´ hacerla un proceso diferente. Recuerda utilizar la funci´ n a o fflush despu´ s de escribir cada car´ cter. El proceso padre deber´ esperar a e a a que termine el proceso hijo. Obtendr´ s resultados interesantes si despu´ s de a e escribir cada car´ cter introduces un retardo aleatorio para simular que su a escritura consume un cierto tiempo. 14. El siguiente programa en C lee repetidamente por teclado el nombre de un programa a ejecutar y pregunta si se debe esperar a que termine la ejecuci´ n o del mismo. El programa termina de ejecutarse cuando el usuario introduce como programa a ejecutar salir. #include stdio.h #include string.h #include stdbool.h int main (int argc, char ∗argv[]) { bool fin= false; char nombre prog[50], esperar[5]; while (!fin) { printf (Programa: ); scanf ( %s, nombre prog); if (strcmp(nombre prog, salir)!=0) { printf (Esperar? ); scanf ( %s, esperar); /∗ completar aqu´ ∗/ ı } else fin= true; } return 0; } 6 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 11 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 13. Realiza las modificaciones oportunas para que el programa cree un nuevo proceso que se encargue de ejecutar el programa indicado. Se debe utilizar la variable PATH para buscar el programa a ejecutar. Si dicho programa no se pudiese ejecutar por cualquier motivo, se deber´ mostrar un mensaje de a error e informar al usuario del valor actual de la variable PATH. En cualquier caso, el proceso inicial esperar´ o no la finalizaci´ n del programa dado en a o funci´ n de lo que el usuario haya indicado. Cuando no se espere la finalizao ci´ n del programa dado, se debe indicar el identificador del proceso creado. o Para comprobar el correcto funcionamiento de este programa se aconseja escribir otro programa que muestre por pantalla los n´ meros del 1 al 20 con u ´ un intervalo de 1 segundo entre cada n´ mero. Pide que sea este el programa u que se ejecute, unas veces esperando su finalizaci´ n y otras no. o 15. El siguiente programa recibe como par´ metro de entrada un n´ mero entero a u y muestra como resultado su factorial. #include stdio.h #include stdlib.h #include unistd.h long long int factorial (int n) { long long int resultado= 1; int num; for (num= 2; num= n; num++) { resultado= resultado∗ num; printf (Factorial de %d, resultado parcial %lldn, n, resultado); sleep (random() %3); } return resultado; } int main (int argc, char ∗argv[]) { if (argc== 2) printf (El factorial de %s es %lldn, argv[1], factorial (atoi (argv[1]))); return 0; } a) Escr´belo, comp´lalo y ejec´ talo para comprobar su funcionamiento. ı ı u b) Escribe un nuevo programa que reciba dos n´ meros enteros como par´ meu a tros de entrada y cree dos procesos de manera que cada uno calcule el factorial de uno de los n´ meros, de forma concurrente, y utilizando el u fichero ejecutable obtenido en el apartado anterior. ´ c) Haz que el proceso padre sea el ultimo en terminar, es decir, que espere a la terminaci´ n de sus procesos hijos. o 16. Generaliza la soluci´ n del problema 15 de manera que no est´ limitado a 2 o e el n´ mero de factoriales a calcular. Procede de la siguiente manera: u 7 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 12 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 14. a) Crea un proceso por cada factorial a calcular, y que todos los procesos se ejecuten de forma concurrente. b) El proceso padre deber´ esperar a todos los procesos hijos y mostrar un a mensaje a medida que vayan terminando indicando el PID del proceso finalizado. c) Modif´calo para que no se imprima mensaje cuando el primer proceso ı hijo finalice, pero si para los dem´ s. a 17. Escribe un programa, al que llamar´ s tiempo.c, cuyo objetivo es lanzar a ejea ´ cuci´ n un segundo programa que ser´ indicado en la l´nea de ordenes (junto o a ı con sus argumentos) como por ejemplo: $ tiempo ls -R -l /tmp. Adem´ s, haz a que se contabilice de forma aproximada el tiempo que tarda en ejecutarse el segundo programa. 1.2. Planificaci´ n o Para la realizaci´ n de los siguientes ejercicios ten en cuenta que: o La simulaci´ n comienza siempre con una interrupci´ n de reloj. o o Cuando un proceso cambia su estado de bloqueado a listo, y si en el enunciado no se indica nada al respecto, el proceso se situar´ siempre al final de a la cola de espera. 18. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 4 unidades de tiempo. o Las rutinas de tratamiento de las interrupciones hardware y de la interrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamieno to de la interrupci´ n software consume 2 unidades de tiempo. o Existen dos dispositivos de entrada/salida sobre los que se pueden realizar operaciones en paralelo. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo 1 a o (IH1) - Nivel 1: Interrupci´ n de reloj (IR) o - Nivel 2: Interrupci´ n hardware del dispositivo 2 (IH2) o - Nivel 3 (menos prioritario): Interrupci´ n software (IS) o Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa cesos es el siguiente: 8 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 13 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 15. Proc A CPU (2ut.) E/S D1 (2ut.) CPU (3ut.) Proc B CPU (5ut.) E/S D1 (1ut.) E/S D2 (5ut.) CPU (1ut) CPU (1ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a 19. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 5 unidades de tiempo. o Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento o de la interrupci´ n software consume 2 unidades de tiempo. o Existe un dispositivo de entrada/salida sobre el que se pueden realizar operaciones en paralelo con la CPU. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de a o E/S (IH) - Nivel 1: Interrupci´ n de reloj (IR) o - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa cesos es el siguiente: Proc A CPU (3ut.) E/S (3ut.) CPU (2ut.) Proc B CPU (8ut.) E/S (1ut.) E/S (1ut.) CPU (1ut.) CPU (1ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a 20. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 4 unidades de tiempo. o Las rutinas de tratamiento de las interrupciones hardware y de la interrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamieno to de la interrupci´ n software consume 2 unidades de tiempo. o Existen un dispositivo de entrada/salida sobre el que se pueden realizar operaciones en paralelo con la CPU. 9 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 14 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 16. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de a o E/S (IH) - Nivel 1: Interrupci´ n de reloj (IR) o - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa cesos es el siguiente: Proc A CPU (6ut.) E/S (1ut.) CPU (2ut.) Proc B CPU (2ut.) E/S (6ut.) CPU (3ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a 21. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 4 unidades de tiempo. o Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento o de la interrupci´ n software consume 1 unidad de tiempo. o Existe un dispositivo de entrada/salida sobre el que se pueden realizar operaciones en paralelo con la CPU. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de a o E/S (IH) - Nivel 1: Interrupci´ n de reloj (IR) o - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o Existen tres procesos A, B y C que est´ n listos para ejecutar, y que, inia cialmente, ser´ n atendidos en ese orden. El modelo que siguen estos tres a procesos es el siguiente: Proc A CPU (3ut.) Proc B CPU (6ut.) Proc C CPU (3ut.) E/S (10ut.) CPU (4ut.) E/S (4ut.) CPU (1ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo teniendo en cuenta que cuando un proceso pasa de bloqueado a listo se sit´ a al principio de la cola de espera. Indica tambi´ n aquellos instantes u e en los que los dispositivos de E/S est´ n siendo utilizados. a 10 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 15 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 17. 22. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 4 unidades de tiempo. o Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento o de la interrupci´ n software consume 2 unidades de tiempo. o Existe un dispositivo de entrada/salida sobre el que se pueden realizar operaciones en paralelo con la CPU. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de a o E/S (IH) - Nivel 1: Interrupci´ n de reloj (IR) o - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa cesos es el siguiente: Proc A CPU (3ut.) Proc B E/S (1ut.) CPU (1ut.) E/S (1ut.) CPU (1ut.) CPU (4ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a 23. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 4 unidades de tiempo. o Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento o de la interrupci´ n software consume 1 unidad de tiempo. o Existe un dispositivo de entrada/salida sobre el que se pueden realizar operaciones en paralelo con la CPU. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo de a o E/S (IH) - Nivel 1: Interrupci´ n de reloj (IR) o - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o 11 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 16 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 18. Existen dos procesos A y B que est´ n listos para ejecutar, de modo que inia cialmente A ser´ atendido antes que B. El modelo que siguen estos dos proa cesos es el siguiente: Proc A CPU (14ut.) Proc B CPU (2ut.) E/S (1ut.) CPU (1ut.) E/S (1ut.) CPU (1ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a 24. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. La interrupci´ n de reloj se produce cada 4 unidades de tiempo. o Las rutinas de tratamiento de las interrupciones hardware y de la interrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamieno to de la interrupci´ n software consume 2 unidades de tiempo. o Existen dos dispositivos de entrada/salida sobre los que se pueden realizar operaciones en paralelo. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n hardware del dispositivo 1 a o (IH1) - Nivel 1: Interrupci´ n hardware del dispositivo 2 (IH2) o - Nivel 2: Interrupci´ n de reloj (IR) o - Nivel 3 (menos prioritario): Interrupci´ n software (IS) o Existen tres procesos A, B y C que est´ n listos para ejecutar en ese mismo a orden. El modelo que siguen estos dos procesos es el siguiente: Proc A CPU (1ut.) E/S D1 (8ut.) CPU (1ut.) Proc B CPU (2ut.) E/S D2 (2ut.) CPU (7ut.) Proc C CPU (4ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo teniendo en cuenta adem´ s que cuando los procesos pasan de bloa queados a listos se sit´ an al principio de la cola de espera. Indica tambi´ n u e aquellos instantes en los que los dispositivos de E/S est´ n siendo utilizados. a 25. Considera un sistema con las siguientes caracter´sticas: ı Se utiliza el algoritmo de planificaci´ n Round-Robin con un quantum o de dos interrupciones de reloj. 12 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 17 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 19. La interrupci´ n de reloj se produce cada 5 unidades de tiempo. o Las rutinas de tratamiento de la interrupci´ n hardware y de la interrupo ci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamiento o de la interrupci´ n software consume 1 unidad de tiempo. o Existe un dispositivo de entrada/salida sobre el que se pueden realizar operaciones en paralelo con la CPU. Los niveles de prioridad de las interrupciones son: - Nivel 0 (m´ s prioritario): Interrupci´ n de reloj (IR) a o - Nivel 1: Interrupci´ n hardware del dispositivo de E/S (IH) o - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o Existen tres procesos A, B y C que est´ n listos para ejecutar en ese mismo a orden. El modelo que siguen estos tres procesos es el siguiente: Proc A CPU (15ut.) Proc B CPU (2ut.) E/S (1ut.) CPU (3ut.) Proc C CPU (1ut.) E/S (6ut.) CPU (4ut.) Indica qu´ proceso o interrupci´ n est´ atendiendo la CPU en cada unidad de e o a tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a 1.3. Hilos 26. Modifica el programa que se ilustra en el enunciado del problema 15 de manera que reciba dos n´ meros enteros como par´ metros de entrada y calcule u a sus factoriales de forma concurrente utilizando dos hilos que se ejecutan en paralelo con el hilo principal. El hilo principal deber´ esperar a que terminen a los otros dos hilos. Recuerda que para compilarlo se debe a˜ adir -lpthread a n la orden gcc. 27. Modifica el programa resultado del problema 26 de manera que no est´ lie mitado a 2 el n´ mero de factoriales a calcular. Haz que se creen tantos hilos u como par´ metros de entrada y que todos se ejecuten de forma concurrente. a El hilo principal debe esperar a que terminen el resto de hilos y, a medida que vayan terminando, muestre un mensaje que indique un identificador del hilo finalizado. 28. Modifica el programa soluci´ n del problema 13 para que la escritura de cao da cadena la haga un hilo diferente que se ejecutan en paralelo con el hilo principal. El hilo principal debe esperar a que terminen los otros dos hilos. 13 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 18 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 20. 29. El siguiente programa cuenta el n´ mero de veces que el car´ cter ’a’ o ’A’ u a aparece en el fichero indicado como par´ metro de entrada. Modif´calo para a ı ´ que ahora se cree un hilo y sea este el que ejecute la funci´ n cuenta. o #include #include #include #include #include #include unistd.h stdlib.h stdio.h sys/types.h sys/stat.h fcntl.h #define MAXLON 1000 void cuenta (char ∗nombre) { int pos, cont= 0, leidos; char cadena[MAXLON]; int fd; fd= open (nombre, O RDONLY); while ((leidos= read (mf, cadena, MAXLON))!= 0) for (pos= 0; pos leidos; pos++) if ((cadena[pos]== ’a’) || (cadena[pos]== ’A’)) cont++; printf (Fichero %s: %d caracteres ’a’ o ’A’ encontradosn, nombre, cont); close (fd); } int main (int argc, char ∗argv[]) { if (argc!= 2) { printf (Indica el nombre de un fichero.n); exit(0); } cuenta (argv[1]); return 0; } 30. Modifica el programa resultado del problema 29 para que se creen tantos hilos como ficheros especificados como par´ metros de entrada, y que todos a los hilos creados se ejecuten de forma concurrente. 31. Modifica el programa resultado del problema 30 para que el resultado de la b´ squeda lo informe el hilo principal cuando hayan terminado el resto de u hilos. Haz uso del paso de par´ metros a un hilo para que cada hilo pueda a devolver el resultado de la b´ squeda al hilo principal. u 32. Modifica el programa soluci´ n del problema 30 para obtener el n´ mero de o u espacios en blanco que hay en cada uno de los ficheros dados como par´ mea tros. Inicialmente, se deben crear tantos procesos como ficheros especificados. Cada proceso crear´ los hilos necesarios, que son los que realizar´ n la a a b´ squeda, atendiendo a la restricci´ n de que un hilo procesar´ como m´ xiu o a a mo K caracteres, donde K es una constante predefinida. Todos los hilos y procesos se han de ejecutar de forma concurrente. Cada proceso esperar´ a a que terminen sus hilos y mostrar´ el total de espacios encontrados. a 14 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 19 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 21. Cap´tulo 2 ı Comunicaci´ n y Sincronizaci´ n o o de Procesos 2.1. Tuber´as ı ´ 33. Se desea informar del tiempo invertido en ejecutar las ordenes ls | wc -l. Para ello se escribe el siguiente programa. Sin embargo, no informa de forma correcta. Modif´calo para que lo haga sin cambiar el n´ mero de procesos ı u que se est´ n generando. a #include #include #include #include #include #include stdio.h stdlib.h unistd.h time.h sys/types.h sys/wait.h int main (int argc, char ∗argv[]){ int tubo[2]; time t ini, fin; pipe(tubo); if(fork()==0){ if(fork()==0){ dup2(tubo[1],STDOUT FILENO); close(tubo[0]); close(tubo[1]); execlp(ls,ls,NULL); }else{ dup2(tubo[0],STDIN FILENO); close(tubo[0]); close(tubo[1]); execlp(wc,wc,-l,NULL); } } else{ printf(Tiempo invertido: %ld segundosn, fin-ini); } return 0; } 15 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 20 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 22. 34. Observa el siguiente fragmento de c´ digo que trata de realizar lo mismo que o si un usuario escribiera ls | sort en la l´nea de comandos de un sistema UNIX. ı Indica qu´ problemas se producen, por qu´ y c´ mo resolverlos. e e o int tubo[2]; pipe(tubo); if (fork()!=0) { dup2(tubo[1], STDIN FILENO); execlp(sort, sort, NULL); close(tubo[0]); close(tubo[1]); } else { dup2(tubo[0], STDOUT FILENO); close(tubo[1]); close(tubo[0]); execlp(ls, ls, NULL); } 35. Al ejecutar el siguiente programa, el proceso no termina. Explica por qu´ . e Da una soluci´ n que no cambie el n´ mero de procesos que se generan. o u int main(int argc, char ∗argv[]) { int tubo[2]; pipe(tubo); if (fork()==0) { if (fork()== 0) { dup2 (tubo[1], STDOUT FILENO); close(tubo[0]); close(tubo[1]); execlp(ls, ls, NULL); } else { dup2 (tubo[0], STDIN FILENO); close(tubo[0]); close(tubo[1]); execlp(wc, wc, -l, NULL); } } else { wait(NULL); printf (Fin del proceson); } } 36. Describe todas las situaciones que se producen o podr´an producirse al ejeı cutar el siguiente programa: int main (int argc,char ∗ argv[]) { int tubo[2]; FILE ∗fichero; char linea[MAX]; pipe(tubo); if(!(fichero=fopen(argv[1],r))){ printf(Error al abrir el fichero %sn,argv[1]); exit(2); } 16 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 21 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 23. while(fgets(linea,MAX,fichero)) write(tubo[1],linea,strlen(linea)); fclose(fichero); close (tubo[1]); dup2 (tubo[0],STDIN FILENO); close (tubo[0]); execlp(sort,sort,NULL); exit(0); } 37. Describe todas las situaciones que se producen o podr´an producirse al ejeı cutar el siguiente programa: int main(int argc, char ∗argv[]) { int tubo[2]; pipe(tubo); if (fork()==0) { close(tubo[0]); dup2(tubo[1], STDOUT FILENO); close(tubo[1]); execlp(ls, ls, NULL); } else { dup2(tubo[0], STDIN FILENO); close(tubo[0]); close(tubo[1]); wait(NULL); execlp(wc, wc, -l, NULL); } exit(0); } ´ 38. Escribe un programa que ejecute la siguiente l´nea de ordenes igual que lo ı har´a un int´ rprete de comandos: paste fich1 fich2 | sort | nl fich3. Debes ı e considerar que fich1, fich2 y fich3 ser´ n par´ metros dados a tu programa en a a la l´nea de comandos. ı 39. Escribe un programa que genere tres procesos en paralelo que colaboran para realizar las siguientes tareas: El primer proceso, utilizando la orden grep, encontrar´ las l´neas de un a ı fichero (fich1) que contienen una palabra (ambos dados como par´ mea tros en la l´nea de comandos) y las escribir´ en una tuber´a. ı a ı El segundo proceso, utilizando la orden grep, encontrar´ las l´neas de a ı un fichero (fich2) que contienen la misma palabra (ambos dados como par´ metros en la l´nea de comandos) y las escribir´ en la misma tuber´a. a ı a ı El tercer proceso, utilizando la orden wc, leer´ de la tuber´a las l´neas a ı ı producidas por los otros dos, las contar´ y escribir´ el resultado en un a a nuevo fichero (fich3) pasado como par´ metro en la l´nea de comandos. a ı As´, el programa se utilizar´ en la l´nea de comandos de la siguiente forma: ı a ı 17 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 22 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 24. $ programa palabra fich1 fich2 fich3. La figura 2.1 muestra gr´ ficamente la a comunicaci´ n requerida entre los procesos. o Figura 2.1: Esquema de funcionamiento. 40. Escribe un programa que genere tres procesos en paralelo que colaboran para realizar las siguientes tareas: El primer proceso leer´ l´neas de un fichero de texto dado como par´ mea ı a tro y escribir´ alternativamente en dos tuber´as las l´neas pares e impaa ı ı res del mismo. El segundo proceso, utilizando la orden grep, leer´ de la tuber´a que a ı contiene las l´neas pares y seleccionar´ aquellas l´neas que contengan ı a ı una palabra dada como par´ metro en la l´nea de comandos. El resultado a ı se almacenara en un fichero cuyo nombre estar´ formado por la palabra a dada seguido de .txt. El tercer proceso realiza una funci´ n similar sobre la tuber´a que cono ı tiene las l´neas impares, pero utilizando otra palabra tambi´ n dada coı e mo par´ metro. a La figura 2.2 muestra gr´ ficamente los procesos y c´ mo se comunican estos a o cuando el programa se ejecuta con los siguientes par´ metros: $ programa a fichero.txt uno dos Figura 2.2: Esquema de funcionamiento. 41. Escribe un programa que genere los procesos necesarios para que colaboren en realizar las siguientes tareas: Tarea 1: leer l´neas de un fichero de texto dado como par´ metro de ı a entrada y escribir alternativamente en dos tuber´as (tuber´a 1 y tuber´a ı ı ı 2) las l´neas pares e impares del mismo. ı 18 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 23 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 25. Tarea 2: utilizando el comando grep, leer de la tuber´a que contiene las ı l´neas pares y seleccionar aquellas l´neas que contengan una palabra ı ı dada como par´ metro en la l´nea de comandos. El resultado se enviar´ a a ı a trav´ s de la tuber´a 3. e ı Tarea 3: realizar una funci´ n similar a la tarea 2 pero sobre la tuber´a o ı que contiene las l´neas impares y utilizando otra palabra diferente tamı bi´ n dada como par´ metro de entrada. e a Tarea 4: ejecutar el comando sort sobre la informaci´ n que se recoja o por la tuber´a 3 de manera que se muestren de forma ordenada las l´neas ı ı recogidas. Observa la siguiente figura 2.3. En ella se representa de forma gr´ fica una a propuesta de los procesos que se deben generar y de c´ mo se comunican eso tos cuando el programa se ejecute con los siguientes par´ metros: $ programa a fichero.txt uno dos. Antes de comenzar a escribir la soluci´ n, determina si o est´ s de acuerdo o no con el esquema de funcionamiento propuesto. Si no lo a est´ s explica porqu´ . a e Figura 2.3: Esquema de funcionamiento. 2.2. Sem´ foros a 42. Dados los siguientes procesos y sus respectivas secuencias de c´ digo, indica o si existir´a o no situaci´ n de interbloqueo y explica por qu´ . En cualquier ı o e caso, indica tambi´ n la salida por pantalla y el valor final de los sem´ foros. e a Sup´ n que inicialmente todos los sem´ foros tienen valor cero. o a Proceso 1 --------printf(3); sem_post(s3); printf(4); sem_post(s2); sem_post(s1); Proceso 2 --------sem_wait(s1); printf(1); sem_wait(s3); sem_post(s4); sem_wait(s3); Proceso 3 --------sem_wait(s2); sem_wait(s4); printf(2); printf(5); sem_post(s3); 19 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 24 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 26. 43. Considera que los siguientes fragmentos de c´ digo se ejecutan en paralelo: o C´digo A: o --------printf(A1); sem_post(s1); sem_wait(s2); printf(A2); sem_wait(s2); sem_post(s1); printf(A3); C´digo B: o --------printf(B1); sem_wait(s1); printf(B2); sem_post(s3); sem_wait(s3); printf(B3); sem_post(s2); sem_wait(s1); sem_post(s2); printf(B4); Sabiendo que todos los sem´ foros est´ n inicializados a 0, indica todas las a a posibles salidas que puede proporcionar su ejecuci´ n y si se produce o no o interbloqueo para cada una de ellas. 44. Modifica el programa resultado del problema 31 para que, utilizando una variable global a la cual acceden todos los hilos (ll´ mala cuenta blancos), a estos acumulen el total de blancos encontrados. Utiliza un sem´ foro para a asegurar que los accesos a dicha variable se realizan de forma adecuada. Haz que el programa principal informe tambi´ n del resultado. e 45. Escribe un programa que ejecute tres hilos en paralelo a los que llamaremos A, B y C. El hilo A consta de tres bloques de c´ digo (a1, a2 y a3), el hilo B o de otros cuatro (b1, b2, b3 y b4) y el C de 3 (c1, c2 y c3). Haz que el c´ digo o de cada uno de estos bloques consista en repetir cinco veces los siguientes pasos: escribir un mensaje que lo identifique y realizar un retardo aleatorio. Ejecuta el programa para comprobar que los hilos A, B y C se ejecutan en paralelo y que sus bloques de c´ digo pueden alternarse de varias formas o distintas. Ahora, modifica el programa anterior para que los tres hilos se sincronicen de la siguiente forma: c1 no debe comenzar hasta que acabe a1 a2 no debe comenzar hasta que acabe b1 c2 no debe comenzar hasta que acabe b2 b3 no debe comenzar hasta que acabe a2 a3 no debe comenzar hasta que acabe c2 ´ b4 debe acabar el ultimo 46. Se crean tres hilos de manera que uno ejecuta escribirA, otro escribirB y el tercero escribirC. Introduce los sem´ foros oportunos para que la salida sea a ABCABCABCABCABCABC. #include stdio.h #include stdlib.h #include time.h 20 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 25 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 27. #include unistd.h #include pthread.h #define MAX 6 void ∗escribirA (void ∗nada){ int num; for(num=0;numMAX;num++){ printf(A); fflush(NULL); sleep(random() %3); } pthread exit(NULL); } void ∗escribirB (void ∗nada){ int num; for(num=0;numMAX;num++){ printf(B); fflush(NULL); sleep(random() %2); } pthread exit(NULL); } void ∗escribirC (void ∗nada){ int num; for(num=0;numMAX;num++){ printf(C); fflush(NULL); sleep(random() %2); } pthread exit(NULL); } int main (int argc, char ∗argv[]) { pthread t th1, th2, th3; srandom(time(NULL)); pthread create(th1, NULL, escribirA, NULL); pthread create(th2, NULL, escribirB, NULL); pthread create(th3, NULL, escribirC, NULL); pthread join(th1, NULL); pthread join(th2, NULL); pthread join(th3, NULL); return 0; } 47. Observa el siguiente fragmento de c´ digo donde los sem´ foros sem1 y sem2 o a est´ n inicializados a cero, un hilo ejecuta la funci´ n incrementa y otro la a o funci´ n decrementa. Describe los valores que, durante la ejecuci´ n, puede o o adoptar la variable num as´ como las posibles situaciones de interbloqueo ı que pudieran darse. 21 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 26 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 28. int num=10; void ∗ incrementa(void ∗nada) { int i; for (i=0;i3;i++){ sem wait(sem1); num++; printf(Inc. N´ mero = %dn,num); u sem post(sem1); } sem post(sem2); sleep(random() %3); sem wait(sem2); pthread exit(NULL); } void ∗ decrementa(void ∗nada){ int i; for (i=0;i3;i++){ sem post(sem1); sleep(random() %3); sem wait(sem2); num--; printf(Dec. N´ mero = %dn,num); u sem post(sem2); sem wait(sem1); } sem wait(sem1); pthread exit(NULL); } 48. Se crean dos hilos de manera que uno ejecuta escribirA y el otro escribirB. Introduce los sem´ foros oportunos para que la salida sea BABABABABA. a No olvides indicar los valores iniciales de los sem´ foros que utilices. a void ∗escribirA (void ∗p) { int i; for (i= 0; i 5; i++) { printf (A); fflush(NULL); sleep(random() %2); } pthread exit(NULL); } void ∗escribirB (void ∗p) { int i; for (i= 0;i 5; i++) { printf (B); fflush(NULL); sleep(random() %2); } pthread exit(NULL); } 49. Dado el siguiente c´ digo indica si existe o no interbloqueo. En el caso de o existir, indica claramente para cada hilo en qu´ l´nea de c´ digo se queda e ı o bloqueado y en qu´ iteraci´ n del bucle ocurre (valores de las variables i, j, e o k). Observa los valores de inicializaci´ n de los sem´ foros. o a 22 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 27 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 29. sem t s1, s2, s3; void ∗escribirA (void ∗p){ int i; srandom (pthread self ()); for (i= 0; i MAX; i++){ printf (A); sem post (s2); sem wait (s1); fflush (NULL); sleep (random() %3); } pthread exit (NULL); } void ∗escribirB (void ∗p){ int j; srandom (pthread self ()); for (j= 0; j MAX; j++){ sem wait (s2); printf (B); sem post (s3); sem wait (s2); fflush (NULL); sleep (random() %2); } pthread exit (NULL); } void ∗escribirC (void ∗p){ int k; srandom (pthread self ()); for (k= 0; k MAX; k++){ sem wait (s3); printf (C); sem post (s1); sem wait (s3); fflush (NULL); sleep (random() %2); } pthread exit (NULL); } int main (int argc, char ∗argv[]) { pthread t th1, th2, th3; sem init (s1, 0, 1); sem init (s2, 0, 1); sem init (s3, 0, 0); pthread create (th1, NULL, escribirA, NULL); pthread create (th2, NULL, escribirB, NULL); pthread create (th3, NULL, escribirC, NULL); pthread join (th1, NULL); pthread join (th2, NULL); pthread join (th3, NULL); return 0; } 50. Considera el siguiente trozo de c´ digo del problema productor-consumidor: o #include stdio.h #include stdlib.h #include semaphore.h 23 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 28 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 30. #include pthread.h #include unistd.h #include stdbool.h #define MAX 10 #define FIN -1 int buffer[MAX]; sem t huecos, elementos; int generar dato (void) { return random() %256;} int numero aleatorio(void) { return random() %100;} void ∗productor (void ∗p) { int pos productor= 0; int num, dato, n; n= numero aleatorio(); printf (Productor con %d datosn, n); for(num= 0; num n; num++) { dato= generar dato(); sem wait (huecos); buffer[pos productor]= dato; pos productor= (pos productor+ 1) %MAX; sem post (elementos); } buffer[pos productor]= FIN; pthread exit (NULL); } void ∗consumidor(void ∗p){ int pos consumidor, dato; bool continuar= true; while (continuar) { sem wait (elementos); dato= buffer[pos consumidor]; pos consumidor= (pos consumidor+1) %MAX; if (dato== FIN) continuar= false; sem post (huecos); printf (Numero aleatorio: %dn, dato); } pthread exit (NULL); } Este c´ digo contiene errores y est´ incompleto. Corrige y completa. Haz que o a el hilo consumidor muestre en pantalla todos los datos producidos por el hilo productor. 51. Realiza las modificaciones oportunas al c´ digo resultado del problema 50 o para que en lugar de un hilo productor hayan tres que se ejecuten en paralelo. El consumidor terminar´ cuando haya consumido todos los datos produa cidos. 52. Escribe un programa que ejecute dos hilos en paralelo para realizar las siguientes tareas: 24 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 29 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 31. El primer hilo calcular´ los n´ meros primos que hay entre dos n´ meros a u u que el programa recibe como par´ metros. Para enviar estos datos al a segundo hilo, los almacenar´ en un buffer intermedio de 5 elementos a de capacidad. El segundo hilo tomar´ los datos que aparezcan en el buffer intermedio a y calcular´ la suma de los d´gitos de cada n´ mero. Para cada n´ mero a ı u u primo se mostrar´ en la salida est´ ndar una l´nea que contendr´ dicho a a ı a n´ mero y la suma de sus d´gitos. u ı Deber´ s utilizar sem´ foros para que los dos hilos se sincronicen en el acceso a a al buffer intermedio. Estas son las funciones para comprobar si un n´ mero u es primo y para calcular la suma de los d´gitos de un n´ mero. ı u /∗ Devuelve la suma de los d´gitos del n´mero dado ∗/ ı u int suma digitos (int numero) { int suma= 0; while (numero 0) { suma+= numero %10; numero/= 10; } return suma; } /∗ Indica si el n´mero dado es primo ∗/ u bool es primo (int numero) { int divisor; for (divisor= 2; divisor= sqrt(numero); divisor++) if (numero %divisor== 0) return false; return true; } 53. Escribe un programa que realice una simulaci´ n de la evoluci´ n del estado o o de las reservas en una aula de libre acceso. Para simplificar, sup´ n que el aula o tiene s´ lo un ordenador que se puede reservar en per´odos de 1 hora, desde o ı las 9:00 hasta las 21:00. 25 alumnos pueden reservar per´odos individuales ı de 1 hora, cancelar reservas y consultar el estado de las reservas. La simulaci´ n debe consistir en que cada alumno realice cuatro operacioo nes, cada una de las cuales podr´ ser una reserva, cancelaci´ n o consulta. La a o elecci´ n de la operaci´ n ser´ aleatoria, pero con mayor probabilidad para la o o a realizaci´ n de reservas (50 %) que para la realizaci´ n de consultas y cancelao o ciones (25 % cada una). Cuando la operaci´ n a realizar sea una reserva, debe o elegirse aleatoriamente la hora que el alumno va a reservar. El programa debe implementar un hilo principal que lanza 25 hilos en paralelo, uno por cada alumno. Mediante el empleo de sem´ foros debe garantizarse a 25 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 30 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 32. que los accesos a la tabla de reservas sean correctos. En concreto, cuando se realice una reserva o cancelaci´ n no puede realizarse ninguna otra operaci´ n o o en paralelo sobre la tabla, pero una consulta puede simultanear su acceso a la tabla con otras consultas. En la implementaci´ n de la consulta de la tabla, muestra por pantalla el estao do de cada per´odo de una hora en una l´nea distinta. Para realizar una reserı ı va, comprueba que el per´odo que se solicita reservar est´ libre. Al realizar ı e una cancelaci´ n, deben quedar libres todas las horas que tuviese reservadas o el estudiante que la solicita. Si ese estudiante no tuviese ninguna reserva se debe mostrar un mensaje de error. Como todas las operaciones est´ n controladas por sem´ foros, escribe mensaa a jes que indiquen el estado de las operaciones diferenciando cu´ ndo se solicita a realizar una acci´ n (a´ n no se tiene autorizaci´ n), y cu´ ndo se realiza efeco u o a tivamente (ya se tiene autorizaci´ n). As´, se puede seguir la evoluci´ n de las o ı o operaciones y los efectos que producen en el estado de la tabla de reservas. A continuaci´ n tienes un ejemplo del tipo de traza que se espera obtener. o Solicitud de reserva de al012: 9-10 Reserva de al012: 9-10 Solicitud de consulta de al004 Solicitud de cancelaci´n de al006 o Solicitud de reserva de al000: 15-16 Solicitud de consulta de al019 Consulta de al019: 9-10 = al012 Consulta de al019: 10-11 = LIBRE Consulta de al019: 11-12 = LIBRE Consulta de al019: 12-13 = LIBRE Consulta de al019: 13-14 = LIBRE Consulta de al019: 14-15 = LIBRE Consulta de al019: 15-16 = LIBRE Consulta de al019: 16-17 = LIBRE Consulta de al019: 17-18 = LIBRE Consulta de al004: 9-10 = al012 Consulta de al004: 10-11 = LIBRE Consulta de al004: 11-12 = LIBRE Consulta de al004: 12-13 = LIBRE Consulta de al004: 13-14 = LIBRE Consulta de al004: 14-15 = LIBRE Consulta de al004: 15-16 = LIBRE Consulta de al004: 16-17 = LIBRE Consulta de al004: 17-18 = LIBRE Consulta de al004: 18-19 = LIBRE Consulta de al004: 19-20 = LIBRE Consulta de al004: 20-21 = LIBRE Consulta de al019: 18-19 = LIBRE Consulta de al019: 19-20 = LIBRE Consulta de al019: 20-21 = LIBRE Denegada cancelaci´n de al006: No tiene reservas o Reserva de al000: 15-16 26 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 31 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 33. Solicitud de reserva de al010: 9-10 Denegada reserva de al010: 9-10 est´ ocupada a Solicitud de cancelaci´n de al012 o Cancelaci´n de al012: 9-10 o ... ´ 54. Un puente es estrecho y s´ lo permite pasar veh´culos en un unico sentido o ı al mismo tiempo. Si pasa un coche en un sentido y hay coches en el mismo sentido que quieren pasar, entonces estos tienen prioridad frente a los del otro sentido (si hubiera alguno esperando para entrar en el puente). No hay l´mite ı al n´ mero de veh´culos que pueden haber en el puente al mismo tiempo. u ı Simula el sistema suponiendo que los coches son hilos y el puente el recurso compartido. Utiliza sem´ foros para garantizar que se cumplen las condicioa nes de acceso al puente. Cada hilo debe mostrar por pantalla cu´ ndo entra a en el puente y cu´ ndo lo abandona.Se generar´ n un total de 100 veh´culos, a a ı 50 en un sentido y 50 en el otro. Tras un tiempo de espera al azar (utilizar sleep(random() %20) o algo similar) los veh´culos intentan entrar en el ı ´ puente y, si lo consiguen, permanecer´ n en el durante un segundo (sleep(1)) a antes de abandonarlo. Se apreciar´ m´ s el comportamiento del sistema si se a a alterna la creaci´ n de hilos en un sentido u otro. o 27 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 32 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 34. Cap´tulo 3 ı Gesti´ n de Archivos y Directorios o 3.1. Sistemas de Archivos 55. Disponemos de un disco duro de 20 GB de capacidad. Hay establecida sobre ´ ´ el una unica partici´ n que contiene un sistema de ficheros del tipo FAT32 en o el que cada agrupamiento (cluster) consta de 16 sectores de 512 bytes cada uno. ¿Cu´ ntos sectores del disco se necesitar´ n para almacenar cada copia a a de la FAT? Razona tu respuesta. 56. La polic´a ha arrestado al sospechoso de un delito. Al analizar el contenido ı de su ordenador piensan que pueden inculparle pues el contenido del mismo es el siguiente: N´ m de bloque de datos u 10 11 12 13 14 15 Contenido he sido yo no sigan buscando Como experto inform´ tico, pides consultar el contenido de la FAT, que es el a siguiente: N´ m de entrada en la FAT u 10 11 12 13 14 15 Contenido 11 EOF 13 10 15 12 ¿Apoyar´as la opini´ n de la polic´a? Razona tu respuesta. ı o ı 29 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 33 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 35. 57. Tenemos un sistema de ficheros tipo FAT sobre el que hay almacenado un fichero de 160 Kbytes. Sabemos que para dicho fichero se emplean 10 entradas de la FAT y que cada sector del disco contiene 512 bytes. ¿Cu´ ntos a sectores como m´nimo forman cada bloque o agrupamiento en dicho sisteı ma? Razona tu respuesta. 58. Se dispone de una partici´ n de disco con sistema de ficheros basado en o FAT16. Si el tama˜ o de bloque es de 1KB, ¿cu´ ntos KB de dicha partici´ n n a o podr´ n direccionarse como m´ ximo? Si la partici´ n resulta tener un tama˜ o a a o n de 2GB, ¿qu´ tama˜ o deber´a como m´nimo tener el bloque para poder die n ı ı reccionar la partici´ n por completo? o 59. Se dispone de una partici´ n de disco con sistema de ficheros basado en o FAT16. A la hora de ponerle formato el usuario especifica que los bloques sean de tama˜ o 4Kbytes ¿Cu´ ntos Kbytes te´ ricamente podr´ n direccionarn a o a se como m´ ximo? Si la partici´ n resulta tener un tama˜ o de 8Gbytes, ¿cona o n sideras adecuado el tama˜ o de bloque escogido por el usuario? Justifica la n respuesta. En caso de que no est´ s de acuerdo prop´ n un tama˜ o de bloque e o n e indica en cu´ ntos de esos bloques se almacena la FAT. a 60. Para una partici´ n de 8GB y tama˜ o de bloque de 1 KB, o n Si se utiliza un sistema de ficheros basado en FAT16, ¿qu´ cantidad de e espacio en disco queda inutilizable? Si se utiliza un sistema de ficheros basado en nodos-i, donde cada nodoi consta de dos ´ndices directos, dos indirectos simples y dos indirectos ı dobles, y para referenciar un bloque se utilizan 128 bits, ¿qu´ cantidad e de datos de un fichero que en concreto ocupa 131 KB puede ser irrecuperable en el caso de que un bloque de la partici´ n resultara ilegible? o Analiza todos los casos posibles. 61. Considera un sistema de ficheros basado en nodos-i, en el que cada nodo-i contiene cinco ´ndices directos, tres indirectos simples, dos indirectos dobles ı y uno indirecto triple. Si el tama˜ o de un bloque de datos es de 2 Kbytes y n para referenciar a un bloque se utilizan 64 bits, ¿cu´ ntos bloques de disco a almacenar´ n enlaces para un fichero que contiene 1548 Kbytes de datos? a Razona tu respuesta. 62. Sea una partici´ n de disco donde el tama˜ o de bloque es de 4KB. Se utiliza o n un sistema de ficheros basado en nodos-i, donde cada nodo-i consta de dos ´ndices directos, dos indirectos simples y uno indirecto doble. Si para refeı renciar a un bloque se utilizan 32 bits, ¿cu´ l es el n´ mero de bloques que a u contendr´ n enlaces si el fichero ocupa el m´ ximo tama˜ o posible? a a n 30 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 34 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 36. 3.2. Archivos y Directorios 63. La siguiente funci´ n muestra el nombre de todas las entradas del directorio o que se le pasa como par´ metro: a void listado(char nomdir[]) { DIR ∗d; struct dirent ∗entrada; char ∗ruta; } d= opendir(nomdir); if (d== NULL) printf(Error al abrir el directorion); else { entrada= readdir(d); while (entrada!= NULL) { ruta= malloc(strlen(nomdir)+strlen(entrada-d name)+2); sprintf(ruta, %s/ %s, nomdir, entrada-d name); printf( %sn, ruta); free(ruta); entrada= readdir(d); } closedir(d); } ´ Modif´cala para que unicamente muestre aquellas entradas que se corresponı dan con enlaces simb´ licos a directorios. o 64. La siguiente funci´ n muestra el nombre de todas las entradas del directorio o que se le pasa como par´ metro: a void listado(char nomdir[]) { DIR ∗d; struct dirent ∗entrada; char ∗ruta; } d= opendir(nomdir); if (d== NULL) printf(Error al abrir el directorion); else { entrada= readdir(d); while (entrada!= NULL) { ruta= malloc(strlen(nomdir)+strlen(entrada-d name)+2); sprintf(ruta, %s/ %s, nomdir, entrada-d name); printf( %sn, ruta); free(ruta); entrada= readdir(d); } closedir(d); } Modif´cala para que por cada fichero regular que haya en el directorio se ı cree un archivo zip en el directorio /tmp y se muestre la diferencia de espacio entre el archivo original y el nuevo archivo zip. Crea el archivo zip con la orden zip ruta.zip ruta. 31 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 35 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 37. 65. Escribe un programa que dado un directorio como argumento de entrada elimine los ficheros, enlaces y directorios (s´ lo los vac´os) que hubiesen en o ı ´ el. El programa debe informar de si el directorio dado como par´ metro existe a as´ como de cada uno de los elementos eliminados. No hagas un recorrido ı ´ recursivo del arbol de directorios. 66. Escribe un programa que borre una serie de nombres de ficheros y/o directorios recibidos como par´ metros. Adem´ s, el programa debe mostrar para a a cada par´ metro dado: a si se trata de un fichero regular, un enlace simb´ lico, un directorio, o o bien si el nombre dado no es v´ lido a si dicho nombre pudo borrarse correctamente, as´ como el n´ mero de ı u bloques de disco que ser´ n liberados en tal caso. Ten en cuenta que, en a el caso de ficheros regulares, los bloques de disco s´ lo ser´ n liberados o a ´ si se trata del ultimo enlace f´sico sobre el fichero. ı 67. Escribe un programa que, a partir de un directorio dado como par´ metro, a informe de los ficheros regulares que encuentre a partir de dicho directorio ´ (deber´ recorrer el arbol de directorios a partir de dicho directorio) tales a que pertenezcan al usuario que ejecuta el programa, y se hayan accedido desde una hora antes del comienzo de la ejecuci´ n del programa. Durante el o recorrido recursivo del directorio dado, se deben ignorar aquellos directorios que no puedan ser abiertos por no tener los permisos necesarios. 68. Escribe un programa que calcule la suma de los bytes ocupados por todos los ficheros y directorios que est´ n contenidos a partir de un directorio dado e como par´ metro. ¿Qu´ ocurre cuando hay dos enlaces duros que hacen refea e rencia al mismo fichero? Haz que en estos casos el espacio ocupado se considere s´ lo una vez. Ten en cuenta que la estructura stat contiene el n´ mero o u de nodo-i asignado al fichero. 69. Escribe un programa que reciba como argumentos un fichero regular y un directorio, y cambie por enlaces simb´ licos al fichero regular todos los enlaces o ´ duros referidos a el que encuentre a partir del directorio dado. Para simplificar, considera que tanto el fichero como el directorio se pasan al programa como caminos absolutos que no contienen el nombre ., ni el nombre .., ni ning´ n enlace simb´ lico. u o 70. Un reproductor multimedia recorre de forma recursiva el directorio /media (y sus subdirectorios) a la b´ squeda de ficheros con extensi´ n jpeg, avi y u o mp3. En la ruta /resultado hay tres carpetas de nombres jpeg, avi y mp3. Por cada fichero regular que encuentra con la extensi´ n adecuada en el proceso o de b´ squeda, crea un enlace simb´ lico en la carpeta correspondiente a la exu o tensi´ n del archivo. Por ejemplo, si encuentra un fichero con extensi´ n avi o o 32 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 36 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 38. crea el enlace simb´ lico a dicho fichero en el directorio /resultado/avi. Eso cribe un programa en C que funcione de acuerdo al enunciado del problema. ´ Adem´ s, haz que no haya que crear el enlace al archivo si este ya existe. a 33 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 37 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 39. Cap´tulo 4 ı Gesti´ n de Memoria o 4.1. Paginaci´ n o 71. Considera un sistema de paginaci´ n en el que se puede direccionar como o m´ ximo 1 Gbyte de memoria, el tama˜ o de p´ gina es de 16 Kbytes y cada a n a byte se direcciona independientemente ¿Cu´ ntas p´ ginas podr´ tener asiga a a nadas como m´ ximo un proceso en este sistema? Si empleamos una tabla a de p´ ginas con dos niveles, en el que la tabla de primer nivel contiene 1024 a entradas, ¿cu´ ntas tablas de segundo nivel son necesarias para un proceso a que requiere 6401 p´ ginas? Razona tu respuesta. a 72. Considera un sistema de paginaci´ n en el que las direcciones l´ gicas son o o de 22 bits y el tama˜ o de p´ gina es de 2 Kbytes. Sabiendo que cada byn a te se direcciona independientemente, calcula el ahorro de memoria que obtendr´amos para representar la tabla de p´ ginas de un proceso que est´ utiliı a a zando 90 Kbytes de memoria, cuando empleamos una tabla de p´ ginas con a dos niveles en lugar de tener una tabla de un solo nivel. En el sistema con dos niveles, debes considerar que se emplean 5 bits de la direcci´ n para el o segundo nivel. Adem´ s, cada entrada de las tablas de p´ ginas precisa 8 bytes. a a Razona la respuesta. 73. Considera un sistema de paginaci´ n en el que las direcciones l´ gicas son de o o 20 bits y el tama˜ o de p´ gina de 4 Kbytes. Sabiendo que cada byte se direcn a ciona independientemente, calcula el ahorro de memoria que obtendr´amos ı para representar la tabla de p´ ginas de un proceso que est´ utilizando 192 a a Kbytes de memoria, cuando empleamos un tabla de p´ ginas con dos niveles a en lugar de tener una tabla de un solo nivel. En el sistema con dos niveles debes considerar que se emplea el mismo n´ mero de bits de la direcci´ n para u o cada nivel. Cada entrada de las tablas de p´ ginas precisa 16 bytes. Razona tu a respuesta. 74. Considera un sistema de paginaci´ n en el que las direcciones l´ gicas son de o o 22 bits y el tama˜ o de p´ gina de 2 Kbytes, y que cada byte se direcciona inn a 35 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 38 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 40. dependientemente ¿Cu´ ntas p´ ginas podr´ tener asignadas como m´ ximo un a a a a proceso en este sistema? Si empleamos una tabla de p´ ginas de dos niveles, a ´ en la que la tabla de primer nivel contiene unicamente 8 entradas, ¿cu´ ntas a tablas de segundo nivel son necesarias para un proceso que requiere 1000 p´ ginas? Razona la respuesta. a 75. Lee las siguientes afirmaciones y razona si est´ s de acuerdo o no. Pon un a ejemplo que apoye tu respuesta. En un sistema de paginaci´ n, utilizar una tabla de p´ ginas de dos niveo a les suele producir un ahorro en el consumo de memoria en comparaci´ n o con el uso de una tabla de p´ ginas de un nivel. a En un sistema de paginaci´ n, el n´ mero de p´ ginas que como m´ ximo o u a a se le puede asignar a un proceso es mayor en el caso de utilizar una ´ tabla de p´ ginas de dos niveles que en el caso de utilizar una unica a tabla de p´ ginas. a 76. Considera un sistema de paginaci´ n en donde se puede puede direccionar o un m´ ximo de 1GB y el tama˜ o de p´ gina es de 32KB. Sabiendo que cada a n a palabra de 16 bits se direcciona independientemente, calcula el ahorro de memoria que obtendriamos de representar la tabla de p´ ginas de un procea so que est´ utilizando 90MB de memoria, cuando empleamos una tabla de a p´ ginas de dos niveles en lugar de tener una tabla de un solo nivel. En el a sistema de dos niveles, debes considerar que se emplear´ el mismo n´ mero a u de bits para cada nivel. Adem´ s, cada entrada en la tabla de p´ ginas precisa a a de 16 bytes. Razona la respuesta. 77. Se considera un sistema de paginaci´ n en donde se puede direccionar un o m´ ximo de 1GB y el tama˜ o de p´ gina es de 32KB. Sabiendo que el tama˜ o a n a n de la palabra es de 64 bits y que cada palabra se direcciona independientemente, calcula el ahorro de memoria que obtendr´amos de representar la taı bla de p´ ginas de un proceso que est´ utilizando 256 MB de memoria cuando a a se emplea una tabla de p´ ginas de dos niveles en lugar de tener una tabla de a un solo nivel. En el de dos niveles, debes considerar que se emplear´ el misa mo n´ mero de bits para cada nivel. Adem´ s cada entrada de p´ ginas precisa u a a de 8 bytes. Razona la respuesta. 4.2. Pol´ticas de Reemplazo ı Para realizar los siguientes ejercicios ten en cuenta que: Inicialmente los marcos est´ n libres. a La pol´tica de reemplazo s´ lo se utiliza a partir del momento en que no hayan ı o marcos libres. 36 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 39 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 41. 78. Considera un sistema de paginaci´ n bajo demanda en el que un proceso que o tiene asignados 3 marcos de p´ gina genera la siguiente secuencia de referena cias a p´ ginas: a 2,3,1,2,4,5,2,3,1,5,6,1 Indica qu´ accesos producir´an un fallo de p´ gina cuando se utilizan las e ı a pol´ticas de reemplazo local FIFO y LRU. Sabemos que este proceso se va a ı ejecutar muy a menudo en el sistema y nos interesa tener el mejor sistema de ´ paginaci´ n para el. ¿Valdr´a la pena aumentar el n´ mero de marcos de p´ gio ı u a na asignados al proceso hasta 4 para alguna de estas dos pol´ticas? Indica el ı n´ mero de fallos de p´ gina que se producir´an en esta nueva situaci´ n para u a ı o cada algoritmo. 79. Considera un sistema de paginaci´ n bajo demanda en el que un proceso que o tiene asignados 4 marcos de p´ gina genera la siguiente secuencia de referena cias a p´ ginas: a 4,2,4,1,6,3,2,5,6,4,1,3,5,3 Indica qu´ accesos producir´an un fallo de p´ gina cuando se utiliza cada una e ı a ´ de las pol´ticas de reemplazo local FIFO, LRU y optima. ı 80. Se ha de dise˜ ar un sistema de paginaci´ n bajo demanda en el que se utiliza n o una pol´tica de reemplazo local con tres marcos de p´ gina asignados para ı a cada proceso. Para la siguiente secuencia de referencias a p´ ginas: 1, 2, 3, a 2, 1, 5, 6, 3, 2, 1 ¿qu´ pol´tica de reemplazo producir´a un resultado m´ s e ı ı a ´ cercano a la optima, FIFO o LRU? Demu´ stralo indicando los accesos que e producir´an fallo de p´ gina para cada uno de los m´ todos. ı a e 37 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 40 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 42. Cap´tulo 5 ı Ejercicios Generales 81. Escribe un programa para limpiar el directorio /tmp. Recorriendo todos los subdirectorios que se encuentren a partir de /tmp, el programa debe eliminar todos los ficheros (de cualquier tipo) que pertenezcan al usuario que ejecuta el programa para los que haga m´ s de 2 semanas que no se acceden. En el a caso concreto de los directorios, se deben eliminar los que ya estaban vac´os ı o queden vac´os al eliminar los ficheros que conten´an, independientemente ı ı ´ del tiempo transcurrido desde su ultimo acceso. Adem´ s, debe identificar a los ficheros para los que haga m´ s de 1 semana pero menos de 2 que no se a acceden e informar al usuario de que ser´ n borrados pr´ ximamente. a o El programa recibir´ como par´ metro una direcci´ n de correo electr´ nico a a a o o la que enviar´ dos mensajes. El primer mensaje indicar´ en el asunto Fichea a ros borrados de /tmp y contendr´ el nombre de cada fichero o directorio que a se haya eliminado. El segundo mensaje indicar´ en el asunto Ficheros que se a borrar´ n en breve y contendr´ los nombres de los ficheros para los que haga a a m´ s de 1 semana pero menos de 2 que no se acceden. Los nombres de los a ficheros en los dos mensajes deber´ n estar ordenados alfab´ ticamente. Para a e el env´o de los mensajes de correo electr´ nico se emplear´ la orden: mail ı o a direcci´ n correo -s asunto Para realizar las acciones requeridas, el o programa deber´ crear procesos y tuber´as de acuerdo al esquema que se a ı muestra en la figura 5.1. Figura 5.1: Esquema de funcionamiento. ´ F´jate en que un unico proceso recorre el directorio /tmp y escribe en una ı tuber´a los nombres de los ficheros y directorios que borra y en otra tuber´a ı ı 39 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 41 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 43. distinta los nombres de los ficheros que se borrar´ n pr´ ximamente. Otros dos a o procesos independientes son los encargados de la ordenaci´ n de los nombres o ´ almacenados en las tuber´as y, por ultimo, dos procesos m´ s enviar´ n los ı a a mensajes de correo electr´ nico. En total, debes manejar 5 procesos y cuatro o tuber´as como se muestra en la figura 5.1. ı 82. Escribe un programa que cree dos procesos de manera que, a partir de dos directorios dados como par´ metros de entrada, uno de los procesos realice a una b´ squeda de los ficheros con terminaci´ n .c y .h que se encuentren a u o ´ partir del primer directorio dado (deber´ s recorrer el arbol de directorios) y a env´e su ruta a trav´ s de una tuber´a a un segundo proceso que crear´ una ı e ı a copia en el segundo directorio. La copia s´ lo se debe realizar si se dan las o dos siguientes condiciones: El fichero encontrado no existe en el segundo directorio. ´ El fichero existe en el segundo directorio, pero el tiempo de ultima modificaci´ n de la copia es anterior al del original. o Para realizar la copia de cada fichero otro proceso deber´ ejecutar el siguiente a comando: cp ruta fichero segundo directorio 83. Escribe un programa en C que convierta ficheros en formato postscript a formato pdf. El programa recibir´ como par´ metros una serie de nombres de a a directorios y, para cada uno de ellos, deber´ crear un proceso que lo recorra a recursivamente. Todos estos procesos deben ejecutarse en paralelo. Cada vez que se encuentre un fichero cuyo nombre termine en .ps, se considerar´ que a se trata de un fichero en formato postscript y se obtendr´ un fichero equivaa lente en formato pdf mediante el comando: ps2pdf ruta f ichero.ps ruta f ichero.pdf Una vez generado el fichero pdf, se debe borrar el fichero postscript correspondiente. Puedes suponer que el n´ mero de enlaces duros de cada fichero u postscript ser´ siempre uno. a Antes de la finalizaci´ n de cada proceso, se deber´ informar de los siguientes o a aspectos: - N´ mero de ficheros transformados. u - Ahorro de espacio en disco medido en n´ mero de bloques. u - Tiempo total en segundos que se ha empleado en procesar el directorio correspondiente. 84. Escribe un programa en C que realice una simulaci´ n de la asignaci´ n de o o grupos de pr´ cticas a los estudiantes matriculados en una determinada asiga natura. El programa recibir´ como par´ metros en la l´nea de comandos: a a ı 40 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 42 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 44. - el n´ mero de estudiantes matriculados en la asignatura, u - la cantidad de grupos de pr´ cticas que existen, y a - el n´ mero de plazas en cada grupo de pr´ cticas. u a Puedes suponer que el n´ mero de estudiantes siempre ser´ menor o igual que u a el n´ mero total de plazas de pr´ cticas disponibles, es decir, que u a numero estudiantes ≤ cantidad de grupos × plazas por grupo El programa deber´ crear una serie de hilos que se ejecuten en paralelo, de a modo que haya un hilo que simule el comportamiento de cada estudiante. Adem´ s, habr´ otro hilo gestor que ser´ el encargado de realizar la asignaa a a ci´ n de estudiantes a grupos de pr´ cticas, teniendo en cuenta las preferencias o a de cada estudiante. Cada hilo correspondiente a un estudiante debe realizar las siguientes acciones: a) Decidir el orden de preferencia de los grupos de pr´ cticas. a b) Enviar de una en una al gestor una serie de peticiones de inclusi´ n en o los grupos de pr´ cticas seg´ n el orden decidido en el punto anterior. La a u petici´ n que se env´a al gestor debe contener dos datos: o ı - n´ mero de estudiante que hace la petici´ n, y u o - n´ mero de grupo que se solicita. u Para cada petici´ n recibida, el hilo gestor debe mostrar en la pantalla un o mensaje que indique: - Si la acepta porque hay plazas libres en el grupo y el estudiante a´ n no u tiene ning´ n grupo asignado. u - Si la rechaza porque el grupo solicitado no tiene plazas disponibles. - Si la rechaza porque a ese alumno ya se le hab´a asignado otro grupo ı de pr´ cticas (es decir, se le hab´a aceptado una petici´ n anterior). a ı o F´jate en que los estudiantes env´an peticiones para todos los grupos de ı ı pr´ cticas ordenadas seg´ n sus preferencias. El gestor procesar´ todas las soa u a licitudes y rechazar´ las correspondientes a estudiantes que ya tienen asiga nado un grupo de pr´ cticas o a grupos que est´ n llenos. a a La comunicaci´ n entre los hilos correspondientes a los estudiantes y el hilo o gestor debe realizarse a trav´ s de un buffer intermedio en el que se podr´ n e a almacenar como m´ ximo 20 peticiones. Debes garantizar que todos los aca cesos al buffer sean correctos. Para simplificar la soluci´ n del problema, considera que ya est´ n definidas o a las siguientes variables globales, estructuras y funciones: 41 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 43 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 45. /* Variables globales. IMPORTANTE. Debes inicializarlas en el programa principal seg´n los u par´metros de la l´nea de comandos. a ı int num_estudiantes, cantidad_grupos, plazas_por_grupo; */ /* Tipos de datos */ typedef struct { int num_estudiante; int num_grupo; } TipoPeticion; /* Funciones */ int *decide_preferencias(int num_estudiante); /* Devuelve un vector de enteros en el que los grupos de pr´cticas a est´n ordenados seg´n las preferencias del estudiante */ a u int grupo_asignado(int num_estudiante); /* Devuelve el n´mero de grupo de pr´cticas asignado a un estudiante. u a Si todav´a no se le ha asignado ning´n grupo devuelve -1 */ ı u int hay_plazas_libres(int num_grupo); /* Devuelve 1 si hay plazas libres en el grupo dado o 0 en caso contrario */ void asignar_grupo(int num_estudiante, int num_grupo); /* Asigna el estudiante al grupo indicado */ En concreto, se te pide que proporciones: - La funci´ n que simula el comportamiento de un estudiante. o - La funci´ n que simula el gestor de peticiones. o - El programa principal, que debe incluir todas las inicializaciones que sean necesarias, la creaci´ n de todos los hilos y la espera hasta que o todos ellos terminen. - Todos los tipos, variables, etc. que puedas necesitar y que no aparezcan ya definidos en el enunciado. 85. Escribe un programa en C que imprima los ficheros regulares que encuentre en una serie de directorios dados como par´ metros. Para cada directorio a se deber´ crear un proceso que lo recorra recursivamente de modo que toa dos ellos se ejecuten en paralelo. Los ficheros cuyo tama˜ o sea menor de n 2 Mbytes se enviar´ n a la cola de impresi´ n ps1 y el resto se enviar´ a la a o a cola de impresi´ n ps2. Para enviar un fichero a una cola de impresi´ n se deo o ber´ ejecutar el siguiente comando: lpr -P cola fichero. Antes de la a finalizaci´ n del programa se deber´ indicar el tiempo total empleado en la o a ejecuci´ n del mismo. o NOTA: Se incluye una versi´ n de la funci´ n de recorrido recursivo de un o o directorio: 42 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 44 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 46. void recorre(char ∗nombredir) { DIR ∗d; struct dirent ∗entrada; struct stat datos; char ∗ruta; printf(empiezo a recorrer %sn, nombredir); d= opendir(nombredir); if (d== NULL) { printf(Error al abrir el directorion); return; } entrada= readdir(d); while (entrada!= NULL) { if (strcmp(entrada-d name, .) strcmp(entrada-d name, ..)) { ruta= malloc(strlen(nombredir)+strlen(entrada-d name)+2); sprintf(ruta, %s/ %s, nombredir, entrada-d name); lstat (ruta, datos); if (S ISDIR (datos.st mode)) recorre (ruta); printf (Procesando %sn, ruta); free (ruta); } entrada= readdir(d); } closedir(d); } 86. Se desea realizar una simulaci´ n de una granja de gallos en la que hay dos o tipos de gallos: dom´ sticos y salvajes. En la granja, la vida de un gallo cuale quiera consiste b´ sicamente en comer, beber y dormir en este orden. Para a realizar la acci´ n de beber se accede a una fuente de agua com´ n para todos o u los gallos y se evita que un gallo salvaje se junte con gallos dom´ sticos o con e otros gallos salvajes mientras dure la acci´ n. Por contra, un gallo dom´ stico o e si que puede realizar la acci´ n de beber junto a otros gallos dom´ sticos. Reso e pecto a las acciones de comer y dormir no se establece ninguna condici´ n. o La granja cuenta con un total de 30 gallos, 25 de ellos dom´ sticos y el resto e salvajes. Utiliza el programa que se acompa˜ a para resolver las siguientes n cuestiones: a) En primer lugar, se desea mejorar la funci´ n dormir de manera que ahoo ra tendr´ dos par´ metros de entrada: void dormir (int id, int tiempo);. a a La variable id es un identificador del gallo y tiempo ser´ el tiempo que a va a dormir (un valor entero aleatorio entre 7 y 10). Modifica el programa principal de manera que, para cada gallo de la simulaci´ n, se env´e o ı ambos par´ metros a las funciones correspondientes galloDomestico y a ´ galloSalvaje, y modifica estas tambi´ n de forma conveniente. e b) Realiza las modificaciones oportunas de manera que se simule la vida de los gallos dom´ sticos y salvajes tal y como se explica en el enunciae do. 43 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 45 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 47. c) Limita el n´ mero de gallos dom´ sticos realizando la acci´ n de beber al u e o mismo tiempo a 6. #include stdio.h #include stdlib.h #include semaphore.h #include pthread.h #include unistd.h #include time.h #define N 30; /∗ simula la vida de un gallo salvaje ∗/ void ∗galloSalvaje (void ∗nada){ while (1) { comer(); /∗ funci´n que simula la acci´n de comer ∗/ o o beber(); /∗ funci´n que simula la acci´n de beber ∗/ o o dormir(); /∗ funci´n que simula la acci´n de dormir ∗/ o o } pthread exit(NULL); } /∗ simula la vida de un gallo dom´stico ∗/ e void ∗galloDomestico (void ∗nada){ while (1) { comer(); /∗ funci´n que simula la acci´n de comer ∗/ o o beber(); /∗ funci´n que simula la acci´n de beber ∗/ o o dormir(); /∗ funci´n que simula la acci´n de dormir ∗/ o o } pthread exit(NULL); } int main (int argc, char ∗argv[]) { pthread t th[N]; int i; for (i= 0; i 25; i++) /∗ pthread create (th[i], for (i= 25; i N; i++) /∗ pthread create (th[i], crea los gallos dom´sticos ∗/ e NULL, galloDomestico, NULL); crea los gallos salvajes ∗/ NULL, galloSalvaje, NULL); for (i= 0; i N; i++) pthread join(th[i], NULL); exit(0); } 87. Escribe un programa en C que ejecute en paralelo cuatro hilos. De ellos, tres ser´ n productores de datos y uno consumidor. Los hilos se comunicar´ n a a a trav´ s de un buffer intermedio en el que se podr´ n almacenar como m´ ximo e a a 5 datos. Cada hilo productor se encarga de generar como m´ ximo 1000 n´ meros aleaa u torios. Para cada n´ mero generado, comprueba si es un n´ mero primo y, de u u ser as´, lo almacena en el buffer. El hilo consumidor extrae n´ meros del bufı u fer y escribe en pantalla aquellos n´ meros para los que la suma de sus d´gitos u ı 44 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 46 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 48. sea impar. El programa terminar´ cuando el hilo consumidor haya escrito cincuenta a n´ meros en pantalla o cuando cada productor haya generado sus 1000 n´ meu u ros aleatorios. Antes de terminar, el programa informar´ de la cantidad de a n´ meros primos procesados y la cantidad de n´ meros aleatorios generados. u u Puedes considerar que las siguientes funciones ya est´ n definidas: a int numero_aleatorio(void); int es_primo(int numero); int suma_digitos(int numero); 88. Escribe un programa para limpiar el directorio /tmp. Recorriendo todos los subdirectorios que se encuentren a partir de /tmp, el programa debe eliminar todos los ficheros regulares que pertenezcan al usuario que ejecuta el programa y cuyo tama˜ o sea superior a 2 Mbytes. Adem´ s, se deben eliminar n a los directorios que ya estaban vac´os o queden vac´os al eliminar los ficheros ı ı que conten´an. Tambi´ n se deben identificar los ficheros regulares que ocuı e pen m´ s de 1 Mbyte pero menos de 2 Mbytes para informar al usuario de a que esos ficheros est´ n ocupando una gran cantidad de espacio en disco. a El programa recibir´ como par´ metro una direcci´ n de correo electr´ nico a a a o o la que enviar´ dos mensajes. El primer mensaje indicar´ en el asunto Fichea a ros borrados de /tmp y contendr´ el nombre de cada fichero o directorio que a se haya eliminado. El segundo mensaje indicar´ en el asunto Ficheros que a ocupan mucho espacio en /tmp y contendr´ el nombre y tama˜ o en bytes de a n cada fichero cuyo tama˜ o est´ entre 1 y 2 Mbytes. n e Para el env´o de los mensajes de correo electr´ nico se emplear´ la orden: ı o a mail direcci´ n correo -s asunto o Para realizar las acciones requeridas, el programa deber´ crear procesos y a tuber´as de acuerdo al esquema que se muestra en la figura 5.2. ı Figura 5.2: Esquema de funcionamiento. ´ F´jate en que un unico proceso recorre el directorio /tmp y escribe en una ı tuber´a los nombres de los ficheros y directorios que borra y en otra tuber´a ı ı distinta los nombres de los ficheros que ocupan m´ s de 1 Mbyte. Otros dos a 45 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 47 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 49. procesos independientes son los encargados de enviar los mensajes de correo electr´ nico. En total, debes manejar 3 procesos y 2 tuber´as como se muestra o ı en la figura. 89. Un programador quiere simular el movimiento de camiones y barcos en una estaci´ n petroqu´mica. Los barcos llegan a la estaci´ n para descargar de sus o ı o bodegas el producto crudo que posteriormente se refina y se carga en los tanques de los camiones que van llegando a la estaci´ n. Las condiciones de o funcionamiento de la estaci´ n que ha de tener en cuenta el programador son: o a) La estaci´ n tiene capacidad para atender a tantos camiones como lleo guen. b) La estaci´ n tiene capacidad para atender a los barcos de uno en uno. o c) Mientras se atiende a un barco no se puede atender a nuevos camiones pero s´ a los camiones que hubiesen ya en la estaci´ n. ı o En base a estas condiciones, el programador escribe el siguiente c´ digo: o #include #include #include #include #include stdio.h stdlib.h semaphore.h pthread.h unistd.h #define N vehiculos 200 sem t estacion; void ∗camion (void ∗ nada) { long int n= (long int) pthread self(); printf (Llega camion: %ldn, n); sem wait(estacion); printf (Se atiende camion: %ldn, n); sleep(random() %3+2); /∗ tiempo invertido en atender al camion ∗/ printf (Sale camion: %ldn, n); pthread exit(NULL); } void ∗barco (void ∗ nada) { long int n= (long int) pthread self(); printf (Llega barco: %ldn, n); sem wait(estacion); printf(Se atiende barco: %ldn, n); sleep(random() %5+5); /∗ tiempo invertido en atender al barco ∗/ printf (Sale barco: %ldn, n); sem post(estacion); pthread exit(NULL); } int main(int argc, char ∗argv[]) { int i; pthread t th; 46 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 48 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 50. for (i= 0; i N vehiculos; i++) { sleep(random() %3); if (random() %100 95) pthread create(th, NULL, camion, NULL); else pthread create(th, NULL, barco, NULL); } for (i= 0; i N vehiculos; i++) pthread join(th, NULL); return 0; } Se pide: a) Puesto que el c´ digo anterior contiene errores y no satisface las tres o condiciones descritas en el enunciado, corrige los errores e indica las modificaciones necesarias para que se satisfagan. b) Haz las modificaciones oportunas (al programa resultado del apartado anterior) para que, sin dejar de cumplirse las condiciones de funcionamiento a) y b), se cumpla tambi´ n la siguiente nueva condici´ n: e o 1) Mientras se atiende a un barco no se puede atender a nuevos camiones y el barco s´ lo puede ser atendido cuando no hayan cao miones utilizando la estaci´ n. o ´ 90. Escribe un programa que ejecute la siguiente l´nea de ordenes igual que lo ı har´a un int´ rprete de comandos: ı e grep palabra file1 | sort -r | uniq file salida y que adem´ s nos diga cu´ nto tiempo (en segundos) ha tardado en ejecua a a a tarse completamente. Tanto file1, file salida como palabra ser´ n par´ metros dados por tu programa en la l´nea de comandos en ese orden. ı 91. Simula el movimiento de personas que entran y salen de una sucursal bancaria teniendo en cuenta las siguientes condiciones. En dicha sucursal, durante el horario de atenci´ n al p´ blico, un furg´ n blindado puede llegar para la o u o carga y descarga de dinero. Para que se realice esta operaci´ n, es necesario o que no haya clientes en el interior de la sucursal, por lo que los guardias de seguridad del furg´ n deben esperar a que la sucursal se encuentre vac´a ano ı tes de iniciar la operaci´ n. La sucursal puede atender a tantos clientes como o lleguen, no hay l´mite de capacidad. Utiliza el programa que se acompa˜ a, ı n que contiene alg´ n error, y da dos soluciones al problema, una por cada una u de las siguientes condiciones respecto al momento de llegada del furg´ n a la o sucursal: a) Que no se impida la entrada de nuevos clientes a la sucursal mientras existan clientes en su interior. b) Que s´ se impida la entrada de nuevos clientes a la sucursal. ı 47 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 49 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 51. (Recuerda que en ambos casos, la operaci´ n no puede empezar hasta que la o sucursal est´ sin clientes, como ya se deja claro en el enunciado) e #include #include #include #include #include #include stdlib.h stdio.h semaphore.h pthread.h unistd.h time.h #define N hilos 200 void ∗cliente (void ∗n){ int id= ∗(int ∗)n; sleep printf sleep printf sleep printf (random() %100); (Llega el cliente %dn, id); (random() %3+2); /∗ tiempo de espera en la cola ∗/ (Se atiende al cliente: %dn, id); (random() %3+2); /∗ tiempo invertido en la operacion ∗/ (Sale el cliente %dn,id); pthread exit(NULL); } void ∗furgon (void ∗n){ int id= ∗(int ∗)n; sleep printf printf sleep printf (random() %100); (LLega el furgon %dn, id); (Se atiende a los guardias %dn, id); (random() %5 + 5); /∗ tiempo invertido en la operacion ∗/ (Se va el furgon %dn,id); pthread exit(NULL); } int main ( int argc, char ∗ argv[]) { pthread t hilo; int i, furgon creado= 0; for (i= 0; i N hilos; i++) if (furgon creado== 1) pthread create(hilo, NULL, cliente, (void ∗) i); else if (random() %100 95) pthread create(hilo, NULL, cliente, (void ∗) i); else { pthread create(hilo, NULL, furgon, (void ∗) i); furgon creado= 1; } return 0; } 92. Se desea realizar una implementaci´ n en C del problema cl´ sico del productoro a consumidor. Las caracter´sticas propias de esta implementaci´ n son: ı o 48 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 50 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 52. Los hilos se comunican a trav´ s de un b´ ffer intermedio de capacidad e u 10. El hilo productor produce un n´ mero aleatorio de datos. u El hilo consumidor escribe el n´ mero consumido en la pantalla. u El programa termina cuando se hayan consumido los datos producidos. En concreto, se pide: a) Escribe el programa principal que: crea, inicializa y destruye los sem´ foa ros; crea dos hilos, uno productor y otro consumidor; espera a que se cumpla la condici´ n de terminaci´ n del programa. o o b) Escribe el c´ digo del hilo productor y del consumidor. o c) Escribe las modificaciones oportunas para que en lugar de un hilo productor hayan tres que se ejecuten en paralelo y garantizando que se consumen todos los datos. d) Escribe las modificaciones oportunas para que en lugar de un hilo consumidor hayan dos que se ejecuten en paralelo (es decir, tendremos tres productores y dos consumidores). NOTA: Se incluye una versi´ n incompleta del c´ digo. o o #include #include #include #include #include #include stdio.h stdlib.h semaphore.h pthread.h unistd.h time.h #define MAX 10 int buffer[MAX]; int pos productor= 0, pos consumidor= 0; int menos uno= 0; int genera dato(void); int numero aleatorio(void); void ∗productor (void ∗nada) { int i, dato, n= numero aleatorio(); for(i=0; i n; i++){ dato= generar dato(); sleep(random() %2); buffer[pos productor]= dato; pos productor= (pos productor+1) %MAX; } buffer[pos productor]= -1; pos productor= (pos productor+1) %MAX; pthread exit(NULL); } 49 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 51 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 53. void ∗consumidor (void ∗nada) { int i,dato; while(menos uno!= 1){ dato= buffer[pos consumidor]; pos consumidor= (pos consumidor+1) %MAX; if (dato== -1) menos uno++; printf ( %d , dato); sleep(random( %2)); } pthread exit(NULL); } 93. Escribe un programa en C que, a partir de una serie de directorios que se proporcionan como par´ metros, los recorra recursivamente y calcule cu´ ntos ena a laces simb´ licos hay dentro de ellos. El programa debe crear un hilo por cada o directorio dado, de modo que el recorrido de cada uno de ellos se ejecute en paralelo con el resto. Por simplicidad, se considerar´ que nunca habr´ m´ s a a a de 10 directorios como par´ metros. Tanto para los directorios dados como a par´ metros como para los que aparezcan en el recorrido recursivo de los a mismos, s´ lo se deben tener en cuenta aquellos directorios que pertenezcan o al usuario que ejecuta el programa. El resto de directorios simplementen se ignorar´ n. a Nota. No se pide el n´ mero de enlaces que hay en cada uno de los directorios u dados, sino la suma de todos ellos. Es decir, el resultado del programa debe ´ ser un unico n´ mero. u 94. Se desea escribir un programa que implemente una primera aproximaci´ n a o la generaci´ n de un cierto tipo de claves criptogr´ ficas. Para ello, se deben o a encontrar pares de n´ meros p y q tales que: u p y q sean primos; (p − 1)/2 y (q − 1)/2 tambi´ n sean primos. e Si se cumplen estas dos condiciones, entonces el producto p ∗ q nos proporciona una clave criptogr´ fica. Para resolver el problema planteado se utiliza a una estrategia productor-consumidor mediante tres procesos que se ejecutan en paralelo de la siguiente forma: Dos procesos productores se encargan de analizar secuencialmente todos los n´ meros de un rango dado para averiguar cu´ les de ellos son u a primos. Un proceso consumidor que, repetidamente, toma un par cualquiera de n´ meros primos de los encontrados por los productores y comprueba u si dicho par de n´ meros cumplen los requisitos necesarios para generar u una clave criptogr´ fica. En caso afirmativo, muestra por pantalla los a dos n´ meros utilizados y el valor de la clave criptogr´ fica generada. En u a 50 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 52 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 54. cualquier caso, estos dos n´ meros utilizados ser´ n descartados y no se u a volver´ n a considerar. a Al acabar la ejecuci´ n, el programa debe indicar la cantidad total de n´ meros o u primos que han encontrado los productores, as´ como el n´ mero de claves ı u criptogr´ ficas generadas. a Escribe un programa en C que proporcione una soluci´ n v´ lida al problema o a utilizando tuber´as. ı 95. Resuelve el ejercicio 94 utilizando 3 hilos (2 productores y 1 consumidor) que ahora se comunican a trav´ s de un buffer intermedio de capacidad 20 e elementos en lugar de utilizar tuber´as. La sincronizaci´ n en la ejecuci´ n de ı o o los hilos se debe realizar mediante sem´ foros. a 96. Escribe un programa que, a partir de un directorio dado como par´ metro a comprima y a˜ ada al fichero /tmp/comprimido.zip todos los ficheros regun ´ lares que encuentre a partir de dicho directorio (deber´ recorrer el arbol de a directorios a partir de dicho directorio) tales que: Pertenezcan al usuario que ejecuta el programa. ´ Se hayan modificado desde la ultima hora (medida desde el inicio de la ejecuci´ n del programa). o Para comprimir un fichero fich y a˜ adirlo al fichero /tmp/comprimido.zip utin liza el programa zip de la siguiente forma: $ zip /tmp/comprimido.zip fich. Ten en cuenta que no se pueden hacer varias acciones zip sobre el mismo archivo de manera simult´ nea. Adem´ s, por cada fichero regular que encuena a tres que cumpla las condiciones anteriores deber´ s enviar su ruta a trav´ s a e de una tuber´a a otro proceso que crear´ un fichero llamado usuario.log que ı a contendr´ un informe ordenado, utiliza el comando sort, de las rutas de los a ficheros regulares a˜ adidos al archivo zip. n 97. En una reuni´ n de atletismo, hay tres tipos de atletas participantes. Por un o lado los lanzadores de jabalina, por otro los lanzadores de martillo y por ´ ultimo los corredores. A primera hora del d´a se les da acceso libre a las insı talaciones para entrenar. Por seguridad, se han establecido unas restricciones de uso de las instalaciones: a) Un atleta lanzador de martillo o de jabalina debe esperar para entrar en las instalaciones a que no haya ning´ n atleta, sea del tipo que sea, u utiliz´ ndolas. a b) Si hay un atleta lanzador de jabalina o de martillo utilizando las instalaciones, un nuevo atleta que llegue, sea del tipo que sea, debe esperar para entrar en las instalaciones a que el que ya hay la abandone. 51 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 53 100 Ejercicios resueltos de Sistemas Operativos - UJI