Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

[HELP] Domande d'esame S.O.


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 1 risposta/e

#1
Johnny C. Roger

Johnny C. Roger

    Advanced Member

  • Utente
  • StellaStellaStella
  • 62 Messaggi:
Ciao ragazzi, spero di aver messo il post nella sezione giusta, cmq tra le varie domande d'esame trovate su r0x, ho trovato alcune a cui non ho saputo trovare facilmente risposta. 
Le domande in particolare sono:
 

1)Concatenazione dei comandi nella shell unix con more e less ??

 

2)Cosa succede con questo codice supponendo che si parta con PID = 100.

 

for (i = 0; i < 10; i ++)

i = fork();

 

 

3)Quanta memoria alloca il S.O. all’ avvio (1/2 o 1/3 del totale della memoria disponibile).

 

4)Perché nei sistemi multiprocessore l'uso dei semafori è inutile

 

5)Dato un blocco di codice per la sincronizzazione di 2 processi, dire perché garantiva mutua esclusione ma non progresso con turno inizializzato a 0.                             

 

do{                                                                 do{                                                                   

while (turno != i);                                while (turno != j);  

sezione critica                                  sezione critica

turno=j                                          turno=i   

sezione non critica                             sezione non critica

}while                                                            }while

 
 
Qualcuno potrebbe darmi una mano o conosce la risposta esatta a queste domande?  :angelo1:   :angelo1:




#2
Johnny C. Roger

Johnny C. Roger

    Advanced Member

  • Utente
  • StellaStellaStella
  • 62 Messaggi:

Credo di aver trovato la risposta a queste domande (sperando che siano corrette, nel caso fatemi sapere). Le posto in modo da essere utili a qualcun altro:

 

1)      Concatenazione dei comandi nella shell unix con more e less

La shell consente di concatenare l'esecuzione di più processi per formare una “catena di montaggio" (pipeline) con la sintassi:

comando1 | comando2 | ...

 

i processi dei vari comandi vengono lanciati in parallelo.

Lo standard output di ciascun processo è collegato allo standard input del processo successivo (usando le pipe di Unix). Molti comandi, pensati per essere usati in pipeline, si comportano da filtri: in assenza di argomenti, prendono i dati su cui operare dallo standard input, e producono il risultato sullo standard output (esempi: wc, head, tail)

 

Esempio

ls *. pdf | wc

conta il numero di file PDF nella directory corrente

Un esempio di filtro usato come ultimo elemento di una pipeline è il comando more, che visualizza il suo input una pagina alla volta (aspettando che l'utente prema `spazio' per passare alla pagina successiva).

Il comando less è una versione estesa di more, che consente anche di tornare indietro (usando il tasto `b').

 

Esempio:

per visualizzare un elenco di file molto lungo una pagina per volta, si può  usare il comando:

ls | less

 

 

2)      Cosa succede con questo codice supponendo che si parta con PID = 100.

 

for (i = 0; i < 10; i ++)

i = fork();

 

Creo 10 processi figli ed la i in ogni iterazione contiene il valore di ritorno della chiamata fork(); PID=100 resta il PID del padre.

 

3)Quanta memoria allocai l sistema operativo all'avvio? 1/3

 

4)      Perché nei sistemi multiprocessore l'uso dei semafori è inutile

I semafori devono essere eseguiti in modo atomico. Si deve garantire che nessuno dei due processi possa eseguire operazioni wait( ) e signal( ) contemporaneamente sullo stesso semaforo. Si tratta di un problema di accesso alla sezione critica, e in un contesto monoprocessore lo si può risolvere semplicemente inibendo le interruzioni durante l’esecuzione di signal( ) e wait( ). Nei sistemi con un sola CPU, infatti, le interruzioni sono i soli elementi di disturbo: non vi sono istruzioni eseguite  da altri processori. Finché non si riattivano le interruzioni, dando la possibilità allo scheduler di riprendere il controllo della CPU, il processo corrente continua indisturbato al sua esecuzione.

Nei sistemi multiprocessore è necessario disabilitare le interruzioni di tutti i processori, perché altrimenti le istruzioni dei diversi processi in esecuzione su processori distinti potrebbero interferire tra di loro. Tuttavia, disabilitare le interruzioni di tutti i processi può non essere cosa semplice, e causare un notevole calo di prestazioni. E’ per questo che - per garantire  l’esecuzione atomica di wait( ) e signal( ) – i sistemi SMP devono mettere a disposizione tecniche di realizzazione dei lock (per esempio gli spinlock)

Quindi in breve perché i semafori si usano in genere quando si ha un solo processore. Infatti usare i semafori in un sistema multiprocessore significherebbe  disabilitare le interruzioni di tutti i processi che:

·         non è cosa semplice,

·         causerebbe cali di prestazioni

 

5)      Dato un blocco di codice per la sincronizzazione di 2 processi, dire perché garantiva mutua esclusione ma non progresso con turno inizializzato a 0.                             

do{                                                                 do{                                                                   

while (turno != i);                                while (turno != j);  

sezione critica                                  sezione critica

turno=j                                          turno=i   

sezione non critica                             sezione non critica

}while                                                            }while

Non soddisfa il progresso perché effettua il controllo solo sulla variabile j e quindi anche se il processo j non è pronto per entrare nella sezione critica non fa entrare neanche il processo i la stessa cosa ma al contrario per l'altro blocco di codice, il tutto si risolve con l'algoritmo di peterson che effettua un doppio controllo.

Ovviamente soddisfa la mutua esclusione perché se entra j non entra i






Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi