Rifinitura degli indici, correzioni ortografiche varie.
[gapil.git] / fileadv.tex
index 9ab00d005c5ff4d30bc6748b8ca5951c990e9518..5fdc8a01ab4ab963508b821f071b9102d72a4743 100644 (file)
@@ -33,10 +33,11 @@ mappato in memoria.
 Abbiamo visto in \secref{sec:sig_gen_beha}, affrontando la suddivisione fra
 \textit{fast} e \textit{slow} system call, che in certi casi le funzioni di
 I/O possono bloccarsi indefinitamente.\footnote{si ricordi però che questo può
-  accadere solo per le pipe, i socket ed alcuni file di dispositivo; sui file
-  normali le funzioni di lettura e scrittura ritornano sempre subito.}  Ad
-esempio le operazioni di lettura possono bloccarsi quando non ci sono dati
-disponibili sul descrittore su cui si sta operando.
+  accadere solo per le pipe, i socket\index{socket} ed alcuni file di
+  dispositivo\index{file!di dispositivo}; sui file normali le funzioni di
+  lettura e scrittura ritornano sempre subito.}  Ad esempio le operazioni di
+lettura possono bloccarsi quando non ci sono dati disponibili sul descrittore
+su cui si sta operando.
 
 Questo comportamento causa uno dei problemi più comuni che ci si trova ad
 affrontare nelle operazioni di I/O, che è quello che si verifica quando si
@@ -44,7 +45,7 @@ devono eseguire operazioni che possono bloccarsi su pi
 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
-\textit{deadlock}.
+\textit{deadlock}\index{deadlock}.
 
 Abbiamo già accennato in \secref{sec:file_open} che è possibile prevenire
 questo tipo di comportamento aprendo un file in modalità
@@ -75,9 +76,9 @@ funzioni in grado di sospendere l'esecuzione di un processo in attesa che
 l'accesso diventi possibile.  Il primo ad introdurre questa modalità di
 operazione, chiamata usualmente \textit{I/O multiplexing}, è stato
 BSD,\footnote{la funzione è apparsa in BSD4.2 e standardizzata in BSD4.4, ma è
-  stata portata su tutti i sistemi che supportano i \textit{socket}, compreso
-  le varianti di System V.}  con la funzione \func{select}, il cui prototipo
-è:
+  stata portata su tutti i sistemi che supportano i
+  \textit{socket}\index{socket}, compreso le varianti di System V.}  con la
+funzione \func{select}, il cui prototipo è:
 \begin{functions}
   \headdecl{sys/time.h}
   \headdecl{sys/types.h}
@@ -388,13 +389,13 @@ in eccesso, e si dovr
 attivi.
 
 Benché la modalità di apertura asincrona di un file possa risultare utile in
-varie occasioni (in particolar modo con i socket e gli altri file per i quali
-le funzioni di I/O sono system call lente), essa è comunque limitata alla
-notifica della disponibilità del file descriptor per le operazioni di I/O, e
-non ad uno svolgimento asincrono delle medesime.  Lo standard POSIX.1b
-definisce anche una interfaccia apposita per l'I/O asincrono, che prevede un
-insieme di funzioni dedicate, completamente separate rispetto a quelle usate
-normalmente.
+varie occasioni (in particolar modo con i socket\index{socket} e gli altri
+file per i quali le funzioni di I/O sono system call lente), essa è comunque
+limitata alla notifica della disponibilità del file descriptor per le
+operazioni di I/O, e non ad uno svolgimento asincrono delle medesime.  Lo
+standard POSIX.1b definisce anche una interfaccia apposita per l'I/O
+asincrono, che prevede un insieme di funzioni dedicate, completamente separate
+rispetto a quelle usate normalmente.
 
 In generale questa interfaccia è completamente astratta e può essere
 implementata sia direttamente nel kernel, che in user space attraverso l'uso
@@ -997,7 +998,7 @@ come maschera binaria ottenuta dall'OR di uno o pi
     \const{MAP\_DENYWRITE} & In Linux viene ignorato per evitare
                              \textit{DoS}\index{DoS} (veniva usato per
                              segnalare che tentativi di scrittura sul file
-                             dovevano fallire con \errcode{ETXTBUSY}).\\
+                             dovevano fallire con \errcode{ETXTBSY}).\\
     \const{MAP\_EXECUTABLE}& Ignorato. \\
     \const{MAP\_NORESERVE} & Si usa con \const{MAP\_PRIVATE}. Non riserva
                              delle pagine di swap ad uso del meccanismo di
@@ -1223,6 +1224,7 @@ mappatura in memoria non ha alcun effetto sulla stessa.
 \section{Il file locking}
 \label{sec:file_locking}
 
+\index{file!locking|(}
 In \secref{sec:file_sharing} abbiamo preso in esame le modalità in cui un
 sistema unix-like gestisce la condivisione dei file da parte di processi
 diversi. In quell'occasione si è visto come, con l'eccezione dei file aperti
@@ -1267,7 +1269,7 @@ un opportuno protocollo.
 In generale si distinguono due tipologie di \textit{file lock}:\footnote{di
   seguito ci riferiremo sempre ai blocchi di accesso ai file con la
   nomenclatura inglese di \textit{file lock}, o più brevemente con
-  \textit{lock}, per evitare confuzioni linguistiche con il blocco di un
+  \textit{lock}, per evitare confusioni linguistiche con il blocco di un
   processo (cioè la condizione in cui il processo viene posto in stato di
   \textit{sleep}).} la prima è il cosiddetto \textit{shared lock}, detto anche
 \textit{read lock} in quanto serve a bloccare l'accesso in scrittura su un
@@ -1319,7 +1321,7 @@ delle varie possibilit
 
 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
+ottenere 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
@@ -1390,16 +1392,16 @@ dell'implementazione del file locking in stile BSD in Linux; il punto
 fondamentale da capire è che un lock, qualunque sia l'interfaccia che si usa,
 anche se richiesto attraverso un file descriptor, agisce sempre su un file;
 perciò le informazioni relative agli eventuali \textit{file lock} sono
-mantenute a livello di inode,\footnote{in particolare, come accennato in
-  \figref{fig:file_flock_struct}, i \textit{file lock} sono mantenuti un una
-  \textit{linked list}\index{linked list} di strutture \var{file\_lock}. La
-  lista è referenziata dall'indirizzo di partenza mantenuto dal campo
-  \var{i\_flock} della struttura \var{inode} (per le definizioni esatte si
-  faccia riferimento al file \file{fs.h} nei sorgenti del kernel).  Un bit del
-  campo \var{fl\_flags} di specifica se si tratta di un lock in semantica BSD
-  (\const{FL\_FLOCK}) o POSIX (\const{FL\_POSIX}).} dato che questo è l'unico
-riferimento in comune che possono avere due processi diversi che aprono lo
-stesso file.
+mantenute a livello di inode\index{inode},\footnote{in particolare, come
+  accennato in \figref{fig:file_flock_struct}, i \textit{file lock} sono
+  mantenuti un una \textit{linked list}\index{linked list} di strutture
+  \var{file\_lock}. La lista è referenziata dall'indirizzo di partenza
+  mantenuto dal campo \var{i\_flock} della struttura \var{inode} (per le
+  definizioni esatte si faccia riferimento al file \file{fs.h} nei sorgenti
+  del kernel).  Un bit del campo \var{fl\_flags} di specifica se si tratta di
+  un lock in semantica BSD (\const{FL\_FLOCK}) o POSIX (\const{FL\_POSIX}).}
+dato che questo è l'unico riferimento in comune che possono avere due processi
+diversi che aprono lo stesso file.
 
 \begin{figure}[htb]
   \centering
@@ -1481,8 +1483,8 @@ essa viene usata solo secondo il prototipo:
     \item[\errcode{EDEADLK}] Si è richiesto un lock su una regione bloccata da
       un altro processo che è a sua volta in attesa dello sblocco di un lock
       mantenuto dal processo corrente; si avrebbe pertanto un
-      \textit{deadlock}. Non è garantito che il sistema riconosca sempre
-      questa situazione.
+      \textit{deadlock}\index{deadlock}. Non è garantito che il sistema
+      riconosca sempre questa situazione.
     \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale prima
       di poter acquisire un lock.
     \end{errlist}
@@ -1609,7 +1611,7 @@ stato effettivamente acquisito.
 
 \begin{figure}[htb]
   \centering \includegraphics[width=9cm]{img/file_lock_dead}
-  \caption{Schema di una situazione di \textit{deadlock}.}
+  \caption{Schema di una situazione di \textit{deadlock}\index{deadlock}.}
   \label{fig:file_flock_dead}
 \end{figure}
 
@@ -1624,8 +1626,8 @@ volta di ottenere un lock sulla regione A? Questa 
 porta ad un \textit{deadlock}\index{deadlock}, dato che a quel punto anche il
 processo 2 si bloccherebbe, e niente potrebbe sbloccare l'altro processo. Per
 questo motivo il kernel si incarica di rilevare situazioni di questo tipo, ed
-impedirle restituendo un errore di \errcode{EDEADLK} alla funzione che cerca di
-acquisire un lock che porterebbe ad un \textit{deadlock}.
+impedirle restituendo un errore di \errcode{EDEADLK} alla funzione che cerca
+di acquisire un lock che porterebbe ad un \textit{deadlock}.
 
 \begin{figure}[!bht]
   \centering \includegraphics[width=13cm]{img/file_posix_lock}
@@ -1647,9 +1649,9 @@ esso 
   \var{fl\_start} e \var{fl\_end}.  La struttura è comunque la stessa, solo
   che in questo caso nel campo \var{fl\_flags} è impostato il bit
   \const{FL\_POSIX} ed il campo \var{fl\_file} non viene usato.} il lock è
-sempre associato all'inode, solo che in questo caso la titolarità non viene
-identificata con il riferimento ad una voce nella file table, ma con il valore
-del \acr{pid} del processo.
+sempre associato all'inode\index{inode}, solo che in questo caso la titolarità
+non viene identificata con il riferimento ad una voce nella file table, ma con
+il valore del \acr{pid} del processo.
 
 Quando si richiede un lock il kernel effettua una scansione di tutti i lock
 presenti sul file\footnote{scandisce cioè la linked list delle strutture
@@ -1680,7 +1682,7 @@ lock relativi al file cui esso faceva riferimento, anche se questi fossero
 stati creati usando altri file descriptor che restano aperti.
 
 Dato che il controllo sull'accesso ai lock viene eseguito sulla base del
-\acr{pid} del processo, possiamo anche prendere in cosiderazione un'altro
+\acr{pid} del processo, possiamo anche prendere in considerazione un'altro
 degli aspetti meno chiari di questa interfaccia e cioè cosa succede quando si
 richiedono dei lock su regioni che si sovrappongono fra loro all'interno
 stesso processo. Siccome il controllo, come nel caso della rimozione, si basa
@@ -1689,7 +1691,7 @@ avranno sempre successo.
 
 Nel caso della semantica BSD, essendo i lock relativi a tutto un file e non
 accumulandosi,\footnote{questa ultima caratteristica è vera in generale, se
-  cioè si richiede più volte lo stesso file lock, o più lock sula stessa
+  cioè si richiede più volte lo stesso file lock, o più lock sulla stessa
   sezione di file, le richieste non si cumulano e basta una sola richiesta di
   rilascio per cancellare il lock.}  la cosa non ha alcun effetto; la funzione
 ritorna con successo, senza che il kernel debba modificare la lista dei lock.
@@ -1899,7 +1901,7 @@ Failed lock: Resource temporarily unavailable
 \end{verbatim}%$
 \end{minipage}\vspace{1mm}
 \par\noindent
-come ci aspettimo questo non sarà consentito.
+come ci aspettiamo questo non sarà consentito.
 
 Il programma di norma esegue il tentativo di acquisire il lock in modalità non
 bloccante, se però usiamo l'opzione \cmd{-b} possiamo impostare la modalità
@@ -1914,7 +1916,7 @@ opzione:
 \end{minipage}\vspace{1mm}
 \par\noindent
 il primo comando acquisisce subito un read lock, e quindi non cambia nulla, ma
-se proviamo adesso a richidere un write lock che non potrà essere acquisito
+se proviamo adesso a richiedere un write lock che non potrà essere acquisito
 otterremo:
 
 \vspace{1mm}
@@ -2099,11 +2101,12 @@ lock\footnote{alcuni sistemi, come HP-UX, sono ancora pi
   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
+  all'implementazione, mantenute insieme ai sorgenti del kernel nel file
   \file{Documentation/mandatory.txt}.}  di seguire questo comportamento
 soltanto quando si chiama \func{mmap} con l'opzione \const{MAP\_SHARED} (nel
 qual caso la funzione fallisce con il solito \errcode{EAGAIN}) che comporta la
 possibilità di modificare il file.
+\index{file!locking|)}