Esercizio Semafori sistemi operativi

322 views
Skip to first unread message

Valerio

unread,
Jun 30, 2013, 1:15:37 PM6/30/13
to informa...@googlegroups.com
Ciao raga,

Sto cercando di fare questo esercizio di sistemi operativi:

L’ingresso ad un concerto rock è regolamentato da N tornelli attraverso ognuno dei quali può passare solo uno spettatore alla volta. Una volta passati, gli spettatori attendono che l’agente associato al tornello scelto sia libero e li possa perquisire. Quindi entrano nello stadio e vanno a prendere il proprio posto riservato. Quando il concerto finisce escono da cancelli più grandi attraverso ognuno dei quali può passare un numero arbitrariamente grande di spettatori.
Individuare le risorse condivise del problema, scrivere i processi che lo caratterizzano ed inserire le primitive semaforiche che permettono a tali processi di sincronizzarsi e mutualmente escludersi in maniera corretta.



Sapete darmi una soluzione corretta (che vada bene al prof secondo voi) ?

In particolare:
1) non capisco se è il caso di trattare i "tornelli" come processo con N istanze oppure se semplicemente usare un semaforo inizializzato a N (Tornelli=N) e fare tipo così:

Spettatore:

Wait (Tornelli)
va ad uno dei tornelli
etc...
Signal (Tornelli)
guarda il concerto e poi esce dai cancelli
etc...

Il dubbio è che facendo così poi non so se è scontato che ogni spettatore che passa nel semaforo (N spettatori) poi vada automaticamente ad un tornello diverso da quello usato da un altro spettatore così che risolvo il fatto che ogni spettatore usa un tornello.

2) E poi non so proprio come gestire i cancelli perchè secondo quello che ho capito sembra che ad esempio ogni persona possa usare una delle K istanze della risorsa "cancello" ma poi per ognuna di questa (per ogni cancello) possono passare altre Z persone (numero arbitrariamente grande di spettatori).

Spero riusciate ad aiutarmi

Grazie tante

Daniela Vitale

unread,
Jul 1, 2013, 3:20:09 PM7/1/13
to informa...@googlegroups.com
allora penso che vada fatto così:
risorse condive : tornelli
semafori: tornelli[n]=1;agente[n]=1;
processi: spettatore
spettatore
wait(tornelli[n])
passa
signal(tornelli[n])
wait(agente[n])
aspetta l'agente corrispondente al tornello
signal(agente[n])
esce dal cancello

Valerio

unread,
Jul 1, 2013, 4:50:44 PM7/1/13
to informa...@googlegroups.com
Ti ringrazio, ora studio bene la soluzione. Quindi intendi che la risorsa tornelli ha n istanze e con un semaforo di mutua esclusione ogni processo usa una istanza?

Daniela Vitale

unread,
Jul 1, 2013, 6:08:59 PM7/1/13
to informa...@googlegroups.com
si io l'ho vista così la soluzione di quest'esercizio però fai altri e vedi che ti verrà più facile

Valerio

unread,
Jul 2, 2013, 3:31:54 AM7/2/13
to informa...@googlegroups.com
Scusami stavo pensando, ma fare un semaforo con N istante ed inizializzarlo a 1 non corrisponde ad usare un semaforo semplice ed inizializzarlo a N.
Qui nel caso entrerebbero N spettatori e in teoria secondo la definizione di semaforo contatore ogni processo spettatore prende una istanza tra le N della risorsa tornelli perciò in teoria si potrebbe fare anche così che ne pensi?

Daniela Vitale

unread,
Jul 2, 2013, 5:36:46 AM7/2/13
to informa...@googlegroups.com
si anche metti il tornello=N in quanto ne abbiamo tanti e via dicendo


--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "informatica-aq" di Google Gruppi.
Per annullare l'iscrizione a questo argomento, visita https://groups.google.com/d/topic/informatica-aq/WLzMwcsSsTk/unsubscribe.
Per annullare l'iscrizione a questo gruppo e a tutti i suoi argomenti, invia un'email a informatica-a...@googlegroups.com.
Per postare messaggi in questo gruppo, invia un'email a informa...@googlegroups.com.
Visita questo gruppo all'indirizzo http://groups.google.com/group/informatica-aq.
Per ulteriori opzioni, visita https://groups.google.com/groups/opt_out.
 
 

Message has been deleted

Valerio

unread,
Jul 2, 2013, 5:45:33 AM7/2/13
to informa...@googlegroups.com
ok grazie, naturalmente stessa struttura della soluzione che mi hai dato cioè così:

risorse condive : tornelli
semafori: tornelli=N;agente=N;
processi: spettatore
spettatore
wait(tornelli)
passa
signal(tornelli)
wait(agente)
aspetta l'agente corrispondente al tornello
signal(agente)
esce dal cancello

Poi volendo una sincronizzazione mettendo l'agente come processo a n istanze è superflua?

Daniela Vitale

unread,
Jul 2, 2013, 5:55:04 AM7/2/13
to informa...@googlegroups.com
e si l'agente cmq deve corrisponde allo steso tornello che prende lo spettatore
Reply all
Reply to author
Forward
0 new messages