SlideShare une entreprise Scribd logo
1  sur  140
Télécharger pour lire hors ligne
@ibaumo
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 IG11




J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7                      100 Ejercicios resueltos de Sistemas Operativos - UJI
@ibaumo
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	                   	            	                  	               	                   	               	                  	          	            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




                                                                                                 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 apo-
                                                                      a
yar la docencia, tanto presencial, desarrollada en clases de problemas o en labo-
ratorio, como no presencial, proporcionando al estudiante un material de apoyo al
estudio de un nivel y contenido adecuado a una asignatura real.



                              @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                                            n
2004, 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                                         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 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. 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-
                     a
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 pro-
fesores Gustavo Casa˜ , Isabel Gracia y Antonio Castellanos, todos ellos del De-
                       n
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




                               @ibaumo




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



                               @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
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.
                                                         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;




                               @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.
                          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 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
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.
        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 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.
        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 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
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.
        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 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
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.
        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 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
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.
        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 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.
                                                              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 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.
           a


1.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
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.
                                 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´ 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
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



                              @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
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
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
$ 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
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
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.
                                                 e

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




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




                               @ibaumo
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){




                               @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
#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
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
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 esta-
                    o
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 mensa-
                                 a                        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 efec-
                 o     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




                               @ibaumo
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
     ...


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




                              @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
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 en-
    tradas 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 di-
                 e       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 direccionar-
                 n                 a              o               a
    se como m´ ximo? Si la partici´ n resulta tener un tama˜ o de 8Gbytes, ¿con-
               a                     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




                               @ibaumo
               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 nodo-
               i 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 irrecu-
               perable 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
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

Contenu connexe

Similaire à Fundamentos Computadores II

Modelo gestion preventiva
Modelo gestion preventivaModelo gestion preventiva
Modelo gestion preventivafundacioninvate
 
Conselleria educació pmb_bibliotecas
Conselleria educació pmb_bibliotecasConselleria educació pmb_bibliotecas
Conselleria educació pmb_bibliotecasNatacha Granero
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_explorationWhaleejaa Wha
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_explorationzacc601
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_explorationWhaleejaa Wha
 
Tutorial de maxima
Tutorial de maximaTutorial de maxima
Tutorial de maximalichowlin
 
Manual de rutinas informaticas
Manual de rutinas informaticasManual de rutinas informaticas
Manual de rutinas informaticasGato Gatuzo
 
100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativosPatriciaDavila16
 
Introduccion a la programacion en c prev
Introduccion a la programacion en c prevIntroduccion a la programacion en c prev
Introduccion a la programacion en c prevjtk1
 

Similaire à Fundamentos Computadores II (20)

Modelo gestion preventiva
Modelo gestion preventivaModelo gestion preventiva
Modelo gestion preventiva
 
Conselleria educació pmb_bibliotecas
Conselleria educació pmb_bibliotecasConselleria educació pmb_bibliotecas
Conselleria educació pmb_bibliotecas
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_exploration
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_exploration
 
Comandos cisco ccna_exploration
Comandos cisco ccna_explorationComandos cisco ccna_exploration
Comandos cisco ccna_exploration
 
Manual guadalinex edu
Manual guadalinex eduManual guadalinex edu
Manual guadalinex edu
 
Tutorial de maxima
Tutorial de maximaTutorial de maxima
Tutorial de maxima
 
Texto de matematicas 2009-2011
Texto de matematicas 2009-2011Texto de matematicas 2009-2011
Texto de matematicas 2009-2011
 
Operativos
OperativosOperativos
Operativos
 
Informe Biocat 2011 (resumen ejecutivo en castellano)
Informe Biocat 2011 (resumen ejecutivo en castellano)Informe Biocat 2011 (resumen ejecutivo en castellano)
Informe Biocat 2011 (resumen ejecutivo en castellano)
 
Manualscilab 090513151714 Phpapp02
Manualscilab 090513151714 Phpapp02Manualscilab 090513151714 Phpapp02
Manualscilab 090513151714 Phpapp02
 
Manual Scilab
Manual ScilabManual Scilab
Manual Scilab
 
Manual de todos listo
Manual de todos listoManual de todos listo
Manual de todos listo
 
Manual de rutinas informaticas
Manual de rutinas informaticasManual de rutinas informaticas
Manual de rutinas informaticas
 
Diseño de Experimentos
Diseño de Experimentos Diseño de Experimentos
Diseño de Experimentos
 
100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos
 
Material MAT021
Material MAT021Material MAT021
Material MAT021
 
Tercer año
Tercer añoTercer año
Tercer año
 
Manual de latex
Manual de latexManual de latex
Manual de latex
 
Introduccion a la programacion en c prev
Introduccion a la programacion en c prevIntroduccion a la programacion en c prev
Introduccion a la programacion en c prev
 

Plus de Iván BM

Modem GSM Wavecom Fastrack
Modem GSM Wavecom FastrackModem GSM Wavecom Fastrack
Modem GSM Wavecom FastrackIván BM
 
Trabajo sobre el protocolo Spdy
Trabajo sobre el protocolo SpdyTrabajo sobre el protocolo Spdy
Trabajo sobre el protocolo SpdyIván BM
 
Ieee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_morenoIeee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_morenoIván BM
 
Ieee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_morenoIeee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_morenoIván BM
 
Cartel curso latex lyx
Cartel curso latex lyxCartel curso latex lyx
Cartel curso latex lyxIván BM
 
Resumen transporte de datos
Resumen transporte de datosResumen transporte de datos
Resumen transporte de datosIván BM
 
Wigig, Wi-Fi & WiMaX
Wigig, Wi-Fi & WiMaXWigig, Wi-Fi & WiMaX
Wigig, Wi-Fi & WiMaXIván BM
 

Plus de Iván BM (8)

Modem GSM Wavecom Fastrack
Modem GSM Wavecom FastrackModem GSM Wavecom Fastrack
Modem GSM Wavecom Fastrack
 
Trabajo sobre el protocolo Spdy
Trabajo sobre el protocolo SpdyTrabajo sobre el protocolo Spdy
Trabajo sobre el protocolo Spdy
 
Ieee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_morenoIeee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_moreno
 
Ieee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_morenoIeee802 11n iván_bautista_moreno
Ieee802 11n iván_bautista_moreno
 
Exp. IBM
Exp. IBMExp. IBM
Exp. IBM
 
Cartel curso latex lyx
Cartel curso latex lyxCartel curso latex lyx
Cartel curso latex lyx
 
Resumen transporte de datos
Resumen transporte de datosResumen transporte de datos
Resumen transporte de datos
 
Wigig, Wi-Fi & WiMaX
Wigig, Wi-Fi & WiMaXWigig, Wi-Fi & WiMaX
Wigig, Wi-Fi & WiMaX
 

Dernier

Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
La evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariaLa evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariamarco carlos cuyo
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfEDILIAGAMBOA
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 

Dernier (20)

Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
La evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundariaLa evolucion de la especie humana-primero de secundaria
La evolucion de la especie humana-primero de secundaria
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdf
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 

Fundamentos Computadores II

  • 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 IG11 J. Ribelles / J. Martínez / P. García - ISBN: 978-84-693-0148-7 100 Ejercicios resueltos de Sistemas Operativos - UJI
  • 3. @ibaumo 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 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 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 apo- a yar la docencia, tanto presencial, desarrollada en clases de problemas o en labo- ratorio, como no presencial, proporcionando al estudiante un material de apoyo al estudio de un nivel y contenido adecuado a una asignatura real. @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 n 2004, 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 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 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. 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- a 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 pro- fesores Gustavo Casa˜ , Isabel Gracia y Antonio Castellanos, todos ellos del De- n 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 @ibaumo 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 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. 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. 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. 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. ´ 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. 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. 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 @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. 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. 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; @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. 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 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. 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. 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 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. 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 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. 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. 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 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. 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. 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 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. 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. 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 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. 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 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. a 1.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. 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. 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´ 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. 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 @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. 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. 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. $ 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. 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. 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. e 45. 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 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); @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. 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); } @ibaumo 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){ @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. #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. 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. 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 esta- o 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 mensa- a 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 efec- o 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 @ibaumo 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 ... 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. 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. @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
  • 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 en- tradas 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 di- e 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 direccionar- n a o a se como m´ ximo? Si la partici´ n resulta tener un tama˜ o de 8Gbytes, ¿con- a 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 @ibaumo 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 nodo- i 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 irrecu- perable 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