31.05.2013 Views

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

Il sistema operativo Windows XP - Apogeo

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

privilegio di priorità aumentata di schedulazione possono muovere un processo in<br />

REALTIME_PRIORITY_CLASS; gli amministratori e gli utenti posseggono questo privilegio per<br />

default.<br />

7.3.2 Regola di schedulazione<br />

Quando un utente fa funzionare un programma interattivo, il <strong>sistema</strong> deve fornire delle prestazioni<br />

particolarmente buone per il processo. Per questo motivo, <strong>Windows</strong> <strong>XP</strong> ha una regola speciale di<br />

schedulazione per i processi nella NORMAL_PRIORITY_CLASS e <strong>Windows</strong> <strong>XP</strong> fa distinzione fra<br />

un processo ad alta priorità, che è attualmente selezionato sullo schermo, e processi a bassa priorità<br />

che non sono correntemente selezionati. Quando un processo si muove verso una priorità alta,<br />

<strong>Windows</strong> <strong>XP</strong> aumenta tipicamente il quantum di schedulazione di un qualche fattore, tipicamente<br />

3. (Questo fattore può essere cambiato tramite l'opzione di prestazione nella sezione di <strong>sistema</strong> del<br />

pannello di controllo.) Questo aumento dà al processo in primo piano tre volte il tempo di<br />

funzionamento prima che avvenga una pre-emption in un <strong>sistema</strong> time-sharing.<br />

7.3.3 Priorità dei thread<br />

Un thread incomincia con una priorità iniziale determinata dalla sua classe che può essere alterata<br />

dalla funzione SetThreadPriority. Questa funzione prende un argomento che specifica<br />

una priorità relativa alla priorità di base della propria classe:<br />

• THREAD_PRIORITY_LOWEST: base – 2<br />

• THREAD_PRIORITY_BELOW_NORMAL: base – 1<br />

• THREAD_PRIORITY_NORMAL: base + 0<br />

• THREAD_PRIORITY_ABOVE_NORMAL: base + 1<br />

• THREAD_PRIORITY_HIGHEST: base + 2<br />

Si usano altre due indicazioni per aggiustare la priorità. Si ricordi dal Paragrafo 3.2.1 di<br />

questo capitolo che il kernel ha due classi di priorità: 16 –31 per la classe in tempo reale e 0 –15<br />

per la classe a priorità variabile. THREAD_PRIORITY_IDLE pone la priorità a 16 per i thread in<br />

tempo reale ed a 1 per quelli a priorità variabile. THREAD_PRIORITY_TIME_CRITICAL pone<br />

la priorità a 31 per i thread in tempo reale ed a 15 per quelli a priorità variabile.<br />

Come abbiamo discusso nel Paragrafo 3.2.1 di questo capitolo, il kernel aggiusta<br />

dinamicamente la priorità di un thread a seconda che sia collegato all’I/O o alla CPU. Le API di<br />

Win32 forniscono un metodo per disabilitare questa regolazione, tramite le funzioni<br />

SetProcessPriorityBoost e SetThreadPriorityBoost.<br />

7.3.4 Sincronizzazione dei thread<br />

Un thread può essere creato in stato sospeso (suspended thread): quel thread non va in esecuzione<br />

finché un altro thread non lo rende eleggibile tramite la funzione ResumeThread; la funzione<br />

55

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!