X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=5203d17744dea60987154e798317d27c9a4391af;hp=f29a8efe9e54bef4465268860912445ac8f37487;hb=faea6309c25cc36f5552f9998f357cef6d3ae7c8;hpb=5eaf11a5e3e4daaee677554b68f4ba3c92c67b84 diff --git a/fileadv.tex b/fileadv.tex index f29a8ef..5203d17 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -405,9 +405,10 @@ di thread. Al momento\footnote{fino ai kernel della serie 2.4.x, nella serie di I/O, che prevede anche l'introduzione di un nuovo layer per l'I/O asincrono (effettuato a partire dal 2.5.32).} esiste una sola versione stabile di questa interfaccia, quella delle \acr{glibc}, che è realizzata -completamente in user space. Esistono comunque vari progetti sperimentali -(come il KAIO della SGI, o i patch di Benjamin La Haise) che prevedono un -supporto diretto da parte del kernel. +completamente in user space, ed accessibile linkando i programmi con la +libreria \file{librt}. Esistono comunque vari progetti sperimentali (come il +KAIO della SGI, o i patch di Benjamin La Haise) che prevedono un supporto +diretto da parte del kernel. Lo standard prevede che tutte le operazioni di I/O asincrono siano controllate attraverso l'uso di una apposita struttura \struct{aiocb} (il cui nome sta per @@ -476,8 +477,8 @@ struct sigevent sigval_t sigev_value; int sigev_signo; int sigev_notify; - sigev_notify_function; - sigev_notify_attributes; + void (*sigev_notify_function)(sigval_t); + pthread_attr_t *sigev_notify_attributes; }; \end{lstlisting} \end{minipage} @@ -493,15 +494,17 @@ notifica del completamento delle operazioni richieste. La struttura riportata in \secref{fig:file_sigevent}; il campo \var{sigev\_notify} è quello che indica le modalità della notifica, esso può assumere i tre valori: \begin{basedescript}{\desclabelwidth{3.0cm}} -\item[\const{SIGEV\_NONE}] Non viene inviata nessuna notifica. +\item[\const{SIGEV\_NONE}] Non viene inviata nessuna notifica. \item[\const{SIGEV\_SIGNAL}] La notifica viene effettuata inviando al processo - chiamante il segnale specificato nel campo \var{sigev\_signo}, se il - gestore è installato con \const{SA\_SIGINFO}, il gli verrà restituito - il valore di \var{sigev\_value} in come valore del campo \var{si\_value} per + chiamante il segnale specificato da \var{sigev\_signo}; se il gestore di + questo è stato installato con \const{SA\_SIGINFO} gli verrà restituito il + valore di \var{sigev\_value} (la cui definizione è in + \figref{fig:sig_sigval}) come valore del campo \var{si\_value} di \struct{siginfo\_t}. \item[\const{SIGEV\_THREAD}] La notifica viene effettuata creando un nuovo - thread che esegue la funzione specificata da \var{sigev\_notify\_function}, - con gli attributi specificati da \var{sigev\_notify\_attribute}. + thread che esegue la funzione specificata da \var{sigev\_notify\_function} + con argomento \var{sigev\_value}, e con gli attributi specificati da + \var{sigev\_notify\_attribute}. \end{basedescript} Le due funzioni base dell'interfaccia per l'I/O asincrono sono @@ -1130,14 +1133,14 @@ Pertanto se si modifica un file con l'interfaccia standard queste modifiche potranno essere visibili o meno a seconda del momento in cui la memoria virtuale trasporterà dal disco in memoria quella sezione del file, perciò è del tutto imprevedibile il risultato della modifica di un file nei confronti -del contenuto della memoria mappata su cui è mappato. - -Per quanto appena visto, è sempre sconsigliabile eseguire scritture su file -attraverso l'interfaccia standard, quando lo si è mappato in memoria, è invece -possibile usare l'interfaccia standard per leggere un file mappato in memoria, -purché si abbia una certa cura; infatti l'interfaccia dell'I/O mappato in -memoria mette a disposizione la funzione \funcd{msync} per sincronizzare il -contenuto della memoria mappata con il file su disco; il suo prototipo è: +del contenuto della memoria su cui è mappato. + +Per questo, è sempre sconsigliabile eseguire scritture su file attraverso +l'interfaccia standard, quando lo si è mappato in memoria, è invece possibile +usare l'interfaccia standard per leggere un file mappato in memoria, purché si +abbia una certa cura; infatti l'interfaccia dell'I/O mappato in memoria mette +a disposizione la funzione \funcd{msync} per sincronizzare il contenuto della +memoria mappata con il file su disco; il suo prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{sys/mman.h}