%% fileadv.tex
%%
-%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
funzione.
L'uso di \param{sigmask} è stato introdotto allo scopo di prevenire possibili
-\textit{race condition}\itindex{race~condition} quando ci si deve porre in
+\textit{race condition} \itindex{race~condition} quando ci si deve porre in
attesa sia di un segnale che di dati. La tecnica classica è quella di
utilizzare il gestore per impostare una variabile globale e controllare questa
nel corpo principale del programma; abbiamo visto in
può fare conto sul fatto che all'arrivo di un segnale essa verrebbe interrotta
e si potrebbero eseguire di conseguenza le operazioni relative al segnale e
alla gestione dati con un ciclo del tipo:
-\includecodesnip{listati/select_race.c} qui però emerge una \textit{race
- condition},\itindex{race~condition} perché se il segnale arriva prima della
-chiamata a \func{select}, questa non verrà interrotta, e la ricezione del
-segnale non sarà rilevata.
+\includecodesnip{listati/select_race.c}
+qui però emerge una \itindex{race~condition} \textit{race condition}, perché
+se il segnale arriva prima della chiamata a \func{select}, questa non verrà
+interrotta, e la ricezione del segnale non sarà rilevata.
Per questo è stata introdotta \func{pselect} che attraverso l'argomento
\param{sigmask} permette di riabilitare la ricezione il segnale
\func{pselect} la ricezione del segnale sarà abilitata, ed in caso di
interruzione si potranno eseguire le relative operazioni.
+% TODO pselect è stata introdotta nel kernel 2.6.16 (o 15 o 17?) insieme a
+% ppoll mettere e verificare
\subsection{La funzione \func{poll}}
tramite \var{errno}.
+% TODO accennare a ppoll
+
%\subsection{L'interfaccia di \textit{epoll}}
%\label{sec:file_epoll}
% placeholder ...
un \const{SIGSEGV}. \\
\const{MAP\_LOCKED} & Se impostato impedisce lo swapping delle pagine
mappate.\\
- \const{MAP\_GROWSDOWN} & Usato per gli stack. Indica
+ \const{MAP\_GROWSDOWN} & Usato per gli \itindex{stack} stack. Indica
che la mappatura deve essere effettuata con gli
indirizzi crescenti verso il basso.\\
\const{MAP\_ANONYMOUS} & La mappatura non è associata a nessun file. Gli
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
- \itindex{linked~list}\textit{linked list} delle strutture
- \struct{file\_lock}, scartando automaticamente quelle per cui
- \var{fl\_flags} non è \const{FL\_POSIX}, così che le due interfacce restano
- ben separate.} per verificare se la regione richiesta non si sovrappone ad
-una già bloccata, in caso affermativo decide in base al tipo di lock, in caso
-negativo il nuovo lock viene comunque acquisito ed aggiunto alla lista.
+presenti sul file\footnote{scandisce cioè la \itindex{linked~list}
+ \textit{linked list} delle strutture \struct{file\_lock}, scartando
+ automaticamente quelle per cui \var{fl\_flags} non è \const{FL\_POSIX}, così
+ che le due interfacce restano ben separate.} per verificare se la regione
+richiesta non si sovrappone ad una già bloccata, in caso affermativo decide in
+base al tipo di lock, in caso negativo il nuovo lock viene comunque acquisito
+ed aggiunto alla lista.
Nel caso di rimozione invece questa viene effettuata controllando che il
\acr{pid} del processo richiedente corrisponda a quello contenuto nel lock.
quando esso viene utilizzato per attivare il \textit{mandatory locking}.}
L'uso del \textit{mandatory locking} presenta vari aspetti delicati, dato che
-neanche root può passare sopra ad un lock; pertanto un processo che blocchi un
-file cruciale può renderlo completamente inaccessibile, rendendo completamente
-inutilizzabile il sistema\footnote{il problema si potrebbe risolvere
- rimuovendo il bit \itindex{sgid~bit} \acr{sgid}, ma non è detto che sia così
- facile fare questa operazione con un sistema bloccato.} inoltre con il
-\textit{mandatory locking} si può bloccare completamente un server NFS
-richiedendo una lettura su un file su cui è attivo un lock. Per questo motivo
-l'abilitazione del mandatory locking è di norma disabilitata, e deve essere
-attivata filesystem per filesystem in fase di montaggio (specificando
-l'apposita opzione di \func{mount} riportata in
+neanche l'amministratore può passare sopra ad un lock; pertanto un processo
+che blocchi un file cruciale può renderlo completamente inaccessibile,
+rendendo completamente inutilizzabile il sistema\footnote{il problema si
+ potrebbe risolvere rimuovendo il bit \itindex{sgid~bit} \acr{sgid}, ma non è
+ detto che sia così facile fare questa operazione con un sistema bloccato.}
+inoltre con il \textit{mandatory locking} si può bloccare completamente un
+server NFS richiedendo una lettura su un file su cui è attivo un lock. Per
+questo motivo l'abilitazione del mandatory locking è di norma disabilitata, e
+deve essere attivata filesystem per filesystem in fase di montaggio
+(specificando l'apposita opzione di \func{mount} riportata in
tab.~\ref{tab:sys_mount_flags}, o con l'opzione \code{-o mand} per il comando
omonimo).
%%% mode: latex
%%% TeX-master: "gapil"
%%% End:
+
+% LocalWords: dell'I locking multiplexing cap dell' sez system call socket BSD
+% LocalWords: descriptor client deadlock NONBLOCK EAGAIN polling select kernel
+% LocalWords: pselect like sys unistd int fd readfds writefds exceptfds struct
+% LocalWords: timeval errno EBADF EINTR EINVAL ENOMEM sleep tab signal void of
+% LocalWords: CLR ISSET SETSIZE POSIX read NULL nell'header l'header glibc fig
+% LocalWords: libc header psignal sigmask SOURCE XOPEN timespec sigset race DN
+% LocalWords: condition sigprocmask tut self trick oldmask poll XPG pollfd l'I
+% LocalWords: ufds unsigned nfds RLIMIT NOFILE EFAULT ndfs events revents hung
+% LocalWords: POLLIN POLLRDNORM POLLRDBAND POLLPRI POLLOUT POLLWRNORM POLLERR
+% LocalWords: POLLWRBAND POLLHUP POLLNVAL POLLMSG SysV stream ASYNC SETOWN FAQ
+% LocalWords: GETOWN fcntl SETFL SIGIO SETSIG Stevens driven siginfo sigaction
+% LocalWords: all'I nell'I Frequently Unanswered Question SIGHUP lease holder
+% LocalWords: breaker truncate write SETLEASE arg RDLCK WRLCK UNLCK GETLEASE
+% LocalWords: uid capabilities capability EWOULDBLOCK notify dall'OR ACCESS st
+% LocalWords: pread readv MODIFY pwrite writev ftruncate creat mknod mkdir buf
+% LocalWords: symlink rename DELETE unlink rmdir ATTRIB chown chmod utime lio
+% LocalWords: MULTISHOT thread linkando librt layer aiocb asyncronous control
+% LocalWords: block ASYNCHRONOUS lseek fildes nbytes reqprio PRIORITIZED sigev
+% LocalWords: PRIORITY SCHEDULING opcode listio sigevent signo value function
+% LocalWords: aiocbp ENOSYS append error const EINPROGRESS fsync return ssize
+% LocalWords: DSYNC fdatasync SYNC cancel ECANCELED ALLDONE CANCELED suspend
+% LocalWords: NOTCANCELED list nent timout sig NOP WAIT NOWAIT size count iov
+% LocalWords: iovec vector EOPNOTSUPP EISDIR len memory mapping mapped swap NB
+% LocalWords: mmap length prot flags off MAP FAILED ANONYMOUS EACCES SHARED SH
+% LocalWords: only ETXTBSY DENYWRITE ENODEV filesystem EPERM EXEC noexec table
+% LocalWords: ENFILE lenght segment violation SIGSEGV FIXED msync munmap copy
+% LocalWords: DoS Denial Service EXECUTABLE NORESERVE LOCKED swapping stack fs
+% LocalWords: GROWSDOWN ANON GiB POPULATE prefaulting SIGBUS fifo VME fork old
+% LocalWords: exec atime ctime mtime mprotect addr EACCESS mremap address new
+% LocalWords: long MAYMOVE realloc VMA virtual Ingo Molnar remap pages pgoff
+% LocalWords: dall' fault cache linker prelink advisory discrectionary lock fl
+% LocalWords: flock shared exclusive operation dup inode linked NFS cmd ENOLCK
+% LocalWords: EDEADLK whence SEEK CUR type pid GETLK SETLK SETLKW all'inode HP
+% LocalWords: switch bsd lockf mandatory SVr sgid group root mount mand TRUNC
+% LocalWords: SVID UX Documentation