X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=5c6a408dbc9500f8631e116b82753e2f3c8e5f71;hp=1638ea8c089f6db0e0194eed48c5bfd41784f5f7;hb=94b4d603807121b40eef06d22d2b6cd6e06ec7fd;hpb=2414addb7861eb72315a3de58b6f2cb5c83ab6ed diff --git a/prochand.tex b/prochand.tex index 1638ea8..5c6a408 100644 --- a/prochand.tex +++ b/prochand.tex @@ -136,7 +136,7 @@ che è progenitore di tutti gli altri processi.\footnote{in realtà questo non Il kernel mantiene una tabella dei processi attivi, la cosiddetta \itindex{process~table} \textit{process table}. Per ciascun processo viene mantenuta una voce in questa tabella, costituita da una struttura -\struct{task\_struct}, che contiene tutte le informazioni rilevanti per quel +\kstruct{task\_struct}, che contiene tutte le informazioni rilevanti per quel processo. Tutte le strutture usate a questo scopo sono dichiarate nell'\textit{header file} \file{linux/sched.h}, ed uno schema semplificato, che riporta la struttura delle principali informazioni contenute nella @@ -208,7 +208,7 @@ riparte dal numero più basso disponibile a partire da un minimo di kernel, con il 2.6.x e la nuova interfaccia per i \itindex{thread} \textit{thread} anche il meccanismo di allocazione dei \acr{pid} è stato modificato ed il valore massimo è impostabile attraverso il file - \procfile{/proc/sys/kernel/pid\_max} e di default vale 32768.} che serve a + \sysctlfile{kernel/pid\_max} e di default vale 32768.} che serve a riservare i \acr{pid} più bassi ai processi eseguiti direttamente dal kernel. Per questo motivo, come visto in sez.~\ref{sec:proc_hierarchy}, il processo di avvio (\cmd{init}) ha sempre il \acr{pid} uguale a uno. @@ -1137,38 +1137,43 @@ anomala), uno per indicare se è stato generato un \itindex{core~dump} \textbf{Macro} & \textbf{Descrizione}\\ \hline \hline - \macro{WIFEXITED(s)} & Condizione vera (valore non nullo) per un processo - figlio che sia terminato normalmente. \\ - \macro{WEXITSTATUS(s)} & Restituisce gli otto bit meno significativi dello - stato di uscita del processo (passato attraverso - \func{\_exit}, \func{exit} o come valore di - ritorno di \func{main}); può essere valutata solo - se \val{WIFEXITED} ha restituito un valore non - nullo.\\ - \macro{WIFSIGNALED(s)} & Condizione vera se il processo figlio è terminato - in maniera anomala a causa di un segnale che non - è stato catturato (vedi - sez.~\ref{sec:sig_notification}).\\ - \macro{WTERMSIG(s)} & Restituisce il numero del segnale che ha causato - la terminazione anomala del processo; può essere - valutata solo se \val{WIFSIGNALED} ha restituito - un valore non nullo.\\ - \macro{WCOREDUMP(s)} & Vera se il processo terminato ha generato un - file di \itindex{core~dump} \textit{core - dump}; può essere valutata solo se - \val{WIFSIGNALED} ha restituito un valore non - nullo.\footnotemark \\ - \macro{WIFSTOPPED(s)} & Vera se il processo che ha causato il ritorno di - \func{waitpid} è bloccato; l'uso è possibile solo - con \func{waitpid} avendo specificato l'opzione - \const{WUNTRACED}.\\ - \macro{WSTOPSIG(s)} & Restituisce il numero del segnale che ha bloccato - il processo; può essere valutata solo se - \val{WIFSTOPPED} ha restituito un valore non - nullo. \\ - \macro{WIFCONTINUED(s)}& Vera se il processo che ha causato il ritorno è - stato riavviato da un \signal{SIGCONT} - (disponibile solo a partire dal kernel 2.6.10).\\ + \macro{WIFEXITED}\texttt{(s)} & Condizione vera (valore non nullo) per + un processo figlio che sia terminato + normalmente. \\ + \macro{WEXITSTATUS}\texttt{(s)} & Restituisce gli otto bit meno + significativi dello stato di uscita del + processo (passato attraverso + \func{\_exit}, \func{exit} o come valore + di ritorno di \func{main}); può essere + valutata solo se \val{WIFEXITED} ha + restituito un valore non nullo.\\ + \macro{WIFSIGNALED}\texttt{(s)} & Condizione vera se il processo figlio è + terminato in maniera anomala a causa di + un segnale che non è stato catturato + (vedi sez.~\ref{sec:sig_notification}).\\ + \macro{WTERMSIG}\texttt{(s)} & Restituisce il numero del segnale che ha + causato la terminazione anomala del + processo; può essere valutata solo se + \val{WIFSIGNALED} ha restituito un + valore non nullo.\\ + \macro{WCOREDUMP}\texttt{(s)} & Vera se il processo terminato ha + generato un file di \itindex{core~dump} + \textit{core dump}; può essere valutata + solo se \val{WIFSIGNALED} ha restituito + un valore non nullo.\footnotemark \\ + \macro{WIFSTOPPED}\texttt{(s)} & Vera se il processo che ha causato il + ritorno di \func{waitpid} è bloccato; + l'uso è possibile solo con + \func{waitpid} avendo specificato + l'opzione \const{WUNTRACED}.\\ + \macro{WSTOPSIG}\texttt{(s)} & Restituisce il numero del segnale che ha + bloccato il processo; può essere + valutata solo se \val{WIFSTOPPED} ha + restituito un valore non nullo. \\ + \macro{WIFCONTINUED}\texttt{(s)}& Vera se il processo che ha causato il + ritorno è stato riavviato da un + \signal{SIGCONT} (disponibile solo a + partire dal kernel 2.6.10).\\ \hline \end{tabular} \caption{Descrizione delle varie macro di preprocessore utilizzabili per @@ -1437,7 +1442,7 @@ argomenti all'esecuzione del nuovo programma. I loro prototipi sono: \fdecl{int execvp(const char *file, char *const argv[])} \fdesc{Eseguono un programma.} } -{Le funzioni ritorna solo in caso di errore, restituendo $-1$, i codici di +{Le funzioni ritornano solo in caso di errore, restituendo $-1$, i codici di errore sono gli stessi di \func{execve}. } \end{funcproto} @@ -1654,7 +1659,7 @@ Infine nel caso il programma che si vuole eseguire sia uno script e non un binario, questo deve essere un file di testo che deve iniziare con una linea nella forma: \begin{Example} -\#!/path/to/interpreter [argomenti] +#!/path/to/interpreter [argomenti] \end{Example} dove l'interprete indicato deve essere un eseguibile binario e non un altro script, che verrà chiamato come se si fosse eseguito il comando @@ -2862,7 +2867,7 @@ stato \textit{runnable} viene sempre inserito in coda alla lista. Se la politica scelta è \const{SCHED\_FIFO} quando il processo viene eseguito viene automaticamente rimesso in coda alla lista, e la sua esecuzione continua fintanto che non viene bloccato da una richiesta di I/O, o non rilascia -volontariamente la CPU (in tal caso, tornando nello stato \textbf{Runnable} +volontariamente la CPU (in tal caso, tornando nello stato \textit{runnable} sarà reinserito in coda alla lista); l'esecuzione viene ripresa subito solo nel caso che esso sia stato interrotto da un processo a priorità più alta. @@ -3020,7 +3025,7 @@ l'introduzione del \textit{Completely Fair Scheduler} questo comportamento è cambiato ed un processo che chiama la funzione viene inserito nella lista dei processi inattivo, con un tempo molto maggiore.\footnote{è comunque possibile ripristinare un comportamento analogo al precedente scrivendo il valore 1 - nel file \texttt{/proc/sys/kernel/sched\_compat\_yield}.} + nel file \sysctlfile{kernel/sched\_compat\_yield}.} L'uso delle funzione nella programmazione ordinaria può essere utile e migliorare le prestazioni generali del sistema quando si è appena rilasciata @@ -3167,12 +3172,12 @@ permette di identificare un insieme di processori. Il dato è normalmente una maschera binaria: nei casi più comuni potrebbe bastare un intero a 32 bit, in cui ogni bit corrisponde ad un processore, ma oggi esistono architetture in cui questo numero può non essere sufficiente, e per questo è stato creato -questo \itindex{tipo!opaco} tipo opaco e una interfaccia di gestione che +questo \index{tipo!opaco} tipo opaco e una interfaccia di gestione che permette di usare a basso livello un tipo di dato qualunque rendendosi indipendenti dal numero di bit e dalla loro disposizione. Per questo le funzioni richiedono anche che oltre all'insieme di processori si indichi anche -la dimensione dello stesso con l'argomento \param{setsize}, per il quale, -se non si usa l'allocazione dinamica che vedremo a breve, ed è in genere +la dimensione dello stesso con l'argomento \param{setsize}, per il quale, se +non si usa l'allocazione dinamica che vedremo a breve, ed è in genere sufficiente passare il valore \code{sizeof(cpu\_set\_t)}. L'interfaccia di gestione degli insiemi di processori, oltre alla definizione @@ -3842,7 +3847,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. Il comportamento di default prevede che per tutti i processi si applichi la politica generale di sistema definita nel file - \procfile{/proc/sys/vm/memory\_failure\_early\_kill}, ma specificando + \sysctlfile{vm/memory\_failure\_early\_kill}, ma specificando per \param{arg2} il valore \const{PR\_MCE\_KILL\_SET} è possibile impostare con il contenuto di \param{arg3} una politica specifica del processo chiamante. Si può tornare alla politica di default del sistema utilizzando @@ -3908,9 +3913,10 @@ indicare la unità di esecuzione generica messa a disposizione del kernel che Oltre a questo la funzione consente, ad uso delle nuove funzionalità di virtualizzazione dei processi, di creare nuovi \textit{namespace} per una serie di proprietà generali dei processi (come l'elenco dei PID, l'albero dei -file, i \textit{mount point}, la rete, ecc.), che consentono di creare gruppi -di processi che vivono in una sorta di spazio separato dagli altri, che -costituisce poi quello che viene chiamato un \textit{container}. +file, i \itindex{mount~point} \textit{mount point}, la rete, ecc.), che +consentono di creare gruppi di processi che vivono in una sorta di spazio +separato dagli altri, che costituisce poi quello che viene chiamato un +\textit{container}. La \textit{system call} richiede soltanto due argomenti: il primo, \param{flags}, consente di controllare le modalità di creazione del