From 577f268d8395cbd4db85c3b9ca3a7b387ba4ff0f Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 17 Feb 2004 02:23:34 +0000 Subject: [PATCH] Messi un po' di placeholder per i terminali virtuali e UDP, corretti alcuni errori sul l'apertura asincrona dei file, sistemata una figura, messo un riferimento alla dimensione della coda dei segnali real-time --- fileadv.tex | 71 ++++++++++++++++++++++++-------------------- img/mmap_layout.dia | Bin 1735 -> 1954 bytes session.tex | 19 ++++++++++++ signal.tex | 46 +++++++++++++++------------- trasplayer.tex | 9 ++++++ 5 files changed, 92 insertions(+), 53 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index 2d000d8..fd77995 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -393,7 +393,7 @@ nel campo \var{revents} per notificare delle condizioni di errore. \const{POLLHUP} & Si è verificato un hung-up.\\ \const{POLLNVAL} & Il file descriptor non è aperto.\\ \hline - \const{POLLMSG} & Definito per compatobilità con SysV.\\ + \const{POLLMSG} & Definito per compatibilità con SysV.\\ \hline \end{tabular} \caption{Costanti per l'identificazione dei vari bit dei campi @@ -413,9 +413,9 @@ distinzione ha senso solo per i dati \textit{out-of-band} dei socket (vedi alle varie condizioni dei socket torneremo in \secref{sec:TCP_serv_poll}, dove vedremo anche un esempio del suo utilizzo. Si tenga conto comunque che le costanti relative ai diversi tipi di dati (come \macro{POLLRDNORM} e -\macro{POLLRDBAND}) sono utilizzabili soltanto qualora si sia definito -\macro{\_XOPEN\_SOURCE}.\footnote{e ci si ricordi di farlo sempre in testa al - file, definirla soltanto prima di includere \file{sys/poll.h} non è +\macro{POLLRDBAND}) sono utilizzabili soltanto qualora si sia definita la +macro \macro{\_XOPEN\_SOURCE}.\footnote{e ci si ricordi di farlo sempre in + testa al file, definirla soltanto prima di includere \file{sys/poll.h} non è sufficiente.} In caso di successo funzione ritorna restituendo il numero di file (un valore @@ -441,9 +441,11 @@ le pi debba operare su più file contemporaneamente, esistono altre modalità di gestione delle stesse problematiche. In particolare sono importanti in questo contesto le modalità di accesso ai file eseguibili in maniera -\textsl{asincrona}, senza cioè che un processo debba bloccarsi, ed utilizzi -invece un meccanismo di notifica asincrono, come un segnale, per rilevare la -possibilità di eseguire le operazioni volute. +\textsl{asincrona}, quelle cioè in cui un processo non deve bloccarsi in +attesa della disponibilità dell'accesso al file, ma può proseguire +nell'esecuzione utilizzando invece un meccanismo di notifica asincrono (di +norma un segnale), per essere avvisato della possibilità di eseguire le +operazioni di I/O volute. \subsection{Operazioni asincrone sui file} @@ -464,14 +466,15 @@ propriamente notifica delle variazione dello stato del file descriptor aperto in questo modo. -Quello che succede è che il sistema genera un segnale (normalmente -\const{SIGIO}, ma è possibile usarne altri con il comando \const{F\_SETSIG} di -\func{fcntl}) tutte le volte che diventa possibile leggere o scrivere dal file -descriptor che si è posto in questa modalità. Si può inoltre selezionare, con -il comando \const{F\_SETOWN} di \func{fcntl}, quale processo (o gruppo di -processi) riceverà il segnale. Se pertanto si effettuano le operazioni in -risposta alla ricezione del segnale non ci sarà più la necessità di restare -bloccati in attesa della disponibilità di accesso ai file. +Quello che succede in questo caso è che il sistema genera un segnale +(normalmente \const{SIGIO}, ma è possibile usarne altri con il comando +\const{F\_SETSIG} di \func{fcntl}) tutte le volte che diventa possibile +leggere o scrivere dal file descriptor che si è posto in questa modalità. Si +può inoltre selezionare, con il comando \const{F\_SETOWN} di \func{fcntl}, +quale processo (o gruppo di processi) riceverà il segnale. Se pertanto si +effettuano le operazioni di I/O in risposta alla ricezione del segnale non ci +sarà più la necessità di restare bloccati in attesa della disponibilità di +accesso ai file. In questo modo si può evitare l'uso delle funzioni \func{poll} o \func{select} che, quando vengono usate con un numero molto grande di file descriptor, non @@ -484,14 +487,15 @@ percentuale) sono diventati attivi. Tuttavia con l'implementazione classica dei segnali questa modalità di I/O presenta notevoli problemi, dato che non è possibile determinare, quando i file descriptor sono più di uno, qual'è quello responsabile dell'emissione del -segnale; inoltre dato che i segnali normali non si accumulano, in presenza di -più file descriptor attivi contemporaneamente, più segnali emessi nello stesso -tempo verrebbero notificati una volta sola. Linux però supporta le estensioni -POSIX.1b dei segnali real-time, che possono accumularsi e che permettono di -riconoscere il file descriptor facendo ricorso alle informazioni aggiuntive -restituite attraverso la struttura \struct{siginfo\_t}, utilizzando la forma -estesa \var{sa\_sigaction} del gestore (si riveda quanto illustrato in -\secref{sec:sig_sigaction}). +segnale. Inoltre dato che i segnali normali non si accodano (si ricordi quanto +illustrato in sez.~\ref{sec:sig_notification}), in presenza di più file +descriptor attivi contemporaneamente, più segnali emessi nello stesso momento +verrebbero notificati una volta sola. Linux però supporta le estensioni +POSIX.1b dei segnali real-time, che vengono accodati e che permettono di +riconoscere il file descriptor che li ha emessi. In questo caso infatti si può +fare ricorso alle informazioni aggiuntive restituite attraverso la struttura +\struct{siginfo\_t}, utilizzando la forma estesa \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 @@ -504,17 +508,18 @@ campo \var{si\_code}\footnote{il valore resta \const{SI\_SIGIO} qualunque sia \struct{siginfo\_t}, troverà nel campo \var{si\_fd} il valore del file descriptor che ha generato il segnale. -Un secondo vantaggio dell'uso dei segnali real-time è che essendo dotati di -una coda di consegna ogni segnale sarà associato ad uno solo file descriptor; -inoltre sarà possibile stabilire delle priorità nella risposta a seconda del -segnale usato. In questo modo si può identificare immediatamente un file su -cui l'accesso è diventato possibile evitando completamente l'uso di funzioni -come \func{poll} e \func{select}, almeno fintanto che non si satura la coda; -si eccedono le dimensioni di quest'ultima; in tal caso infatti il kernel, non +Un secondo vantaggio dell'uso dei segnali real-time è che essendo questi +ultimi dotati di una coda di consegna ogni segnale sarà associato ad uno solo +file descriptor; inoltre sarà possibile stabilire delle priorità nella +risposta a seconda del segnale usato, dato che i segnali real-time supportano +anche questa funzionalità. In questo modo si può identificare immediatamente +un file su cui l'accesso è diventato possibile evitando completamente l'uso di +funzioni come \func{poll} e \func{select}, almeno fintanto che non si satura +la coda. Se infatti si eccedono le dimensioni di quest'ultima, il kernel, non potendo più assicurare il comportamento corretto per un segnale real-time, -invierà al suo posto un \const{SIGIO}, su cui si accumuleranno tutti i segnali -in eccesso, e si dovrà determinare con un ciclo quali sono i file diventati -attivi. +invierà al suo posto un solo \const{SIGIO}, su cui si saranno accumulati tutti +i segnali in eccesso, e si dovrà allora determinare con un ciclo quali sono i +file diventati attivi. \subsection{L'interfaccia POSIX per l'I/O asincrono} diff --git a/img/mmap_layout.dia b/img/mmap_layout.dia index 9394095deff28be58e36148b2286372c884be188..7978d5a83aeabb88390ddf4628c95b54c81de99b 100644 GIT binary patch literal 1954 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 z z0U!?H3N?r42f&qUjw>aDEy47rk})lJr) zZ_!U4r($^-{aLL;Og(f*zj&^zzUl) z$I4{Z^*&(n)6@%%`9vgaHF`|kB}a51kEKA^iUP<=H)PqVBi9~4K|uz53JOG2a)%54 z$kpULKC0i&m=Nf!>CkUO2c%TXZ*ldpaBu?T&)C@cOd_**##!O81hTlE`pjnpAcU-u}E(T_r z<*={1;qhKhM3r}xZ&k!8j@Dp%m>z(h`fr5 zcGr`eVeT`L3mY$NY|ch#myLDm&~L*=*UnZW1U%&mSL!e<)S;)AO(#)@Ox*J@czWZHR5D29>V#^EUmaO3}o&Me4BjN!xyl zT1d4qg{@5pwzLI@Ef+GsESZm80Abjw9Rcky4g&pl7%U$ZdB7_l6{&U6i8|yeHKl?% z5sRHMS3!PC=xjzMb+~X6mZTY{XZ$D$p82CBZ2mH(r{ATu(=5P%6pv9=b@D;^21$4! z$y*|c;cS1%r%c#*>p`Hm!CHCR8tA>X{xw2+mov82*IviBJ>AGC@|SCCH(s_&n#r1u zbaU8lc&TqnxAIn}!NTJk?kKd_aS!cv+{2gHRfgRbFa2X9(meChKQ5S|mr;HfySAA4 zB+A_-hi`NT7dl?(Xqk?6ve9_sMZb%!Fi~+L@KI5~d~)3fE_OrLh$R+vV>%w^>@}V( zg-?~?A5uxA(b3Y-J4zaw%;?8lJCRmvCv53k9h5VON#V~^3n&i+foD>hEb>6-vFW+; dz<5&MJ{fweZyJ00HDtG+{s%_LsXW