I Sistemi Operativi

Sito culturale

Software

Tipi di software

Un programma è una sequenza di istruzioni elementari che possono essere eseguite dal sistema di elaborazione; ogni programma lavora su di una serie di informazioni che costituiscono l’input e fornisce dei risultati che vengono detti output. Un programma in esecuzione viene detto processo. Si definisce come software l’insieme dei programmi che possono operare sul calcolatore, cioè la componente logica di un elaboratore, in contrapposizione alla parte fisica detta hardware. Il software di un sistema informatico viene normalmente suddiviso in due categorie:

- Software di base: dedicato alla gestione delle funzioni elementari dell’elaboratore; tale software lavora direttamente sul livello fisico (hardware) della macchina;

 - Software Applicativo: dedicato alla realizzazione di particolari esigenze dell’utente e che riesce ad agire sull’elaboratore solo con il tramite del software di base.

Sistema Operativo

Il componente principale del software di base è il sistema operativo, il programma deputato a gestire le varie risorse fisiche dell’elaboratore svolgendo compiti differenziati a seconda della complessità del sistema posto sotto il suo controllo. Il sistema operativo, in pratica, opera su due livelli:

 a) gestisce le risorse del sistema di elaborazione:

• processore

• memoria centrale

• memoria di massa

• dispositivi di input/output

b) fornisce l’interfaccia uomo – macchina (crea un ambiente adatto alle esigenze di lavoro dell’utente)

Il Sistema Operativo di un elaboratore è quindi l’insieme dei programmi che consentono le operazioni elementari della macchina quali, ad esempio, lettura e scrittura dalla e sulla memoria, gestione delle periferiche, supporto per i programmi applicativi e controllo degli errori e degli eventi particolari.

Ad una parte del sistema operativo residente in memoria ROM, il firmware, è demandato l’avvio della macchina (bootstrap), che consente il caricamento in memoria del sistema stesso e la verifica dell’integrità delle componenti interne e dei collegamenti con le periferiche esterne. I sistemi operativi si dividono in monotasking e multitasking in dipendenza del fatto che il processore possa eseguire un solo lavoro per volta o che sia in grado di gestire più lavori contemporaneamente. I primi sistemi operativi adottavano una modalità monotasking detta a lotti (batch) che consisteva nel caricare tutti i dati necessari a far eseguire completamente un programma senza interventi dall’esterno ed attendere la sua fine prima di poter preparare il sistema per un nuovo lavoro.

In tempi più recenti il sistema operativo DOS, pur utilizzando la modalità monotasking, permetteva all'utente di interagire con il programma in corso fornendo dati e ottenendo anche risultati parziali. Il grosso handicap di tale modalità è il fatto che la CPU resta inattiva ogni volta che il programma in esecuzione rimane in attesa di dati dalla periferia o li sta ad essa fornendo; tenendo conto che i tempi di trasferimento dei dispositivi periferici sono di parecchi ordini di grandezza più grandi di quelli di elaborazione pura, si comprende l’enorme spreco di tempo di CPU che risulta utilizzata solo per una piccolissima percentuale. Per ovviare a questo problema sono nati i sistemi operativi multitasking che, pur eseguendo istruzioni di un processo per volta, ottimizzano il tempo di utilizzo del processore pur dando all’utente l’impressione di vedersi dedicate tutte le risorse del sistema per il proprio lavoro.

Il risultato è ottenuto eseguendo, a rotazione, piccole porzioni di tutti i processi in attesa di essere eseguiti; inoltre se un lavoro richiede una lunga operazione sui dispositivi periferici, la CPU viene destinata al successivo lavoro ed il controllo torna al processo sospeso quando l’operazione di input/output è terminata. Questa tecnica viene chiamata time-sharing perché suddivide il tempo di CPU tra i vari processi che concorrono al suo utilizzo; gli intervalli di tempo (time-slice) sono talmente piccoli da non poter essere percepiti dall’utente.

Esiste anche un’altra tecnica multitasking detta elaborazione in tempo reale (real time), che alterna i processi in esecuzione a seconda delle priorità ad essi accordate. Tale modalità viene usata quando alcuni lavori sono talmente importanti da non poter venire interrotti.
I sistemi operativi possono anche essere suddivisi in base al metodo con cui l’utente può interagire con la macchina, attraverso quella che viene detta interfaccia computer-utente; secondo tale criterio si possono riconoscere: sistemi ad interfaccia testuale (ad esempio MS-DOS), sistemi ad interfaccia grafica (ad esempio Windows) e sistemi ad interfaccia fisica. In realtà Windows non nasce come S.O. autonomo ma come software da utilizzare tramite DOS ; solo con Windows 95 non si ha semplicemente una nuova versione di Windows, ma un vero e proprio S.O. autonomo che non necessita di DOS. Ulteriori sviluppi si sono avuti poi con Windows 98 e Windows 2000 fino ad arrivare al più recente Windows XP (nelle due versioni Professional , per uso appunto professionale, ed Home, per uso privato).

Nei sistemi ad interfaccia testuale i comandi vengono forniti dall’utente tramite stringhe di caratteri (parole) seguendo una grammatica ed una sintassi ben definite. I vantaggi sono la poca memoria richiesta, la velocità elevata e la disponibilità di tutti i comandi allo stesso momento, mentre gli svantaggi sono legati alla difficoltà di ricordarsi i comandi correttamente.

Nei sistemi ad interfaccia grafica o GUI (Graphical User Interface) i comandi sono forniti dall’utente tramite la selezione dell’immagine che è legata alla operazione richiesta. I vantaggi per l’utente sono la facilità d’uso e la totale trasparenza rispetto all’hardware sottostante, mentre gli svantaggi sono la pesantezza del sistema operativo (lento e grande) e la disponibilità dei comandi complessi solo dopo diversi passaggi. Infine, nei sistemi ad interfaccia fisica, i comandi sono forniti tramite movimenti di componenti fisici del sistema e sono usati negli embedded computer (elaboratori che si trovano all’interno di macchine più complesse). Un esempio sono i robot utilizzati nelle fabbriche: per mezzo di questi sistemi vengono “appresi” (trasformati da movimenti in impulsi e quindi associati a comandi) i movimenti fisici che il robot deve effettuare per svolgere le attività cui è preposto e che costituiscono il “programma” associato a tali attività; al momento opportuno l’operatore lancerà tale programma ed il robot eseguirà le azioni ad esso associate.

I vantaggi sono nella spontaneità con cui sono forniti i comandi, mentre gli svantaggi sono legati al fatto che tali programmi sono strettamente dipendenti dal tipo di sistema informatico usato (normalmente non standard) e richiedono notevoli personalizzazioni.

Software applicativo

Il software applicativo è formato da programmi costruiti per risolvere specifici problemi degli utenti; una delle caratteristiche fondamentali di tali programmi deve essere la facilità di utilizzo e quindi l’interfaccia deve essere amichevole (user-friendly) per consentire anche all’utente meno esperto di fruire efficacemente del prodotto. Tale software è tradizionalmente suddiviso in linguaggi di programmazione, software personale, strumenti di produttività e programmi “verticali”.
I linguaggi di programmazione, o più propriamente gli ambienti di sviluppo dei linguaggi, agevolano la scrittura dei programmi applicativi e la verifica della loro correttezza ; tali programmi risentono in misura ridotta o nulla della struttura hardware del sistema sottostante e sono quindi facilmente portabili da un sistema informatico ad un altro.
Il software personale è formato da quei programmi che consentono anche ad un utente inesperto di fruire dell’aiuto del computer per attività tipiche della vita quotidiana quali scrivere e comunicare.
Tra tali programmi ricordiamo i sistemi di videoscrittura (word-processing system), le agende elettroniche e i gestori della posta elettronica (e-mail). Tra i due tipi di software precedenti, l’uno dedicato all’utente esperto l’altro all’utente non smaliziato, trovano spazio gli strumenti di produttività che consentono di svolgere alcuni tipici compiti di programmazione in modo semplice ed efficiente.
Tipici strumenti di produttività sono i fogli elettronici (spreadsheet) ed i sistemi per la gestione di basi di dati (database system).
I programmi “verticali” risolvono problematiche altamente specialistiche quali la gestione di una biblioteca o il controllo di un impianto.

Gerarchie di macchine virtuali

L’esperto che scrive un sistema operativo vede il sistema come un insieme di risorse fisiche da comandare direttamente, mentre colui che progetta un ambiente di programmazione vede la macchina come l’insieme delle funzioni messe a disposizione dal sistema operativo.
L’utente poi che progetta un programma applicativo tramite un linguaggio di alto livello non è obbligato a conoscere il metodo di funzionamento del sistema operativo né tantomeno dell’hardware sottostante, in quanto per lui l’elaboratore è semplicemente l’insieme delle funzionalità messe a disposizione dall’ambiente di programmazione.
Per l’utilizzatore di un programma applicativo, infine, il sistema appare virtualmente come l’insieme di comandi che può fornire alla macchina per soddisfare le sue esigenze; questi non deve preoccuparsi di come il software possa poi realizzare effettivamente le sue richieste tramite l’hardware.
In pratica viene a crearsi una gerarchia di tante macchine virtuali quante sono le categorie di utenti che vanno ad operare sul sistema informatico.
Questo gioco di scatole cinesi permette ai vari fruitori del sistema informatico di aver bisogno solo di un insieme limitato di competenze, legato alla macchina virtuale con cui vogliono interfacciarsi e che, man mano, diminuiscono passando dalla struttura fisica alla parte più esterna.