-Gli stessi valori possono essere utilizzati anche quando si vuole eseguire
-l'impostazione di una priorità di I/O; in tal caso si deve usare la funzione
-\funcd{ioprio\_set}, il cui prototipo è:
-\begin{prototype}{linux/ioprio.h}
- {int ioprio\_set(int which, int who, int ioprio)}
-
- Imposta la priorità di I/O.
-
- \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di
- errore, nel qual caso \var{errno} può assumere i valori:
- \begin{errlist}
- \item[\errcode{EPERM}] non si hanno i privilegi per eseguire
- l'impostazione.
- \end{errlist}
- oltre a \errcode{EINVAL} e \errcode{ESRCH} con lo stesso significato di
- \func{ioprio\_get}. }
-\end{prototype}
-
-
-La funzione in caso di successo restituisce un intero positivo che esprime il
-valore della priorità di I/O, questo è composto di due parti, una che esprime
-la cosiddetta \textsl{classe} di scheduling, l'altro che esprime la priorità
-all'interno della classe stessa. Le classi previste dallo scheduler CFQ sono
-tre, identificate da altrettanti costanti, riportate in
-tab.~\ref{tab:IOsched_class}.
-
-\begin{table}[htb]
- \centering
- \footnotesize
- \begin{tabular}[c]{|l|l|}
- \hline
- \textbf{Classe} & \textbf{Significato} \\
- \hline
- \hline
- \const{IOPRIO\_CLASS\_RT} & Scheduling di I/O \textit{real time}.\\
- \const{IOPRIO\_CLASS\_BE} & Scheduling di I/O ordinario.\\
- \const{IOPRIO\_CLASS\_IDLE}& Scheduling di I/O di priorità minima.\\
- \hline
- \end{tabular}
- \caption{Costanti che identificano le classi di scheduling di I/O.}
- \label{tab:IOsched_class}
-\end{table}
-
-La tre classi ricalcano i concetti presenti anche nello scheduler della CPU;
-la classe di priorità più bassa è \const{IOPRIO\_CLASS\_IDLE}, i processi in
-questa classe riescono ad accedere a disco soltanto quando nessun altro
-processo richiede l'accesso; occorre pertanto usarla con molta attenzione,
-perché un processo in questa classe può venire completamente bloccato quando
-ci sono altri processi di priorità più alta che stanno accedendo al
-disco; in questa classe non esistono valori di priorità, tutti i processi
-hanno la stessa priorità, che è la minima possibile.
-
-La classe per le priorità ordinarie è \const{IOPRIO\_CLASS\_BE} (il nome sta
-per \textit{best-effort}) che è quella usata di default per tutti processi; in
-questo caso esistono delle priorità all'interno della classe che corrispondono
-all'assegnazione ad un processo di una maggiore banda passante nell'accesso a
-disco rispetto agli altri senza però che questo possa bloccare indefinitamente
-l'accesso agli altri; con un concetto simile a quello dei valori di
-\textit{nice} per le priorità di processore. In questo caso esistono però
-soltanto otto diverse priorità, indicate da un valore numerico fra 0 e
-7,\footnote{come per \textit{nice} anche in questo caso un valore più basso
- indica una priorità maggiore.} che sono assegnate ai singoli processi in
-maniera automatica a partire dal loro valore di \textit{nice}.\footnote{come
- riportato nella documentazione il valore della priorità viene calcolato con
- la formula: $\mathtt{prio}=(\mathtt{nice}+20)/5$.}
-
-Infine la classe di priorità \textit{real-time} \const{IOPRIO\_CLASS\_RT}
-ricalca le analoghe priorità di processore: un processo in questa classe ha
-sempre la precedenza nell'accesso a disco rispetto a tutti i processi di
-priorità inferiore, e pertanto è in grado di bloccare completamente gli
-altri. Anche in questo caso ci sono 8 priorità diverse con un valore numerico
-fra 0 e 7, con una priorità più elevata per valori inferiori.
-
-Per manipolare il valori delle priorità di I/O sono state approntate delle
-opportune macro, in grado di estrarre i valori di priorità e la classe dai
-valori restituiti da \func{ioprio\_get} e di creare da questi un opportuno
-valore da passare a \func{ioprio\_set}, che si sono riportate in
-tab.~\ref{tab:IOsched_class_macro}.
+In caso di successo \func{ioprio\_get} restituisce un intero positivo che
+esprime il valore della priorità di I/O, questo valore è una maschera binaria
+composta da due parti, una che esprime la \textsl{classe} di scheduling di I/O
+del processo, l'altra che esprime, quando la classe di scheduling lo prevede,
+la priorità del processo all'interno della classe stessa. Questo stesso
+formato viene utilizzato per indicare il valore della priorità da impostare
+con l'argomento \param{ioprio} di \func{ioprio\_set}.
+
+Per la gestione dei valori che esprimono le priorità di I/O sono state
+definite delle opportune macro di preprocessore, riportate in
+tab.~\ref{tab:IOsched_class_macro}. I valori delle priorità si ottengono o si
+impostano usando queste macro. Le prime due si usano con il valore restituito
+da \func{ioprio\_get} e per ottenere rispettivamente la classe di
+scheduling\footnote{restituita dalla macro con i valori di
+ tab.~\ref{tab:IOsched_class}.} e l'eventuale valore della priorità. La terza
+macro viene invece usata per creare un valore di priorità da usare come
+argomento di \func{ioprio\_set} per eseguire una impostazione.