I
componenti di un elaboratore
Nella macchina di Von
Neumann abbiamo identificato le tre parti logiche fondamentali che compongono
un elaboratore (CPU, memoria e canali). Consideriamo ora l’elaboratore da un
punto di vista che tenga conto anche delle sue caratteristiche costruttive.
Possiamo innanzitutto
distinguere due macro categorie di componenti, quella che raggruppa i
componenti tecnologici (i circuiti elettronici) e che viene identificata con
"hardware" (letteralmente "materiale rigido") e quella che
raggruppa i componenti applicativi e che viene identificata con
"software" (letteralmente "materiale flessibile").
L'hardware dunque rappresenta, grosso modo, il supporto che fornisce al
software il mezzo per elaborare informazioni e produrre lavoro.
Se possiamo fare un
paragone molto semplice, direi che possiamo comparare l'hardware ad
un'automobile e il software al pilota che la conduce. Fra i due elementi vanno
definite le regole del gioco, così come per un'automobile si definisce che il
pedale della frizione sta a sinistra e quello del freno sta a destra, e così
via. Tali regole del gioco vengono identificate con il termine
"architettura". Un'architettura non è né hardware né software: è un
manuale nel quale sono definiti i modi comportamentali dell'hardware in modo
tale che si possa scrivere del software per poterlo usare.
L'architettura è una
linea di confine logica fra le due componenti: ciascuna delle due è libera di
essere progettata e organizzata, purché la si rispetti. In particolare possiamo
costruire elaboratori anche diversi fra di loro, come tecnica costruttiva, ma
se l'architettura è rispettata su di loro possiamo eseguire una qualunque
applicazione software che la presupponga.
Il rispetto delle regole
architetturali determina la compatibilità degli elaboratori. Nel campo dei PC
stiamo assistendo oggi alla competizione sul mercato di INTEL e AMD che
producono CPU diverse, ma che possono essere interscambiate nel PC stesso. La
compatibilità è anche all'interno dello stesso produttore che può usare
tecnologie diverse, ma garantisce la capacità di eseguire gli stessi programmi
nel tempo.
Mentre questo concetto
è ormai un fatto acquisito e consolidato negli elaboratori di grandi
dimensioni, non è altrettanto vero che questo capiti negli altri tipi di
macchine. Mantenere la compatibilità all'indietro richiede spesso forti
investimenti e protegge tutto ciò che nel tempo è stato sviluppato in termini
applicativi.
Se noi ora consideriamo
il costo di produzione dei due componenti, l'hardware e il software, possiamo
ben vedere che è molto più costoso sviluppare il software che non l'hardware.
C'è una caratteristica dei due che difficilmente viene presa in considerazione
e che porta a questo risultato.
I circuiti hardware
trattano un segnale elettrico e questo rappresenta il valore 0 o 1 a secondo
della necessità. Poiché i circuiti sono fatti di materiale fisico, il valore
che rappresenta l'uno (o lo zero) ha una tolleranza. Il circuito funziona
dunque correttamente anche se i valori di riferimento sono approssimati.
Inoltre, una volta prodotto l'insieme dei circuiti necessari, questi possono
essere replicati senza problemi in grande quantità.
Il software, e cioè le
applicazioni, non hanno tolleranza: se un valore deve essere a uno lo deve
essere senza possibilità di sbaglio. Questo ha una conseguenza fondamentale:
non è possibile produrre in pratica un software, beninteso complesso, senza
errori. A questo inconveniente si pone rimedio, o meglio, si cerca di porre rimedio
dotando il software di intelligenza capace di capire quando il software stesso
è in errore. E questo non fa che aumentare il costo di produzione delle
applicazioni e rende sempre più pesante l'impatto di eventuali cambiamenti
rivolutivi e non evolutivi.
Le relazioni fra
software e hardware meritano un approfondimento e di questo parleremo nel
prossimo intervento.
Al Mariani