La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Mappare file in memoria mmap(), mmunmap(). 2 Allocazione dei processi nella RAM Spazio logico dei processi A e B e memoria fisica Condivisione dellarea.

Presentazioni simili


Presentazione sul tema: "1 Mappare file in memoria mmap(), mmunmap(). 2 Allocazione dei processi nella RAM Spazio logico dei processi A e B e memoria fisica Condivisione dellarea."— Transcript della presentazione:

1 1 Mappare file in memoria mmap(), mmunmap()

2 2 Allocazione dei processi nella RAM Spazio logico dei processi A e B e memoria fisica Condivisione dellarea testo Process A Process B

3 3 Mapping e condivisione di File Two processes can share a mapped file. Un file mappato simultaneamente in due processi

4 4 Mappaggio file in mamoria: mmap void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset) –fd: descrittore file da mappare –offset : inizio area fd da mappare in memoria –length : lunghezza area da mappare in memoria –start : indirizzo logico dal quale effettuare il mapping (tipicamente ignorato meglio passare NULL ) –prot/flags : maschere di bit che specificano condivisione e protezione dellarea mappata

5 5 Mappaggio file: mmap (2) void* mmap(void* start, size_t length, int prot,int flags, int fd, off_t offset) –il valore restituito è lindirizzo logico (iniziale) in cui il file è stato effettivamente mappato –il valore restituito è MAP_FAILED se non si riesce a mappare il file (settando errno opportunamente)

6 6 Mappaggio file: mmap (3) –prot : descrive la protezione dellarea mappata, si ottiene mettendo in OR un insieme di maschere predefinite. Es: PROT_WRITE : permesso di scrittura PROT_READ : permesso di lettura –flags : se e con quali modalità larea di memoria può essere condivisa da più processi, si ottiene mettendo in OR un insieme di maschere predefinite. Es: MAP_SHARED : si può condividere con tutti gli altri processi MAP_PRIVATE : crea una copia privata del processo, le scritture non modificano il file

7 7 Mappaggio file: mmap (4) –ATTENZIONE: length deve essere un multiplo dellampiezza di pagina –lampiezza della pagina (in byte) si ottiene con la fne standard #include int getpagesize(void);

8 8 Mappaggio file: mmap (5) int fd, psize, esito; char* file; /* puntatore area mappata */ psize = getpagesize(); /* ampiezza pagina */ IFERROR(fd=open(s.c,O_RDWR), aprendo s.c); /* esito è -1 se la mmap() e fallita */ esito =(file = mmap(NULL, psize, \ PROT_READ|PROT_WRITE, MAP_SHARED, \ fd, 0) == MAP_FAILED )?-1:0; IFERROR(esito, mappando s.c); /* da qua accedo al file come un array */ putchar(file[10]);

9 9 S-mappaggio file: munmap() int munmap(void* start, size_t length); –length : lunghezza area da s-mappare dalla memoria –start : indirizzo logico dal quale effettuare lo smapping –ritorna -1 se si è verificato un errore –NB: la chiusura di un file NON elimina i mapping relativi al file che devono essere eliminati chiamando esplicitamente la munmap()

10 10 Mappaggio file: esempio... IFERROR(fd=open(s.c,O_RDWR), aprendo s.c); esito =(file = mmap(NULL, psize, \ PROT_READ|PROT_WRITE, MAP_SHARED, \ fd, 0) == MAP_FAILED )?-1:0; IFERROR(esito, mappando s.c); IFERROR(close(fd), chiudendo s.c); /* da qua accedo al file come un array */ putchar(file[10]); … IFERROR(munmap(file,psize), smappando s.c);


Scaricare ppt "1 Mappare file in memoria mmap(), mmunmap(). 2 Allocazione dei processi nella RAM Spazio logico dei processi A e B e memoria fisica Condivisione dellarea."

Presentazioni simili


Annunci Google