X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=2399e3d68f824586415ed310281d97bfd938adcb;hp=45a5615e5b633d5e398bc3059de161c8e67a5148;hb=fddf66ed6c48647cbab38b3a27c4a12feb74b86c;hpb=2535dbace6167c4bcff7dd9c98f4d397bb699afd diff --git a/fileadv.tex b/fileadv.tex index 45a5615..2399e3d 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -804,6 +804,17 @@ comportamento sui file duplicati e nel passaggio attraverso \func{fork} ed \func{exec}. Per questo stesso motivo la funzione non è equivalente a \func{flock} e può essere usata senza interferenze insieme a quest'ultima. + +\subsection{Gli \textit{open file descriptor locks}} +\label{sec:open_file_descriptor_locks} + +Come illustrato in dettaglio nella precedente sez.~\ref{sec:file_posix_lock}, +la chiusura di un file su cui sono presenti dei \textit{file lock} comporta +l'immediato rilascio degli stessi, anche se questi sono stati acquisiti da un +processo diverso. + +da finire. + % TODO trattare i POSIX file-private lock introdotti con il 3.15, % vedi http://lwn.net/Articles/586904/ correlato: % http://www.samba.org/samba/news/articles/low_point/tale_two_stds_os2.html @@ -1622,11 +1633,11 @@ viene totalmente ignorato e l'allocazione è sempre dinamica. La seconda versione della funzione, \func{epoll\_create1} è stata introdotta come estensione della precedente (è disponibile solo a partire dal kernel 2.6.27) per poter passare dei flag di controllo come maschera binaria in fase -di creazione del file descriptor. Al momento l'unico valore legale -per \param{flags} (a parte lo zero) è \constd{EPOLL\_CLOEXEC}, che consente di +di creazione del file descriptor. Al momento l'unico valore legale per +\param{flags} (a parte lo zero) è \constd{EPOLL\_CLOEXEC}, che consente di impostare in maniera atomica sul file descriptor il flag di -\textit{close-on-exec} (si è trattato il significato di \const{O\_CLOEXEC} in -sez.~\ref{sec:file_open_close}), senza che sia necessaria una successiva +\textit{close-on-exec} (vedi sez.~\ref{sec:proc_exec} e +sez.~\ref{sec:file_shared_access}) senza che sia necessaria una successiva chiamata a \func{fcntl}. Una volta ottenuto un file descriptor per \textit{epoll} il passo successivo è @@ -2000,6 +2011,9 @@ questo caso la trattazione di un esempio concreto a quando avremo esaminato in dettaglio le caratteristiche dei socket; in particolare si potrà trovare un programma che utilizza questa interfaccia in sez.~\ref{sec:TCP_serv_epoll}. +% TODO: trattare epoll_wait2, introdotta con il kernel 5.11 (vedi +% https://lwn.net/Articles/837816/) + \itindend{epoll} @@ -2197,7 +2211,7 @@ 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 +\const{SFD\_CLOEXEC} o si sia successivamente impostato il \textit{close-on-exec} con \func{fcntl}. Questo comportamento corrisponde anche alla ordinaria semantica relativa ai segnali bloccati, che restano pendenti attraverso una \func{exec}. @@ -2777,6 +2791,9 @@ definita la macro \macro{\_GNU\_SOURCE} prima di includere \headfile{fcntl.h}. \itindbeg{file~lease} +% TODO: questa funzionalità potrebbe essere estesa vedi: +% https://lwn.net/Articles/796000/ + La prima di queste funzionalità è quella del cosiddetto \textit{file lease}; questo è un meccanismo che consente ad un processo, detto \textit{lease holder}, di essere notificato quando un altro processo, chiamato a sua volta @@ -4710,7 +4727,11 @@ caching dei dati. % 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/). +% remain valid in the child (dalla notizia in +% https://lwn.net/Articles/733256/). +% TODO aggiunte MADV_COLD e MADV_PAGEOUT dal kernel 5.4, vedi +% https://git.kernel.org/linus/9c276cc65a58 e +% https://git.kernel.org/linus/1a4e58cce84e \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 @@ -5817,17 +5838,32 @@ file uno \textit{sparse file} a posteriori. % vedi http://lwn.net/Articles/226710/ e http://lwn.net/Articles/240571/ % http://kernelnewbies.org/Linux_2_6_23 + % TODO aggiungere FALLOC_FL_ZERO_RANGE e FALLOC_FL_COLLAPSE_RANGE, inseriti % nel kernel 3.15 (sul secondo vedi http://lwn.net/Articles/589260/), vedi % anche http://lwn.net/Articles/629965/ % TODO aggiungere FALLOC_FL_INSERT vedi http://lwn.net/Articles/629965/ +% TODO aggiungere i file hints di fcntl (F_GET_RW_HINT e compagnia) +% con RWH_WRITE_LIFE_EXTREME e RWH_WRITE_LIFE_SHORT aggiunte con +% il kernel 4.13 (vedi https://lwn.net/Articles/727385/) + +\subsection{Altre funzionalità avanzate} +\label{sec:file_seal_et_al} + +da fare % TODO non so dove trattarli, ma dal 2.6.39 ci sono i file handle, vedi % http://lwn.net/Articles/432757/ (probabilmente da associare alle % at-functions) +% TODO: trattare i file seal, vedi fcntl / F_ADD_SEAL e memfd_create + +% TODO trattare qui ioctl_ficlonerange ? + +% TODO trattare qui close_range, vedi https://lwn.net/Articles/789023/ + % LocalWords: dell'I locking multiplexing cap sez system call socket BSD GID % LocalWords: descriptor client deadlock NONBLOCK EAGAIN polling select kernel