Il sistema operativo Windows XP - Apogeo
Il sistema operativo Windows XP - Apogeo
Il sistema operativo Windows XP - Apogeo
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
La schedulazione si presenta quando un thread entra nello stato pronto o di attesa oppure<br />
quando un thread termina, o se un'applicazione cambia la priorità del thread o l'affinità del<br />
processore. Se un thread, in tempo reale con priorità più alta, diviene pronto, mentre è in funzione<br />
un thread a priorità più bassa, quello a priorità più bassa viene interrotto e tale interruzione dà al thread<br />
un accesso preferenziale, in tempo reale, alla CPU, quando il thread ha bisogno di eseguire un tale<br />
accesso. <strong>Windows</strong> <strong>XP</strong> non è un <strong>sistema</strong> <strong>operativo</strong> hard real time, poiché non garantisce che un<br />
thread in tempo reale inizi l’esecuzione entro un particolare limite di tempo.<br />
3.2.3 Realizzazione delle primitive di sincronizzazione<br />
Le principali strutture dati del <strong>sistema</strong> <strong>operativo</strong> sono gestite come oggetti che usano funzionalità<br />
comuni per l’allocazione, il conteggio dei riferimenti e la sicurezza. Gli oggetti del dispatcher<br />
(dispatcher object) controllano l’invio e la sincronizzazione nel <strong>sistema</strong>; esempi di questi oggetti<br />
sono gli eventi, i mutanti, i mutex, i semafori, i processi, i thread ed i temporizzatori. L'evento<br />
oggetto (event object) viene usato per registrare il verificarsi di un evento e per sincronizzare questo<br />
ultimo con una qualche azione. Gli eventi di notifica segnalano tutti i thread in attesa, mentre gli<br />
eventi di sincronizzazione segnalano un singolo thread in attesa. <strong>Il</strong> mutante (mutant) fornisce la mutua<br />
esclusione in modalità kernel o utente con la nozione di proprietà. <strong>Il</strong> mutex, disponibile soltanto in<br />
modalità kernel, fornisce mutua esclusione senza stalli. Un oggetto semaforo (semaphore object)<br />
opera come un contatore o porta (gate) per controllare il numero di thread che accedono alla risorsa.<br />
L'oggetto thread (thread object) è l'entità che è schedulata dal dispatcher del kernel ed è associata<br />
con un oggetto processo (process object) che incapsula uno spazio di indirzzamento virtuale. Gli<br />
oggetti timer (timer objects) sono usati per tenere traccia del tempo e per segnalare la mancata<br />
sincronizzazione quando le operazioni impiegano troppo tempo e devono essere interrotte, oppure deve<br />
essere schedulata un'attività ripetitiva.<br />
A molti degli oggetti del dispatcher si può accedere in modalità utente tramite un’operazione<br />
open che ritorna un handle; il codice in modalità utente controlla/ o aspetta gli handle per<br />
sincronizzarsi con gli altri thread come pure con il <strong>sistema</strong> <strong>operativo</strong> (consultare il Paragrafo 7.1 di<br />
questo capitolo).<br />
3.2.4 Software interrupt: chiamate asincrone di procedure<br />
<strong>Il</strong> dispatcher implementa due tipi di interrupt software: chiamate di procedure asincrone e chiamate<br />
di procedure rinviate (deferred). La chiamata di procedura asincrona (APC) interrompe un thread in<br />
esecuzione e chiama una procedura. Le APC sono usate per cominciare l'esecuzione di un nuovo<br />
thread, per terminare i processi e per consegnare la notifica che un’operazione di I/O asincrona è<br />
stata completata. Gli APC sono accodati a specifici thread e permettono al <strong>sistema</strong> di eseguire sia il<br />
codice di <strong>sistema</strong> che quello utente entro il contesto del processo.<br />
3.2.5 Interrupt software: chiamate di procedura rinviate<br />
Le chiamate di procedura rinviate (DPC) si usano per posporre il processo di interrupt. In seguito<br />
alla gestione di tutti i processi bloccati da interrupt dei dispositivi, la procedura di servizio degli<br />
9