Mer 21 Agosto, 15:31:34 - 2019

Autore Topic: Esame 27 gennaio 2015  (Letto 2451 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline sound

  • Neo-Laureato
  • **
  • Post: 94
  • FeedBack: +1/-0
    • Mostra profilo
Esame 27 gennaio 2015
« il: Mer 04 Febbraio, 11:28:32 - 2015 »
Ciao a tutti!! Come avete risolto il compito di martedì scorso? Soprattutto l'esercizio sui semafori e sulle socket? Grazie

Offline Greg917

  • Ricercatore
  • ****
  • Post: 457
  • FeedBack: +10/-6
  • Siamo solo immagini sfocate..
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #1 il: Mer 04 Febbraio, 11:37:40 - 2015 »
Hai un testo?

Offline sound

  • Neo-Laureato
  • **
  • Post: 94
  • FeedBack: +1/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #2 il: Mer 04 Febbraio, 11:57:41 - 2015 »
Eccolo

Offline sound

  • Neo-Laureato
  • **
  • Post: 94
  • FeedBack: +1/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #3 il: Mer 04 Febbraio, 11:59:22 - 2015 »
Anche sulle 3 domande di teoria cosa avete risposto?

Offline leonida2390

  • Studente
  • *
  • Post: 18
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #4 il: Mer 04 Febbraio, 12:43:20 - 2015 »
io ho fatto cosi i 4' esercizio

DATI
semaforo S // generico che da il verde ai processi P
semaforo S1 // generico che da il verde ai processi PR
buffer R

INIT
S=2 // cosi il primo processo P e fa richiesta ha subito il verde
S1=0

Pi
SCRIVI
            wait(S,2)
            <scrivi su R>
            signal(S1,2)

PRi
LEGGI
          wait(S1)
          <leggi su R>
          signal(S)



E' molto semplice ma credo sia giusto

Offline Munky

  • Studente
  • *
  • Post: 16
  • FeedBack: +2/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #5 il: Mer 04 Febbraio, 14:49:44 - 2015 »
io ho fatto cosi i 4' esercizio

DATI
semaforo S // generico che da il verde ai processi P
semaforo S1 // generico che da il verde ai processi PR
buffer R

INIT
S=2 // cosi il primo processo P e fa richiesta ha subito il verde
S1=0

Pi
SCRIVI
            wait(S,2)
            <scrivi su R>
            signal(S1,2)

PRi
LEGGI
          wait(S1)
          <leggi su R>
          signal(S)



E' molto semplice ma credo sia giusto

non non va bene... un Pri potrebbe leggere due volte la stessa cosa

Offline leonida2390

  • Studente
  • *
  • Post: 18
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #6 il: Mer 04 Febbraio, 15:03:16 - 2015 »
hai ragione, non c avevo pensato ,infatti mi sembrava troppo semplice .. ecco perchè ho preso solo 26..  :-[

va beh..

Offline Dagu

  • Studente
  • *
  • Post: 48
  • FeedBack: +2/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #7 il: Mer 04 Febbraio, 15:39:30 - 2015 »
provo a dare una mia soluzione:

DATI
semaforo LM[n]   // vettore di semafori binari
semaforo SM[m]   //  vettore di semafori binari

INIT
for(i=1 to n)
LM=0;
for(i=1 to m)
SM=0;

Pi
SCRIVI
            wait(SM);
            <scrivi messaggio su R>
            signal(LM);
       
PRi
int count=0,num=2;
LEGGI
          wait(Lm);
          <leggi messaggio in R>
           cont++;
        if(count==num){
          signal(SM);
         count=0;
}


non sono sicuro pero della soluzione....

P.S ai signal ,ai wait e al init ci va anche l'indici i tra parentesi  quadre che pero nn me li fa mettere il forum!
« Ultima modifica: Mer 04 Febbraio, 15:42:58 - 2015 da Dagu »
Ci sono 10 tipi di persone: quelli che capiscono il codice binario e quelli che non lo capiscono.

Offline manila

  • Studente
  • *
  • Post: 41
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #8 il: Mer 04 Febbraio, 18:21:10 - 2015 »
Qualcuno sarebbe gentile da postare la soluzione dell'esercizio sulle socket?

Thanks

Offline leonida2390

  • Studente
  • *
  • Post: 18
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #9 il: Mer 04 Febbraio, 18:37:48 - 2015 »
provo a dare una mia soluzione:

DATI
semaforo LM[n]   // vettore di semafori binari
semaforo SM[m]   //  vettore di semafori binari

INIT
for(i=1 to n)
LM=0;
for(i=1 to m)
SM=0;

Pi
SCRIVI
            wait(SM);
            <scrivi messaggio su R>
            signal(LM);
       
PRi
int count=0,num=2;
LEGGI
          wait(Lm);
          <leggi messaggio in R>
           cont++;
        if(count==num){
          signal(SM);
         count=0;
}


non sono sicuro pero della soluzione....

P.S ai signal ,ai wait e al init ci va anche l'indici i tra parentesi  quadre che pero nn me li fa mettere il forum!

Scusa forse non ho ben capito come hai interpretato...Ma non riesco a trovare il senso a questo svolgimento

gli errori credo siano molteplici, i primo aver preso due vettori di semafori binari,il secondo è stato settarli tutti a 0, non a senso perché visto che i metodi SCRIVI e LEGGI iniziano con un wait rimangono tutti in attesa di una risorsa che nessuno puo liberare. Poi leghi il processo Pi con quelloPRi ma il numero dei processi P è diverso da quello dei PR(percio alcuni non saranno accoppiati)

questi sono solo alcuni errori Concettuali
ce ne sono altri proprio nei metodi(esempio le variabili nel LEGGI sono locali) percio quell if non sarà mai soddisfatto..

Offline Dagu

  • Studente
  • *
  • Post: 48
  • FeedBack: +2/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #10 il: Mer 04 Febbraio, 19:02:30 - 2015 »
grazie per aver risposto. Ti dico che sono alle prime armi con gli esercizi sui semafori...ne ho fatti alcuni visti qui sul forum. La logica dei semafori binari indica l'abilitazione a ogni processo di scrivere/leggere. L'inizializzazione di tutti a 0 si hai ragione e sbagliato ma non sapevo come interpretare la frase che dice che le scritture dei processi Pi avviene senza un ordinamento. Sul numero di processi non avevo pensato...

Sulle varibili penso che basta metterle in DATA no? pero penso che vadano usate per tener conto di quante volte e stato letto il messaggio su R

Forse sbaglio il modo risolutivo di questo es..ma non ho un altra idea...ho visto la tua soluzione ma non capisco quel 2 che sta ad indicare...magari qualcuno mette la soluzione giusta!
Ci sono 10 tipi di persone: quelli che capiscono il codice binario e quelli che non lo capiscono.

Offline leonida2390

  • Studente
  • *
  • Post: 18
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #11 il: Gio 05 Febbraio, 11:24:38 - 2015 »
il 2 significa che quel semaforo generico ha 2 risorse disponibili già all'inizio, settarlo così dà la possibilità al primo Pi che fa il wait abbia le due risorse di cui ha bisogno
NOTA quando scrivo wait(S,2) significa che il processo sta aspettando 2 risorse(TOKEN) dal semaforo S
stessa cosa quando faccio signal(S1,2) significa che il processo libera 2 risorse al semaforo S1


una soluzione corretta potrebbe essere questa:

DATI
semaforo S // generico che da il verde ai processi P
semaforo S1 // generico che da il verde ai processi PR
buffer R
booblean GiaLetto[ M ]// un array che mi servirà a capire se uno stesso processo PRi abbia gia letto il messaggio(non fara leggere due volte lo stesso messaggio a uno stesso processo PRi)

INIT
S=2 // cosi il primo processo P e fa richiesta ha subito il verde
S1=0

Pi
SCRIVI
            wait(S,2)  /aspetto 2 risorse su S per avere la conferma che due processi PR abbiano letto il messaggio
            <scrivi su R>
             for(i=1 to M){
             GiaLetto[ i ]=false  /setto tutto l array a false, cosi nessun processo PR ha letto il messaggio
            }
            signal(S1,2) /libero 2 risorse su S1 che daranno il verde a due processi PR

PRi
LEGGI

          wait(S1)/aspetta la risorsa su S1(se non c è si mette in coda)
          if(!GiaLetto[ i ]{ //verifica di non aver letto gia questo messaggio
                <leggi su R>
                 GiaLetto[ i ]=true; //setta di aver letto il messaggio, a questo punto se dovesse riprendere il controllo prima di un nuovo PRj dopo il wait andrà nel ramo else
                 signal(S) /libera su S una risorsa delle due necessarie a P per poter scrivere
           }else{
               signal(S1) /questo processo ha gia letto questo messaggio, allora libera di nuovo una risorsa su S1 per dare la possibilita di lettura a un nuovo PR
          }



P.s prima mi ero sbagliato a inviare
« Ultima modifica: Gio 05 Febbraio, 11:55:16 - 2015 da leonida2390 »

Offline leonida2390

  • Studente
  • *
  • Post: 18
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #12 il: Gio 05 Febbraio, 12:11:08 - 2015 »
Qualcuno sarebbe gentile da postare la soluzione dell'esercizio sulle socket?

Thanks
per quanto riguarda l esercizio 5 io l ho fatto cosi.. ma non sono sicuro al 100%



int[] funzione(short PN,char**IP){
   int risultato[];
   struct sockaddr_in indirizzo;
   indirizzo.sin_family=AF_INET;
   indirizzo.sin_port=htons(PN);
   int i=0,j=0;
   while(IP[ i ]!=null){
      inet_aton(IP[ i ],&indirizzo.sin_addr);
      int sock_ds=socket(AF_INET,SOCK_STREAM,0);
      int buonFine=connect(sock_ds,(struct sockaddr*)&indirizzo,sizeof(indirizzo));
      if(buonFine!=-1){
         risultato[ j ]=sock_ds;
         j++;
      }
      close(sock_ds);
      i++;
   }
   return risultato;
}
« Ultima modifica: Ven 06 Febbraio, 09:28:16 - 2015 da leonida2390 »

Offline Tear

  • Studente
  • *
  • Post: 5
  • FeedBack: +0/-0
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #13 il: Sab 14 Febbraio, 12:00:44 - 2015 »
il 2 significa che quel semaforo generico ha 2 risorse disponibili già all'inizio, settarlo così dà la possibilità al primo Pi che fa il wait abbia le due risorse di cui ha bisogno
NOTA quando scrivo wait(S,2) significa che il processo sta aspettando 2 risorse(TOKEN) dal semaforo S
stessa cosa quando faccio signal(S1,2) significa che il processo libera 2 risorse al semaforo S1


una soluzione corretta potrebbe essere questa:

DATI
semaforo S // generico che da il verde ai processi P
semaforo S1 // generico che da il verde ai processi PR
buffer R
booblean GiaLetto[ M ]// un array che mi servirà a capire se uno stesso processo PRi abbia gia letto il messaggio(non fara leggere due volte lo stesso messaggio a uno stesso processo PRi)

INIT
S=2 // cosi il primo processo P e fa richiesta ha subito il verde
S1=0

Pi
SCRIVI
            wait(S,2)  /aspetto 2 risorse su S per avere la conferma che due processi PR abbiano letto il messaggio
            <scrivi su R>
             for(i=1 to M){
             GiaLetto[ i ]=false  /setto tutto l array a false, cosi nessun processo PR ha letto il messaggio
            }
            signal(S1,2) /libero 2 risorse su S1 che daranno il verde a due processi PR

PRi
LEGGI

          wait(S1)/aspetta la risorsa su S1(se non c è si mette in coda)
          if(!GiaLetto[ i ]{ //verifica di non aver letto gia questo messaggio
                <leggi su R>
                 GiaLetto[ i ]=true; //setta di aver letto il messaggio, a questo punto se dovesse riprendere il controllo prima di un nuovo PRj dopo il wait andrà nel ramo else
                 signal(S) /libera su S una risorsa delle due necessarie a P per poter scrivere
           }else{
               signal(S1) /questo processo ha gia letto questo messaggio, allora libera di nuovo una risorsa su S1 per dare la possibilita di lettura a un nuovo PR
          }



P.s prima mi ero sbagliato a inviare


ciao mi sorgono dubbi: se il prof dice "usa solo semafori" posso usare un array di booleani? in più è corretto dire a un processo che ha già letto in una "sessione" che non deve fare niente? non dovrebbe aspettare un'altra sessione in cui potrebbe leggere? mi spiego meglio con un esempio: Pr3 entra e legge, Pr3 rientra e non può leggere. A questo punto non dovrebbe aspettare che un altro processo legga dalla memoria, un processo scriva e quindi diventa abilitato a leggere? nel tuo caso semplicemente non legge e termina...

Offline psyko

  • Ricercatore
  • ****
  • Post: 285
  • FeedBack: +13/-9
    • Mostra profilo
Re:Esame 27 gennaio 2015
« Risposta #14 il: Mar 17 Febbraio, 22:31:58 - 2015 »
Salve ragazzi,

come bisogna rispondere alla domanda 2 ? ed ad una eventuale domanda simile ma su NTFS?

Grazie.