giannola
16-02-2007, 06:28
Stavo studiando sul libro di sistemi operativi la procedura di attesa dei processi in un sistema multiprocessore per entrare in una sezione critica.
Il libro in particolare diceva che per evitare l'attesa attiva causata dalla lock si poteva aggiungere anche la wait.
Dunque lo schema per ogni processo era
lock(x)
wait(mutex)
unlock(x)
.
.
sezione critica
.
lock(x)
signal(mutex)
unlock(x)
Ma facendo una controprova ho notato come questa procedura conduce ad una sequenza morta.
Infatti, posto ad esempio il semaforo mutex ad 1, se il primo processo si blocca sulla sezione critica, un secondo processo si sospenderà trovando mutex = 0, ed in pratica non andrà ad eseguire la unlock.
A quel punto tutti i processi risulteranno impossibilitati ad entrare nella lock.
Come è possibile che un libro di univarsità riporti un errore tanto grave ?
Il libro in particolare diceva che per evitare l'attesa attiva causata dalla lock si poteva aggiungere anche la wait.
Dunque lo schema per ogni processo era
lock(x)
wait(mutex)
unlock(x)
.
.
sezione critica
.
lock(x)
signal(mutex)
unlock(x)
Ma facendo una controprova ho notato come questa procedura conduce ad una sequenza morta.
Infatti, posto ad esempio il semaforo mutex ad 1, se il primo processo si blocca sulla sezione critica, un secondo processo si sospenderà trovando mutex = 0, ed in pratica non andrà ad eseguire la unlock.
A quel punto tutti i processi risulteranno impossibilitati ad entrare nella lock.
Come è possibile che un libro di univarsità riporti un errore tanto grave ?