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

 

 

Computer amico mio