Dom 18 Agosto, 06:40:56 - 2019

Autore Topic: Appello 13/01/16  (Letto 3331 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #15 il: Dom 17 Gennaio, 10:13:17 - 2016 »
Vero! grazie mille, lo aggiungo alla lista, mi era completamente uscito di mente.

Offline fume90

  • Professore Ordinario
  • **
  • Post: 759
  • FeedBack: +24/-25
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #16 il: Lun 18 Gennaio, 09:22:47 - 2016 »
Il primo esercizio, nonostante non ricordi di averlo mai visto sui soliti testi di esame che girano qui sul forum, io ho provato a risolverlo così.

Se i processi A, B, C lavorano solo in user mode, il cambio di contesto avviene completamente in kernel mode e impiega 15 msec, il quanto di tempo a disposizione dei processi (che, a mio avviso, coincide con il timer per l'interrupt) per far si che la cpu lavori per il 90% in user mode è:

x = (90/100)(x + 15)

senza rifare i calcoli, a memoria direi che x = 125

Siete d'accordo?

Per l'esercizio di programmazione... alla fine era tutto facilmente risolvibile con la funzione dup2... il problema è che MAI, su nessun testo ho mai trovato un esercizio del genere. Non seguo questo corso da almeno due anni, spero che se ne sia parlato a lezione.
Sapendo come redirezionare input/output, l'esercizio si risolveva facilmente con qualche close, una dup2, una fork, e due execv. Infatti io ho fatto tutto, tranne il riderizionamento degli inpu/output stream. Mi auguro che il prof non consideri insufficiente l'esercizio per questo. Tra l'altro le funzioni dup, dup2, etc non erano neanche documentate su quelle dispense, quindi mai mi sarebbe venuto in mente di usarle, visto che di mio non le conoscevo per nulla. Pur vero che la cosa si poteva risolvere anche con delle pipe, ma anche queste, io personalmente, non le ho mai viste nei testi di esame e quindi non approfondite (riconosco che questa potrebbe essere stata una mia carenza).

A parte questi due quesiti, per il resto l'esame era piuttosto standard.

Ciao ciao e in bocca al lupo per i risultati!
Esistono 10 tipi di persone...chi conosce il codice binario...e chi no...

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #17 il: Lun 18 Gennaio, 12:00:14 - 2016 »
Riguardo il primo esercizio: se non erro il quanto di tempo da dare ai processi per fare in modo che la CPU lavorasse per il 90% del tempo in user mode mi era uscito 135 msec, però come timer dell'interrupt ho anche aggiunto i 15 msec del cambio di contesto, per un totale di 150 msec, dato che altrimenti se tra un interrupt e l'altro passano 135 msec, e 15 vengono usati per il cambio di contesto, ai processi verrebbero dati solo 120 msec.

Offline fume90

  • Professore Ordinario
  • **
  • Post: 759
  • FeedBack: +24/-25
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #18 il: Lun 18 Gennaio, 20:24:23 - 2016 »
ricordo che il totale faceva anche a me 150...probabile che anche io abbia dato come risultato 135.

Hai utilizzato anche tu lo stesso approccio immagino.

grazie per il confronto!!

ciao ciao
Esistono 10 tipi di persone...chi conosce il codice binario...e chi no...

Offline fume90

  • Professore Ordinario
  • **
  • Post: 759
  • FeedBack: +24/-25
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #19 il: Lun 18 Gennaio, 20:28:34 - 2016 »
ricordo che il totale faceva anche a me 150...probabile che anche io abbia dato come risultato 135.

Hai utilizzato anche tu lo stesso approccio immagino.

grazie per il confronto!!

edit:
ho riletto il tuo messaggio. Non saprei, ma secondo me il timer di interrupt coincide proprio con il tempo a disposizione dei processi... o no?

ciao ciao

Esistono 10 tipi di persone...chi conosce il codice binario...e chi no...

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #20 il: Gio 21 Gennaio, 16:01:17 - 2016 »
Ultima domanda, mi sapreste dire come il professore gestisce le verbalizzazioni? I risultati sono usciti, ma non ha fissato alcun appuntamento per verbalizzare, inoltre chi ancora deve consegnare il progetto basta che si prenoti ad un ricevimento con il progetto? Non c'è bisogno di accettare il voto dell'esame prima?

Perdonate il terzo grado.

Offline Cingols

  • Studente
  • *
  • Post: 26
  • FeedBack: +4/-1
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #21 il: Mar 26 Gennaio, 20:53:54 - 2016 »
Ecco il testo vero!
<.<

Offline Peprunner

  • Studente
  • *
  • Post: 43
  • FeedBack: +0/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #22 il: Mer 27 Gennaio, 00:49:15 - 2016 »
qualche idea su come andava implementato l' esercizio con i semafori?

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #23 il: Mer 27 Gennaio, 08:10:20 - 2016 »
qualche idea su come andava implementato l' esercizio con i semafori?

Riporto la mia soluzione:

-Dati
Sp[ n]    //binari, danno il via ai processi Pi per la scrittura in M
index      //int, posiziona Lett su M in base alla regola del buffer circolare
Sl[ n]     //binari, danno il via a Lett per la lettura dai singoli slot di M
Srl          //generico, indica a Lett che può riscrivere su R
Sr[ n]     //binari, danno il via ai Pi per la lettura da R
count     //int, contatore per i messaggi letti da Lett

-Init
for(i=1 to n) Sp[ i]=1
index=1
for(i=1 to n) Sl[ i]=0
Srl=0
for(i=1 to n) Sr[ i]=0
count=0

-Produci (Pi)
wait(Sp[ i])
<scrivi in M[ i]>
signal(Sl[ i])
wait(Sr[ i])
<leggi da R>
signal(Srl)

-Leggi (Lett)
wait(Sl[ index])
<leggi da M[ index]>
count=count+1
if(count==4){
    count=0
    wait(Srl,4)
    <rispondi su R>
    for(i=0; i<4; i++){
        signal(Sr[ index-i]
    }
    if(index==16) index=1
    else index=index+1
}
« Ultima modifica: Mer 27 Gennaio, 10:03:52 - 2016 da Szadek Shepard »

Offline Peprunner

  • Studente
  • *
  • Post: 43
  • FeedBack: +0/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #24 il: Mer 27 Gennaio, 17:57:26 - 2016 »
Grazie :) , siccome ho qualche difficoltà con i semafori potresti dare un' occhiata a questo esercizio?
Si consideri un insieme di N processi (P1, ... , Pn), ciascuno dei quali scrive periodicamente un nuovo messaggio su una memoria condivisa M di n slot. Ciascun processo Pi scrive esclusivamente nell’i-esimo slot della memoria condivisa. Dopo aver scritto il proprio messaggio, Pi attende che venga consegnata una risposta sempre sull’i-esimo slot della memoria condivisa M. L’attesa della risposta e’ bloccante. Un ulteriore processo REPLY legge i messaggi prodotti dai processi Pi e depositati negli slot della memoria condivisa M secondo la regola del buffer circolare. La lettura è an- che in questo caso bloccante. Ogni 2 nuovi messaggi letti, REPLY scambia il contenuto dei relativi slot di M ed abilita la lettura delle risposte da parte dei rispettivi processi Pi. Gli accessi in lettura/scrittura da parte dei processi (P1, ... , Pn) potranno avvenire in concorrenza, mentre gli ac- cessi in lettura/scrittura sullo stesso slot di M dovranno essere esclusivi. Si schematizzi la soluzione del suddetto problema di sincronizzazione, usando solo semafori, fornendo lo pseudo-codice delle procedure SCRIVI e RISPONDI usate rispettivamente da Pi e REPLY. Processi: {P1, P2, P3, P4, P5, P6, P7, ... ,Pn}

Ho pensato a questo tipo di soluzione:

Semaforo  Binario Scr[n];
Semaforo Binario Lett[n];
 
for j=0 to n{
Scr [j]=1;
Lett [j]=0;
}
count =0;

PI:
SCRIVI
<Scrivi da M[j]>
Signal Lett[j]
Wait Scr[j]
<Leggi da M[j]>

Reply:
RISPONDI
Wait Lett[j]
<Leggi su M[j]>
count ++;
if (count%2)= 0{
<Scambia M[j] con M[j-1]>
Signal Scr[j]
Signal Scr[j-1]
}

Offline mychemicalro

  • Studente
  • *
  • Post: 18
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #25 il: Gio 28 Gennaio, 10:59:17 - 2016 »
Io non ho capito cosa intendevi fare con le ultime 2 righe, stai considerando che gli slot scritti siano sempre consecutivi?

Come si può notare anche io ho tanti dubbi sui semafori  :-[
"Grazie a Dio, sono ateo" (Luis Bunuel)

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #26 il: Gio 28 Gennaio, 11:43:21 - 2016 »
siccome ho qualche difficoltà con i semafori potresti dare un' occhiata a questo esercizio?

Mi sembra tutto corretto, l'unica cosa che non mi convince è che reply non dovrebbe avere j come parametro, dato che è un processo singolo, quindi aggiungerei un int che funga da indice per reply e segua la regola del buffer circolare:

int indice=1

Wait Lett[indice]
<Leggi su M[indice]>
count ++;
if (count%2)= 0{
<Scambia M[indice] con M[indice-1]>
Signal Scr[indice]
Signal Scr[indice-1]
if(indice==n) indice=1;
else indice++;

E' possibile unire indice e count per usare un solo int, ma non penso ne valga la pena, in fondo non ci viene detto di usare il minor numero possibile di dati.

Io non ho capito cosa intendevi fare con le ultime 2 righe, stai considerando che gli slot scritti siano sempre consecutivi?

Se la domanda era per me, il motivo è lo stesso per il quale ho modificato questo altro esercizio:
dato che viene richiesto che il processo reply legga dagli slot di M secondo la regola del buffer circolare, utilizzo un indice per dire a reply dove dovrà leggere durante la prossima iterazione, la penultima riga serve a resettare l'indice nel caso in cui reply ha letto dall'ultimo slot di M (nella prossima iterazione deve ricominciare da capo).
« Ultima modifica: Gio 28 Gennaio, 11:45:27 - 2016 da Szadek Shepard »

Offline Peprunner

  • Studente
  • *
  • Post: 43
  • FeedBack: +0/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #27 il: Ven 29 Gennaio, 19:20:46 - 2016 »
grazie mille per la risposta. Concedimi la prova del nove:

Si consideri un insieme di N processi (P1, ... , PN), ciascuno dei quali scrive periodicamente un nuovo messaggio su una memoria condivisa M di m<N slot. Ciascun processo Pi scrive in un generico slot correntemente libero di M. Dopo aver scritto il proprio messaggio, Pi attende che venga consegnata una risposta tramite un buffer R, a slot singolo. L’attesa della risposta e’ bloccante. Un ulteriore processo REPLY legge i messaggi prodotti dai processi Pi. Quando REPLY ha letto m nuovi messaggi depositati nei vari slot della memoria condivisa M, provenienti dai processi Pi, consegna ad essi la risposta tramite il buffer R, la quale potra’ essere letta dai processi Pi che evavano inserito il proprio messaggion in M in concorrenza. All’atto della consegna della risposta da parte di REPLY, gli slot di M possono considerarsi nuovamente liberi per accogliere nuovi messaggi. Gli accessi in scrittura su M da parte dei processi (P1, ... , PN) potranno avvenire anche essi in concorrenza. Si schematizzi la soluzione del suddetto problema di sincronizzazione, usando semafori e strutture dati condivise, fornendo lo pseudo-codice delle procedure SCRIVI e RISPONDI usate rispettivamente da Pi e REPLY.


Semaforo  Binario S[m]; // per scrittura
Semaforo Binario L[m];  // per lettura
Semaforo Binario B;   // R

for i=0 to m{
S[i ]=1;
L[i ]=0
}
B=0;
count =0;

Pi:
Scrivi
if M[i ] is void  //locazione vuota M
<Scrivi su M[i ]>
Wait S[i ]
Signal L[i ]
Wait B
<Leggi su R>


Reply:
Rispondi
if count = m{
<Scrivi risp su R>
count=0
i=0
for j=0 to m{
signal S[j ]
signal B
}

else {
  <Leggi su M[i ]>
   Wait L[i ]
   count ++;
}

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #28 il: Sab 30 Gennaio, 13:24:06 - 2016 »
Citazione
Pi:
Scrivi
if M[i ] is void  //locazione vuota M
<Scrivi su M[i ]>
Wait S[i ]
Signal L[i ]
Wait B
<Leggi su R>

Il numero dei processi (i) è maggiore del numero di slot di M, quindi M[i ] risulta in un nullpointer per alcuni processi, inoltre Ciascun processo Pi scrive in un generico slot correntemente libero di M, non in uno specifico slot.

Offline Peprunner

  • Studente
  • *
  • Post: 43
  • FeedBack: +0/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #29 il: Dom 31 Gennaio, 17:28:59 - 2016 »
a parte l' indice, il ragionamento può funzionare?