From: Simone Piccardi Date: Sun, 11 Aug 2002 13:19:50 +0000 (+0000) Subject: Chiarimenti sul sistema di mappatura del file in memoria (con figura). X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=64f573764a89d7b7349beecfcf847932be384708;hp=6a27b6ddf1f27d332f1de65b7c4ac0e1293c2174 Chiarimenti sul sistema di mappatura del file in memoria (con figura). --- diff --git a/fileadv.tex b/fileadv.tex index 0e0c2b3..3528481 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -831,7 +831,7 @@ cosiddetto \textit{memory-mapped I/O}, che, attraverso il meccanismo della 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. @@ -872,7 +872,7 @@ in memoria di un file; il suo prototipo \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}. @@ -1008,12 +1008,27 @@ come maschera binaria ottenuta dall'OR di uno o pi \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 diff --git a/img/mmap_boundary.dia b/img/mmap_boundary.dia new file mode 100644 index 0000000..ddc8564 Binary files /dev/null and b/img/mmap_boundary.dia differ