From 64f573764a89d7b7349beecfcf847932be384708 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 11 Aug 2002 13:19:50 +0000 Subject: [PATCH] Chiarimenti sul sistema di mappatura del file in memoria (con figura). --- fileadv.tex | 31 +++++++++++++++++++++++-------- img/mmap_boundary.dia | Bin 0 -> 1850 bytes 2 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 img/mmap_boundary.dia 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 0000000000000000000000000000000000000000..ddc85641ce35b35e06193c90254f3c1b3a5110e3 GIT binary patch literal 1850 zcmV-A2gUdwiwFP!000001MOW)Z`(K!zUNm6&NZPW>S3vFQZ$RUD6orNY}!5S#h@+5 z=B_Lm6x}2}>~CLEQv8zShbS6$LIVwIg_+TiGaqL@kLdRwo~DuU1Jjfw@lD49X2-zs zC<#eCzUh4b_W9cHe7L=M9}@JA{~J>@HTYk|sd#tOnJ_kc*X=$&K7!~uMJ%BpB6E=9 z?tdtXP?rztc5W{WV^u(i7!ucttB5g5hI59E7)|j_XNX4sj%hNF!%jY`7&l6ygc?6k zbkn(f$X=apA*Q<~XN&9^nqj&rb~;N^!iTWuS!qa(9Px8yOff3ugW~b+!BD$`9whALkM5y;cyj0^(rFuDyVuDBpu8W$|xeNtY(-b5k_&Y ziP1T3t|uL#h`Y=-Q>^CF9|&W~j{AQ=QM!)-`Q=6Q92$vZO2X}dxHh6j$|DKcWbm|Y zx=bLk?794BW%7TJlnf(WWdVtq^m@ODf0h(4yVi3O;&jJquaBvbG%1F4cNxApZeI)X zOB)+irXoVmm=@yimRpoj%yAL;E3=Rc|G^_xn0L=m93mPT*T%0T#+~Js%QsvS-gJI9 z*XL)`A})<1P-%i@$zmZ*;9ObmsyEiHW}W=ua8o?x7NB?>;T07Q2>SeoFO<2>l#P-& z9^g34?*1^F%41&crJ>>Rd^(zK-a=J$93qrsI38r+QJ&ESa5NL0GDO(`QJOq%%EsK5 zT(&JOdl2Dxy!G}$3rcoPQBxh#_vJt?2QgH;h!uN{^u=wmBBLt+Z(jjnGAz;gffMqI< zfB*!`2yle&tB(K~qjUhARRB1x)Mv2if*z0taV0$-10HaA2=GYo)F(pC?b;^_Jf$(< zpJoh@m{0p4BfU4puQK7I>~)S|_67t)B3$!%#TLG?j$!7at5l2Y z#gK1giqq>qlPQW%O+1zctab8R(V4Ze}kzMJOWUc#5l+X-SV* zdupj9R@(uH8lu!|V2aBQewxmeNj!pz;f)q4Fb>dgii7H^ogB6K7RQ$xc~b1r(^Otza(=?FntwVPRYYG zm7@|7Ea|214GA>l1SLdnB4Bq)Uh>25O%W_+m9G{FLJ6%;HRxEdAS z5-OCPOv8doI>VA~!Sj?ip%xlM&`reF2$)M^XZ>KXp6P>c>2-lbE4evTc>121I z4v)g@S$0dENRH|!MIf;9V1S@^j0Z*FI__6SLu0cw!KVp6P4I2c-JLeddA?!!N_T1B z39<*q9LI8aJ@1$%6mJ8bx}SdLF1%^NblTp$m|yoVowh4Q1h=K9T2&&#HOEKS@fMK4 zi+eMFdmfOGJUpaWLqbDHC_9*j1f}JRcMgw}=9Rp8oJ!u@UCEoel0T(Nei7Vp%sq$u zcUr>wm){r@9ueYv2p#||$sVURmcOl-qLR>-;!e6pvFOxM`d~$&qAz)SLOu0HW+|8XuI_@J<^Y`-