X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=f29a8efe9e54bef4465268860912445ac8f37487;hp=2d3ce015b9acb4563d1d9b350f3fbec4937b1dd7;hb=72b2686a82a62331891ca894a6c3b476365363fc;hpb=ff2d0141751ed62ef56e5bfd226c589311b8b669 diff --git a/fileadv.tex b/fileadv.tex index 2d3ce01..f29a8ef 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -313,12 +313,13 @@ della funzione. L'uso di \param{sigmask} è stato introdotto allo scopo di prevenire possibili race condition\footnote{in Linux però, non esistendo una system call apposita, la funzione è implementata nelle \acr{glibc} usando \func{select}, e la - possibilità di una race condition resta.} quando si deve eseguire un test su -una variabile assegnata da un manipolatore sulla base dell'occorrenza di un -segnale per decidere se lanciare \func{select}. Fra il test e l'esecuzione è -presente una finestra in cui potrebbe arrivare il segnale che non sarebbe -rilevato; la race condition diventa superabile disabilitando il segnale prima -del test e riabilitandolo poi grazie all'uso di \param{sigmask}. + possibilità di una race condition\index{race condition} resta.} quando si +deve eseguire un test su una variabile assegnata da un gestore sulla base +dell'occorrenza di un segnale per decidere se lanciare \func{select}. Fra il +test e l'esecuzione è presente una finestra in cui potrebbe arrivare il +segnale che non sarebbe rilevato; la race condition\index{race condition} +diventa superabile disabilitando il segnale prima del test e riabilitandolo +poi grazie all'uso di \param{sigmask}. @@ -362,14 +363,14 @@ pi Linux però supporta le estensioni POSIX.1b dei segnali che permettono di superare il problema facendo ricorso alle informazioni aggiuntive restituite attraverso la struttura \struct{siginfo\_t}, utilizzando la forma estesa -\var{sa\_sigaction} del manipolatore (si riveda quanto illustrato in +\var{sa\_sigaction} del gestore (si riveda quanto illustrato in \secref{sec:sig_sigaction}). Per far questo però occorre utilizzare le funzionalità dei segnali real-time (vedi \secref{sec:sig_real_time}) impostando esplicitamente con il comando \const{F\_SETSIG} di \func{fcntl} un segnale real-time da inviare in caso di I/O asincrono (il segnale predefinito è \const{SIGIO}). In questo caso il -manipolatore tutte le volte che riceverà \const{SI\_SIGIO} come valore del +gestore tutte le volte che riceverà \const{SI\_SIGIO} come valore del campo \var{si\_code}\footnote{il valore resta \const{SI\_SIGIO} qualunque sia il segnale che si è associato all'I/O asincrono, ed indica appunto che il segnale è stato generato a causa di attività nell'I/O asincrono.} di @@ -495,7 +496,7 @@ che indica le modalit \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 - manipolatore è installato con \const{SA\_SIGINFO}, il gli verrà restituito + 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 \struct{siginfo\_t}. \item[\const{SIGEV\_THREAD}] La notifica viene effettuata creando un nuovo @@ -1240,9 +1241,10 @@ processi scrivono, mescolando in maniera imprevedibile il loro output sul file. In tutti questi casi il \textit{file locking} è la tecnica che permette di -evitare le race condition, attraverso una serie di funzioni che permettono di -bloccare l'accesso al file da parte di altri processi, così da evitare le -sovrapposizioni, e garantire la atomicità delle operazioni di scrittura. +evitare le race condition\index{race condition}, attraverso una serie di +funzioni che permettono di bloccare l'accesso al file da parte di altri +processi, così da evitare le sovrapposizioni, e garantire la atomicità delle +operazioni di scrittura. @@ -2033,7 +2035,7 @@ opportune verifiche nei processi, questo verrebbe comunque rispettato. Per poter utilizzare il \textit{mandatory locking} è stato introdotto un utilizzo particolare del bit \acr{sgid}. Se si ricorda quanto esposto in \secref{sec:file_suid_sgid}), esso viene di norma utilizzato per cambiare il -groupid effettivo con cui viene eseguito un programma, ed è pertanto sempre +group-ID effettivo con cui viene eseguito un programma, ed è pertanto sempre associato alla presenza del permesso di esecuzione per il gruppo. Impostando questo bit su un file senza permesso di esecuzione in un sistema che supporta il \textit{mandatory locking}, fa sì che quest'ultimo venga attivato per il