X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=4ef44d3351f8efa5caac717cd0a6ca74c3e215b4;hp=cdbfdd3cda7500f533df1df0772fba2c02f5df96;hb=6ef95fc5ee2f29b1ac30151659176cfc9991a15e;hpb=45e080607c5b618a11038a6afc9f79af9931b2da diff --git a/system.tex b/system.tex index cdbfdd3..4ef44d3 100644 --- a/system.tex +++ b/system.tex @@ -1594,8 +1594,7 @@ specifico segnale o il fallimento della \textit{system call} che lo ha provocato. A questo comportamento generico fanno eccezione \const{RLIMIT\_CPU} in cui si ha in comportamento diverso per il superamento dei due limiti e \const{RLIMIT\_CORE} che influenza soltanto la dimensione o l'eventuale -creazione dei file di \itindex{core~dump} \textit{core dump} (vedi -sez.~\ref{sec:sig_standard}). +creazione dei file di \textit{core dump} (vedi sez.~\ref{sec:sig_standard}). Per permettere di leggere e di impostare i limiti di utilizzo delle risorse da parte di un processo sono previste due funzioni di sistema, \funcd{getrlimit} @@ -1650,7 +1649,7 @@ di quest'ultimo. Nello specificare un limite, oltre a fornire dei valori specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette di sbloccare completamente l'uso di una risorsa. Si ricordi però che solo un processo con i privilegi di amministratore\footnote{per essere precisi in - questo caso quello che serve è la \itindex{capabilities} \textit{capability} + questo caso quello che serve è la \textit{capability} \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può innalzare un limite al di sopra del valore corrente del limite massimo ed usare un valore qualsiasi per entrambi i limiti. @@ -1675,11 +1674,10 @@ riportati nel seguente elenco: 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 \itindex{core~dump} \textit{core dump} (vedi + dimensione per un file di \textit{core dump} (vedi sez.~\ref{sec:sig_standard}) creato nella terminazione di un processo. File di dimensioni maggiori verranno troncati a questo valore, mentre con un - valore nullo si bloccherà la creazione dei \itindex{core~dump} \textit{core - dump}. + valore nullo si bloccherà la creazione dei \textit{core dump}. \item[\const{RLIMIT\_CPU}] Questa risorsa indica, in secondi, il massimo tempo di CPU (vedi sez.~\ref{sec:sys_cpu_times}) che il processo può usare. Il @@ -1858,8 +1856,8 @@ che sia stata definita la macro \macro{\_GNU\_SOURCE}. Il primo argomento indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può usare un valore nullo per indicare il processo chiamante. Per modificare i limiti di un altro processo, a meno di non avere privilegi -amministrativi,\footnote{anche in questo caso la \itindex{capabilities} - \textit{capability} necessaria è \const{CAP\_SYS\_RESOURCE} (vedi +amministrativi,\footnote{anche in questo caso la \textit{capability} + necessaria è \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} l'\ids{UID} ed il \ids{GID} reale del chiamante devono coincidere con \ids{UID} e \ids{GID} del processo indicato per i tre gruppi reale, effettivo e salvato. @@ -2019,7 +2017,7 @@ prototipo è: La funzione attiva il salvataggio dei dati sul file indicato dal \textit{pathname} contenuti nella stringa puntata da \param{filename}; la funzione richiede che il processo abbia i privilegi di amministratore (è -necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi +necessaria la \textit{capability} \const{CAP\_SYS\_PACCT}, vedi sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per \param{filename} il \textit{BSD accounting} viene invece disabilitato. Un semplice esempio per l'uso di questa funzione è riportato nel programma @@ -2027,10 +2025,9 @@ semplice esempio per l'uso di questa funzione è riportato nel programma Quando si attiva la contabilità, il file che si indica deve esistere; esso verrà aperto in sola scrittura e le informazioni verranno registrate in -\itindex{append~mode} \textit{append} in coda al file tutte le volte che un -processo termina. Le informazioni vengono salvate in formato binario, e -corrispondono al contenuto della apposita struttura dati definita all'interno -del kernel. +\textit{append} in coda al file tutte le volte che un processo termina. Le +informazioni vengono salvate in formato binario, e corrispondono al contenuto +della apposita struttura dati definita all'interno del kernel. Il funzionamento di \func{acct} viene inoltre modificato da uno specifico parametro di sistema, modificabile attraverso \sysctlfile{kernel/acct} (o @@ -2059,19 +2056,21 @@ gestione di data e ora. \subsection{La misura del tempo in Unix} \label{sec:sys_unix_time} +\itindbeg{calendar~time} + Tradizionalmente nei sistemi unix-like sono sempre stati previsti due tipi distinti di tempi, caratterizzati da altrettante modalità di misura ed espressi con diversi tipi di dati, chiamati rispettivamente \textit{calendar time} e \textit{process time}, secondo le seguenti definizioni: \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} -\item[\textit{calendar time}] \itindex{calendar~time} detto anche - \textsl{tempo di calendario}, \textsl{tempo d'orologio} o \textit{tempo - reale}. Si tratta di un tempo assoluto o di un intervallo di tempo come lo - intende normalmente per le misure fatte con un orologio. Per esprimere +\item[\textit{calendar time}] detto anche \textsl{tempo di calendario}, + \textsl{tempo d'orologio} o \textit{tempo reale}. Si tratta di un + tempo assoluto o di un intervallo di tempo come lo intende + normalmente per le misure fatte con un orologio. Per esprimere questo tempo è stato riservato il tipo \type{time\_t}, e viene - tradizionalmente misurato in secondi a partire dalla mezzanotte del primo - gennaio 1970, data che viene chiamata \textit{the Epoch}. + tradizionalmente misurato in secondi a partire dalla mezzanotte del + primo gennaio 1970, data che viene chiamata \textit{the Epoch}. \item[\textit{process time}] \itindex{process~time} detto anche \textsl{tempo di processore} o \textsl{tempo di CPU}. Si tratta del tempo impiegato da @@ -2083,14 +2082,15 @@ espressi con diversi tipi di dati, chiamati rispettivamente \textit{calendar precedente indica soltanto un intervallo di durata. \end{basedescript} -Il \itindex{calendar~time} \textit{calendar time} viene sempre mantenuto -facendo riferimento al cosiddetto \textit{tempo universale coordinato} UTC, -anche se talvolta viene usato il cosiddetto GMT (\textit{Greenwich Mean Time}) -dato che l'UTC corrisponde all'ora locale di Greenwich. Si tratta del tempo su -cui viene mantenuto il cosiddetto \textsl{orologio di sistema}, e viene usato -per indicare i tempi dei file (quelli di sez.~\ref{sec:file_file_times}) o le -date di avvio dei processi, ed è il tempo che viene usato dai demoni che -compiono lavori amministrativi ad orari definito, come \cmd{cron}. +Il \textit{calendar time} viene sempre mantenuto facendo riferimento +al cosiddetto \textit{tempo universale coordinato} UTC, anche se +talvolta viene usato il cosiddetto GMT (\textit{Greenwich Mean Time}) +dato che l'UTC corrisponde all'ora locale di Greenwich. Si tratta del +tempo su cui viene mantenuto il cosiddetto \textsl{orologio di + sistema}, e viene usato per indicare i tempi dei file (quelli di +sez.~\ref{sec:file_file_times}) o le date di avvio dei processi, ed è +il tempo che viene usato dai demoni che compiono lavori amministrativi +ad orari definito, come \cmd{cron}. Si tenga presente che questo tempo è mantenuto dal kernel e non è detto che corrisponda al tempo misurato dall'orologio hardware presente su praticamente @@ -2112,6 +2112,8 @@ opportune informazioni di localizzazione (specificate in di sistema misuri sempre un tempo monotono crescente come nella realtà, anche in presenza di cambi di fusi orari. +\itindend{calendar~time} + Il \itindex{process~time} \textit{process time} invece indica sempre una misura di un lasso di tempo e viene usato per tenere conto dei tempi di esecuzione dei processi. Esso viene sempre diviso in \textit{user time} e @@ -2120,7 +2122,7 @@ infatti calcola tre tempi: \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} \item[\textit{clock time}] il tempo \textsl{reale}, viene chiamato anche \textit{wall clock time} o \textit{elapsed time}, passato dall'avvio del - processo. Questo tempo fa riferimento al \itindex{calendar~time} + processo. Questo tempo fa riferimento al \textit{calendar time} e dice la durata effettiva dell'esecuzione del processo, ma chiaramente dipende dal carico del sistema e da quanti altri processi stanno girando nello stesso momento. @@ -2195,12 +2197,12 @@ sez.~\ref{sec:sig_timer_adv}. \itindbeg{process~time} Di norma tutte le operazioni del sistema fanno sempre riferimento al -\itindex{calendar~time} \textit{calendar time}, l'uso del \textit{process - time} è riservato a quei casi in cui serve conoscere i tempi di esecuzione -di un processo (ad esempio per valutarne l'efficienza). In tal caso infatti -fare ricorso al \textit{calendar time} è inutile in quanto il tempo può essere -trascorso mentre un altro processo era in esecuzione o in attesa del risultato -di una operazione di I/O. +\textit{calendar time}, l'uso del \textit{process time} è riservato a +quei casi in cui serve conoscere i tempi di esecuzione di un processo +(ad esempio per valutarne l'efficienza). In tal caso infatti fare +ricorso al \textit{calendar time} è inutile in quanto il tempo può +essere trascorso mentre un altro processo era in esecuzione o in +attesa del risultato di una operazione di I/O. La funzione più semplice per leggere il \textit{process time} di un processo è \funcd{clock}, che da una valutazione approssimativa del tempo di CPU @@ -2377,9 +2379,9 @@ sia necessario; il suo prototipo è: Dato che modificare l'ora ha un impatto su tutto il sistema il cambiamento dell'orologio è una operazione privilegiata e questa funzione può essere usata -solo da un processo con i privilegi di amministratore (per la precisione la la -\itindex{capabilities} capability \const{CAP\_SYS\_TIME}), altrimenti la -chiamata fallirà con un errore di \errcode{EPERM}. +solo da un processo con i privilegi di amministratore (per la precisione la +\textit{capability} \const{CAP\_SYS\_TIME}), altrimenti la chiamata fallirà +con un errore di \errcode{EPERM}. Data la scarsa precisione nell'uso di \type{time\_t}, che ha una risoluzione massima di un secondo, quando si devono effettuare operazioni sui tempi di @@ -2415,10 +2417,9 @@ non dipende dall'uso di queste strutture. Come nel caso di \func{stime} anche \func{settimeofday} può essere utilizzata solo da un processo coi privilegi di amministratore e più precisamente con la -\itindex{capability} capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di -una condizione generale che continua a valere per qualunque funzione che vada -a modificare l'orologio di sistema, comprese tutte quelle che tratteremo in -seguito. +capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di una condizione generale +che continua a valere per qualunque funzione che vada a modificare l'orologio +di sistema, comprese tutte quelle che tratteremo in seguito. Il secondo argomento di entrambe le funzioni è una struttura \struct{timezone}, che storicamente veniva utilizzata per specificare appunto