Sistemi operativi/Funzioni base: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 174:
# Quando il programma applicativo vuole leggere uno o più record dal nastro magnetico di ingresso o scrivere uno o più record sul nastro magnetico di uscita, esegue un'istruzione di chiamata di sistema, impostando in alcuni registri il tipo di operazione (lettura o scrittura), il numero della periferica, il numero di record da elaborare, e l'indirizzo di memoria da utilizzare per il trasferimento. Tale istruzione imposta automaticamente il processore in modalità sistema. Il sistema operativo effettua la lettura o la scrittura e poi memorizza in un registro l'esito dell'operazione, reimposta il processore in modalità utente, e salta all'istruzione del programma successiva a quella di chiamata di sitema.
# Quando il programma ha terminato il proprio compito, torna il controllo al sistema operativo, che emette sul nastro un record di fine elaborazione, e torna al punto 1.
 
=== L'uso delle memorie secondarie ad accesso diretto ===
 
La memoria principale dei primi elaboratori era molto piccola, in quanto di elevatissimo costo unitario, era possibile contenere in memoria, oltre al sistema operativo, solo piccoli programmi, che elaborassero pochi dati per volta.
 
Tuttavia, alcuni problemi di calcolo richiedono che il programma o i dati abbiano dimensioni significative.
Per poter eseguire questo tipo di elaborazioni su sistemi con poca memoria, si è pensato di caricare e scaricare dalla memoria i dati e le porzioni di programma di volta in volta richiesti.
 
Siccome tali caricamenti e scaricamenti non seguono un ordine lineare, l'uso dei nastri magnetici, che sono ad accesso sequenziale, si è dimostrato inadeguato, e sono state inventate memoria secondarie magnetiche ad accesso diretto.
Tali memorie erano i "tamburi" magnetici, oggi non più utilizzati, e i "dischi" magnetici, tuttora ampiamente utilizzati.
I tali dispositivi avevano costi unitari (cioè per bit), intermedi tra quelli della memoria principale e quelli delle unità nastro.
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.
 
Quando il programma veniva caricato dal sistema operativo, in realtà lo copiava sul tamburo, e poi da lì caricava in memoria i pezzi di programma che servivano di volta in volta.
Ogni pezzo era detto "overlay" (inglese per "copertura"), perché si sovrapponeva ad una precedente porzione di codice.
Un overlay era costituito da una o più routine.
 
Quando da una routine si chiamava una routine appartenente a un altro overlay, il controllo passava al sistema operativo che caricava dal tamburo l'overlay contenente la routine chiamata, sostituendo in memoria principale un altro overlay.
 
Ovviamente il programmatore doveva organizzare il programma in modo da evitare eccessivi cambi di overlay, perché tali operazioni rallentavano l'elaborazione.
 
Il tamburo era a disposizione anche dell'applicazione per salvare dati temporanei.
 
Comunque, quando si passava a un altro programma, il dati presenti sul tamburo venivano persi.
 
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.
 
Un tipico utilizzo dei dati persistenti su dispositivi ad accesso diretto era la ricerca di informazioni.
Per esempio, se un archivio su nastro contiene tutti i saldi dei conti correnti di una banca in ordine di numero di conto, e un altro archivio contiene tutti i movimenti della giornata in ordine temporale, e si vuole aggiornare i saldi dei conti correnti, si può procedere nel seguente modo:
* Si scandiscono i saldi dei conti correnti. Per ogni conto corrente si cercano sull'archivio dei movimenti tutti i movimenti che lo riguardano e si aggiorna il saldo.
Oppure nel seguente modo:
* Si scandiscono i movimenti dei conti correnti. Per ogni movimento, si cerca nell'archivio dei saldi il record relativo e lo si aggiorna.
In entrambi i casi, supponendo che sia i record dei movimenti che i record dei saldi siano così tanti da non essere contenuti in memoria, si devono effettuare un gran numero di ricerche. E usando un nastro magnetico, tali ricerche hanno un costo proibitivo.
 
Invece, si può caricare su un disco magnetico l'elenco dei saldi, lasciare i movimenti su nastro, e usare il secondo dei due algoritmi citati sopra.
La ricerca su disco magnetico di un record contenente un saldo può essere effettuata cercando con un metodo dicotomico, eventualmente agevolato da un piccolo indice mantenuto in memoria principale.
 
L'uso di memorie magnetiche persistenti ad accesso diretto, che d'ora in poi chiameremo semplicemente "dischi", faceva però sorgere il seguente problema.
 
Se l'elaboratore è usato in sequenza da numerosi programmi, e non ci sono tanti dischi quanti sono i programmi, si deve condividere tra più programmi la stessa unità disco con i suoi dati.
Se i programmi devono anche condividere i dati basta che i programmatori si mettano d'accordo, ma se ogni programma ha i suoi dati, non è ragionevole che ogni programmatore debba conoscere quali parti del disco sono o saranno utilizzate da altri programmi, con il rischio che un errore di programmazione possa compromettere il funzionamento di altri programmi.
 
La gestione del disco condiviso è chiaramente un compito del sistema operativo.
 
Siccome gli archivi su disco si chiamano anche "file", il sottosistema del sistema operativo che si occupa della gestione dell'organizzazione degli archivi su disco viene chiamato "file system".