-La funzione richiede come argomenti \param{old\_address} che specifica il
-precedente indirizzo per la mappatura in memoria e \param{old\_size}, che ne
-indica la dimensione, con \param{new\_size} si specifica invece la nuova
-dimensione che si vuole ottenere. Questa funzione usa il meccanismo della
-\index{memoria~virtuale}memoria virtuale per modificare l'associazione fra gli
-indirizzi virtuali del processo e le pagine di memoria, modificando una
-precedente mappatura.
-
-Infine l'argomento \param{flags} è una maschera binaria per i flag che
-controllano il comportamento della funzione. Il solo valore utilizzato è
-\const{MREMAP\_MAYMOVE}\footnote{per poter utilizzare questa costante occorre
- aver definito \macro{\_GNU\_SOURCE} prima di includere \file{sys/mman.h}.}
-che consente di eseguire l'espansione anche quando non è possibile utilizzare
-il predente indirizzo. Per questo motivo la funzione può restituire un
-indirizzo della nuova zona di memoria, che, se si è usato questo flag, non è
-detto coincida con \param{old\_address}.
-
-La mappatura in memoria di un file viene normalmente eseguita in maniera
-lineare, cioè parti successive di un file vengono mappate linearmente su
-indirizzi successivi in memoria (la prima pagina di un file viene mappata
-sulla prima pagina di memoria e così via). Esistono però delle
-applicazioni\footnote{in particolare la tecnica è usata dai database o dai
- programmi che realizzano macchine virtuali.} in cui è utile poter mappare
-parti diverse di un file su diverse zone di memoria.
-
-Questo è ovviamente sempre possibile eseguendo più volte la funzione
-\func{mmap} per ciascuna delle diverse aree,\footnote{ed in effetti è quello
- che veniva fatto prima che fossero introdotte queste estensioni.} ma questo
-approccio ha delle conseguenze molto pesanti in termini di prestazioni. Si
-ricordi infatti che il \textit{memory mapping} funziona facendo ricorso al
-meccanismo della \index{memoria~virtuale} memoria virtuale per trascrivere su
-un file le operazioni effettuate sugli indirizzi di memoria sui cui esso è
-mappato.
-
-Questo vuol dire che per ciascuna mappatura in memoria deve essere definita
-nella \itindex{page~table} \textit{page table} del processo una nuova area
-della memoria virtuale\footnote{quella che nel gergo del kernel viene chiamata
- una \textit{virtual memory area} o VMA.} che corrisponda alla mappatura, in
-modo che questa diventi visibile nello spazio degli indirizzi come illustrato
-in fig.~\ref{fig:file_mmap_layout}.
+La funzione richiede come argomenti \param{old\_address} (che deve essere
+allineato alle dimensioni di una pagina di memoria) che specifica il
+precedente indirizzo del \textit{memory mapping} e \param{old\_size}, che ne
+indica la dimensione. Con \param{new\_size} si specifica invece la nuova
+dimensione che si vuole ottenere. Infine l'argomento \param{flags} è una
+maschera binaria per i flag che controllano il comportamento della funzione.
+Il solo valore utilizzato è \const{MREMAP\_MAYMOVE}\footnote{per poter
+ utilizzare questa costante occorre aver definito \macro{\_GNU\_SOURCE} prima
+ di includere \file{sys/mman.h}.} che consente di eseguire l'espansione
+anche quando non è possibile utilizzare il precedente indirizzo. Per questo
+motivo, se si è usato questo flag, la funzione può restituire un indirizzo
+della nuova zona di memoria che non è detto coincida con \param{old\_address}.
+
+La funzione si appoggia al sistema della \index{memoria~virtuale} memoria
+virtuale per modificare l'associazione fra gli indirizzi virtuali del processo
+e le pagine di memoria, modificando i dati direttamente nella
+\itindex{page~table} \textit{page table} del processo. Come per
+\func{mprotect} la funzione può essere usata in generale, anche per pagine di
+memoria non corrispondenti ad un \textit{memory mapping}, e consente così di
+implementare la funzione \func{realloc} in maniera molto efficiente.
+
+Una caratteristica comune a tutti i sistemi unix-like è che la mappatura in
+memoria di un file viene eseguita in maniera lineare, cioè parti successive di
+un file vengono mappate linearmente su indirizzi successivi in memoria.
+Esistono però delle applicazioni\footnote{in particolare la tecnica è usata
+ dai database o dai programmi che realizzano macchine virtuali.} in cui è
+utile poter mappare sezioni diverse di un file su diverse zone di memoria.
+
+Questo è ovviamente sempre possibile eseguendo la funzione \func{mmap} per
+ciascuna delle diverse aree,\footnote{ed in effetti è quello che veniva fatto
+ anche con Linux prima che fossero introdotte queste estensioni.} ma questo
+approccio ha delle conseguenze molto pesanti in termini di prestazioni.
+Infatti per ciascuna mappatura in memoria deve essere definita nella
+\itindex{page~table} \textit{page table} del processo una nuova area di
+memoria virtuale\footnote{quella che nel gergo del kernel viene chiamata VMA
+ (\textit{virtual memory area}).} che corrisponda alla mappatura, in modo che
+questa diventi visibile nello spazio degli indirizzi come illustrato in
+fig.~\ref{fig:file_mmap_layout}.