Sistemi operativi/Evoluzione dei sistemi operativi: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 393:
 
I primi monitori residenti dotati di file system elaboravano un solo programma per volta.
Quando un programma terminava, perché aveva finito la sua elaborazione o perché veniva arrestato dal sistema operativo, veniva caricacaricato e lanciato il programma successivo.
 
Ogni programma aveva a disposizione tutta la memoria principale, eccetto quella in cui risiedeva il sistema operativo, poteva eseguire istruzioni di elaborazione senza essere interrotto dal sistema operativo fino a quando scadeva il lotto di tempo assegnato dall'operatore per l'esecuzione del programma, e aveva il sistema operativo sempre pronto a soddisfare richieste di lettura o scrittura di dati sulle memorie di massa.
 
Questa architettura aveva il pregio della semplicità, e, conseguentemente, della piccola dimensione del sistema operativo.
Riga 406:
Una tipica applicazione di contabilità è, come detto sopra, l'aggiornamento dei saldi dei conti correnti di una banca.
Tale applicazione deve semplicemente sommare o sottrarre l'importo di ogni movimento dall'importo del saldo del conto.
Anche con i lentissimi processori degli anni '50, il tempo necessario al processore per effettuare la somma era enormemente inferiore al tempo necessario per leggere il movimento bancario, leggere il vecchio saldo, e scrivere il nuovo saldo, sia usando i nastri che i dischi.
 
In pratica, usando il monitor residente per un'applicazione di contabilità, il processore era quasi sempre in attesa che qualche dato venisse letto da discouna memoria di massa o scritto su discouna memoria di massa.
D'altra parte, le prime applicazioni di contabilità erano così semplici da poter stare in pochissimi chilobyte di memoria, e gli bastavano pochissimi altri chilobyte di memoria per i dati in corso di elaborazione.
 
Pertanto, appena sono stati costruiti computer con alcune decine di chilobyte di memoria, risultava possibile tenere in memoria più programmi contemporaneamente.
Per fare un esempio, avendo un sistema di 32 KB di memoria, ile un sistema operativo potevache stare inoccupava 12 KB, erimaneva laspazio memoriaper avevatenere spazioin permemoria ben 4 programmiprocessi di 5 KB ciascuno, dei quali 4 di codice e 1 di dati.
 
Avendo più programmiprocessi contemporaneamente in memoria, si poteva ottimizzare l'utilizzo del computer nel seguente modo.
 
Quando un programmaprocesso chiede al sistema operativo di leggere un record (equivalente a una scheda performata), il sistema operativo invia una richiesta corrispondente al dispositivo elettronico che gestisce ill'unità disconastro fissoo l'unità disco, e, invece di attendere la risposta, attiva un altro programma in memoriaprocesso, che incomincia a eseguire le sue istruzioni.
 
Se anche questo secondo programmaprocesso dovesse fare una richiesta al sistema operativo che non potesse essere soddisfatta immediatamente, come scriverestampare un record suluna discoriga, il sistema operativo dovrebbe scegliere un terzo programmaprocesso da mandare in esecuzione, in quanto i primi due sono in attesa del completamento delle loro richieste di inputingresso/outputuscita.
 
Solo se tutti i programmiprocessi in memoria fossero in attesa del completamento delle loro chiamate di sistema, allora il processore si fermerebbe ozioso in attesa di qualche evento.
 
Quindi ogni processo può trovarsi in uno dei seguenti stati:
Non appena una memoria di massa ha completato l'operazione richiestale dal sistema operativo, cioè quando è riuscita a leggere il record richiesto o a scrivere il record fornito, il dispositivo di controllo del disco fisso invia un segnale di interrupt (hardware) al processore.
* In esecuzione ('''running''').
Quando il processore riceve un interrupt, sospende immediatamente il programma in esecuzione e passa il controllo a un'apposita routine di gestione dell'interrupt, la quale prende atto di quale operazione è stata completata, e rimanda in esecuzione il programma che era in attesa di tale evento.
* In attesa di un evento esterno, tipicamente il completamento di un'operazione di ingresso/uscita ('''waiting''').
* Pronto ad andare in esecuzione ('''ready''').
 
Inizialmente, tutti i processi sono ''ready''.
Questa architettura, dato che consente l'esecuzione in parallelo di più programmi, viene detta '''multiprogrammazione'''.
Poi ne viene scelto uno, che viene mandato in esecuzione, e quindi passa in stato ''running''.
 
Essendoci un solo processore, al più un processo è in stato ''running''.
La multiprogrammazione consente di sfruttare meglio il processore, perché mentre alcuni programmi sono in attesa del completamento di operazioni di input/output, un altro programma è in esecuzione.
Ma e se c'è almeno un processo ''ready'', allora ce n'è almeno uno ''running'', in quanto ''ready'' in realtà vuol dire in attesa che si liberi il processore, "occupato" da un altro processo.
Però potrebbe darsi che tutti i processi siano in stato ''waiting'', e quindi il processore sarebbe ozioso (''idle'') in attesa di un evento che riporti un processo in stato ''running''.
 
Non appena una memoria di massa ha completato l'operazione richiestale dal sistema operativo, cioè quando è riuscita a leggere illa recordscheda richiestorichiesta o a scrivere illa recordriga fornitofornita, il dispositivo di controllo deldell'unità disconastro fissoo dell'unità disco invia un segnale di interrupt (hardware) al processore.
Quando il processore riceve un interrupt, sospende immediatamente il programmaprocesso in''running'', esecuzionese ce n'è uno, e passa il controllo a un'apposita routine di gestione dell'interrupt, la quale prende atto di quale operazione è stata completata, e rimandapuò rimettere in esecuzionestato ''running'' il programmaprocesso che era in attesa di tale evento, e in stato ''ready'' il processo sospeso, oppure può mettere in stato ''ready'' il processo che era in attesa di tale evento, e far ripartire il processo sospeso per gestire l'interrupt.
 
Questa architettura, dato che consente l'esecuzione in parallelo di più programmiprocessi, viene detta '''multiprogrammazione''' (''multiprocessing'').
 
La multiprogrammazione consente di sfruttare meglio il processore, perché, mentre alcuni programmiprocessi sono in attesa del completamento di operazioni di inputingresso/outputuscita, un altro programmaprocesso è in esecuzione e quindi il processore è sfruttato maggiormente.
 
Un sistema operativo multiprogrammato è tuttavia più complesso di un semplice monitor residente, in quanto deve suddividere la memoria principale in segmenti assegnati ai vari programmi, deve decidere quale tra i programmi in attesa deve essere mandato in esecuzione, e deve gestire l'accesso in parallelo alle periferiche.
 
Man mano che i computer hanno aumentato la dimensione della propria memoria principale, anche i sistemi usati per calcolo numerico o altre applicazioni sono diventatodiventati multiprogrammati.
 
== I sistemi a ''time sharing'' ==