Aggiunte un po' di funzioni ausiliarie, quasi a fine dello scheduler.
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 15 Apr 2002 17:32:54 +0000 (17:32 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 15 Apr 2002 17:32:54 +0000 (17:32 +0000)
prochand.tex

index 54a2e173c141e269ecc8fbc6dadd1b7261816a29..770eebf86c4b5bfc215a98511160c75d249a2ed4 100644 (file)
@@ -2164,7 +2164,9 @@ La funzione esegue il settaggio per il processo specificato; un valore nullo
 di \param{pid} esegue il settaggio per il processo corrente, solo un processo
 con i privilegi di amministratore può settare delle priorità assolute diverse
 da zero. La politica di scheduling è specificata dall'argomento \param{policy}
-i cui possibili valori sono riportati in \tabref{tab:proc_sched_policy}.
+i cui possibili valori sono riportati in \tabref{tab:proc_sched_policy}; un
+valore negativo per \param{policy} mantiene la politica di scheduling
+corrente.
 
 \begin{table}[htb]
   \centering
@@ -2185,23 +2187,44 @@ i cui possibili valori sono riportati in \tabref{tab:proc_sched_policy}.
   \label{tab:proc_sched_policy}
 \end{table}
 
-Il valore della priorità è passato attraverso la struttura \var{sched\_param},
-riportata in \figref{fig:sig_sched_param}. Il solo campo che serve è
-\var{sched\_priority} che nel caso delle priorità assolute deve essere
-specificato nell'intervallo fra 1 e 99 (il valore zero è legale, ma indica i
-processi normali). I processi con politica di scheduling \macro{SCHED\_OTHER}
-devono specificare un valore nullo (altrimenti si avrà un errore
-\macro{EINVAL}), questo valore infatti non ha niente a che vedere con la
-priorità dinamica determinata dal valore di \var{nice}.
+Il valore della priorità è passato attraverso la struttura \var{sched\_param}
+(riportata in \figref{fig:sig_sched_param}), il cui solo campo attualmente
+definito è \var{sched\_priority}, che nel caso delle priorità assolute deve
+essere specificato nell'intervallo fra 1 e 99 (il valore zero è legale, ma
+indica i processi normali). Lo standard POSIX.1b prevede comunque che questi
+due valori possano essere ottenuti per ciascuna politica di scheduling dalle
+funzioni \func{sched\_get\_priority\_max} e \func{sched\_get\_priority\_min},
+i cui prototipi sono:
+\begin{functions}
+  \headdecl{sched.h}
+  
+  \funcdecl{int sched\_get\_priority\_max(int policy)} Legge il valore
+  massimo della priorità statica per la politica di scheduling \param{policy}.
+
+  
+  \funcdecl{int sched\_get\_priority\_min(int policy)} Legge il valore minimo
+  della priorità statica per la politica di scheduling \param{policy}.
+  
+  \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.
+  \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
+infatti non ha niente a che vedere con la priorità dinamica determinata dal
+valore di \var{nice}, che deve essere settato con le funzioni viste in
+precedenza.
 
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
     \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
 struct sched_param {
-    ...
     int sched_priority;
-    ...
 };
     \end{lstlisting}
   \end{minipage} 
@@ -2214,15 +2237,55 @@ Il kernel mantiene i processi con la stessa priorit
 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
-automaticamente rimesso in coda alla lista, ma la sua esecuzione continua e
-tolto dalla lista, la sua esecuzione 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} 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. 
+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}
+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.
+
+La priorità assoluta può essere riletta indietro dalla funzione
+\func{sched\_getscheduler}, il cui prototipo è:
+\begin{prototype}{sched.h}
+{int sched\_getscheduler(pid\_t pid)}
+  Legge la politica di scheduling per il processo \param{pid}.
+  
+  \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.
+  \end{errlist}}
+\end{prototype}
+
+La funzione restituisce il valore (secondo la quanto elencato in
+\tabref{tab:proc_sched_policy}) della politica di scheduling per il processo
+specificato; se \param{pid} è nullo viene restituito quello del processo
+chiamante.
+
+Se si intende operare solo sulla priorità assoluta di un processo si possono
+usare le funzioni \func{sched\_setparam} e \func{sched\_getparam}, i cui
+prototipi sono:
+  
+\begin{functions}
+  \headdecl{sched.h}
+
+  \funcdecl{int sched\_setparam(pid\_t pid, const struct sched\_param *p)}
+  Setta la priorità assoluta del processo \param{pid}.
 
 
+  \funcdecl{int sched\_getparam(pid\_t pid, struct sched\_param *p)}
+  Legge la priorità assoluta del processo \param{pid}.
+
+  \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.
+  \end{errlist}}
+\end{functions}
 
+L'uso di \func{sched\_setparam} che è del tutto equivalente a
+\func{sched\_setscheduler} con \param{priority} uguale a -1.
 
 
 \section{Problematiche di programmazione multitasking}