From: Simone Piccardi Date: Mon, 15 Apr 2002 17:32:54 +0000 (+0000) Subject: Aggiunte un po' di funzioni ausiliarie, quasi a fine dello scheduler. X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=95a49e0abb9c7673680ea4e01b87529b21de34f4;p=gapil.git Aggiunte un po' di funzioni ausiliarie, quasi a fine dello scheduler. --- diff --git a/prochand.tex b/prochand.tex index 54a2e17..770eebf 100644 --- a/prochand.tex +++ b/prochand.tex @@ -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}