Appelli del 13 novembre 2008 di Sistemi Operativi e

Document Sample
Appelli del 13 novembre 2008 di Sistemi Operativi e Powered By Docstoc
					                                  SISTEMI OPERATIVI
                                    13 Novembre 2008

                                                A

1. Che cosa produce su video questo frammento di codice? Perché?

  #include <stdio.h>
  #include <unistd.h>
  int main() {
    int i;
    i = 4;
    if (fork())
      if (!fork())
         system("echo i+$i");
    execlp("echo","system","i++",0);
  }


2. Le system call sleep e alarm cosa servono, come si usano, sono intercambiabili, si
   possono usare insieme nello stesso processo? Come si annulla un time reimpostato? Un
   processo in attesa su una pipe riceve un segnale SIGALRM?

3. Dettagliare le differenze essenziali tra processi, user thread e kernel thread.

4. Implementare uno script bash che visualizzi tutte le directory del sottoalbero con radice
   nella directory passata come argomento che abbiano esattamente 2 sottodirectory.

5. Implementare uno script bash che riceva come parametro due numeri interi.
   Lo script deve editare il file passwd e disabilitare tutti gli utenti il cui userid è
   compreso nell'intervallo identificato dai due numeri. Gli utenti sono disabilitati assegnando
   come shell /bin/false
   II file passwd ha il seguente formato:
   <username>:<password>:<uid>:<qid>:<descrizione>:<home>:<shell>

6. Implementare uno script awk che prenda come argomento un file di testo che rappresenti un
   grafo, come quello esemplificato in figura, mediante una lista di nodi adiacenti:
   [stato iniziale (stato finale label)* ]:

   0 1 B 2 A
   1 3 1 0 C
   2 1 A
   3




   e produca in output una rappresentazione mediante una sequenza di transizioni (stato
   iniziale,stato finale,label ) ordinate per stato iniziale :
   0 1 B
   0 2 A
   1 0 C
   1 3 B
   2 1 A
   3
                                     SISTEMI OPERATIVI
                                       13 Novembre 2008

                                                   B

1.   Che cosa produce su video questo frammento di codice? Perché?
     #include <stdio.h>
     #include <unistd.h>
     int main(){
       int i;
       i = 4;
       if (!fork())
          if (fork())
             execlp("echo","system","i++",0);
       system("echo i+$i");
     }


2. Come si fanno finire tutti i thread attivi di un processo? Il thread padre può terminare senza che
   tutti i thread della sua famiglia terminino? Giustificare la risposta. Quale system call consente
   ad un thread di sincronizzarsi con la terminazione di un suo thread figlio?

3. Definire cosa significa specificare la precedenza FIFO nel problema dei Readers and Writers e
   mostrarne la soluzione con i semafori.

4. Implementare uno script bash columns.sh che stampi su una colonna un intervallo di
   colonne adiacenti: il primo parametro sia la prima colonna, il secondo la lunghezza
   dell'intervallo, il terzo il file di input
   Esempio di input file: ex.txt:
      one two three four
      five six seven eight
      Uso: columns.sh 2 2 ex.txt
      Output:
      two
      six
      three
      seven

5. Implementare uno script bash processa.sh che legga un file contenente nomi di file, uno
   per riga. I file da elaborare hanno estensione .dat sono tutti memorizzati nella directory
   work. Lo script deve verificare che il file esista e spostarlo nella directory done modificando
   il nome con l'aggiunta della stringa _done prima dell'estensione.

6. Implementare uno script awk che codifichi un file di testo secondo il seguente algoritmo. È
   dato un secondo file di testo code.txt che contiene una sola riga composta da coppie lettera
   dell'alfabeto e un numero separati da spazio, es:
   a 3 b 5 c 3 d 4 ...
   Ogni parola del file da codificare deve essere sostituita dalla parola che si trova sulla stessa
   riga N posizioni a destra, dove N corrisponde al valore associato alla lettera iniziale della
   parola..
   Se spostandosi a destra si raggiunge l'ultima parola della riga bisogna ricominciare in maniera
   circolare dalla prima parola.
                                    SISTEMI OPERATIVI
                                       13 Novembre 2008

                                                C
1.    Che cosa produce su video questo frammento di codice? Perché?

      #include <stdio.h>
      tinclude <unistd.h>
      int main(){
        int i;
        i=4;
        if (fork())
           if (!fork())
             execlp("echo","system",Mi++",0);
        system("echo i+$i");
      }


2. Le system call sleep e alarm cosa servono, come si usano, sono intercambiabili, si possono
   usare insieme nello stesso processo? Come si annulla un time reimpostato? Un
   processo in attesa su una pipe riceve un segnale SIGALRM?

3. Dettagliare le differenze essenziali tra processi, user thread e kernel thread.

4. Implementare uno script bash che cerchi tutti i file regolari del sottoalbero con radice nella
   directory passata come argomento, e ne stampi il nome invertito. Es. pippo.obj deve
   essere visualizzato come jbo.oppip

5. Implementare uno script bash che riceva come parametro il nome di una directory.
   Lo script deve cercare nel sottoalbero della directory i file con estensione .jpg.
   I file trovati devono essere rinominati così: <cont> - <data> - <nomeoriginale>
   dove <cont> rappresenta un contatore progressivo, data la <data> in cui viene eseguito lo
   script nella forma yy-mm-dd e <nomeoriginale> il nome originale del file.
   I file rinominati devono essere spostati nella directory /backup/<data>
   La directory deve essere creata se non esiste.
   Il comando date '+%y-%m-%d' restituisce la data formattata come yyy-mm-dd

6. Implementare uno script awk che prenda come argomento un file di testo che rappresenti un
   grafo come quello esemplificato in figura, mediante una sequenza di transizioni (stato
   iniziale,stato
   finale,label ):

     0   1   B
     2   1   A
     0   2   A
     1   0   C
     1   3   B
     3


     e produca in output una rappresentazione come lista di nodi adiacenti ordinati per stato
     iniziale: [stato iniziale (stato finale label)*]
     0 1 B 2 A
     1 3 B 0 C
     2 1 A
     3
                                       SISTEMI OPERATIVI
                                         13 Novembre 2008

                                                      D
1. Che cosa produce su video questo frammento di codice? Perché?
   #include <stdio.h>
   #include <unistd.h>
   int main(){
     int i;
     i = 4;
     if (!fork())
        if (fork())
           system("echo i+$i");
     execlp("echo","system","i++","0");
   }


2. Che cosa servono le system call
   pthread_detach (pthread_self ());
   pthread_mutex_trylock (&mutex);

3. Descrivere dettagliatamente che cosa succede, al processore, al processo e al suo stack, al
   kernel e al suo stack, quando un processo effettua una system call.

4. Implementare uno script bash processa.sh che legga un file contenente nomi di file, uno
   per riga. I file da elaborare hanno estensione .dat sono tutti memorizzati nella directory
   work. Lo script deve verificare che il file esista e spostarlo nella directory done modificando
   il nome con l'aggiunta della stringa _done prima dell'estensione.

5. Un file descrive dei rettangoli secondo il formato: symbol start width height
   dove:
   symbol è il simolo usato per stampare il rettangolo
   start è la colonna iniziale
   width and height sono le dimensioni del rettangolo
   Implementare uno script bash draw_rectangles.sh che stampi i rettangoli.
   Esempio di input file (rect.dat)
   * 3 6 3
   # 6 5 2
   Usage: draw_rectangles.sh rect.dat produce
        ******
        ******
        ******
            #####
            #####

6. Implementare uno script bash e awk che visualizzi tutti i file del sottoalbero con radice
   nella directory passata come argomento che abbiano dimensione maggiore di 10 Kbyte e più
   di 5 parole in almeno il 20% delle loro righe.
                                              OPERATING SYSTEMS
                                                  13 / l l / 2008

                                                                  A
1.   W h a t will p r o d u c e on your display this program. Why?
     tinclude <stdio.h>
     #include <unistd.h>
     int main () {
                int i ;
                i = 4;
                if ( f o r k Q )
                                 if (!fork())
                                 system("echo i + $ i " ) ;
                execlp("echo","system","i++" ,0) ;
      }

2. Explain the m a i n differences a m o n g processes, user threads and kernel threads.

3. W h a t s y s t e m calls sleep and alarm do? W h a t is their s y n t a x ? H o w are t h e y u s e d ? Can o n e of
   t h e m be substituted by the other? Can they be used in the s a m e p r o c e s s ?

4.   I m p l e m e n t a bash     script that prints all the sub-directories of the directory received in the
     c o m m a n d line o n l y if their n a m e ends by DIR.


5. I m p l e m e n t a bash script columns . sh that prints on a single c o l u m n , an interval of adjacent
   c o l u m n s , w h e r e the first p a r a m e t e r is the first c o l u m n and t h e second p a r a m e t e r is the last column,
   for the file passed as third parameter.
               E x a m p l e of input file: ex. txt:
                        one two three four
                        five six seven eight
              Usage: columns . sh 2 3 ex. txt
               Output:
               two
               six
               three
               seven


6. I m p l e m e n t a bash script that receives two n u m b e r s . It must edit the file /etc/passwd and
   disabile all the user having userid included in the interval given by the two input parameters.
   U s e r are disabled s i m p l y assigning to t h e m as default shell /bin/false
   T h e file /etc/passwd has this format:
   <username>:<password>:<uid>:<gid>:<descrizione>:<home>:<shell>
                                   OPERATING SYSTEMS
                                       1 3 / 11 /2008

                                                        B

 1 . W h a t will p r o d u c e on y o u r display this program. Why?
     #include <stdio.h>
     #include <unistd.h>
     int main () {
         int i ;
        i = 4;
         if (!fork())
             if (fork())
                 execlp("echo","system","i++",0);
         system("echo i + $ i " ) ;
     }

 2. If a thread terminates, all other process threads terminate. Is this statement correct? W h a t are
    the system calls that allow a thread to terminate

 3 . S h o w the solution using s e m a p h o r e s of the problem of the R e a d e r s and Writers with R e a d e r ' s
     p r e c e d e n c e . Explain w h a t is the m e a n i n g of R e a d e r ' s p r e c e d e n c e , and the function of every
     semaphore.

4 . I m p l e m e n t a bash script that creates in a directory, given as a r g u m e n t in t h e c o m m a n d line, a
   s y m b o l i c link link-N, w h e r e     N is an increasing integer value, starting from 1, associated
   with each file h a v i n g extension       .f,     . c, and . cpp that exist in the sub-tree of that directory.

5 . I m p l e m e n t a bash script triangle, sh that d r a w s a rectangled triangle on standard output
    w h e r e the first and the s e c o n d s parameters specify the length of t w o sides and the orientation is
    s h o w n in the e x a m p l e :

    Example:
    U s a g e : triangle.sh 3 5
    *****
    ***
    *
6 . I m p l e m e n t a bash script mov. sh that moves the files with extension                        . dat in the list of
   directories passed as a r g u m e n t s in the c o m m a n d line to a directory DONE, c h a n g i n g their
   n a m e s by a d d i n g the string    _done before the extension.

   U s a g e : mov. sh dirl dir2 dirn
                                            OPERATING SYSTEMS
                                                1 3 / 11 /2008

                                                              C
     1.      W h a t will p r o d u c e on your display this program. W h y ?

             #include <stdio.h>
             #include <unistd.h>
             int main () {
               int i ;
               i = 4;
               if (fork())
                 if (!fork())
                    execlp("echo","system","i++",0) ;
               system("echo i + $ i " ) ;
             }

2. W h a t s y s t e m calls sleep and alarm d o ? W h a t is their s y n t a x ? H o w are t h e y used? Can one
      of t h e m be substituted by the other? Can they be used in the s a m e p r o c e s s ?

3. W h a t is the difference b e t w e e n the e x c e p t i o n s PAGE      FAULT and SEGMENTATION FAULT?
      H o w d o e s the kernel react to these two exceptions?

4.    I m p l e m e n t a bash script invert. sh that finds all the regular files of the sub-tree rooted in
      the directory passed as first a r g u m e n t in the c o m m a n d line, and prints their n a m e s "inverted".
      For e x a m p l e f oo. obj must be printed as jbo. oof


5. I m p l e m e n t a bash script columns . sh that prints on a single c o l u m n , an interval of adjacent
   c o l u m n s , w h e r e the first parameter is the length of interval and the second parameter is the last
   c o l u m n , for the file passed as third.
           E x a m p l e of input file: ex. txt:
           one two three four
           five six seven eight
           Usage: columns . sh 2 3 ex. txt
                 Output:
                 two
                 six
                 three
                 seven


6. I m p l e m e n t a bash script progressive. sh that finds in the sub-tree rooted in the
          directory g i v e n as a r g u m e n t the files with extension . jpg.
      T h e s e files m u s t be r e n a m e d as    <counter>-<date>-<original_name>
      w h e r e <count> represents a counter that is incremented for each found file, <date> is the
          current date,    with format yy-mm-dd,          and     <original_name>      is the original file n a m e .
      T h e r e n a m e d files m u s t be m o v e d to the directory /backup/<data>
      T h e directory must be created if it does not exist.
      T h e c o m m a n d date        ' +%y-%m-%d' prints the formatted date yyy-mm-dd




                                                                                   i
                                 OPERATING SYSTEMS
                                     1 3 / 11 /2008

                                                    D

 1. W h a t will p r o d u c e on your display this program. Why?
    #include <stdio.h>
    #include <unistd.h>
    int main () {
        int i ;
        i = 4;
        if (!fork())
            if (fork())
                system("echo i + $ i " ) ;
        execlp("echo","system","i++",0);
    }

 2. W h a t is the function of the following system calls:
             pthread_detach (pthread_self ());
             pthread_mutex_trylock (&mutex);

 3. In which conditions a process goes to the z o m b i e state? In which conditions a process is
    inherited by the init process? W h a t is the m e a n i n g of the statement
     signal(SIGCHLD, SIG_IGN) .


 4. Write a bash script triangle.sh that draws a rectangled triangle on standard output where the
    first and the s e c o n d s p a r a m e t e r s specify the length of t w o sides and the orientation is shown in
    this e x a m p l e :
    Example:
    Usage:            triangle.sh 3 5
    *****
        ***
           *



5. I m p l e m e n t a bash script that creates in a directory, given as a r g u m e n t in the c o m m a n d line, a
   s y m b o l i c link link-N, w h e r e   N is an increasing integer value, starting from 1, associated
   with each file h a v i n g extension     .f,    .c, and . cpp that exist in the sub-tree of that directory.


6. A text file d e s c r i b e s a list of rectangles in the format: symbol start width height

   where:
     symbol is the s y m b o l to be used to d r a w the rectangle
     start is the starting c o l u m n
     width and height are the d i m e n s i o n s of the rectangle
     I m p l e m e n t a bash script draw_rectangles. sh           that reads this file and prints the
      rectangles on the screen.
    E x a m p l e of input file (rect.dat)
    * 3 6 3
    # 6 5 2
    Usage: draw_rectangles . sh                       rect.dat p r o d u c e s
      ******
      ******
      ******
         #####
         #####