From 51112296ddea7c0d21c2617d9f17ee95975dd84e Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 7 May 2002 22:00:01 +0000 Subject: [PATCH] Finito con le risorse, si passa ai tempi --- system.tex | 65 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/system.tex b/system.tex index 40ec611..5b645af 100644 --- a/system.tex +++ b/system.tex @@ -1562,7 +1562,7 @@ processo padre attraverso una \func{fork} (vedi \secref{sec:proc_fork}) e mantenuti attraverso una \func{exec} (vedi \secref{sec:proc_exec}). -\subsection{Le risorse relative alla memoria} +\subsection{Le risorse di memoria e processore} \label{sec:sys_memory_res} La gestione della memoria è già stata affrontata in dettaglio in @@ -1598,10 +1598,10 @@ dimensione delle pagine di memoria; il suo prototipo La funzione è prevista in SVr4, 4.4BSD e SUSv2, anche se questo ultimo standard la etichetta come obsoleta, mentre lo standard POSIX 1003.1-2001 la ha eliminata. In Linux è implementata come una system call nelle architetture -in cui essa serve, in genere restituisce il valore del simbolo +in cui essa è necessaria, ed in genere restituisce il valore del simbolo \macro{PAGE\_SIZE} del kernel, anche se le versioni delle librerie del C -precedenti le \acr{glibc} 2.1 implementavano questa funzione restituendo un -valore statico. +precedenti le \acr{glibc} 2.1 implementavano questa funzione restituendo +sempre un valore statico. Le \acr{glibc} forniscono, come specifica estensione GNU, altre due funzioni, \func{get\_phys\_pages} e \func{get\_avphys\_pages} che permettono di ottenere @@ -1611,32 +1611,55 @@ informazioni riguardo la memoria; i loro prototipi sono: \funcdecl{long int get\_phys\_pages(void)} - Legge il numero totale di pagine di memorie disponibili per il sistema. + Legge il numero totale di pagine di memoria disponibili per il sistema. \funcdecl{long int get\_avphys\_pages(void)} - Legge il numero. + Legge il numero di pagine di memoria disponibili nel sistema. - \bodydesc{} + \bodydesc{Le funzioni restituiscono il numero di pagine, } \end{functions} +Queste funzioni sono equivalenti all'uso della funzione \func{sysconf} +rispettivamente con i parametri \macro{\_SC\_PHYS\_PAGES} e +\macro{\_SC\_AVPHYS\_PAGES}. La prima restituisce il numero totale di pagine +corrispondenti alla RAM della macchina; la seconda invece la memoria +effettivamente disponibile per i processi. + +Le \acr{glibc} supportano inoltre, come estenzioni GNU, due funzioni che +restituiscono il numero di processori della macchina (e quello dei processori +attivi); anche queste sono informazioni comunque ottenibili attraverso +\func{sysconf} utilizzando rispettivamente i parametri +\macro{\_SC\_NPROCESSORS\_CONF} e \macro{\_SC\_NPROCESSORS\_ONLN}. + +Infine le \acr{glibc} riprendono da BSD la funzione \func{getloadavg} che +permette di ottenere il carico di processore della macchina, in questo modo è +possibile prendere decisioni su quando far partire eventuali nuovi processi. +Il suo prototipo è: +\begin{prototype}{stdlib.h}{int getloadavg(double loadavg[], int nelem)} + Legge il carico medio della macchina. + + \bodydesc{La funzione ritorna il numero di elementi scritti o -1 in caso di + errore.} +\end{prototype} - -\subsection{Le risorse di processore} -\label{sec:sys_cpu_load} - - - - +La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio +di processi attivi sulla coda dello scheduler, calcolato su un diverso +intervalli di tempo. Il numero di intervalli che si vogliono leggere è +specificato da \param{nelem}, dato che nel caso di Linux il carico viene +valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti), questo è +anche il massimo valore che può essere assegnato a questo argomento. \section{La gestione dei tempi del sistema} \label{sec:sys_time} -In questa sezione tratteremo le varie funzioni per la gestione delle date e -del tempo in un sistema unix-like, e quelle per convertire i vari tempi nelle -differenti rappresentazioni che vengono utilizzate. +In questa sezione tratteremo le varie funzioni attinenti alla gestione del +tempo in un sistema unix-like, a partire da quelle della gestione di data e +ora, a quelle per convertire i vari tempi nelle differenti rappresentazioni +che vengono utilizzate, a quelle per misurare i veri tempi di sistema +associati ai processi. \subsection{La misura del tempo in Unix} @@ -1646,8 +1669,8 @@ Storicamente i sistemi unix-like hanno sempre mantenuto due distinti tipi di dati per la misure dei tempi all'interno del sistema: essi sono rispettivamente chiamati \textit{calendar time} e \textit{process time}, secondo le definizioni: -\begin{itemize} -\item \textit{calendar time}: è il numero di secondi dalla mezzanotte del +\begin{description} +\item[\textit{calendar time}]: è il numero di secondi dalla mezzanotte del primo gennaio 1970, in tempo universale coordinato (o UTC), data che viene usualmente indicata con 00:00:00 Jan, 1 1970 (UTC) e chiamata \textit{the Epoch}. Questo tempo viene anche chiamato anche GMT (Greenwich Mean Time) @@ -1655,7 +1678,7 @@ secondo le definizioni: viene mantenuto l'orologio del calcolatore, e viene usato ad esempio per indicare le date di modifica dei file o quelle di avvio dei processi. Per memorizzare questo tempo è stato riservato il tipo primitivo \type{time\_t}. -\item \textit{process time}: detto anche tempo di processore. Viene misurato +\item[\textit{process time}]: detto anche tempo di processore. Viene misurato in \textit{clock tick}, corrispondenti al numero di interruzioni effettuate dal timer di sistema, e che per Linux avvengono ogni centesimo di secondo.\footnote{eccetto per la piattaforma alpha dove avvengono ogni @@ -1665,7 +1688,7 @@ secondo le definizioni: standard POSIX definisce allo stesso modo la costante \macro{CLK\_TCK}); questo valore può comunque essere ottenuto con \func{sysconf} (vedi \secref{sec:sys_limits}). -\end{itemize} +\end{description} In genere si usa il \textit{calendar time} per esprimere le date dei file e le informazioni analoghe che riguardano i cosiddetti \textsl{tempi di orologio}, -- 2.30.2