Background Intelligent Transfer Service
# Background Intelligent Transfer Service

Il BITS (Background Intelligent Transfer System) è un componente dei sistemi operativi della famiglia Windows NT (Windows 2000, Windows XP, Windows 7, etc) pensato per il download dalla rete degli aggiornamenti del sistema operativo. Il componente è stato, tuttavia, reso disponibile sotto forma di API per essere l'utilizzo anche di applicazioni di terze parti.

## I trasferimenti

Il BITS utilizza la banda non utilizzata per trasferire dati. Normalmente il BITS trasferisce dati in background, lavorando soltanto quando le condizioni di funzionamento della rete lo permettano senza interferire con altri processi interessati all'uso della risorsa. Il BITS monitora il traffico di rete in modo da rilevare la presenza di slot allocabili per il trasferimento degli aggiornamenti con l'obiettivo di non interferire con le applicazioni in foreground. Il servizio è in grado di sospendere il download e di operare anche quando la macchina non è loggata.

## I jobs

Una risorsa da scaricare con BITS è chiamata file e un insieme di file è racchiuso in un "job". Ogni Job può essere controllato tramite le API con cui è possibile avviare, fermare, mettere in pausa, riprendere e interrogarne lo stato. Prima di avviare un job è possibile impostarne una priorità, normale, alta o bassa. I job con priorità alta lavorano in foreground, quindi condividono la banda con le altre applicazioni in esecuzione.

## Lo scheduling

Per poter eseguire più download contemporanei, BITS programma ciascun job attraverso un insieme finito di allocazioni temporali detti slot o time slice: ogni risorsa da scaricare viene suddivisa in un insieme di slot e ogni slot viene scaricato eseguendo un recupero del precedente download. Uno scheduling eseguito con in round-Robin assicura che tutti i job con la stessa priorità vengano scaricati e punta a far sì che il sistema si "equo", evitando che job di grandi dimensioni blocchino il trasferimento di quelli di dimensione più piccola. I job di più alta priorità vengono allocati attraverso dei "time slice" più ampi. Appena viene creato un nuovo job, tramite le API del BITS, il job è automaticamente messo nello stato paused ed è necessario eseguire un resume per inserirlo nella code dei job. BITS include anche un meccanismo per trattare gli errori. Gli errori possono essere fatal o transient ed entrambi muovono il job nello stato opportuno. L'errore transient è un errore temporaneo che può essere risolto con ulteriori tentativi a distanza di tempo, l'errore fatal dà in output un evento d'errore.

