file in una sezione dello spazio di indirizzi del processo. Il meccanismo è
illustrato in \figref{fig:file_mmap_layout}; una sezione del file viene
riportata direttamente nello spazio degli indirizzi del programma. Tutte le
-operazioni su questo zona verranno riportate indietro sul file dal meccanismo
+operazioni su questa zona verranno riportate indietro sul file dal meccanismo
della memoria virtuale che trasferirà il contenuto di quel segmento sul file
invece che nella swap.
\headdecl{unistd.h}
\headdecl{sys/mman.h}
- \funcdecl{void * mmap(void *start, size\_t length, int prot, int flags, int
+ \funcdecl{void * mmap(void * start, size\_t length, int prot, int flags, int
fd, off\_t offset)}
Esegue la mappatura in memoria del file \param{fd}.
\footnotetext{L'uso di questo flag con \macro{MAP\_SHARED} è
stato implementato in Linux a partire dai kernel della serie 2.4.x.}
-Un file viene sempre mappato su multipli delle dimensioni di una pagina,
-qualora esso sia più corto la parte restante è riempita con zeri; eventuali
-scritture in quella zona di memoria non vengono riportate sul file. Se le
-dimensioni del file cambiano (esso viene esteso o troncato), non è specificato
-quale effetto viene a aversi sulle pagine di memoria che corrispondono alle
-regioni aggiunte o tolte.
+
+Un file viene sempre mappato in memoria su multipli delle dimensioni di una
+pagina, ma non è detto che le sue dimensioni siano allineate ai confini di una
+pagina; in \figref{fig:file_mmap_boundary} sono illustrate le varie
+possibilità. La mappatura alloca comunque un numero di pagine sufficienti a
+contenere tutta la sezione di file richiesta, la memoria che
+
+è riempita con
+zeri; eventuali scritture in quella zona di memoria non vengono riportate sul
+file. Se le dimensioni del file cambiano (esso viene esteso o troncato), non è
+specificato quale effetto viene a aversi sulle pagine di memoria che
+corrispondono alle regioni aggiunte o tolte. La situazione è illustrata in
+\figref{fig:file_mmap_boundary},
+
+\begin{figure}[htb]
+ \centering
+ \includegraphics[width=10cm]{img/mmap_boundary}
+ \caption{Effetti delle interazioni fra mappatura in memoria e dimensioni
+ effettive del file.}
+ \label{fig:file_mmap_boundary}
+\end{figure}
Si tenga presente che non tutti i file possono venire mappati in memoria, la
mappatura infatti introduce una corrispondenza biunivoca fra una sezione di un