X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=3d1c9f85c65c7571f55ff6e9e6587a33622872f8;hp=1932eca21a2f3a4a52260be2589a21ceb1f6e717;hb=7ab2f18da45ad6da904be851e3a864adeac8cb10;hpb=b7b0345f61ab7d26af9a165bc2d3e55cb9a3331a diff --git a/fileadv.tex b/fileadv.tex index 1932eca..3d1c9f8 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -33,7 +33,8 @@ affrontare nelle operazioni di I/O, che devono eseguire operazioni che possono bloccarsi su più file descriptor: mentre si è bloccati su uno di essi su di un'altro potrebbero essere presenti dei dati; così che nel migliore dei casi si avrebbe una lettura ritardata -inutilmente, e nel peggiore si potrebbe addirittura arrivare ad un deadlock. +inutilmente, e nel peggiore si potrebbe addirittura arrivare ad un +\textit{deadlock}. Abbiamo già accennato in \secref{sec:file_open} che è possibile prevenire questo tipo di comportamento aprendo un file in modalità @@ -976,7 +977,8 @@ come maschera binaria ottenuta dall'OR di uno o pi riportati sul file. Ne viene fatta una copia privata cui solo il processo chiamante ha accesso. Le modifiche sono mantenute attraverso - il meccanismo del \textit{copy on write} e + il meccanismo del + \textit{copy on write}\index{copy on write} e salvate su swap in caso di necessità. Non è specificato se i cambiamenti sul file originale vengano riportati sulla regione @@ -988,7 +990,8 @@ come maschera binaria ottenuta dall'OR di uno o pi \macro{MAP\_EXECUTABLE}& Ignorato. \\ \macro{MAP\_NORESERVE} & Si usa con \macro{MAP\_PRIVATE}. Non riserva delle pagine di swap ad uso del meccanismo di - \textit{copy on write} per mantenere le + \textit{copy on write}\index{copy on write} + per mantenere le modifiche fatte alla regione mappata, in questo caso dopo una scrittura, se non c'è più memoria disponibile, si ha l'emissione di @@ -1234,8 +1237,8 @@ sovrapposizioni, e garantire la atomicit La prima modalità di file locking che è stata implementata nei sistemi unix-like è quella che viene usualmente chiamata \textit{advisory - locking},\footnote{Stevens in APUE fa riferimento a questo argomento come al - \textit{record locking}, dizione utilizzata anche dal manuale delle + locking},\footnote{Stevens in \cite{APUE} fa riferimento a questo argomento + come al \textit{record locking}, dizione utilizzata anche dal manuale delle \acr{glibc}; nelle pagine di manuale si parla di \textit{discretionary file lock} per \func{fcntl} e di \textit{advisory locking} per \func{flock}, mentre questo nome viene usato anche da Stevens per riferirsi al @@ -1272,7 +1275,7 @@ sono implementati in maniera completamente indipendente nelle due interfacce, che pertanto possono coesistere senza interferenze. Entrambe le interfacce prevedono la stessa procedura di funzionamento: si -inizia sempre con il richiere l'opportuno \textit{file lock} (un +inizia sempre con il richiedere l'opportuno \textit{file lock} (un \textit{exclusive lock} per una scrittura, uno \textit{shared lock} per una lettura) prima di eseguire l'accesso ad un file. Se il lock viene acquisito il processo prosegue l'esecuzione, altrimenti (a meno di non aver richiesto un @@ -1329,14 +1332,14 @@ costanti riportate in \tabref{tab:file_flock_operation}. I primi due valori, \macro{LOCK\_SH} e \macro{LOCK\_EX} permettono di richiedere un \textit{file lock}, ed ovviamente devono essere usati in maniera alternativa. Se si specifica anche \macro{LOCK\_NB} la funzione non si -bloccherà qualora il lock non possa essere aqcuisito, ma ritornerà subito con +bloccherà qualora il lock non possa essere acquisito, ma ritornerà subito con un errore di \macro{EWOULDBLOCK}. Per rilasciare un lock si dovrà invece usare \macro{LOCK\_NB}. La semantica del file locking di BSD è diversa da quella del file locking POSIX, in particolare per quanto riguarda il comportamento dei lock nei confronti delle due funzioni \func{dup} e \func{fork}. Per capire queste -differenze occore prima descrivere con maggiore dettaglio come viene +differenze occorre prima descrivere con maggiore dettaglio come viene realizzato il file locking nel kernel. In \figref{fig:file_flock_struct} si è riportato uno schema essenziale @@ -1473,7 +1476,7 @@ struct flock { L'operazione effettivamente svolta dalla funzione è stabilita dal valore dall'argomento \param{cmd} che, come già riportato in \secref{sec:file_fcntl}, -specifica l'azione da compiere; i valori relativi al file loking sono tre: +specifica l'azione da compiere; i valori relativi al file locking sono tre: \begin{basedescript}{\desclabelwidth{2.0cm}} \item[\macro{F\_GETLK}] verifica se il file lock specificato dalla struttura puntata da \param{lock} non è bloccato da qualche altro lock: in caso @@ -1574,7 +1577,7 @@ allo stesso file (che sia stato ottenuto con una \func{dup} o con una che quello che conta è solo il \acr{pid} del processo. Da questo deriva una ulteriore sottile differenza di comportamento: dato che alla chiusura di un file i lock ad esso associati vengono rimossi, nella semantica POSIX basterà -chiudere un file descriptor per cancellare tutti i lock realtivi al file cui +chiudere un file descriptor per cancellare tutti i lock relativi al file cui esso faceva riferimento, anche se questi fossero stati creati usando altri file descriptor che restano aperti.