X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=6bbc00ce4c3889d033cf12e84a2c7adfb7c48a89;hp=8ac1a734b907f0d6d6ca001e211079069d231024;hb=c6998e1daad18f2bf10b0dbff8c7441139a27795;hpb=2270d0dd8cf9460e3aef8d5ffa2bf5c825707e58 diff --git a/fileadv.tex b/fileadv.tex index 8ac1a73..6bbc00c 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -1,6 +1,6 @@ %% fileadv.tex %% -%% Copyright (C) 2000-2016 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2018 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", @@ -912,6 +912,9 @@ può presentare anche con l'uso di file mappati in memoria; pertanto allo stato attuale delle cose è sconsigliabile fare affidamento sul \textit{mandatory locking}. +% TODO il supporto è stato reso opzionale nel 4.5, verrà eliminato nel futuro +% (vedi http://lwn.net/Articles/667210/) + \itindend{file~locking} \itindend{mandatory~locking} @@ -1564,8 +1567,8 @@ sono state in discussione altre interfacce con le quali effettuare lo stesso tipo di operazioni; \textit{epoll} è in grado di operare sia in modalità \textit{level triggered} che \textit{edge triggered}. -La prima versione di \textit{epoll} prevedeva l'apertura di uno speciale file -di dispositivo, \texttt{/dev/epoll}, per ottenere un file descriptor da +La prima versione di \textit{epoll} prevedeva l'uso di uno speciale file di +dispositivo, \texttt{/dev/epoll}, per ottenere un file descriptor da utilizzare con le funzioni dell'interfaccia ma poi si è passati all'uso di apposite \textit{system call}. Il primo passo per usare l'interfaccia di \textit{epoll} è pertanto quello ottenere detto file descriptor chiamando una @@ -1834,6 +1837,9 @@ modificano le modalità di notifica. ed è utile per riconoscere la chiusura di una connessione dall'altro capo di un socket quando si lavora in modalità \textit{edge triggered}.} +% TODO aggiunto con il kernel 4.5 EPOLLEXCLUSIVE, vedi +% http://lwn.net/Articles/633422/#excl + Il secondo campo, \var{data}, è una \dirct{union} che serve a identificare il file descriptor a cui si intende fare riferimento, ed in astratto può contenere un valore qualsiasi (specificabile in diverse forme) che ne permetta @@ -2186,9 +2192,9 @@ tal caso qualora vi fossero segnali pendenti questi resteranno tali, e potranno essere ricevuti normalmente una volta che si rimuova il blocco imposto con \func{sigprocmask}. -Oltre che con le funzioni dell'\textit{I/O multiplexing} l'uso del file -descriptor restituito da \func{signalfd} cerca di seguire la semantica di un -sistema unix-like anche con altre \textit{system call}; in particolare esso +Oltre a poter essere usato con le funzioni dell'\textit{I/O multiplexing}, il +file descriptor restituito da \func{signalfd} cerca di seguire la semantica di +un sistema unix-like anche con altre \textit{system call}; in particolare esso resta aperto (come ogni altro file descriptor) attraverso una chiamata ad \func{exec}, a meno che non lo si sia creato con il flag di \const{SFD\_CLOEXEC} o si sia successivamente impostato il @@ -2215,7 +2221,7 @@ successivo con \func{fcntl}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{0.90\textwidth} + \begin{minipage}[c]{0.95\textwidth} \includestruct{listati/signalfd_siginfo.h} \end{minipage} \normalsize @@ -2245,8 +2251,8 @@ ad eventuali più segnali pendenti, fino al numero massimo di strutture \label{fig:fiforeporter_code_init} \end{figure} -Il contenuto di \struct{signalfd\_siginfo} ricalca da vicino quella della -analoga struttura \struct{siginfo\_t} (illustrata in +Il contenuto di \struct{signalfd\_siginfo} ricalca da vicino quella +dell'analoga struttura \struct{siginfo\_t} (illustrata in fig.~\ref{fig:sig_siginfo_t}) usata dall'interfaccia ordinaria dei segnali, e restituisce dati simili. Come per \struct{siginfo\_t} i campi che vengono avvalorati dipendono dal tipo di segnale e ricalcano i valori che abbiamo già @@ -3854,6 +3860,7 @@ per il campo \var{aio\_sigevent} di \struct{aiocb}. % http://webfiveoh.com/content/guides/2012/aug/mon-13th/linux-asynchronous-io-and-libaio.html, % https://code.google.com/p/kernel/wiki/AIOUserGuide, % http://bert-hubert.blogspot.de/2012/05/on-linux-asynchronous-file-io.html +% https://www.fsl.cs.sunysb.edu/~vass/linux-aio.txt \section{Altre modalità di I/O avanzato} @@ -4103,6 +4110,9 @@ file. % TODO trattare MAP_HUGETLB introdotto con il kernel 2.6.32, e modifiche % introdotte con il 3.8 per le dimensioni variabili delle huge pages +% TODO trattare MAP_FIXED_NOREPLACE vedi https://lwn.net/Articles/751651/ e +% https://lwn.net/Articles/741369/ + L'argomento \param{flags} specifica infine qual è il tipo di oggetto mappato, le opzioni relative alle modalità con cui è effettuata la mappatura e alle modalità con cui le modifiche alla memoria mappata vengono condivise o @@ -4679,6 +4689,12 @@ caching dei dati. \label{tab:madvise_advice_values} \end{table} +% TODO aggiunta MADV_FREE dal kernel 4.5 (vedi http://lwn.net/Articles/590991/) +% TODO aggiunta MADV_WIPEONFORK dal kernel 4.14 that causes the affected memory +% region to appear to be full of zeros in the child process after a fork. It +% differs from the existing MADV_DONTFORK in that the address range will +% remain valid in the child (dalla notizia in https://lwn.net/Articles/733256/). + \footnotetext{a partire dal kernel 2.6.32 è stato introdotto un meccanismo che identifica pagine di memoria identiche e le accorpa in una unica pagina (soggetta al \textit{copy-on-write} per successive modifiche); per evitare @@ -4895,6 +4911,10 @@ si possono avere in concorrenza processi che utilizzano lo stesso file descriptor (si ricordi quanto visto in sez.~\ref{sec:file_adv_func}) con delle chiamate a \func{lseek}. +% TODO trattare preadv2() e pwritev2(), introdotte con il kernel 4.6, vedi +% http://lwn.net/Articles/670231/ ed il flag RWF_HIPRI, anche l'aggiunta del +% flag RWF_APPEND a pwritev2 con il kernel 4.16, vedi +% https://lwn.net/Articles/746129/ \subsection{L'I/O diretto fra file descriptor: \func{sendfile} e @@ -5436,6 +5456,9 @@ copiati i puntatori. % TODO?? dal 2.6.25 splice ha ottenuto il supporto per la ricezione su rete +% TODO trattare qui copy_file_range (vedi http://lwn.net/Articles/659523/), +% introdotta nel kernel 4.5 + \subsection{Gestione avanzata dell'accesso ai dati dei file} \label{sec:file_fadvise}