X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=127095d603400be6e07b647da4ee324d274337a9;hp=4ef44d3351f8efa5caac717cd0a6ca74c3e215b4;hb=6c2be511ebf59148d64ae0da7f44e21b2bd92e73;hpb=f2e24e170e8ad0d5d1194f492e5cb1349ebe5622 diff --git a/system.tex b/system.tex index 4ef44d3..127095d 100644 --- a/system.tex +++ b/system.tex @@ -344,11 +344,9 @@ relative spiegazioni, si può trovare nel manuale delle \acr{glibc}. Valore massimo del tipo di dato \type{ssize\_t}.\\ \texttt{\_SC\_CLK\_TCK} & \const{CLK\_TCK} & - Il numero di \itindex{clock~tick} - \textit{clock tick} al secondo, + Il numero di \textit{clock tick} al secondo, cioè l'unità di misura del - \itindex{process~time} \textit{process - time} (vedi + \textit{process time} (vedi sez.~\ref{sec:sys_unix_time}).\\ \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}& Indica se è supportato il \textit{job @@ -409,7 +407,7 @@ riportate in tab.~\ref{tab:sys_file_macro}. \const{LINK\_MAX} &8 & Numero massimo di link a un file.\\ \const{NAME\_MAX}& 14 & Lunghezza in byte di un nome di file. \\ \const{PATH\_MAX}& 256 & Lunghezza in byte di un \textit{pathname}.\\ - \const{PIPE\_BUF}&4096 & Byte scrivibili atomicamente in una pipe + \const{PIPE\_BUF}&4096 & Byte scrivibili atomicamente in una \textit{pipe} (vedi sez.~\ref{sec:ipc_pipes}).\\ \const{MAX\_CANON}&255 & Dimensione di una riga di terminale in modo canonico (vedi sez.~\ref{sec:term_io_design}).\\ @@ -441,7 +439,7 @@ analoghe di tab.~\ref{tab:sys_posix1_general}. \const{\_POSIX\_PATH\_MAX}& 256 & Lunghezza in byte di un \textit{pathname}.\\ \const{\_POSIX\_PIPE\_BUF}& 512 & Byte scrivibili atomicamente in una - pipe.\\ + \textit{pipe}.\\ \const{\_POSIX\_MAX\_CANON}&255 & Dimensione di una riga di terminale in modo canonico.\\ \const{\_POSIX\_MAX\_INPUT}&255 & Spazio disponibile nella coda di input @@ -1666,12 +1664,12 @@ riportati nel seguente elenco: \textit{Address Space}, (vedi sez.~\ref{sec:proc_mem_gen}). Se il limite viene superato dall'uso di funzioni come \func{brk}, \func{mremap} o \func{mmap} esse falliranno con un errore di \errcode{ENOMEM}, mentre se il - superamento viene causato dalla crescita dello \itindex{stack} - \textit{stack} il processo riceverà un segnale di \signal{SIGSEGV}. Dato che - il valore usato è un intero di tipo \ctyp{long} nelle macchine a 32 bit - questo può assumere un valore massimo di 2Gb (anche se la memoria - disponibile può essere maggiore), in tal caso il limite massimo indicabile - resta 2Gb, altrimenti la risorsa si dà per non limitata. + superamento viene causato dalla crescita dello \textit{stack} il processo + riceverà un segnale di \signal{SIGSEGV}. Dato che il valore usato è un + intero di tipo \ctyp{long} nelle macchine a 32 bit questo può assumere un + valore massimo di 2Gb (anche se la memoria disponibile può essere maggiore), + in tal caso il limite massimo indicabile resta 2Gb, altrimenti la risorsa si + dà per non limitata. \item[\const{RLIMIT\_CORE}] Questa risorsa indica, in byte, la massima dimensione per un file di \textit{core dump} (vedi @@ -1802,9 +1800,9 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa introdotto con il kernel 2.6.8. \item[\const{RLIMIT\_STACK}] Questa risorsa indica, in byte, la massima - dimensione dello \itindex{stack} \textit{stack} del processo. Se il processo - esegue operazioni che estendano lo \textit{stack} oltre questa dimensione - riceverà un segnale di \signal{SIGSEGV}. + dimensione dello \textit{stack} del processo. Se il processo esegue + operazioni che estendano lo \textit{stack} oltre questa dimensione riceverà + un segnale di \signal{SIGSEGV}. A partire dal kernel 2.6.23 questo stesso limite viene applicato per la gran parte delle architetture anche ai dati che possono essere passati come @@ -2139,29 +2137,31 @@ infatti calcola tre tempi: \end{basedescript} La somma di \textit{user time} e \textit{system time} indica il -\itindex{process~time} \textit{process time}, vale a dire il tempo di -processore totale che il sistema ha effettivamente utilizzato per eseguire il -programma di un certo processo. Si può ottenere un riassunto dei valori di -questi tempi quando si esegue un qualsiasi programma lanciando quest'ultimo -come argomento del comando \cmd{time}. - -Come accennato il \itindex{process~time} \textit{process time} viene misurato -nei cosiddetti \itindex{clock~tick} \textit{clock tick}. Un tempo questo -corrispondeva al numero di interruzioni effettuate dal timer di sistema, oggi -lo standard POSIX richiede che esso sia espresso come multiplo della costante -\const{CLOCKS\_PER\_SEC} che deve essere definita come 1000000, qualunque sia -la risoluzione reale dell'orologio di sistema e la frequenza delle -interruzioni del timer che, come accennato in sez.~\ref{sec:proc_hierarchy} e -come vedremo a breve, è invece data dalla costante \const{HZ}. +\textit{process time}, vale a dire il tempo di processore totale che il +sistema ha effettivamente utilizzato per eseguire il programma di un certo +processo. Si può ottenere un riassunto dei valori di questi tempi quando si +esegue un qualsiasi programma lanciando quest'ultimo come argomento del +comando \cmd{time}. + +\itindbeg{clock~tick} + +Come accennato il \textit{process time} viene misurato nei cosiddetti +\textit{clock tick}. Un tempo questo corrispondeva al numero di interruzioni +effettuate dal timer di sistema, oggi lo standard POSIX richiede che esso sia +espresso come multiplo della costante \const{CLOCKS\_PER\_SEC} che deve essere +definita come 1000000, qualunque sia la risoluzione reale dell'orologio di +sistema e la frequenza delle interruzioni del timer che, come accennato in +sez.~\ref{sec:proc_hierarchy} e come vedremo a breve, è invece data dalla +costante \const{HZ}. Il tipo di dato usato per questo tempo, \type{clock\_t}, con questa convenzione ha una risoluzione del microsecondo. Ma non tutte le funzioni di sistema come vedremo seguono questa convenzione, in tal caso il numero di -\itindex{clock~tick} \textit{clock tick} al secondo può essere ricavato anche -attraverso \func{sysconf} richiedendo il valore della costante -\const{\_SC\_CLK\_TCK} (vedi sez.~\ref{sec:sys_limits}). Il vecchio simbolo -\const{CLK\_TCK} definito in \headfile{time.h} è ormai considerato obsoleto e -non deve essere usato. +\textit{clock tick} al secondo può essere ricavato anche attraverso +\func{sysconf} richiedendo il valore della costante \const{\_SC\_CLK\_TCK} +(vedi sez.~\ref{sec:sys_limits}). Il vecchio simbolo \const{CLK\_TCK} +definito in \headfile{time.h} è ormai considerato obsoleto e non deve essere +usato. In realtà tutti calcoli dei tempi vengono effettuati dal kernel per il cosiddetto \textit{software clock}, utilizzando il \textit{timer di sistema} e @@ -2177,9 +2177,9 @@ le architetture, ma dal 2.6.13 il valore è diventato una opzione di compilazione del kernel, con un default di 250 e valori possibili di 100, 250, 1000. Dal 2.6.20 è stato aggiunto anche il valore 300 che è divisibile per le frequenze di refresh della televisione (50 o 60 Hz). Si può pensare che questi -valori determinino anche la corrispondente durata dei \itindex{clock~tick} -\textit{clock tick}, ma in realtà questa granularità viene calcolata in -maniera indipendente usando la costante del kernel \const{USER\_HZ}. +valori determinino anche la corrispondente durata dei \textit{clock tick}, ma +in realtà questa granularità viene calcolata in maniera indipendente usando la +costante del kernel \const{USER\_HZ}. Fino al kernel 2.6.21 la durata di un \textit{jiffy} costituiva la risoluzione massima ottenibile nella misura dei tempi impiegabile in una \textit{system @@ -2189,6 +2189,7 @@ divenuto possibile ottenere, per le funzioni di attesa ed i timer, la massima risoluzione possibile fornita dall'hardware. Torneremo su questo in sez.~\ref{sec:sig_timer_adv}. +\itindend{clock~tick} \subsection{La gestione del \textit{process time}} @@ -2219,12 +2220,12 @@ utilizzato dallo stesso; il suo prototipo è: \var{errno} non viene usata.} \end{funcproto} -La funzione restituisce il tempo in \itindex{clock~tick} \textit{clock tick} -ma la \acr{glibc} segue lo standard POSIX e quindi se si vuole il tempo in -secondi occorre dividere il risultato per la costante -\const{CLOCKS\_PER\_SEC}. In genere \type{clock\_t} viene rappresentato come -intero a 32 bit, il che comporta un valore massimo corrispondente a circa 72 -minuti, dopo i quali il contatore riprenderà lo stesso valore iniziale. +La funzione restituisce il tempo in \textit{clock tick} ma la \acr{glibc} +segue lo standard POSIX e quindi se si vuole il tempo in secondi occorre +dividere il risultato per la costante \const{CLOCKS\_PER\_SEC}. In genere +\type{clock\_t} viene rappresentato come intero a 32 bit, il che comporta un +valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore +riprenderà lo stesso valore iniziale. La funzione è presente anche nello standard ANSI C, ma in tal caso non è previsto che il valore ritornato indichi un intervallo di tempo ma solo un @@ -2301,7 +2302,7 @@ il comportamento è stato adeguato allo standard a partire dalla versione 2.6.9. A differenza di quanto avviene per \func{clock} i valori restituiti nei campi -di una struttura \struct{tms} sono misurati in numero di \itindex{clock~tick} +di una struttura \struct{tms} sono misurati in numero di \textit{clock tick} effettivi e non in multipli di \const{CLOCKS\_PER\_SEC}, pertanto per ottenere il valore effettivo in secondi occorrerà dividere per il risultato di \code{sysconf(\_SC\_CLK\_TCK)}. @@ -2313,12 +2314,12 @@ versioni del kernel. Fino al kernel 2.4 si faceva infatti riferimento al momento dell'avvio del kernel. Con il kernel 2.6 si fa riferimento a $2^{32}/\mathtt{HZ}-300$ secondi prima dell'avvio. -Considerato che il numero dei \itindex{clock~tick} \textit{clock tick} per un -kernel che è attivo da molto tempo può eccedere le dimensioni per il tipo -\type{clock\_t} il comportamento più opportuno per i programmi è di ignorare -comunque il valore di ritorno della funzione e ricorrere alle funzioni per il -tempo di calendario del prossimo paragrafo qualora si voglia calcolare il -tempo effettivamente trascorso dall'inizio del programma. +Considerato che il numero dei \textit{clock tick} per un kernel che è attivo +da molto tempo può eccedere le dimensioni per il tipo \type{clock\_t} il +comportamento più opportuno per i programmi è di ignorare comunque il valore +di ritorno della funzione e ricorrere alle funzioni per il tempo di calendario +del prossimo paragrafo qualora si voglia calcolare il tempo effettivamente +trascorso dall'inizio del programma. Infine si tenga presente che per dei limiti nelle convenzioni per il ritorno dei valori delle \textit{system call} su alcune architetture hardware (ed in @@ -2591,7 +2592,7 @@ riportate in tab.~\ref{tab:sys_timex_mode}. specificato nel campo \var{constant} di \struct{timex}.\\ \const{ADJ\_TICK} & 0x4000 & Imposta il valore dei \textit{tick} - \itindex{clock~tick} del timer in + del timer in microsecondi, espresso nel campo \var{tick} di \struct{timex}.\\ \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Chiede uno spostamento una tantum