X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=0277d64da17d27527486119d275d02d40daeae06;hp=583011a37ec06c76e11b00c7dea5cfa8f86c12d0;hb=d88ea986fbf6b84a802fd8a5665af4324a6c89b3;hpb=5a59e67204ff436dceb6a13ed39e876aea3945a8 diff --git a/prochand.tex b/prochand.tex index 583011a..0277d64 100644 --- a/prochand.tex +++ b/prochand.tex @@ -150,7 +150,7 @@ interrupt,\footnote{pi parte.} (ma può essere anche attivato esplicitamente). Il timer di sistema provvede comunque a che esso sia invocato periodicamente, generando un interrupt periodico secondo la frequenza specificata dalla costante -\macro{HZ}, definita in \file{asm/param.h}, ed il cui valore è espresso in +\const{HZ}, definita in \file{asm/param.h}, ed il cui valore è espresso in Hertz.\footnote{Il valore usuale di questa costante è 100, per tutte le architetture eccetto l'alpha, per la quale è 1000. Occorre fare attenzione a non confondere questo valore con quello dei clock tick (vedi @@ -236,7 +236,7 @@ un nuovo processo viene creato, fino ad un limite che, essendo il \acr{pid} un numero positivo memorizzato in un intero a 16 bit, arriva ad un massimo di 32768. Oltre questo valore l'assegnazione riparte dal numero più basso disponibile a partire da un minimo di 300,\footnote{questi valori, fino al - kernel 2.4.x, sono definiti dalla macro \macro{PID\_MAX} in \file{threads.h} + kernel 2.4.x, sono definiti dalla macro \const{PID\_MAX} in \file{threads.h} e direttamente in \file{fork.c}, con il kernel 2.5.x e la nuova interfaccia per i thread creata da Ingo Molnar anche il meccanismo di allocazione dei \acr{pid} è stato modificato.} che serve a riservare i \acr{pid} più bassi @@ -300,10 +300,10 @@ prototipo della funzione zero al figlio; ritorna -1 al padre (senza creare il figlio) in caso di errore; \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EAGAIN}] non ci sono risorse sufficienti per creare un'altro + \item[\errcode{EAGAIN}] non ci sono risorse sufficienti per creare un'altro processo (per allocare la tabella delle pagine e le strutture del task) o si è esaurito il numero di processi disponibili. - \item[\macro{ENOMEM}] non è stato possibile allocare la memoria per le + \item[\errcode{ENOMEM}] non è stato possibile allocare la memoria per le strutture necessarie al kernel per creare il nuovo processo. \end{errlist}} \end{functions} @@ -696,7 +696,7 @@ modalit chiamare la funzione \func{abort} per invocare una chiusura anomala, o essere terminato da un segnale. In realtà anche la prima modalità si riconduce alla seconda, dato che \func{abort} si limita a generare il segnale -\macro{SIGABRT}. +\const{SIGABRT}. Qualunque sia la modalità di conclusione di un processo, il kernel esegue comunque una serie di operazioni: chiude tutti i file aperti, rilascia la @@ -707,15 +707,15 @@ eseguite alla chiusura di un processo \item viene memorizzato lo stato di terminazione del processo. \item ad ogni processo figlio viene assegnato un nuovo padre (in genere \cmd{init}). -\item viene inviato il segnale \macro{SIGCHLD} al processo padre (vedi +\item viene inviato il segnale \const{SIGCHLD} al processo padre (vedi \secref{sec:sig_sigchld}). \item se il processo è un leader di sessione ed il suo terminale di controllo - è quello della sessione viene mandato un segnale di \macro{SIGHUP} a tutti i + è quello della sessione viene mandato un segnale di \const{SIGHUP} a tutti i processi del gruppo di foreground e il terminale di controllo viene disconnesso (vedi \secref{sec:sess_ctrl_term}). \item se la conclusione di un processo rende orfano un \textit{process group} ciascun membro del gruppo viene bloccato, e poi gli vengono - inviati in successione i segnali \macro{SIGHUP} e \macro{SIGCONT} + inviati in successione i segnali \const{SIGHUP} e \const{SIGCONT} (vedi ancora \secref{sec:sess_ctrl_term}). \end{itemize*} @@ -869,7 +869,7 @@ segnale termina il processo o chiama una funzione di gestione. \bodydesc{La funzione restituisce il \acr{pid} del figlio in caso di successo e -1 in caso di errore; \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EINTR}] la funzione è stata interrotta da un segnale. + \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale. \end{errlist}} \end{functions} \noindent @@ -903,19 +903,19 @@ funzione, il cui prototipo Attende la conclusione di un processo figlio. \bodydesc{La funzione restituisce il \acr{pid} del processo che è uscito, 0 se - è stata specificata l'opzione \macro{WNOHANG} e il processo non è uscito e + è stata specificata l'opzione \const{WNOHANG} e il processo non è uscito e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EINTR}] se non è stata specificata l'opzione \macro{WNOHANG} e + \item[\errcode{EINTR}] se non è stata specificata l'opzione \const{WNOHANG} e la funzione è stata interrotta da un segnale. - \item[\macro{ECHILD}] il processo specificato da \param{pid} non esiste o + \item[\errcode{ECHILD}] il processo specificato da \param{pid} non esiste o non è figlio del processo chiamante. \end{errlist}} \end{functions} Le differenze principali fra le due funzioni sono che \func{wait} si blocca sempre fino a che un processo figlio non termina, mentre \func{waitpid} ha la -possibilità si specificare un'opzione \macro{WNOHANG} che ne previene il +possibilità si specificare un'opzione \const{WNOHANG} che ne previene il blocco; inoltre \func{waitpid} può specificare quale processo attendere sulla base del valore fornito dall'argomento \param{pid}, secondo lo specchietto riportato in \tabref{tab:proc_waidpid_pid}: @@ -930,9 +930,9 @@ specchietto riportato in \tabref{tab:proc_waidpid_pid}: $<-1$& -- & attende per un figlio il cui \textit{process group} (vedi \secref{sec:sess_proc_group}) è uguale al valore assoluto di \var{pid}. \\ - $-1$ & \macro{WAIT\_ANY} & attende per un figlio qualsiasi, usata in + $-1$ & \const{WAIT\_ANY} & attende per un figlio qualsiasi, usata in questa maniera è equivalente a \func{wait}.\\ - $0$ & \macro{WAIT\_MYPGRP} & attende per un figlio il cui \textit{process + $0$ & \const{WAIT\_MYPGRP} & attende per un figlio il cui \textit{process group} è uguale a quello del processo chiamante. \\ $>0$ & -- &attende per un figlio il cui \acr{pid} è uguale al valore di \var{pid}.\\ @@ -945,8 +945,8 @@ specchietto riportato in \tabref{tab:proc_waidpid_pid}: Il comportamento di \func{waitpid} può inoltre essere modificato passando delle opportune opzioni tramite l'argomento \param{option}. I valori possibili -sono il già citato \macro{WNOHANG}, che previene il blocco della funzione -quando il processo figlio non è terminato, e \macro{WUNTRACED}. Quest'ultimo +sono il già citato \const{WNOHANG}, che previene il blocco della funzione +quando il processo figlio non è terminato, e \const{WUNTRACED}. Quest'ultimo viene generalmente usato per il controllo di sessione, (trattato in \secref{sec:sess_job_control}) in quanto permette di identificare i processi bloccati. La funzione infatti in tal caso ritorna, restituendone il \acr{pid}, @@ -961,7 +961,7 @@ La terminazione di un processo figlio rispetto all'esecuzione di un programma e può avvenire in un qualunque momento. Per questo motivo, come accennato nella sezione precedente, una delle azioni prese dal kernel alla conclusione di un processo è quella di mandare un -segnale di \macro{SIGCHLD} al padre. L'azione predefinita (si veda +segnale di \const{SIGCHLD} al padre. L'azione predefinita (si veda \secref{sec:sig_base}) per questo segnale è di essere ignorato, ma la sua generazione costituisce il meccanismo di comunicazione asincrona con cui il kernel avverte il processo padre che uno dei suoi figli è terminato. @@ -971,7 +971,7 @@ conclusione di un processo per proseguire, specie se tutto questo serve solo per leggerne lo stato di chiusura (ed evitare la presenza di \textit{zombie}), per questo la modalità più usata per chiamare queste funzioni è quella di utilizzarle all'interno di un \textit{signal handler} (vedremo un esempio di -come gestire \macro{SIGCHLD} con i segnali in \secref{sec:sig_example}). In +come gestire \const{SIGCHLD} con i segnali in \secref{sec:sig_example}). In questo caso infatti, dato che il segnale è generato dalla terminazione di un figlio, avremo la certezza che la chiamata a \func{wait} non si bloccherà. @@ -1090,26 +1090,26 @@ famiglia di funzioni) che possono essere usate per questo compito, in realt \bodydesc{La funzione ritorna solo in caso di errore, restituendo -1; nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EACCES}] il file non è eseguibile, oppure il filesystem è + \item[\errcode{EACCES}] il file non è eseguibile, oppure il filesystem è montato in \cmd{noexec}, oppure non è un file regolare o un interprete. - \item[\macro{EPERM}] il file ha i bit \acr{suid} o \acr{sgid}, l'utente non + \item[\errcode{EPERM}] il file ha i bit \acr{suid} o \acr{sgid}, l'utente non è root, e o il processo viene tracciato, o il filesystem è montato con l'opzione \cmd{nosuid}. - \item[\macro{ENOEXEC}] il file è in un formato non eseguibile o non + \item[\errcode{ENOEXEC}] il file è in un formato non eseguibile o non riconosciuto come tale, o compilato per un'altra architettura. - \item[\macro{ENOENT}] il file o una delle librerie dinamiche o l'interprete + \item[\errcode{ENOENT}] il file o una delle librerie dinamiche o l'interprete necessari per eseguirlo non esistono. - \item[\macro{ETXTBSY}] L'eseguibile è aperto in scrittura da uno o più + \item[\errcode{ETXTBSY}] L'eseguibile è aperto in scrittura da uno o più processi. - \item[\macro{EINVAL}] L'eseguibile ELF ha più di un segmento - \macro{PF\_INTERP}, cioè chiede di essere eseguito da più di un + \item[\errcode{EINVAL}] L'eseguibile ELF ha più di un segmento + \const{PF\_INTERP}, cioè chiede di essere eseguito da più di un interprete. - \item[\macro{ELIBBAD}] Un interprete ELF non è in un formato + \item[\errcode{ELIBBAD}] Un interprete ELF non è in un formato riconoscibile. \end{errlist} - ed inoltre anche \macro{EFAULT}, \macro{ENOMEM}, \macro{EIO}, - \macro{ENAMETOOLONG}, \macro{E2BIG}, \macro{ELOOP}, \macro{ENOTDIR}, - \macro{ENFILE}, \macro{EMFILE}.} + ed inoltre anche \const{EFAULT}, \const{ENOMEM}, \const{EIO}, + \const{ENAMETOOLONG}, \const{E2BIG}, \const{ELOOP}, \const{ENOTDIR}, + \const{ENFILE}, \const{EMFILE}.} \end{prototype} La funzione \func{exec} esegue il file o lo script indicato da @@ -1199,10 +1199,10 @@ viene eseguita automaticamente una ricerca fra i file presenti nella lista di directory specificate dalla variabile di ambiente \var{PATH}. Il file che viene posto in esecuzione è il primo che viene trovato. Se si ha un errore relativo a permessi di accesso insufficienti (cioè l'esecuzione della -sottostante \func{execve} ritorna un \macro{EACCESS}), la ricerca viene +sottostante \func{execve} ritorna un \errcode{EACCESS}), la ricerca viene proseguita nelle eventuali ulteriori directory indicate in \var{PATH}; solo se non viene trovato nessun altro file viene finalmente restituito -\macro{EACCESS}. +\errcode{EACCESS}. Le altre quattro funzioni si limitano invece a cercare di eseguire il file indicato dal parametro \var{path}, che viene interpretato come il @@ -1218,7 +1218,7 @@ indicato dal parametro \var{path}, che viene interpretato come il La terza differenza è come viene passata la lista delle variabili di ambiente. Con lo mnemonico \code{e} vengono indicate quelle funzioni che necessitano di un vettore di parametri \var{envp[]} analogo a quello usato per gli argomenti -a riga di comando (terminato quindi da un \macro{NULL}), le altre usano il +a riga di comando (terminato quindi da un \val{NULL}), le altre usano il valore della variabile \var{environ} (vedi \secref{sec:proc_environ}) del processo di partenza per costruire l'ambiente. @@ -1249,8 +1249,8 @@ la lista completa Inoltre i segnali che sono stati impostati per essere ignorati nel processo chiamante mantengono la stessa impostazione pure nel nuovo programma, tutti gli altri segnali vengono impostati alla loro azione predefinita. Un caso -speciale è il segnale \macro{SIGCHLD} che, quando impostato a -\macro{SIG\_IGN}, può anche non essere reimpostato a \macro{SIG\_DFL} (si veda +speciale è il segnale \const{SIGCHLD} che, quando impostato a +\const{SIG\_IGN}, può anche non essere reimpostato a \const{SIG\_DFL} (si veda \secref{sec:sig_gen_beha}). La gestione dei file aperti dipende dal valore che ha il flag di @@ -1280,7 +1280,7 @@ Se il file da eseguire condivise, viene lanciato il \textit{linker} dinamico \cmd{ld.so} prima del programma per caricare le librerie necessarie ed effettuare il link dell'eseguibile. Se il programma è in formato ELF per caricare le librerie -dinamiche viene usato l'interprete indicato nel segmento \macro{PT\_INTERP}, +dinamiche viene usato l'interprete indicato nel segmento \const{PT\_INTERP}, in genere questo è \file{/lib/ld-linux.so.1} per programmi linkati con le \acr{libc5}, e \file{/lib/ld-linux.so.2} per programmi linkati con le \acr{glibc}. Infine nel caso il file sia uno script esso deve iniziare con @@ -1492,7 +1492,7 @@ corrente. corrente. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso - di fallimento: l'unico errore possibile è \macro{EPERM}.} + di fallimento: l'unico errore possibile è \const{EPERM}.} \end{functions} Il funzionamento di queste due funzioni è analogo, per cui considereremo solo @@ -1507,7 +1507,7 @@ sistema) allora tutti gli identificatori (\textit{real}, \textit{effective} e altrimenti viene impostato solo l'\textsl{userid effettivo}, e soltanto se il valore specificato corrisponde o all'\textsl{userid reale} o all'\textsl{userid salvato}. Negli altri casi viene segnalato un errore (con -\macro{EPERM}). +\errcode{EPERM}). Come accennato l'uso principale di queste funzioni è quello di poter consentire ad un programma con i bit \acr{suid} o \acr{sgid} impostati (vedi @@ -1592,7 +1592,7 @@ specificati da \var{ruid} e \var{euid}. specificati da \var{rgid} e \var{egid}. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso - di fallimento: l'unico errore possibile è \macro{EPERM}.} + di fallimento: l'unico errore possibile è \const{EPERM}.} \end{functions} La due funzioni sono analoghe ed il loro comportamento è identico; quanto @@ -1644,7 +1644,7 @@ corrente a \var{uid}. corrente a \var{gid}. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso - di fallimento: l'unico errore possibile è \macro{EPERM}.} + di fallimento: l'unico errore possibile è \const{EPERM}.} \end{functions} Come per le precedenti le due funzioni sono identiche, per cui tratteremo solo @@ -1675,7 +1675,7 @@ corrente ai valori specificati rispettivamente da \var{rgid}, \var{egid} e \var{sgid}. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso - di fallimento: l'unico errore possibile è \macro{EPERM}.} + di fallimento: l'unico errore possibile è \const{EPERM}.} \end{functions} Le due funzioni sono identiche, quanto detto per la prima riguardo gli userid @@ -1700,7 +1700,7 @@ groupid reale, il groupid effettivo e il groupid salvato del processo corrente. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso di - fallimento: l'unico errore possibile è \macro{EFAULT} se gli indirizzi delle + fallimento: l'unico errore possibile è \const{EFAULT} se gli indirizzi delle variabili di ritorno non sono validi.} \end{functions} @@ -1747,7 +1747,7 @@ processo corrente a \var{fsuid}. processo corrente a \var{fsgid}. \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso - di fallimento: l'unico errore possibile è \macro{EPERM}.} + di fallimento: l'unico errore possibile è \const{EPERM}.} \end{functions} \noindent queste funzioni hanno successo solo se il processo chiamante ha i privilegi di amministratore o, per gli altri utenti, se il valore specificato @@ -1759,7 +1759,7 @@ coincide con uno dei di quelli del gruppo \textit{real}, \textit{effective} o \label{sec:proc_setgroups} Le ultime funzioni che esamineremo sono quelle che permettono di operare sui -gruppi supplementari. Ogni processo può avere fino a \macro{NGROUPS\_MAX} +gruppi supplementari. Ogni processo può avere fino a \const{NGROUPS\_MAX} gruppi supplementari in aggiunta al gruppo primario, questi vengono ereditati dal processo padre e possono essere cambiati con queste funzioni. @@ -1777,8 +1777,8 @@ questa funzione successo e -1 in caso di fallimento, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EFAULT}] \param{list} non ha un indirizzo valido. - \item[\macro{EINVAL}] il valore di \param{size} è diverso da zero ma + \item[\errcode{EFAULT}] \param{list} non ha un indirizzo valido. + \item[\errcode{EINVAL}] il valore di \param{size} è diverso da zero ma minore del numero di gruppi supplementari del processo. \end{errlist}} \end{functions} @@ -1818,10 +1818,10 @@ delle due \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di fallimento, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item[\macro{EFAULT}] \param{list} non ha un indirizzo valido. - \item[\macro{EPERM}] il processo non ha i privilegi di amministratore. - \item[\macro{EINVAL}] il valore di \param{size} è maggiore del valore - massimo (\macro{NGROUPS}, che per Linux è 32). + \item[\errcode{EFAULT}] \param{list} non ha un indirizzo valido. + \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore. + \item[\errcode{EINVAL}] il valore di \param{size} è maggiore del valore + massimo (\const{NGROUPS}, che per Linux è 32). \end{errlist}} \end{functions} @@ -1837,7 +1837,7 @@ un utente specifico, si pu \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di fallimento, nel qual caso \var{errno} assumerà gli stessi valori di - \func{setgroups} più \macro{ENOMEM} quando non c'è memoria sufficiente per + \func{setgroups} più \const{ENOMEM} quando non c'è memoria sufficiente per allocare lo spazio per informazioni dei gruppi.} \end{functions} @@ -1921,7 +1921,7 @@ fintanto che esso si trova in uno qualunque degli altri stati. attesa di un risposta dal sistema (in genere per I/O), e non può essere interrotto in nessuna circostanza. \\ \textbf{Stopped} & \texttt{T} & Il processo è stato fermato con un - \macro{SIGSTOP}, o è tracciato.\\ + \const{SIGSTOP}, o è tracciato.\\ \textbf{Zombie} & \texttt{Z} & Il processo è terminato ma il suo stato di terminazione non è ancora stato letto dal padre. \\ \hline @@ -2032,14 +2032,14 @@ solo attraverso la funzione \func{nice}, il cui prototipo \bodydesc{La funzione ritorna zero in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EPERM}] un processo senza i privilegi di amministratore ha + \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha specificato un valore di \param{inc} negativo. \end{errlist}} \end{prototype} L'argomento \param{inc} indica l'incremento del valore di \var{nice}: -quest'ultimo può assumere valori compresi fra \macro{PRIO\_MIN} e -\macro{PRIO\_MAX} (che nel caso di Linux sono $-19$ e $20$), ma per +quest'ultimo può assumere valori compresi fra \const{PRIO\_MIN} e +\const{PRIO\_MAX} (che nel caso di Linux sono $-19$ e $20$), ma per \param{inc} si può specificare un valore qualunque, positivo o negativo, ed il sistema provvederà a troncare il risultato nell'intervallo consentito. Valori positivi comportano maggiore \textit{cortesia} e cioè una diminuzione della @@ -2058,9 +2058,9 @@ Restituisce il valore di \var{nice} per l'insieme dei processi specificati. \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{ESRCH}] non c'è nessun processo che corrisponda ai valori di + \item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di \param{which} e \param{who}. - \item[\macro{EINVAL}] il valore di \param{which} non è valido. + \item[\errcode{EINVAL}] il valore di \param{which} non è valido. \end{errlist}} \end{prototype} \noindent (in vecchie versioni può essere necessario includere anche @@ -2081,9 +2081,9 @@ quest'ultimo indica il processo, il gruppo di processi o l'utente correnti. \param{which} & \param{who} & \textbf{Significato} \\ \hline \hline - \macro{PRIO\_PROCESS} & \type{pid\_t} & processo \\ - \macro{PRIO\_PRGR} & \type{pid\_t} & process group \\ - \macro{PRIO\_USER} & \type{uid\_t} & utente \\ + \const{PRIO\_PROCESS} & \type{pid\_t} & processo \\ + \const{PRIO\_PRGR} & \type{pid\_t} & process group \\ + \const{PRIO\_USER} & \type{uid\_t} & utente \\ \hline \end{tabular} \caption{Legenda del valore dell'argomento \param{which} e del tipo @@ -2107,12 +2107,12 @@ impostare la priorit \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{ESRCH}] non c'è nessun processo che corrisponda ai valori di + \item[\errcode{ESRCH}] non c'è nessun processo che corrisponda ai valori di \param{which} e \param{who}. - \item[\macro{EINVAL}] il valore di \param{which} non è valido. - \item[\macro{EPERM}] un processo senza i privilegi di amministratore ha + \item[\errcode{EINVAL}] il valore di \param{which} non è valido. + \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha specificato un valore di \param{inc} negativo. - \item[\macro{EACCESS}] un processo senza i privilegi di amministratore ha + \item[\errcode{EACCESS}] un processo senza i privilegi di amministratore ha cercato di modificare la priorità di un processo di un altro utente. \end{errlist}} \end{prototype} @@ -2185,12 +2185,12 @@ prototipo \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{ESRCH}] il processo \param{pid} non esiste. - \item[\macro{EINVAL}] il valore di \param{policy} non esiste o il relativo + \item[\errcode{ESRCH}] il processo \param{pid} non esiste. + \item[\errcode{EINVAL}] il valore di \param{policy} non esiste o il relativo valore di \param{p} non è valido. - \item[\macro{EPERM}] il processo non ha i privilegi per attivare la - politica richiesta (vale solo per \macro{SCHED\_FIFO} e - \macro{SCHED\_RR}). + \item[\errcode{EPERM}] il processo non ha i privilegi per attivare la + politica richiesta (vale solo per \const{SCHED\_FIFO} e + \const{SCHED\_RR}). \end{errlist}} \end{prototype} @@ -2210,10 +2210,10 @@ la politica di scheduling corrente. \textbf{Policy} & \textbf{Significato} \\ \hline \hline - \macro{SCHED\_FIFO} & Scheduling real-time con politica \textit{FIFO} \\ - \macro{SCHED\_RR} & Scheduling real-time con politica \textit{Round + \const{SCHED\_FIFO} & Scheduling real-time con politica \textit{FIFO} \\ + \const{SCHED\_RR} & Scheduling real-time con politica \textit{Round Robin} \\ - \macro{SCHED\_OTHER}& Scheduling ordinario\\ + \const{SCHED\_OTHER}& Scheduling ordinario\\ \hline \end{tabular} \caption{Valori dell'argomento \param{policy} per la funzione @@ -2261,13 +2261,13 @@ e \func{sched\_get\_priority\_min}, i cui prototipi sono: \bodydesc{La funzioni ritornano il valore della priorità in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{EINVAL}] il valore di \param{policy} è invalido. + \item[\errcode{EINVAL}] il valore di \param{policy} è invalido. \end{errlist}} \end{functions} -I processi con politica di scheduling \macro{SCHED\_OTHER} devono specificare -un valore nullo (altrimenti si avrà un errore \macro{EINVAL}), questo valore +I processi con politica di scheduling \const{SCHED\_OTHER} devono specificare +un valore nullo (altrimenti si avrà un errore \errcode{EINVAL}), questo valore infatti non ha niente a che vedere con la priorità dinamica determinata dal valore di \var{nice}, che deve essere impostato con le funzioni viste in precedenza. @@ -2275,7 +2275,7 @@ precedenza. Il kernel mantiene i processi con la stessa priorità assoluta in una lista, ed esegue sempre il primo della lista, mentre un nuovo processo che torna in stato \textit{runnable} viene sempre inserito in coda alla lista. Se la -politica scelta è \macro{SCHED\_FIFO} quando il processo viene eseguito viene +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 \textit{runnable} @@ -2291,8 +2291,8 @@ La priorit \bodydesc{La funzione ritorna la politica di scheduling in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{ESRCH}] il processo \param{pid} non esiste. - \item[\macro{EINVAL}] il valore di \param{pid} è negativo. + \item[\errcode{ESRCH}] il processo \param{pid} non esiste. + \item[\errcode{EINVAL}] il valore di \param{pid} è negativo. \end{errlist}} \end{prototype} @@ -2318,8 +2318,8 @@ prototipi sono: \bodydesc{La funzione ritorna la priorità in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{ESRCH}] il processo \param{pid} non esiste. - \item[\macro{EINVAL}] il valore di \param{pid} è negativo. + \item[\errcode{ESRCH}] il processo \param{pid} non esiste. + \item[\errcode{EINVAL}] il valore di \param{pid} è negativo. \end{errlist}} \end{functions} @@ -2328,7 +2328,7 @@ L'uso di \func{sched\_setparam} che \func{sched\_setscheduler} specificando 0 come valore di \param{pid} si opera sul processo corrente. La disponibilità di entrambe le funzioni può essere verificata controllando la macro \macro{\_POSIX\_PRIORITY\_SCHEDULING} che è -definita nell'header \macro{sched.h}. +definita nell'header \file{sched.h}. L'ultima funzione che permette di leggere le informazioni relative ai processi real-time è \func{sched\_rr\_get\_interval}, che permette di ottenere la @@ -2341,8 +2341,8 @@ il suo prototipo \bodydesc{La funzione ritorna 0in caso di successo e -1 in caso di errore, nel qual caso \var{errno} può assumere i valori: \begin{errlist} - \item[\macro{ESRCH}] il processo \param{pid} non esiste. - \item[\macro{ENOSYS}] la system call non è stata implementata. + \item[\errcode{ESRCH}] il processo \param{pid} non esiste. + \item[\errcode{ENOSYS}] la system call non è stata implementata. \end{errlist}} \end{prototype}