Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867

    [c] Memoria condivisa su Unix

    Ciao a tutti,
    sto finendo dei programmi per un esame e mi e' sorto un dubbio che non riesco a chiarire.

    Io ho dei processi concorrenti che hanno bisogno di accedere a 2 array in memoria condivisa, per immagazzinare i 2 array devo prelevare 2 diversi segmenti di memoria con 2 distinte shmget() oppure c'e' il modo di far convivere i 2 array in uno stesso segmento ??

    Io mi sono fatto l'idea di dover per forza prelevare due segmenti di memoria distinti, ma non si sa mai....

    Grazie a tutti

    ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    46
    se sono processi penso di no......perchè i due processi nn condividono risorse........se lo fai con i thread sicuramente sì...

  3. #3
    Il modo di far condividere lo stesso vettore c'è anche nel caso in cui siano processi. Bisogna crearsi una zona di memoria condivisa, puntarla e utilizzarla con le dovute precauzioni. Mi ricordo queste cose dall'esame di Sistemi 2 in c ma nn mi ricordo come si fa!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    ringrazio entrambi, e colgo l'occasione per precisare una cosa, sul fatto che si possa anche senza thread ne sono certo ho gia' fatto mille programmi di questo tipo. Ovviamente sto parlando di una cosa limitata a unix infatti tutto questo lo implemento usando delle system call di unix.

    Io il programma l'ho fatto usando due aree di memoria distinte una per ogni vettore, la mia domanda era se posso farlo usando una stessa area che poi divido nelle due variabili.

    Colgo l'occasione per postare il codice con il quale prelevo le due aree
    codice:
    int numero = 10;
    int *state;
    int *prec;
    shmid = shmget(MIA_CONST,(numero + 1)*sizeof(numero),IPC_CREAT|0666);
    if(shmid == -1)
    {
       fprintf(stderr,"Impossibile prelevare memoria condivisa");
       exit(1);
    }
    shmid2 = shmget(MIA_CONST2,(numero)*sizeof(numero),IPC_CREAT|0666);
    if(shmid2 == -1)
    {
       fprintf(stderr,"Impossibile prelevare memoria condivisa");
       exit(1);
    }
    state = (int *)shmat(shmid,0,SHM_RND);
    prec = (int *)shmat(shmid2,0,SHM_RND);

  5. #5
    se ti serve materiale sulla memoria condivisa vedi su: http://www.dis.uniroma1.it/~nanni/
    è il sito del mio prof di sistemi operativi, in fodno alla pagina trovi un pò di codice e delle dispense. Mi ricordo che il prof aveva fatto delle librerie x la gestione di semafori e di memoria condivisa molto semplici da usare. Spero ti possano essere utili

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.