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 \struct{task\_struct} (che in
+delle principali informazioni contenute nella \texttt{task\_struct} (che in
seguito incontreremo a più riprese), è mostrato in
fig.~\ref{fig:proc_task_struct}.
\begin{figure}[!htb]
\centering \includegraphics[width=14cm]{img/task_struct}
- \caption{Schema semplificato dell'architettura delle strutture usate dal
- kernel nella gestione dei processi.}
+ \caption{Schema semplificato dell'architettura delle strutture (
+ \kstructd{task\_struct}, \kstructd{fs\_struct}, \kstructd{file\_struct})
+ usate dal kernel nella gestione dei processi.}
\label{fig:proc_task_struct}
\end{figure}
nell'argomento \param{which}, di leggere il valore di \textit{nice} di un
processo, di un gruppo di processi (vedi sez.~\ref{sec:sess_proc_group}) o di
un utente indicato dall'argomento \param{who}. Nelle vecchie versioni può
-essere necessario includere anche \headfile{sys/time.h}, questo non è più
+essere necessario includere anche \headfiled{sys/time.h}, questo non è più
necessario con versioni recenti delle librerie, ma è comunque utile per
portabilità.
che per i primi la priorità statica può essere soltanto nulla. La
disponibilità di entrambe le funzioni può essere verificata controllando la
macro \macrod{\_POSIX\_PRIORITY\_SCHEDULING} che è definita
-nell'\textit{header file} \headfile{sched.h}.
+nell'\textit{header file} \headfiled{sched.h}.
Se invece si vuole sapere quale è politica di \textit{scheduling} di un
processo si può usare la funzione di sistema \funcd{sched\_getscheduler}, il
Dato che il numero di processori può variare a seconda delle architetture, per
semplificare l'uso dell'argomento \param{mask} la \acr{glibc} ha introdotto un
-apposito dato di tipo, \type{cpu\_set\_t},\footnote{questa è una estensione
+apposito dato di tipo, \typed{cpu\_set\_t},\footnote{questa è una estensione
specifica della \acr{glibc}, da attivare definendo la macro
\macro{\_GNU\_SOURCE}, non esiste infatti una standardizzazione per questo
tipo di interfaccia e POSIX al momento non prevede nulla al riguardo.} che
\fdecl{void \macrod{CPU\_ZERO}(cpu\_set\_t *set)}
\fdesc{Inizializza un insieme di processori vuoto \param{set}.}
\fdecl{void \macrod{CPU\_SET}(int cpu, cpu\_set\_t *set)}
-\fdesc{Inserisce il processore \param{cpu} nell'insieme di processori \param{set}.}
+\fdesc{Inserisce il processore \param{cpu} nell'insieme di
+ processori \param{set}.}
\fdecl{void \macrod{CPU\_CLR}(int cpu, cpu\_set\_t *set)}
-\fdesc{Rimuove il processore \param{cpu} nell'insieme di processori \param{set}.}
+\fdesc{Rimuove il processore \param{cpu} nell'insieme di
+ processori \param{set}.}
\fdecl{int \macrod{CPU\_ISSET}(int cpu, cpu\_set\_t *set)}
-\fdesc{Controlla se il processore \param{cpu} è nell'insieme di processori \param{set}.}
+\fdesc{Controlla se il processore \param{cpu} è nell'insieme di
+ processori \param{set}.}
}
\end{funcbox}}
\item[\errcode{EINVAL}] si è usata una combinazione non valida di flag o
un valore nullo per \param{child\_stack}.
\item[\errcode{ENOMEM}] non c'è memoria sufficiente per creare una nuova
- \struct{task\_struct} o per copiare le parti del contesto del chiamante
+ \texttt{task\_struct} o per copiare le parti del contesto del chiamante
necessarie al nuovo \textit{task}.
\item[\errcode{EPERM}] non si hanno i privilegi di amministratore
richiesti dai flag indicati.
condition} (vedi sez.~\ref{sec:proc_race_cond}) deve essere sempre
verificata nei minimi dettagli.
-In questo caso il sistema provvede un tipo di dato, il \type{sig\_atomic\_t},
+In questo caso il sistema provvede un tipo di dato, il \typed{sig\_atomic\_t},
il cui accesso è assicurato essere atomico. In pratica comunque si può
assumere che, in ogni piattaforma su cui è implementato Linux, il tipo
\ctyp{int}, gli altri interi di dimensione inferiore ed i puntatori sono