I sistemi operativi
Al crescere delle risorse elaborative disponibili si rende necessaria un'intelligenza che possa fornire almeno la possibilità di poter eseguire una serie di programmi applicativi l'uno dopo l'altro senza interventi esterni. E' questa la prima funzione che viene demandata ad un programma che chiamiamo "sistema operativo".
Abbastanza rapidamente, già agli inizi degli anni '60, si sviluppa questo particolare insieme di programmi assumendo via via il compito di creare uno strato di intelligenza tale da presentare al programmatore una serie di servizi di contenuto sempre più complesso. D'altra parte le risorse tecnologiche, sempre più capaci e veloci, richiedono intelligenza per essere gestite al meglio e con grande efficienza. Nel tempo si sono creati una serie di strati funzionali che traducono richieste di tipo logico in istruzioni di macchina, elevando la visione del programmatore e permettendogli così di occuparsi sempre più del problema da risolvere e sempre meno delle risorse che occorrono per risolverlo.
Al sistema operativo possiamo dunque attribuire due capacità:
I due tipi di capacità sono presenti nei vari sistemi operativi in proporzione diversa e sono diretta conseguenza degli obiettivi che ci si prefigge e del tipo di macchine che dobbiamo gestire. La prima, quella gestionale, privilegia ed è una necessità in sistemi operativi che gestiscono grandi quantità di risorse e di conseguenza un elevato numero di utenti, mentre la seconda, quella funzionale, è più propria di macchine dedicate ad un solo utente, ma che lavora con interfacce molto sofisticate. Non è tutto così bianco e nero ovviamente, l'una non impedisce l'altra e, di fatto, troviamo tutte e due le caratteristiche mescolate in vario modo nei sistemi operativi correnti.
Nella capacità gestionale ricadono anche altre importanti caratteristiche e cioè:
Mentre alcune funzioni sono fondamentali in ogni ambiente (integrità del dato), altre assumono importanza diversa a seconda della complessità del sistema che si sta gestendo. E' evidente ad esempio che più alto è il numero degli utenti collegati, maggiore importanza assume l'affidabilità. Va infine considerato che queste funzioni, per essere efficaci, devono essere parte integrante del disegno complessivo del sistema operativo e non possono essere aggiunte in seguito se non a prezzo di cambiamenti sostanziali.
Essendo il sistema operativo un insieme di programmi, esso utilizza, come ogni altro programma, le risorse della macchina, quelle stesse che i programmi applicativi veri e proprio utilizzano. Maggiore è la complessità, maggiore sarà la percentuale di risorse utilizzate dal sistema operativo. Potremmo immaginare che questa percentuale sia sprecata: in realtà i servizi messi a disposizione dell'utente risparmiano a quest'ultimo tempo per scriverli e svolgono quello che il programma applicativo avrebbe comunque fatto per poter svolgere la propria funzione. In realtà un parte di "spreco" esiste e questo è dovuto al fatto che il servizio è generalizzato, serve a più utenti e dovrà eseguire una parte delle proprie istruzioni per "capire" cosa deve essere prodotto. Un'altra parte va persa nel passare il controllo da uno strato di funzionalità ad un altro.
Più consistente è lo spreco dovuto alle capacità gestionali. La complessità genera di per se stessa complessità e necessità di risorse per essere gestita. Immaginiamo molto semplicemente una struttura aziendale: al crescere del numero degli addetti occorre introdurre funzioni di controllo e gestione che sono in funzione del numero di addetti. E' da notare che il rapporto fra gestione e produzione è una funzione non lineare e cresce a scaglioni discontinui. E' esattamente comparabile in un sistema operativo.
Quando introdurre funzionalità e quando questa diventa conveniente? Poiché anche le funzioni del sistema operativo sono istruzioni come tutte le altre, definiamo conveniente una funzione quando il guadagno che ottengo in termini di efficienza è superiore alle risorse necessarie all'esecuzione della funzione stessa. Questo guadagno dipende dal tipo di risorse utilizzate: dalla velocità di esecuzione della CPU e dalla quantità di memoria disponibile. Una funzione diventa conveniente al crescere delle risorse ed è necessaria per gestire efficientemente la cresciuta quantità di risorse da gestire.
Ecco dunque perché le caratteristiche di un sistema operativo non possono non essere in funzione della tecnologia sulla quale quel sistema viene eseguito. Più il sistema è disegnato in stretta correlazione con la tecnologia e più esso è efficiente e questo è vero almeno in via teorica. Qui però occorre introdurre un'altra variabile: il costo delle risorse. Abbiamo detto che con l'evoluzione della tecnologia si ottengono in pari misura maggiori quantità e costi minori, diminuendo drasticamente i costi unitari. Questo fa anche diminuire il costo degli sprechi e rende convenienti sprechi sempre maggiori.
Il bilanciamento di tutte queste variabili che si muovono oltre a tutto anche in modo difforme nel tempo costituisce l'elemento principale di valutazione e la molla che pilota lo sviluppo in questo settore. Le dimensioni di un sistema operativo sono ragguardevoli anche per piccoli sistemi: è molto probabile arrivare rapidamente a milioni di istruzioni. Non è dunque facile sviluppare un insieme così complesso di funzioni e questo spiega come sul mercato i sistemi operativi siano piuttosto pochi.
Dei vari tipi di sistemi operativi parleremo in seguito.
Al Mariani