X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=811d9b196310f3c67f9056baed227efed9489e3d;hp=5ef95b01caa30217522f1f8bda0ada27457d1374;hb=f2dfb330dfc756851edc4eecf828a435e7f5f279;hpb=23bf1b578f0b3920192bb995ee5f46ebabd7fd99 diff --git a/fileadv.tex b/fileadv.tex index 5ef95b0..811d9b1 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -1307,6 +1307,11 @@ comportamento non bloccante) viene posto in stato di sleep. Una volta finite le operazioni sul file si deve provvedere a rimuovere il lock. La situazione delle varie possibilità è riassunta in \tabref{tab:file_file_lock}. +Si tenga presente infine che il controllo di accesso è effettuato quando si +apre un file, l'unico controllo residuo è che il tipo di lock che si vuole +otternere deve essere compatibile con le modalità di apertura dello stesso (di +lettura per un read lock e di scrittura per un write lock). + %% Si ricordi che %% la condizione per acquisire uno \textit{shared lock} è che il file non abbia %% già un \textit{exclusive lock} attivo, mentre per acquisire un @@ -1388,7 +1393,7 @@ stesso file. \begin{figure}[htb] \centering - \includegraphics[width=13cm]{img/file_flock} + \includegraphics[width=12.5cm]{img/file_flock} \caption{Schema dell'architettura del file locking, nel caso particolare del suo utilizzo da parte dalla funzione \func{flock}.} \label{fig:file_flock_struct} @@ -1612,7 +1617,7 @@ questo motivo il kernel si incarica di rilevare situazioni di questo tipo, ed impedirle restituendo un errore di \macro{EDEADLK} alla funzione che cerca di acquisire un lock che porterebbe ad un \textit{deadlock}. -\begin{figure}[htb] +\begin{figure}[!bht] \centering \includegraphics[width=13cm]{img/file_posix_lock} \caption{Schema dell'architettura del file locking, nel caso particolare del suo utilizzo secondo l'interfaccia standard POSIX.} @@ -1781,7 +1786,7 @@ comportamento dipende dalla semantica scelta; nel caso sia BSD occorre reimpostare il valore di \var{cmd} per l'uso con \func{flock}; infatti il valore preimpostato fa riferimento alla semantica POSIX e vale rispettivamente \macro{F\_SETLKW} o \macro{F\_SETLK} a seconda che si sia impostato o meno la -modalità bloccante. +modalità bloccante. Nel caso si sia scelta la semantica BSD (\texttt{\small 25--34}) prima si controlla (\texttt{\small 27--31}) il valore di \var{cmd} per determinare se @@ -2080,13 +2085,15 @@ quando si esegue la mappatura con l'opzione \macro{MAP\_SHARED}, si ha un accesso al contenuto del file. Lo standard SVID prevede che sia impossibile eseguire il memory mapping di un file su cui sono presenti dei lock\footnote{alcuni sistemi, come HP-UX, sono ancora più restrittivi e lo - impediscono anche in caso di \textit{advisory locking}, anche se questo non - ha molto senso.} in Linux è stata però fatta la scelta -implementativa\footnote{per i dettagli si possono leggere le note nel kernel, - mantenute nel file \file{Documentation/mandatory.txt}.} di seguire questo -comportamento soltanto quando si chiama \func{mmap} con l'opzione -\macro{MAP\_SHARED} (nel qual caso la funzione fallisce con il solito -\macro{EAGAIN}). + impediscono anche in caso di \textit{advisory locking}, anche se questo + comportamento non ha molto senso, dato che comunque qualunque accesso + diretto al file è consentito.} in Linux è stata però fatta la scelta +implementativa\footnote{per i dettagli si possono leggere le note relative + all'implementazione, mantenute insime ai sorgenti del kernel nel file + \file{Documentation/mandatory.txt}.} di seguire questo comportamento +soltanto quando si chiama \func{mmap} con l'opzione \macro{MAP\_SHARED} (nel +qual caso la funzione fallisce con il solito \macro{EAGAIN}) che comporta la +possibilità di modificare il file.