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

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 226:
# Quando il programma ha terminato il proprio compito, torna il controllo al sistema operativo, che emette sul nastro una pagina di fine elaborazione, e torna al punto 1.
 
== L'uso delleLe memorie secondarie ad accesso diretto ==
 
La memoria principale dei primi elaboratori era molto piccola, di pochi chilobyte, in quanto di elevatissimo costo unitario, e quindi era possibile contenere in memoria, oltre al sistema operativo, solo piccoli programmi, che elaborassero pochi dati per volta.
E quindi molti problemi tecnici o scientifici non potevano essere risolti per a causa del costo eccessivo che avrebbe avuto la memoria di un computer sufficientemente grande da contenere tutto il programma e tutti i dati necessari a risolvere tale problema.
 
Tuttavia, molti problemi di calcolo, sebbene nel loro complesso richiedono chemolte ilistruzioni e molti dati, sono scomponibili in varie fasi di elaborazione, ognuna delle quali richiede ovviamente meno istruzioni dell'intero programma, oe ia dativolte abbianoanche dimensionimeno maggioridati delladi memoriaquelli principalerichiesti disponibiledall'intero programma.
Per poter eseguire questo tipo di elaborazioni su sistemi con poca memoria, si è pensato di tenere in memoria principale solamente le routine e i dati necessari alla fase corrente dell'elaborazione, e, quando si passa a un'altra fase, copiare su una memoria secondaria le routine e i dati non più necessari, liberando lo spazio da loro occupato nella memoria principale, e copiare da un'altra porzione di tale memoria secondaria in memoria principale le routine e i dati necessari per la nuova fase di elaborazione.
 
Pertanto, si è pensato che la soluzione per risolvere tali problemi fosse utilizzare una memoria, che, per quanto più lenta della memoria principale, avesse un costo unitario molto inferiore, ossia, a parità di costo, fosse molto più capiente.
L'operazione di copia di informazioni dalla memoria principale alla memoria secondaria e poi liberare lo spazio da loro occupato nella memoria principale veniva detta "scaricamento", mentre l'operazione di copia di informazioni dalla memoria secondaria alla memoria principale veniva detta "caricamento".
 
Utilizzando una tale memoria secondaria, si poteva procedere nel seguente modo.
In pratica, quando si leggeva il programma dal nastro in realtà lo si copiava tutto nella memoria secondaria, e poi si caricavano e scaricavano le porzioni d programma secondo necessità.
Per poter eseguire questo tipo di elaborazioni su sistemi con pocaLa memoria, siprincipale è pensato di tenere in memoria principalecontiene solamente le routine e i dati necessari alla fase corrente dell'elaborazione, e, quando si passadeve passare a un'altra fase, copiaresi sucopiano unasulla memoria secondaria le routine e i dati non più necessari, liberando lo spazio da loro occupato nella memoria principale, e copiaresi copiano da un'altra porzione di tale memoria secondaria in memoria principale le routine e i dati necessari per la nuova fase di elaborazione.
 
L'operazione dicon copiacui disi copiano informazioni dalla memoria principale alla memoria secondaria e poi liberaresi libera lo spazio da loro occupato nella memoria principale veniva detta "scaricamento", mentre l'operazione di copia di informazioni dalla memoria secondaria allaa uno spazio libero della memoria principale veniva detta "caricamento".
Tale memoria secondaria aveva il difetto di essere molto più lenta della memoria principale, ma il pregio di essere molto più economica, e quindi, a parità di costo, di avere dimensioni molto maggiori.
 
Siccome taliTali caricamenti e scaricamenti non seguono un ordine linearestrettamente sequenziale, l'usoin deiquanto nastrisi magnetici,deve chepoter sonocaricare ade accessoscaricare sequenziale,porzioni sidi èprogramma dimostratoe inadeguato,di edati sonoche statesi inventatetrovano memoriain secondarievari magnetichepunti addella accesso direttomemoria.
Pertanto l'uso dei nastri magnetici, che sono ad accesso sequenziale, si è dimostrato inadeguato a tale scopo.
Tali memorie erano i "tamburi" magnetici, oggi non più utilizzati, e i "dischi" magnetici, tuttora ampiamente utilizzati.
 
I primi dispositivi di questo tipo avevano costi unitari (cioè per bit), intermedi tra quelli della memoria principale e quelli delle unità nastro.
D'altra parte, i caricamenti e gli scaricamenti riguardavano porzioni dati o di programma relativamente lunghe (rispetto ai singoli byte), in quanto si trattava di routine o strutture dati che occupavano alcuni KB.
Pertanto avevano tipicamente anche capacità intermedie, dell'ordine di alcune centinaia di chilobyte, o di pochi megabyte.
 
Pertanto un sistema che accedesse in modo immediato a porzioni di alcune decine di KB, e in modo sequenziale all'interno di tali porzioni, poteva essere appropriato.
 
Con tali requisiti sono stati inventati i "tamburi magnetici", che erano dei cilindri rotanti ad alta velocità, ricoperti dello stato materiale magnetico dei nastri magnetici, e dotati di un braccio contenente numerose testine simili a quelle dei registratori magnetici.
 
Tali "tamburi", in seguito soppiantati dai dischi a testine mobili, avevano costi unitari (cioè per bit), intermedi tra quelli della memoria principale e quelli delle unità nastro, e pertanto avevano tipicamente anche capacità intermedie, dell'ordine di alcune centinaia di chilobyte, o di pochi megabyte.
 
Inizialmente, il tamburo magnetico era a completa disposizione del programma applicativo.
Line 258 ⟶ 265:
Comunque, quando si passava a un altro programma, il dati presenti sul tamburo venivano persi.
 
== Le memorie secondarie persistenti ad accesso sequenziale ==
Con il crescere delle dimensioni delle memorie secondarie, si pensò di conservarvi dei dati persistenti, cioè che fossero riutilizzabili anche dopo l'esecuzione di un programma.
 
Con il crescerediminuire delledei dimensionicosti dei nastri magnetici, e la conseguente crescita delle memorieloro secondariedimensioni medie, si pensò di conservarvi dei dati persistenti, cioè che fossero riutilizzabili anche dopo l'esecuzione di un programma, e non solo per caricare le schede e scaricare le stampe.
 
Pertanto un programma poteva, durante il suo funzionamento scrivere dei dati in un nastro e farli leggere a un altro programma.
 
Un uso tipico era la compilazione di programmi scritti in un linguaggio di programmazione.
Ricordiamo che i primi programmi erano scritti direttamente in linguaggio macchina.
Il primo linguaggio di programmazione è stato il linguaggio assemblativo (assembly language).
 
Il programmatore scriveva sulle schede perforate il programma in linguaggio assembly e poi componeva il proprio pacco di schede mettendo prima le schede del programma assemblatore (assembler) in linguaggio macchina, poi le schede del proprio programma in linguaggio assembly, poi le schede dei dati da far elaborare al proprio programma.
L'assemblatore veniva caricato in memoria, caricava in memoria il codice assembly, generava il codice macchina corrispondente, e a questo punto mandava in esecuzione tale codice al posto dell'assemblatore stesso.
La stessa cosa succedeva usando il primo linguaggio di programmazione ad alto livello, il FORTRAN.
 
Tutto ciò costringeva a caricare su nastro le numerose schede dell'assemblatore o le ancora più numerose schede del compilatore FORTRAN, e questo era uno spreco di tempo per l'utente, e costringeva anche a compilare il programma ogni volta che doveva essere eseguito, e questo era uno spreco di tempo per il computer.
 
Pertanto, avendo a disposizione una unità nastro aggiuntiva, si poteva tenere a disposizione su tale unità l'assemblatore o il compilatore.
Il pacco di schede dell'utente, contenente un programma in linguaggio sorgente, iniziava con il nome del compilatore necessario.
Il sistema operativo, leggendo la scheda di controllo che specificava il compilatore, caricava dal nastro il compilatore appropriato.
 
Inoltre, il programma assemblatore o il compilatore FORTRAN poteva scrivere su un nastro magnetico il programma in linguaggio macchina ottenuto.
In seguito, anche giorni o mesi dopo, si poteva lanciare il programma caricandolo direttamente dal nastro, senza passare per le schede perforate.
Queste ultime servivano solo per modifiche al programma o per inserire i dati da elaborare.
 
== Le memorie secondarie persistenti ad accesso diretto ==
 
Un tipico utilizzo dei dati persistenti su dispositivi ad accesso diretto era la ricerca di informazioni.