X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=d38c843b8c52e2ca132a68b088ca2991c7efca67;hp=1e3b69e106f0bc133269877ebda5682c024c9d08;hb=1fad076b97ffee3c0507d3fcc4e845185a03483c;hpb=1bdb3c6f5316edaf8e9943a99c210ecc0ec70751 diff --git a/prochand.tex b/prochand.tex index 1e3b69e..d38c843 100644 --- a/prochand.tex +++ b/prochand.tex @@ -1999,13 +1999,13 @@ che viene assegnato ad un altro campo della struttura (\var{counter}) quando il processo viene eseguito per la prima volta e diminuito progressivamente ad ogni interruzione del timer. -Quando lo scheduler\index{scheduler} viene eseguito scandisce la coda dei -processi in stato \textit{runnable} associando, sulla base del valore di -\var{counter}, un peso a ciascun processo in attesa di esecuzione,\footnote{il +Durante la sua esecuzione lo scheduler\index{scheduler} scandisce la coda dei +processi in stato \textit{runnable} associando, in base al valore di +\var{counter}, un peso ad ogni processo in attesa di esecuzione,\footnote{il calcolo del peso in realtà è un po' più complicato, ad esempio nei sistemi - multiprocessore viene favorito un processo che è eseguito sulla stessa CPU, - e a parità del valore di \var{counter} viene favorito chi ha una priorità - più elevata.} chi ha il peso più alto verrà posto in esecuzione, ed il + multiprocessore viene favorito un processo eseguito sulla stessa CPU, e a + parità del valore di \var{counter} viene favorito chi ha una priorità più + elevata.} chi ha il peso più alto verrà posto in esecuzione, ed il precedente processo sarà spostato in fondo alla coda. Dato che ad ogni interruzione del timer il valore di \var{counter} del processo corrente viene diminuito, questo assicura che anche i processi con priorità più bassa @@ -2058,15 +2058,15 @@ Restituisce il valore di \var{nice} per l'insieme dei processi specificati. \item[\errcode{EINVAL}] il valore di \param{which} non è valido. \end{errlist}} \end{prototype} -\noindent (in vecchie versioni può essere necessario includere anche +\noindent nelle vecchie versioni può essere necessario includere anche \file{}, questo non è più necessario con versioni recenti delle -librerie, ma è comunque utile per portabilità). +librerie, ma è comunque utile per portabilità. -La funzione permette di leggere la priorità di un processo, di un gruppo di -processi (vedi \secref{sec:sess_proc_group}) o di un utente, a seconda del -valore di \param{which}, secondo la legenda di \tabref{tab:proc_getpriority}, -specificando un corrispondente valore per \param{who}; un valore nullo di -quest'ultimo indica il processo, il gruppo di processi o l'utente correnti. +La funzione permette, a seconda del valore di \param{which}, di leggere la +priorità di un processo, di un gruppo di processi (vedi +\secref{sec:sess_proc_group}) o di un utente, specificando un corrispondente +valore per \param{who}; un valore nullo di quest'ultimo indica il processo, il +gruppo di processi o l'utente correnti. \begin{table}[htb] \centering @@ -2134,7 +2134,7 @@ processo qualsiasi sia la sua priorit siano installate le patch di RTLinux, RTAI o Adeos, con i quali è possibile ottenere un sistema effettivamente hard real-time. In tal caso infatti gli interrupt vengono intercettati dall'interfaccia real-time (o nel caso di - Adeos gestiti dalle code del nano-kernel), in modo da poterlo controllare + Adeos gestiti dalle code del nano-kernel), in modo da poterli controllare direttamente qualora ci sia la necessità di avere un processo con priorità più elevata di un \textit{interrupt handler}.} mentre con l'incorrere in un page fault\index{page fault} si possono avere ritardi non previsti. Se @@ -2143,24 +2143,23 @@ controllo della memoria virtuale (vedi \secref{sec:proc_mem_lock}), il primo non è superabile e può comportare ritardi non prevedibili riguardo ai tempi di esecuzione di qualunque processo. -In ogni caso occorre usare le priorità assolute con molta attenzione: se si dà -ad un processo una priorità assoluta e questo finisce in un loop infinito, -nessun altro processo potrà essere eseguito, ed esso sarà mantenuto in -esecuzione permanentemente assorbendo tutta la CPU e senza nessuna possibilità -di riottenere l'accesso al sistema. Per questo motivo è sempre opportuno, -quando si lavora con processi che usano priorità assolute, tenere attiva una -shell cui si sia assegnata la massima priorità assoluta, in modo da poter -essere comunque in grado di rientrare nel sistema. +Occorre usare le priorità assolute con molta attenzione: se si dà ad un +processo una priorità assoluta e questo finisce in un loop infinito, nessun +altro processo potrà essere eseguito, ed esso sarà mantenuto in esecuzione +permanentemente assorbendo tutta la CPU e senza nessuna possibilità di +riottenere l'accesso al sistema. Per questo motivo è sempre opportuno, quando +si lavora con processi che usano priorità assolute, tenere attiva una shell +cui si sia assegnata la massima priorità assoluta, in modo da poter essere +comunque in grado di rientrare nel sistema. Quando c'è un processo con priorità assoluta lo scheduler\index{scheduler} lo metterà in esecuzione prima di ogni processo normale. In caso di più processi sarà eseguito per primo quello con priorità assoluta più alta. Quando ci sono più processi con la stessa priorità assoluta questi vengono tenuti in una coda e tocca al kernel decidere quale deve essere eseguito. - Il meccanismo con cui vengono gestiti questi processi dipende dalla politica di scheduling che si è scelto; lo standard ne prevede due: -\begin{basedescript}{\desclabelwidth{2cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.2cm}\desclabelstyle{\nextlinelabel}} \item[\textit{FIFO}] \textit{First In First Out}. Il processo viene eseguito fintanto che non cede volontariamente la CPU, si blocca, finisce o viene interrotto da un processo a priorità più alta. @@ -2226,11 +2225,7 @@ zero \begin{figure}[!htb] \footnotesize \centering \begin{minipage}[c]{15cm} - \begin{lstlisting}[stepnumber=0]{} -struct sched_param { - int sched_priority; -}; - \end{lstlisting} + \includestruct{listati/sched_param.c} \end{minipage} \normalsize \caption{La struttura \structd{sched\_param}.}