I sistemi operativi - Le funzioni

 

Abbiamo parlato delle tre parti fondamentali dell'elaboratore, CPU memoria e canali, individuandone la funzione e le relazioni fra di esse. Vorrei ora tornare su una loro caratteristica fondamentale: la loro velocità è diversa, anzi sostanzialmente diversa.

Il tempo necessario all'esecuzione di una istruzione da parte della CPU è molto inferiore al tempo di accesso alla memoria che è a sua volta molto inferiore al tempo di accesso ai dati su supporti esterni. Questo era vero fin dagli inizi e l'evoluzione tecnologica ha migliorato sì negli anni velocità e capacità, ma in modo difforme aumentando comunque il divario fra queste parti. Ad oggi misuriamo in picosecondi (trilionesimi di secondo) la velocità di commutazione dei circuiti della CPU e in nanosecondi (miliardesimi di secondo) la velocità di esecuzione delle singole istruzioni, mentre ancora siamo nel campo delle decine di nanosecondi, se non centinaia o addirittura microsecondi, il tempo di accesso alla memoria. Così pure siamo nell'ambito dei millisecondi quando parliamo di accesso ai dati su supporti esterni a disco. Fra l'elemento più veloce ed il più lento vi è dunque un rapporto di almeno un milione.

Da questo fatto consegue che la velocità finale di elaborazione è purtroppo condizionata dall’elemento più lento. Anche se non sempre si deve accedere ad informazioni sui supporti esterni, quasi sempre si deve almeno accedere alla memoria interna: in conclusione la parte più veloce (la CPU) è per la maggior parte del tempo ferma, in attesa di poter accedere ai dati. A tutto questo possiamo aggiungere che la CPU è generalmente la parte più costosa dell’insieme e se ne valutassimo il costo in funzione del suo utilizzo esso diventerebbe decisamente molto più alto.

Queste considerazioni erano già vere negli anni sessanta, tanto più che allora gli elaboratori erano pochi, molto costosi e decisamente più "preziosi". Una delle funzioni, direi anzi la principale, che viene riconosciuta e delegata al sistema operativo è quella di gestire al meglio, sia in termini di velocità, ma anche di sfruttamento, le risorse dell’elaboratore. Per evitare che la CPU risulti per la maggior parte del tempo in attesa, si introduce il concetto di multiprogrammazione, la capacità cioè di eseguire "contemporaneamente" più sequenze di istruzioni applicative, l’una nei tempi morti dell’altra e così via.

Innanzitutto una precisazione sul "contemporaneamente": la CPU esegue una ed una sola istruzione per volta e dunque la multiprogrammazione è di fatto solo apparente. Il tempo di esecuzione è così veloce che l’utente può percepire che siano in esecuzione più applicazioni, anche se questo non è microscopicamente vero. Questo fatto non va dimenticato e tenuto ben presente nelle nostre considerazioni.

Compito fondamentale di un sistema operativo è allora quello di far sì che più sequenze di programmi possano essere caricate in memoria ed eseguite insieme, garantendo comunque ad ognuna di esse sicurezza ed integrità. Il tutto deve essere anche realizzato in modo tale che tutto questo sia trasparente per chi scrive le applicazioni: l’applicazione è dunque sempre la stessa indipendentemente dal momento e dalla combinazione di carico nel sistema.

Per poter raggiungere questo scopo occorre che l’architettura utilizzata garantisca:

Queste caratteristiche furono introdotte a metà anni sessanta nelle nuove architetture che allora si affacciarono sul mercato. In particolare la strada fu innovativamente aperta da IBM, con un investimento che allora fu veramente colossale (più di 7 milioni di dollari!). Di fatto l’architettura 360, così fu chiamata, annunciata il 6 Aprile 1964, ha dettato le basi per tutto lo sviluppo dell’elaborazione elettronica negli anni 70 e 80 e ancora oggi rappresenta la base delle macchine di tipo "mainframe" di tipo generalizzato.

Esistono, e sono sempre esistiti, elaboratori di altro tipo, anche ben più sofisticati e in generale disegnati e costruiti per applicazioni specifiche. L’introduzione di questa architettura e della famiglia di macchine che la supportano, ha comunque segnato un momento fondamentale introducendo la possibilità di poter sviluppare le applicazioni in modo incrementale, con la garanzia di poter far crescere le risorse di macchina e le applicazioni in maniera indipendente le une dalle altre ma comunque in modo compatibile.

Le considerazioni fin qui fatte si applicano comunque in generale ad ogni tipo di elaboratori, non dimenticando il fatto che essi, come già sottolineato, sono sempre fondamentalmente ispirati allo stesso principio (macchina di Von Neumann).

Vedremo dunque prossimamente i componenti fondamentali dei sistemi operativi.

 

 Al Mariani

 

Computer amico mio