.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- Implemetare semeaforo generalizzato con monito (http://www.dsy.it/forum/showthread.php?threadid=42827)


Posted by carlo88 on 14-04-2012 15:32:

Exclamation Implemetare semaforo generalizzato con monitor

Ciao a tutti,

ho bisogno di un aiuto per implementare un semaforo generalizzato attraverso un monitor. Bruschi spesso lo mette nel compitino e dato che a lezione non mi sono chiarito completamente le idee volevo sapere se ho fatto giusto.


monitor semaforo

int sem
condition semaphore

#DOWN
sem = sem -1
if (sem < 0) then wait(semaphore)

#UP
sem = sem +1
if (sem <= 0) then signal(semaphore)

quindi uso la variabile intera sem come contatore e se ha un valore negativo significa che c'è qualche processo in coda altrimenti se >=0 significa che è libero quindi alzo il semaforo.

Potete confermarmi se ho capito bene?

Grazie :?


Posted by Kons on 16-04-2012 15:16:

più o meno sì,

il valore sem è quello che avrebbe il semaforo, la coda (contare sotto lo zero) ti serve perchè altrimenti perdi i processi in attesa dopo il primo in quanto daresti un solo signal.

pid -- val sem -- esito
P0 -> 0 -> permesso
P1 -> -1 -> wait
P2 -> -2 -> wait

end P0 -> -1 -> signal a P1
end P1 -> 0 -> signal a P2
end P2 -> 1 -> monitor libero

se dopo "end P0" arrivasse un altro processo P3 verrebbe messo in coda in quanto sem è -1.

Se invece non andassi sotto lo zero, al primo signal(quello di P0 a P1) incrementeresti sem che andrebbe a 1 nonostante ci siano ancora processi in coda.
L'arrivo del processo P3 in questo caso causerebbe probabilmente un'invasione di zombie.


Posted by delca85 on 09-04-2013 15:11:

La up, non dovrebbe essere implementata così:

code:
if (sem < 0) then signal(semaphore) else sem++;

?

Sicuramente sono io a non aver capito bene, ma io la farei così perché altrimenti, se un processo, che era in coda, prende il controllo del monitor, ha comunque incrementato il valore del semaforo, anche se non è più "verde".

E' una stupidaggine?


All times are GMT. The time now is 20:39.
Show all 3 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.