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
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.
\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
\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}
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
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.
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
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
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
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