# Time-sharing

Il time-sharing (anche timesharing, altrimenti detto ripartizione di tempo o condivisione di tempo), in informatica, è un modo del sistema operativo rivolto all'uso delle risorse da processare, attraverso il quale l'esecuzione dell'attività dell'unità di elaborazione centrale viene suddivisa in intervalli temporali. Ogni periodo di tempo è assegnato sequenzialmente a vari processi di uno stesso utente o a processi di più utenti.

## Descrizione

In italiano è tradotto sia con «ripartizione di tempo» che con «condivisione di tempo». La prima traduzione, ripartizione di tempo, è più fedele rispetto a ciò che effettivamente accade nel sistema operativo, ma meno rispondente al termine inglese e alla sua collocazione storica. La tecnica time-sharing, infatti, fu introdotta come evoluzione di quella batch, per permettere a più utenti contemporaneamente di utilizzare il computer. La sincronia è apparente, poiché in ogni istante il processore centrale esegue un solo processo; il rapido avvicendamento dei processi li fa apparire come eseguiti contemporaneamente.
La ripartizione di tempo è l'estensione logica della multiprogrammazione e nasce per realizzare un sistema multiutente: l'unità di elaborazione centrale del computer centrale viene utilizzata per rispondere alle richieste dei singoli utenti, passando rapidamente da uno all'altro (commutazione di contesto), dando così l'impressione ad ognuno di avere a disposizione il computer centrale interamente per sé, ovvero dando l'impressione di un processamento multiplo in parallelo di più processi verso più utenti.
Dal momento che i primi computer mainframe erano estremamente costosi, non era possibile garantire l'accesso esclusivo ad un singolo utilizzatore per l'uso in modo interattivo, poiché in questa modalità i computer trascorrevano molto tempo in attesa dell'input dell'utente. Si pensò, quindi, di far utilizzare a più utenti lo stesso elaboratore, utilizzando i tempi morti per servire i diversi utenti a rotazione. Allo stesso modo, le piccole porzioni di tempo che trascorrevano nell'attesa dei dispositivi, quali dischi, nastro magnetico o rete potevano essere utilizzati per servire i vari utenti. I computer capaci di fornire servizi in time-sharing normalmente venivano impiegati per lavori in batch durante la notte.
Da sole, queste soluzioni non erano sufficienti per costruire un sistema di time-sharing perfettamente funzionante. Per fare in modo che il servizio a più utenti fosse uniforme, era necessario un sistema che gestisse anche i processi che non fanno pause per l'attesa di input, quali i programmi che impiegavano molte risorse, ad esempio per calcoli di grande precisione. Si rendeva necessario un sistema di interrupt hardware, capace di mettere in pausa un processo in esecuzione, per dare tempo al processore di eseguire un altro processo in attesa.
Questo concetto fu descritto pubblicamente la prima volta all'inizio del 1957 da Bob Bemer in un articolo nella rivista Automatic Control Magazine. Il primo progetto ad implementare un sistema di time-sharing fu iniziato da John McCarthy alla fine del 1957. Sebbene egli lo abbandonò per lavorare al Project MAC e ad altri progetti, uno dei risultati del suo lavoro, noto come Computer Time Sharing System o CTSS, fu reso pubblico nel novembre 1961 e costituisce, molto probabilmente, il primo sistema di time-sharing, che è rimasto in uso fino al 1973. Il primo tentativo di introduzione commerciale del sistema in time-sharing, che poi si è diffuso ampiamente alla fine degli anni 1960 e nei primi anni 1970 è stato il Dartmouth Time Sharing System o DTSS che è stato implementato per la prima volta al Dartmouth College nel 1964 ed in seguito ha costituito la base del servizio di computer bureau di General Electric.
A volte l'invenzione del concetto di time-sharing viene attribuita a Christopher Strachey. Tuttavia, sebbene egli abbia utilizzato il termine time-sharing, il concetto che egli descrisse è oggi noto come multitasking. Il time-sharing è correlato al multitasking nel senso che in ambedue i sistemi un singolo computer esegue più processi in modo che appare simultaneo. Tuttavia il time-sharing fa riferimento ad un computer che supporta più utenti simultaneamente, mentre il multitasking è un termine più ampio che implica l'esecuzione di più processi, indipendentemente dal numero degli utenti.