From 96a23a70c7ac8f632f8aa911c5e63557adace0c7 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 11 Aug 2002 14:35:33 +0000 Subject: [PATCH] Altra figura sempre relativa alla mappatura in memoria. --- fileadv.tex | 76 +++++++++++++++++++++++++++++------------- img/mmap_boundary.dia | Bin 1850 -> 1662 bytes img/mmap_exceed.dia | Bin 0 -> 1780 bytes 3 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 img/mmap_exceed.dia diff --git a/fileadv.tex b/fileadv.tex index 3528481..8841443 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -1008,28 +1008,57 @@ 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 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}, +Gli effetti dell'accesso ad una zona di memoria mappata su file possono essere +piuttosto complessi, essi si possono comprendere solo tenendo presente che +tutto quanto è comunque basato sul basato sul meccanismo della memoria +virtuale. Questo comporta allora una serie di conseguenze. La più ovvia è che +se si cerca di scrivere su una zona mappata in sola lettura si avrà +l'emissione di un segnale di \macro{SIGSEGV}, dato che i permessi sul segmento +di memoria relativo non consentono questo tipo di accesso. + +È invece assai più complessa la questione relativa agli accessi al di fuori +della regione di cui si è richiesta la mappatura. In generale infatti si è +portati a ritenere che anch'essi dovrebbero dar luogo all'emissione di un +segnale di \macro{SIGSEGV}; questo però non tiene conto del fatto che essendo +basata sul meccanismo della paginazione, una mappatura non può che essere +eseguita su un segmento di memoria di dimensioni uguali ad un multiplo di +quelle di una pagina. In generale dette dimensioni potranno non corrispondere +alle dimensioni effettive del file o della sezione che si vuole mappare. Il +caso più comune che si presenta è quello illustrato in +\figref{fig:file_mmap_boundary}, in cui la sezione di file non rientra nei +confini di una pagina: in tal caso verrà mappato su un segmento di memoria che +si estende fino al bordo della pagina successiva. \begin{figure}[htb] \centering \includegraphics[width=10cm]{img/mmap_boundary} - \caption{Effetti delle interazioni fra mappatura in memoria e dimensioni - effettive del file.} + \caption{Schema della mappatura in memoria di una sezione di file di + dimensioni non corripondenti al bordo di una pagina.} \label{fig:file_mmap_boundary} \end{figure} +Si ha così una situazione in cui sarà possibile accedere, senza ottenere un +\macro{SIGSEGV}, a quella zona di memoria che eccede le dimensioni specificate +da \param{lenght}, dato che essa è presente nello spazio di indirizzi del +processo, anche se non è mappata sul file. In questo caso quello che succede è +che gli accessi in lettura restituiranno dei valori nulli, mentre gli accessi +in scrittura non avranno alcun effetto e non saranno scritti sul file. + +Un caso più complesso è quello illustrato in \figref{fig:file_mmap_exceed}, +che avviene quando le dimensioni del file sono più corte di quelle su cui si +vuole effettuare la mappatura, oppure quando il file è stato troncato da un +altro processo ad una dimensione inferiore. + +\begin{figure}[htb] + \centering + \includegraphics[width=10cm]{img/mmap_exceed} + \caption{Schema della mappatura in memoria di file di dimensioni inferiori + alla lunghezza richiesta.} + \label{fig:file_mmap_exceed} +\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 file ed una sezione di memoria, pertanto si può parlare tanto di file mappato @@ -1041,15 +1070,14 @@ ricordi quanto esposto in \secref{sec:file_vfs_work}), ma esistono anche casi (un esempio è l'interfaccia ponte PCI-VME del chip Universe) di dispositivi che sono utilizzabili praticamente solo con questa interfaccia. -Dato che, passando attraverso una \func{fork}, lo spazio di indirizzi viene -sempre copiato, i file mappati in memoria verranno ereditati in maniera -trasparente dal processo figlio, mantenendo gli stessi attributi avuti nel -padre; così se si è usato \macro{MAP\_SHARED} padre e figlio accederanno allo -stesso file in maniera condivisa, mentre se si è usato \macro{MAP\_PRIVATE} -ciascuno di essi manterrà una sua versione privata indipendente. Non c'è -invece nessun passaggio attraverso una \func{exec}, dato che quest'ultima -sostituisce tutto lo spazio degli indirizzi di un processo con quello di un -nuovo programma. +Dato che passando attraverso una \func{fork} lo spazio di indirizzi viene +copiato, i file mappati in memoria verranno ereditati in maniera trasparente +dal processo figlio, mantenendo gli stessi attributi avuti nel padre; così se +si è usato \macro{MAP\_SHARED} padre e figlio accederanno allo stesso file in +maniera condivisa, mentre se si è usato \macro{MAP\_PRIVATE} ciascuno di essi +manterrà una sua versione privata indipendente. Non c'è invece nessun +passaggio attraverso una \func{exec}, dato che quest'ultima sostituisce tutto +lo spazio degli indirizzi di un processo con quello di un nuovo programma. Quando si effettua la mappatura di un file vengono pure modificati i tempi ad esso associati (si ricordi quanto esposto in \secref{sec:file_file_times}). Il diff --git a/img/mmap_boundary.dia b/img/mmap_boundary.dia index ddc85641ce35b35e06193c90254f3c1b3a5110e3..edff5d4f1e6c2da14096a9b5e3be117b1d7965c6 100644 GIT binary patch literal 1662 zcmV-^27&n>iwFP!000001MOT(Z`(K!zUNm6?lqxB>S3vFQnZV~CLEQsRf?mna%`LIVjZg`MG$^L?Bdl79F8VH#UM2+L@iTz4R_I~GYs zX+)Fpb?49TpRa<>`k9s<|zX)or8>Y z|HE;NyP{FIb8}%?%K{?Iv3ys)#hf!boO5C&cuKB2Lp=I-%+h%hb&6JHyHOga%=&@j z>&~0I{L|@{V!A7Gw#c608DZ;Ur?WJpq6vSTRhn#&BY!WoDO+WtQ8K=H^TB;nbg6u? zkX6^wjY{|wvoTGodKkfRF%Sp@2%)EOI9$b0zlvDD3Z`EL%?7iSafT_csu`wfOmI?Y z;%rWu>&Zqq7A~{R6xdw)9pyaT(f>OfXZsjXynaT{p-3Dv8f^#SN{bCr?rFp)gNJRy zWdnt2FXTUJlmCNebQqI53uwZX=leGz#hPA2Q;ldAA%V5oVEfWqqRw=`5C9vEb6^y7Qa8 zIzHZiQZjwJ7u8U{F0-TIvvZTTVVc#!wdChc<(j*y> zB+5H~m`T+(zLMF=d^(z~_n;0NhX@r6P6j!3RLAp~HkygfIA(l+8B6ciWfNgbA=^=w zJ%~v%-r9Z8f|6ZB)KrIXElor8ELq(!gjl+ z-Ej1?iE#Xy3~+a(tq%c66#>F0H6y^2zF#5$iqSs?1eB~Y5I8FcIIRSysOf|runGtz zJplp{6$%W9Sk>3R4m7uG9~AgnF%X<4252INeUMlD*2OQE0Y~}g9AWmIJn$NvxvDsG z3V+nO)<6(K+rNauc|zp(1xp8Ep;SCJ)63;(ROWfLK(N+kV|u~X%V%rFS&@8lkq2;U zMTA;+G$tF0wOfiUo62iKbe(GXzHIWHPDyt4M>@sHa#DM^t_rkk@#m^3S@pI3{H=+e zb)eUR-OfL1if~NF$&}Pj(;_>BdupkzDz!rp8>&QJ8w+ty^Exaw~U-d5&wQFSr)Y36| zos4iL_|bFyXG(womXGH_3F+NkMhqo1q=c%28A{NazBuP_LcPf3?c-$f_U=sHHkte> zW%AG9P7>ic!oRZ$*FXKmng~S53ugiVJk4)tSc|{b3{gdBOSp4eS&D7#zzabrH~xjD zquf`sw*#-}iMg(3Y6hlepd}noJ|d}v(ET?5?ShohF-WOmPE8Z^ia5!@t<{8F`Sc%z z()j|da09li(23>QmFYMHp_hAncoymS?bk22pT7KM^6_T*c*Va=I?(R=s02LcBz?p_DL^LuA>_xdMcsfksZ z$0}71GqH-!SOwWF)Di>Tr9`>0s1zL>Qc4VV?{2)BDCI@(Dx%e0Mb!4L;)Z1ysej+x zCDfT3TtVP?vV7-3l3&o8@F5NJQyv*KAVVd+IDTSi3c2mLNXtt;=9 z0}!$Uu_Af`{irYXNk%}YPXxb`Y04-zT%f`Q;Y*9dk3j~-bN*f0Hy0~kwtaK)KYG7> ISd3x-0M}3|&Hw-a literal 1850 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 WnYy`H`9D-Q7ykn|`8W=zaR30zeQF>8 literal 0 HcmV?d00001 -- 2.30.2