Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi N - Z > Sistemi operativi I > Implemetare semeaforo generalizzato con monito
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
carlo88
.amico.

User info:
Registered: May 2009
Posts: 20 (0.00 al dì)
Location: buccinasco
Corso: informatica
Anno: secondo
Time Online: 6:55:40 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
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 :?

Last edited by carlo88 on 16-04-2012 at 14:34

14-04-2012 15:32
Click Here to See the Profile for carlo88 Click here to Send carlo88 a Private Message Find more posts by carlo88 Add carlo88 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Kons
.novellino.

User info:
Registered: Jan 2012
Posts: 2 (0.00 al dì)
Location:
Corso: Informatica
Anno:
Time Online: 0:36:10 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

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.

Last edited by Kons on 16-04-2012 at 15:20

16-04-2012 15:16
Click Here to See the Profile for Kons Click here to Send Kons a Private Message Find more posts by Kons Add Kons to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
delca85
.fedelissimo.

User info:
Registered: Oct 2012
Posts: 42 (0.01 al dì)
Location:
Corso: Informatica
Anno: Primo
Time Online: 11:41:22 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

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?

09-04-2013 15:11
Click Here to See the Profile for delca85 Click here to Send delca85 a Private Message Find more posts by delca85 Add delca85 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 12:58.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.033 seconds (76.93% PHP - 23.07% MySQL) con 25 query.