Prova scritta di Sistemi Operativi, Prof. Mancini - 30 Settembre 1998
1. (punti: -1,4)
Si consideri il meccanismo primitivo receive per lo scambio di messaggi:
Quali fra le seguenti affermazioni sono corrette:
Ad ogni processo del sistema operativo Unix viene associata logicamente una quadrupla (proprietario reale, gruppo reale, proprietario effettivo, gruppo effettivo):
Nel sistema operativo Unix un utente richiede l'esecuzione dell'archivio a.out:
Illustrare in al piu' 60 parole il concetto di insieme di lavoro (working set) WS(t,d ) di un processo.
6. Considerare un insieme di cinque processi
P1, P2, P3, P4, P5
con i seguenti tempi di arrivo tempi di esecuzione in millisecondi:
| Processo | Tempo di arrivo | Tempo di esecuzione |
| P1 |
|
|
| P2 |
|
|
| P3 |
|
|
| P4 |
|
|
| P5 |
|
|
7. Considerare la seguente stringa di riferimenti di un processo alla memoria in un sistema con memoria virtuale
S = 1 4 5 2 6 4 3 7 5 0 6 1 6 2 5 4 0 7 1 3
Risolvere utilizzando un monitor il problema dei processi lettori e scrittori, adottando una politica che eviti l'attesa indefinita.
9. (punti: 8)
Realizzare un Perl script efficiente che riceve dalla linea di comando un pattern ed una sequenza di file e che restituisce come risultato un file di tutte le linee che NON contengono il pattern passato come argomento.
Risultati della prova
1. a,b,c,h
2. c
3. e
4. f
5.
Si definisce insieme di lavoro WS(t,d) di un processo Pi
al tempo virtuale t l'insieme delle pagine riferite da Pi
nell'intervallo di tempo virtuale (t-d,t]. Il tempo virtuale del generico
processo Pi e' definito uguale a zero alla generazione del processo
e avanza con un incremento unitario a ogni riferimento alla memoria eseguito
da Pi (si veda Maestrini).
6.
a) Algoritmo Round Robin
con quanto = 4 millisecondi:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b) media tempo di attesa dei
processi: 118/5
c) throughput medio: 5/45
7.
a) Algoritmo Second Chance
(pag 473 del Maestrini):
|
|
TurnoMS e' inizializzato a 4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Numero di page fault: 16
b) Algoritmo LRU (pag
469 del Maestrini):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Numero di page fault: 17
8.
Qui sono riportate le generiche procedure Lettore e Scrittore.
void Lettore()
{
monitor.OttieniPermessoInLettura();
Lettura();
monitor.RilasciaPermessoInLettura();
}
void Scrittore()
{
monitor.OttieniPermessoInScrittura();
Scrittura();
monitor.RilasciaPermessoInScrittura();
}
Monitor: variabili permanenti
condition L, S; boolean Scrittori=False; int ContatoreLettori=0, ContatoreLettoriNelMonitor=0, ContatoreScrittoriNelMonitor=0;Monitor: procedure interne
Monitor::OttieniPermessoInLettura()
{
ContatoreLettori++;
If ( ContatoreScrittoriNelMonitor == 0 || Scrittori )
{
ContatoreLettoriNelMonitor++;
wait(L);
ContatoreLettoriNelMonitor--;
}
signal(L);
}
Monitor::RilasciaPermessoInLettura()
{
ContatoreLettori--;
If ( ContatoreLettori == ContatoreLettoriNelMonitor )
signal(S);
}
Monitor::OttieniPermessoInScrittura()
{
ContatoreScrittori++;
If ( ( ContatoreLettori == ContatoreLettoriNelMonitor ) || Scrittori )
{
ContatoreScrittoriNelMonitor++;
wait(S);
ContatoreScrittoriNelMonitor--;
}
Scrittori=True;
}
Monitor::RilasciaPermessoInScrittura()
{
ContatoreScrittori--;
Scrittori=False;
If (ContatoreLettori != 0)
signal(L);
else
signal(S);
}
9.
#!/usr/bin/perl
die "Argomenti insufficienti!" if ( scalar(@ARGV) < 2 );
$Pattern = shift @ARGV;
open(OUT,"Output") || die $!;
foreach (@ARGV)
{
while (<>)
{
print OUT $_ if ($_ !~ /$Pattern/o);
}
}
Notare che in un ciclo
foreach (@ARGV) { while(<>) {...} ...}
l'interprete perl apre automaticamente
tutti i files i cui nomi sono stati passati da riga di comando, senza dover
specificare esplicitamente l'istruzione open.
Le soluzioni adottate in questo script sono rivolte all'efficienza, e non alla chiarezza dello script (come richiesto).
Lo script e' stato testato con il Perl 5.004 in ambiente Linux.
- 30 Settembre 1998 -
Si ringraziano i volenterosi studenti Alessandro
Cagnetti e Daniele
Giabbai