@ibaumo
100 Ejercicios resueltos                             @ibaumo                                 de Sistemas Operativos       ...
@ibaumoEdita: Publicacions de la Universitat Jaume I. Servei de Comunicació i Publicacions   Campus del Riu Sec. Edifici R...
´              Indice general              ´              Indice general                     Prefacio	                   	...
Prefacio    Los Sistemas Operativos han constituido tradicionalmente una materia troncalen los planes de estudio de todas ...
6. Soluciones: en este cap´tulo se encuentran las soluciones a los ejercicios                              ı      plantead...
Cap´tulo 1   ıProcesos e Hilos1.1.         Procesos   1. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos r...
2. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante.                         o                  ...
5. Dibuja la jerarqu´a de procesos que resulta de la ejecuci´ n del siguiente c´ di-                    ı                 ...
int main (int argc, char ∗argv[]) {       int i, j;       pid t pid, nuevo, nuevo1;       time t ini, fin;       for (i= 0...
´         Figura 1.1: Arbol de profun-                                                ´                                   ...
int main (int argc, char ∗argv[]) {         execlp         (kcalc, kcalc, NULL);         printf         (¿Se imprimira est...
Realiza las modificaciones oportunas para que el programa cree un nuevo     proceso que se encargue de ejecutar el programa...
a) Crea un proceso por cada factorial a calcular, y que todos los procesos               se ejecuten de forma concurrente....
Proc A         CPU (2ut.)             E/S D1 (2ut.)        CPU (3ut.)   E/S D2 (5ut.)   CPU (1ut)             Proc B      ...
Los niveles de prioridad de las interrupciones son:                    - Nivel 0 (m´ s prioritario): Interrupci´ n hardwar...
22. Considera un sistema con las siguientes caracter´sticas:                                                    ı         ...
Existen dos procesos A y B que est´ n listos para ejecutar, de modo que ini-                                        a     ...
La interrupci´ n de reloj se produce cada 5 unidades de tiempo.                               o                  Las rutin...
29. El siguiente programa cuenta el n´ mero de veces que el car´ cter ’a’ o ’A’                                       u   ...
Cap´tulo 2   ıComunicaci´ n y Sincronizaci´ n            o               ode Procesos2.1.         Tuber´as                ...
34. Observa el siguiente fragmento de c´ digo que trata de realizar lo mismo que                                          ...
while(fgets(linea,MAX,fichero))           write(tubo[1],linea,strlen(linea));         fclose(fichero);         close (tubo...
$ programa palabra fich1 fich2 fich3. La figura 2.1 muestra gr´ ficamente la                                                   ...
Tarea 2: utilizando el comando grep, leer de la tuber´a que contiene las                                                  ...
43. Considera que los siguientes fragmentos de c´ digo se ejecutan en paralelo:                                           ...
#include unistd.h     #include pthread.h     #define MAX 6     void ∗escribirA (void ∗nada){       int num;       for(num=...
int num=10;     void ∗ incrementa(void ∗nada) {       int i;       for (i=0;i3;i++){         sem wait(sem1);         num++...
sem t s1, s2, s3;     void ∗escribirA (void ∗p){       int i;       srandom (pthread self ());       for (i= 0; i MAX; i++...
#include pthread.h     #include unistd.h     #include stdbool.h     #define MAX 10     #define FIN -1     int buffer[MAX];...
El primer hilo calcular´ los n´ meros primos que hay entre dos n´ meros                                      a      u     ...
que los accesos a la tabla de reservas sean correctos. En concreto, cuando serealice una reserva o cancelaci´ n no puede r...
Solicitud de reserva de al010: 9-10     Denegada reserva de al010: 9-10 est´ ocupada                                      ...
Cap´tulo 3   ıGesti´ n de Archivos y Directorios     o3.1.         Sistemas de Archivos 55. Disponemos de un disco duro de...
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Fundamentos Computadores II
Próxima SlideShare
Cargando en…5
×

Fundamentos Computadores II

580 visualizaciones

Publicado el

Ejercicios resueltos de FCII

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
580
En SlideShare
0
De insertados
0
Número de insertados
15
Acciones
Compartido
0
Descargas
22
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Fundamentos Computadores II

  1. 1. @ibaumo
  2. 2. 100 Ejercicios resueltos @ibaumo de Sistemas Operativos José Ribelles Miguel José Martínez Sotoca Pedro García Sevilla Departament de llenguatges i sistemes informàtics Codi d’assignatura IG11J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  3. 3. @ibaumoEdita: 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.esCol·lecció Sapientia, 30www.sapientia.uji.esISBN: 978-84-693-0148-7Aquest text està subjecte a una llicència Reconeixement-NoComercial-CompartirIgual de CreativeCommons, que permet copiar, distribuir i comunicar públicament l’obra sempre que especifiquel’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. 4. ´ Indice general ´ Indice general Prefacio 4 1. Procesos e Hilos 1 1.1. Procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1. 1.2. Planificaci´ n . . Procesos e Hiloso . . . . . . . . . . . . . . . . . . . . . . . . . . 18 6 1.3. Hilos . . . .. . . . .. 1.1. Procesos .. .. . . .. .. .. . . . .. .. .. . . .. .. .. . . . .. .. .. . . .. .. .. . . . . . 13 . . 6 1. 1.2. Planificaci´ n . . . . . . . . . . . . o 2. Comunicaci´ n y Sincronizaci´ n de Procesos o o . . . . . . . . . . . . . 15 . . 13 8 . 1.3. Tuber´as. .. .. . . . .. .. .. . .. .. .. . . . .. .. .. . .. 2.1. Hilos ı . . .. .. . . . .. .. .. . .. .. .. . . . . . 15 . . 1813 . . 2.2. Sem´ foros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 19 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.2. Archivos y Directorios . . . . . . . . . . . . . . . . . . . . . . . 31 3. Gesti´ n de Archivos y Directorios o 33 29 4. Gesti´ n de Memoria o 35 @ibaumo 3.1. Sistemas de Archivos . . . . . . . . . . . . . . . . . . . . . . . . 3329 4.1. Paginaci´ n . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . 35 3.2. Pol´ticas de y Directorios. .. . . . .. 4.2. Archivos Reemplazo . ı .. .. . . .. .. .. . . . .. .. .. . .. . .. .. . . . . . 36 . . 3531 . 5. Ejerciciosde Memoria 4. Gesti´ n Generales o 3835 39 4.1. Paginaci´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3835 o 6. Solucionesıticas de Reemplazo . . . . . . . . . . . . . . . . . . . . 57 . . 4.2. Pol´ . 3936 5. Ejercicios Generales 4139 6. Soluciones 5857 V VJ. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  5. 5. Prefacio Los Sistemas Operativos han constituido tradicionalmente una materia troncalen los planes de estudio de todas las titulaciones de Inform´ tica. Las asignaturas aque desarrollan estos contenidos incluyen aspectos te´ ricos fundamentales como oprocesos e hilos, gesti´ n de memoria, comunicaci´ n, sincronizaci´ n y sistemas de o o oarchivos. Adem´ s, es frecuente incluir una parte pr´ ctica que permite que el alumno a aconozca no s´ lo los principios te´ ricos, sino tambi´ n c´ mo se aplican en sistemas o o e ooperativos reales. El objetivo de este libro es proporcionar suficiente material pr´ ctico para apo- ayar la docencia, tanto presencial, desarrollada en clases de problemas o en labo-ratorio, como no presencial, proporcionando al estudiante un material de apoyo alestudio de un nivel y contenido adecuado a una asignatura real. @ibaumo En concreto, las cuestiones, ejercicios y problemas que se recogen en este li-bro son el resultado de su recopilaci´ n a lo largo de cuatro cursos, desde el a˜ o o n2004, del material utilizado en la asignatura de Sistemas Operativos de la Inge-nier´a T´ cnica en Inform´ tica de Gesti´ n de la Universitat Jaume I de Castell´ n. ı e a o oDicha asignatura se estructura en 3 cr´ ditos de teor´a, 1,5 cr´ ditos de problemas y e ı e1,5 cr´ ditos de laboratorio. No obstante, el material incluido es bastante gen´ rico e ey 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 ı ocontinuaci´ 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 sec- o 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. 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 ma- aterial, para mantenerlo actualizado incluyendo m´ s ejercicios, p´ ginas de ayuda, fe a ade erratas, etc. ´ Por ultimo, no queremos dejar de expresar nuestro agradecimiento a los pro-fesores Gustavo Casa˜ , Isabel Gracia y Antonio Castellanos, todos ellos del De- npartamento de Lenguajes y Sistemas Inform´ ticos de la Universitat Jaume I, que atambi´ n han participado en la impartici´ n de la asignatura durante otros cursos y, e ocomo no, en la elaboraci´ n de algunos de los ejercicios propuestos de este libro. o Marzo, 2010 @ibaumo J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  7. 7. Cap´tulo 1 ıProcesos e Hilos1.1. Procesos 1. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante. o ı #include sys/types.h #include sys/wait.h #include unistd.h #include stdio.h #include stdlib.h @ibaumo 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 siguien- o 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. 8. 2. Observa el siguiente c´ digo y escribe la jerarqu´a de procesos resultante. o ı #include sys/types.h #include sys/wait.h #include unistd.h #include stdio.h #include stdlib.h int main (int argc, char ∗argv[]) { int num; pid t pid; srandom(getpid()); for (num= 0; num 3; num++) { pid= fork(); printf (Soy el proceso de PID %d y mi padre tiene %d de PID.n, 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; } @ibaumo Ahora compila y ejecuta el c´ digo para comprobarlo. Presta atenci´ n al or- o 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. 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 mo- mento 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. Des- o ı 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 sys/types.h #include sys/wait.h #include unistd.h #include stdio.h #include stdlib.h #define L1 2 #define L2 3 @ibaumo 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. 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 @ibaumo 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. 11. ´ Figura 1.1: Arbol de profun- ´ Figura 1.2: Arbol de profun- didad 5 y anchura 3. didad 5 y anchura 3, que s´ lo o se expande en anchura para los niveles pares distintos de cero. @ibaumo 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 consecuti- o vas. Antes de compilar y ejecutar el programa, piensa qu´ va a ocurrir. e #include sys/types.h #include sys/wait.h #include unistd.h #include stdio.h #include 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. 12. int main (int argc, char ∗argv[]) { execlp (kcalc, kcalc, NULL); printf (¿Se imprimira este mensaje?n); execlp (xload, xload, NULL); printf (¿Y este otro?n); return 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 am- a o bas aplicaciones e informe de la finalizaci´ n de cada una especificando si o termin´ kcalc o xload. o12. 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 @ibaumo 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. 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 finaliza- o ci´ n del programa dado, se debe indicar el identificador del proceso creado. o Para comprobar el correcto funcionamiento de este programa se aconseja es- cribir 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. o15. 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; @ibaumo 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´ me- u 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. o16. 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. 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 eje- a o a ı ´ cuci´ n un segundo programa que ser´ indicado en la l´nea de ordenes (junto 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 enun- ciado no se indica nada al respecto, el proceso se situar´ siempre al final de a @ibaumo 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 inte- rrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamien- o to de la interrupci´ n software consume 2 unidades de tiempo. o Existen dos dispositivos de entrada/salida sobre los que se pueden rea- lizar 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 ini- a cialmente A ser´ atendido antes que B. El modelo que siguen estos dos pro- a 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. 15. Proc A CPU (2ut.) E/S D1 (2ut.) CPU (3ut.) E/S D2 (5ut.) CPU (1ut) Proc B CPU (5ut.) E/S D1 (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. a19. 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 interrup- o 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 @ibaumo - Nivel 2 (menos prioritario): Interrupci´ n software (IS) o Existen dos procesos A y B que est´ n listos para ejecutar, de modo que ini- a cialmente A ser´ atendido antes que B. El modelo que siguen estos dos pro- a cesos es el siguiente: Proc A CPU (3ut.) E/S (3ut.) CPU (2ut.) E/S (1ut.) CPU (1ut.) Proc B CPU (8ut.) 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. a20. 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 inte- rrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamien- o 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. 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 ini- a cialmente A ser´ atendido antes que B. El modelo que siguen estos dos pro- a 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. a21. 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 interrup- o @ibaumo 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, ini- a cialmente, ser´ n atendidos en ese orden. El modelo que siguen estos tres a procesos es el siguiente: Proc A CPU (3ut.) E/S (10ut.) CPU (4ut.) Proc B CPU (6ut.) Proc C CPU (3ut.) 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. 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 interrup- o 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 ini- a cialmente A ser´ atendido antes que B. El modelo que siguen estos dos pro- a cesos es el siguiente: Proc A CPU (3ut.) E/S (1ut.) CPU (1ut.) E/S (1ut.) CPU (1ut.) @ibaumo Proc B 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. a23. 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 interrup- o 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. 18. Existen dos procesos A y B que est´ n listos para ejecutar, de modo que ini- a cialmente A ser´ atendido antes que B. El modelo que siguen estos dos pro- a 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. a24. 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 inte- rrupci´ n de reloj consumen 1 unidad de tiempo. La rutina de tratamien- o to de la interrupci´ n software consume 2 unidades de tiempo. o Existen dos dispositivos de entrada/salida sobre los que se pueden rea- lizar operaciones en paralelo. @ibaumo 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 blo- a 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. a25. 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. 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 interrup- o 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 @ibaumo tiempo. Indica tambi´ n aquellos instantes en los que los dispositivos de E/S e est´ n siendo utilizados. a1.3. Hilos 26. Modifica el programa que se ilustra en el enunciado del problema 15 de ma- nera 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´ li- e 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 ca- o 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. 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 unistd.h #include stdlib.h #include stdio.h #include sys/types.h #include sys/stat.h #include 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[]) { @ibaumo 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. u32. 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´ me- a tros. Inicialmente, se deben crear tantos procesos como ficheros especifica- dos. 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´ xi- u 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. 21. Cap´tulo 2 ıComunicaci´ n y Sincronizaci´ n o ode Procesos2.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 @ibaumo que se est´ n generando. a #include stdio.h #include stdlib.h #include unistd.h #include time.h #include sys/types.h #include 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. 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]); @ibaumo 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. 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); @ibaumo } 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´ me- a 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. 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´ me- a ı a tro y escribir´ alternativamente en dos tuber´as las l´neas pares e impa- a ı ı 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. @ibaumo El tercer proceso realiza una funci´ n similar sobre la tuber´a que con- o ı 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. 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 es- o 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 @ibaumo 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 Proceso 2 Proceso 3 --------- --------- --------- printf(3); sem_wait(s1); sem_wait(s2); sem_post(s3); printf(1); sem_wait(s4); printf(4); sem_wait(s3); printf(2); sem_post(s2); sem_post(s4); printf(5); sem_post(s1); sem_wait(s3); 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. 26. 43. Considera que los siguientes fragmentos de c´ digo se ejecutan en paralelo: o C´digo A: o C´digo B: o --------- --------- printf(A1); printf(B1); sem_post(s1); sem_wait(s1); sem_wait(s2); printf(B2); printf(A2); sem_post(s3); sem_wait(s2); sem_wait(s3); sem_post(s1); printf(B3); printf(A3); 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. e45. Escribe un programa que ejecute tres hilos en paralelo a los que llamaremos @ibaumo 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 ultimo46. 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. 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); @ibaumo 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. 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); } @ibaumo48. 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. 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){ @ibaumo 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. 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); } @ibaumo 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 parale- lo. El consumidor terminar´ cuando haya consumido todos los datos produ- a cidos.52. Escribe un programa que ejecute dos hilos en paralelo para realizar las si- guientes 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. 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; } @ibaumo /∗ 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 operacio- o 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 cancela- o 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 parale- lo, 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. 32. que los accesos a la tabla de reservas sean correctos. En concreto, cuando serealice una reserva o cancelaci´ n no puede realizarse ninguna otra operaci´ n o oen paralelo sobre la tabla, pero una consulta puede simultanear su acceso ala tabla con otras consultas.En la implementaci´ n de la consulta de la tabla, muestra por pantalla el esta- odo 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 ı euna cancelaci´ n, deben quedar libres todas las horas que tuviese reservadas oel estudiante que la solicita. Si ese estudiante no tuviese ninguna reserva sedebe mostrar un mensaje de error.Como todas las operaciones est´ n controladas por sem´ foros, escribe mensa- a ajes que indiquen el estado de las operaciones diferenciando cu´ ndo se solicita arealizar una acci´ n (a´ n no se tiene autorizaci´ n), y cu´ ndo se realiza efec- o u o ativamente (ya se tiene autorizaci´ n). As´, se puede seguir la evoluci´ n de las o ı ooperaciones 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. oSolicitud de reserva de al012: 9-10Reserva de al012: 9-10Solicitud de consulta de al004Solicitud de cancelaci´n de al006 o @ibaumoSolicitud de reserva de al000: 15-16Solicitud de consulta de al019Consulta de al019: 9-10 = al012Consulta de al019: 10-11 = LIBREConsulta de al019: 11-12 = LIBREConsulta de al019: 12-13 = LIBREConsulta de al019: 13-14 = LIBREConsulta de al019: 14-15 = LIBREConsulta de al019: 15-16 = LIBREConsulta de al019: 16-17 = LIBREConsulta de al019: 17-18 = LIBREConsulta de al004: 9-10 = al012Consulta de al004: 10-11 = LIBREConsulta de al004: 11-12 = LIBREConsulta de al004: 12-13 = LIBREConsulta de al004: 13-14 = LIBREConsulta de al004: 14-15 = LIBREConsulta de al004: 15-16 = LIBREConsulta de al004: 16-17 = LIBREConsulta de al004: 17-18 = LIBREConsulta de al004: 18-19 = LIBREConsulta de al004: 19-20 = LIBREConsulta de al004: 20-21 = LIBREConsulta de al019: 18-19 = LIBREConsulta de al019: 19-20 = LIBREConsulta de al019: 20-21 = LIBREDenegada cancelaci´n de al006: No tiene reservas oReserva 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. 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 ... o ı ´54. Un puente es estrecho y s´ lo permite pasar veh´culos en un unico sentido 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 condicio- a 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 (utili- zar 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 @ibaumo 27 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 32 100 Ejercicios resueltos de Sistemas Operativos - UJI
  34. 34. Cap´tulo 3 ıGesti´ n de Archivos y Directorios o3.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. @ibaumo 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 Contenido 10 he 11 sido 12 yo 13 no 14 sigan 15 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 Contenido 10 11 11 EOF 12 13 13 10 14 15 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

×