From 3e1677c91b3f6c2b2ad8554d923300fe61bcf7d0 Mon Sep 17 00:00:00 2001 From: piccardi Date: Sat, 17 Sep 2022 08:39:39 +0200 Subject: [PATCH] Piccole correzioni estetiche --- signal.tex | 57 +++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/signal.tex b/signal.tex index b43af0a..e6c75e6 100644 --- a/signal.tex +++ b/signal.tex @@ -3098,14 +3098,6 @@ che venga eseguita l'azione predefinita, devono essere mascherati per tutti i \textit{thread}, compreso quello dedicato alla gestione, che potrebbe riceverlo fra due chiamate successive. -Come esempio elementare dell'uso dei segnali \textit{real-time}, e della -possibilità di inviare informazioni al gestore degli stessi con -\func{sigqueue}, si è riportato in fig.~\ref{fig:sig_rtsival_main} il corpo -principale di un programma elementare che legge dal terminale un valore -numerico, ed utilizza un segnale \textit{real-time} per inviarlo al gestore -dello stesso. Si sono trascurati i controlli dei valori di ritorno delle varie -funzioni per brevità. - \begin{figure}[!htb] \footnotesize \centering \begin{minipage}[c]{\codesamplewidth} @@ -3117,11 +3109,19 @@ funzioni per brevità. \label{fig:sig_rtsival_main} \end{figure} +Come esempio elementare dell'uso dei segnali \textit{real-time}, e della +possibilità di inviare informazioni al gestore degli stessi con +\func{sigqueue}, si è riportato in fig.~\ref{fig:sig_rtsival_main} il corpo +principale di un programma elementare che legge dal terminale un valore +numerico, ed utilizza un segnale \textit{real-time} per inviarlo al gestore +dello stesso. Nel codice sono stati trascurati i controlli dei valori di +ritorno delle varie funzioni per mantenere la brevità dell'esempio. + Dopo aver definito (\texttt{\small 5}) una variabile \var{value} di tipo -\type{sigval\_t} per inviare i dati, ed aver opportunamente scelto +\type{sigval\_t} per poter inviare i dati, e dopo aver opportunamente scelto (\texttt{\small 6}) per \var{signo} un segnale \textit{real-time}, la parte iniziale del programma (\texttt{\small 8--11}) installa il relativo gestore -(la cui definizione è riportata in fig.~\ref{fig:sig_rtsival_handl}), dopo di +(la cui definizione è riportata in fig.~\ref{fig:sig_rtsival_handl}). Dopo di che il programma si pone in un ciclo infinito (\texttt{\small 14--27}) in cui prima (\texttt{\small 15--20}) legge in buffer dallo \textit{standard input} una stringa immessa dall'utente, terminandola opportunamente (\texttt{\small @@ -3131,6 +3131,10 @@ conversione ha successo e \texttt{value.sival\_int} è positivo) invia a se stesso (\texttt{\small 23}) il segnale \textit{real-time}, altrimenti stampa un avviso (\texttt{\small 24}). +Alla ricezione del segnale il gestore si limita a stampare alcune delle +informazioni ricevute nella struttura \struct{sigval\_t}, ed in particolare +(\texttt{\small 5}) stampa tramite il valore del campo \var{si\_value} il +numero che gli è stato inviato da \func{sigqueue}. \begin{figure}[!htb] \footnotesize \centering @@ -3138,14 +3142,12 @@ un avviso (\texttt{\small 24}). \includecodesample{listati/rtsigvalsend_handl.c} \end{minipage} \normalsize - \caption{Codice del gestore.} + \caption{Codice del gestore usato dal programma di + fig.~\ref{fig:sig_rtsival_main}.} \label{fig:sig_rtsival_handl} \end{figure} - - - \subsection{La gestione avanzata delle temporizzazioni} \label{sec:sig_timer_adv} @@ -3194,20 +3196,6 @@ alta definizione però erano già presenti, essendo stata introdotte insieme ad altre funzioni per il supporto delle estensioni \textit{real-time} con il rilascio del kernel 2.6, ma la risoluzione effettiva era nominale. -A tutte le implementazioni che si rifanno a queste estensioni è richiesto di -disporre di una versione \textit{real-time} almeno per l'orologio generale di -sistema, quello che mantiene il \textit{calendar time} (vedi -sez.~\ref{sec:sys_time_base}), che in questa forma deve indicare il numero di -secondi e nanosecondi passati a partire dal primo gennaio 1970 (\textit{The - Epoch}). Si ricordi infatti che l'orologio ordinario usato dal -\textit{calendar time} riporta solo un numero di secondi, e che la risoluzione -effettiva normalmente non raggiunge il nanosecondo (a meno di hardware -specializzato). Oltre all'orologio generale di sistema possono essere -presenti altri tipi di orologi \textit{real-time}, ciascuno dei quali viene -identificato da un opportuno valore di una variabile di tipo -\type{clockid\_t}; un elenco di quelli disponibili su Linux è riportato in -tab.~\ref{tab:sig_timer_clockid_types}. - \begin{table}[htb] \footnotesize \centering @@ -3265,6 +3253,19 @@ tab.~\ref{tab:sig_timer_clockid_types}. \label{tab:sig_timer_clockid_types} \end{table} +A tutte le implementazioni che si rifanno a queste estensioni è richiesto di +disporre di una versione \textit{real-time} almeno per l'orologio generale di +sistema, quello che mantiene il \textit{calendar time} (vedi +sez.~\ref{sec:sys_time_base}), che in questa forma deve indicare il numero di +secondi e nanosecondi passati a partire dal primo gennaio 1970 (\textit{The + Epoch}). Si ricordi infatti che l'orologio ordinario usato dal +\textit{calendar time} riporta solo un numero di secondi, e che la risoluzione +effettiva normalmente non raggiunge il nanosecondo (a meno di hardware +specializzato). Oltre all'orologio generale di sistema possono essere +presenti altri tipi di orologi \textit{real-time}, ciascuno dei quali viene +identificato da un opportuno valore di una variabile di tipo +\type{clockid\_t}; un elenco di quelli disponibili su Linux è riportato in +tab.~\ref{tab:sig_timer_clockid_types}. % TODO: dal 4.17 CLOCK_MONOTONIC e CLOCK_BOOTTIME sono identici vedi % https://lwn.net/Articles/751651/ e -- 2.30.2