Finito (forse) con lo scheduling standard.
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 3 Apr 2002 17:40:24 +0000 (17:40 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 3 Apr 2002 17:40:24 +0000 (17:40 +0000)
prochand.tex

index 97e25c103b62dcd9e1f2f9ad7fcc10ca0d00f7a8..5daea9ee0b54c3c567d19fc27cfe403b8dc00da4 100644 (file)
@@ -1982,15 +1982,15 @@ valore di \var{counter} del processo corrente viene diminuito, questo assicura
 che anche i processi con priorità più bassa verranno messi in esecuzione.
 
 La priorità di un processo è così controllata attraverso il valore di
-\var{nice}, che stabilisce la durata della \textit{time-slice}; un valore più
-lungo infatti assicura una maggiore attribuzione di CPU.  L'origine di questo
-parametro sta nel fatto che in genere esso viene generalmente usato come per
-diminuire la priorità di un processo, come termine di cortesia (da cui il
-nome) nei confronti degli altri.
+\var{nice}, che stabilisce la durata della \textit{time-slice}; per il
+meccanismo appena descritto infatti un valore più lungo infatti assicura una
+maggiore attribuzione di CPU.  L'origine del nome di questo parametro sta nel
+fatto che in genere esso viene generalmente usato per diminuire la priorità di
+un processo, come misura di cortesia nei confronti degli altri.
 
 I processi infatti vengono creati dal sistema con lo stesso valore di
-\var{nice} (nullo) e nessuno è privilegiato; il valore può essere modificato
-solo attraverso la funzione \func{nice}, il cui prototipo è:
+\var{nice} (nullo) e nessuno è privilegiato rispetto agli altri; il valore può
+essere modificato solo attraverso la funzione \func{nice}, il cui prototipo è:
 \begin{prototype}{unistd.h}
 {int nice(int inc)}
   Aumenta il valore di \var{nice} per il processo corrente.
@@ -1998,23 +1998,23 @@ 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 utente normale ha specificato un valore di
-    \param{inc} negativo.
+  \item[\macro{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
+\macro{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
-priorità. Solo l'amministratore può specificare valori negativi che permettono
-di aumentare la priorità di un processo.
-
+priorità, ogni utente può solo innalzare il valore di un suo processo. Solo
+l'amministratore può specificare valori negativi che permettono di aumentare
+la priorità di un processo.
 
 In SUSv2 la funzione ritorna il nuovo valore di \var{nice}; Linux non segue
-questa convenzione, per leggere il nuovo valore di occorre invece usare la
+questa convenzione, e per leggere il nuovo valore occorre invece usare la
 funzione \func{getpriority}, derivata da BSD, il cui prototipo è:
 \begin{prototype}{sys/resource.h}
 {int getpriority(int which, int who)}
@@ -2026,18 +2026,81 @@ funzione \func{getpriority}, derivata da BSD, il cui prototipo 
   \begin{errlist}
   \item[\macro{ESRCH}] non c'è nessun processo che corrisponda ai valori di
   \param{which} e \param{who}.
-  \item[\macro{ESRCH}] il valore di \param{which} non è valido.
+  \item[\macro{EINVAL}] il valore di \param{which} non è valido.
   \end{errlist}}
 \end{prototype}
+\noindent (in vecchie versioni può essere necessario includere anche
+\file{<sys/time.h>}, questo non è più necessario con versioni recenti delle
+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.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|c|c|l|}
+    \hline
+    \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 \\
+    \hline
+  \end{tabular}
+  \caption{Legenda del valore dell'argomento \param{which} e del tipo
+    dell'argomento \param{who} delle funzioni \func{getpriority} e
+    \func{setpriority} per le tre possibili scelte.}
+  \label{tab:proc_getpriority}
+\end{table}
 
+La funzione restituisce la priorità più alta (cioè il valore più basso) fra
+quelle dei processi specificati; dato che -1 è un valore possibile, per poter
+rilevare una condizione di errore è necessario cancellare sempre \var{errno}
+prima della chiamata alla funzione, per verificare che essa resti uguale a
+zero.  
 
+Analoga a \func{getpriority} la funzione \func{setpriority} permette di
+settare la priorità di uno o più processi; il suo prototipo è:
+\begin{prototype}{sys/resource.h}
+{int setpriority(int which, int who, int prio)}
+  
+  Setta la priorità 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
+  \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
+    specificato un valore di \param{inc} negativo.
+  \item[\macro{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}
 
+La funzione setta la priorità al valore specificato da \param{prio} per tutti
+i processi indicati dagli argomenti \parm{which} e \param{who}.  La gestione
+dei permessi dipende dalle varie implementazioni; in Linux, secondo le
+specifiche dello standard SUSv3, e come per tutti i sistemi che derivano da
+SYSV, è richiesto che il real o l'effective user id del processo chiamante
+corrispondano al real user id (e solo quello) del processo di cui si vuole
+cambiare la prorità; per i sistemi derivati da BSD invece (SunOS, Ultrix,
+*BSD) la corrispondenza può essere anche con l'effective user id.
 
 
 \subsection{Il meccanismo di \textit{scheduling real-time}}
 \label{sec:proc_real_time}
 
-Per settare le 
+
+Come spiegato al paragrafo precedente di norma 
+
+Per settare le
 
 
 \footnote{a meno che non si siano installate le patch di RTLinux o RTAI, con i