architettura (informatica)
IndiceDescrizione generale
"Per lo schema di principio dell'architettura di un calcolatore e per l'architettura generale di un microprocessore a 8 bit vedi al lemma dell'Aggiornamento 1995." La struttura di un sistema di elaborazione, vista a livello di sintesi "Per l'architettura informatica vedi gli schemi a pg. 364 del 2° volume." : l'insieme delle istruzioni fondamentali, l'interfaccia verso l'utente, l'organizzazione della memoria, le operazioni di ingresso e uscita. La traduzione di una data architettura in realizzazioni concrete può essere diversa da caso a caso; queste differenze, tuttavia, si riflettono solo sulle prestazioni (velocità, memoria, flessibilità, ecc.) e sui costi, e non sulla capacità di eseguire gli stessi programmi. A livello progettuale il termine architettura indica, nella più stretta analogia con il significato classico della parola, la struttura unitaria degli organi logici dell'elaboratore.
L'architettura di un microcalcolatore
L'architettura di un elaboratore basato su microprocessori, vale a dire di un microcalcolatore, è costituita: a) dall'unità centrale di elaborazione, cioè il microprocessore stesso o CPU; b) da una memoria a sola lettura (ROM) per i programmi di base; c) da una memoria di lavoro a lettura/scrittura (RAM); d) dall'interfaccia ingresso/uscita (input/output, o I/O) organo di trasferimento delle informazioni normalmente sia in sequenza sia in parallelo; l'interfaccia I/O comunica con unità periferiche come il monitor, la tastiera, le stampanti, le memorie ausiliarie, e si può collegare a linee telefoniche e a circuiti telematici; e) dai bus, ovvero le linee fisiche su cui sono trasferiti i segnali fra i vari organi per la trasmissione degli indirizzi (address bus), dei dati (data bus) e dei controlli (control bus); f) da un “orologio”, spesso incluso nella CPU, un temporizzatore al quarzo che fornisce i segnali di sincronizzazione per tutte le attività interne. Determinante principale dell'architettura di un microcalcolatore è il numero di singole cifre binarie (bit) che vengono elaborate in parallelo e che è tipico sia del microprocessore sia del bus dei dati. La potenza aritmetica e logica dell'elaboratore è infatti essenzialmente legata a questo valore. Salvo i primi microprocessori a 4 bit (dove il bus dei dati trasmette e il microprocessore elabora 4 bit in parallelo), gli standard sono 8, 16, 32 e 64 bit, quest'ultimo uguale a quello dei grandi elaboratori. L'architettura interna del microprocessore si sviluppa attorno all'unità aritmetica e logica (ALU): è l'ALU che, nel ricevere i dati dalle celle di memoria interne al microprocessore, dette anche registri, effettua addizioni numeriche e logiche, incrementi, azzeramenti, ecc., e trasferisce i risultati a un registro speciale, l'accumulatore. Gli altri elementi centrali del microprocessore sono la logica di controllo, che provvede a inviare segnali per eseguire le istruzioni e per comunicare con la memoria e i circuiti di ingresso/uscita (I/O), e il decodificatore delle istruzioni. Quest'ultimo disaggrega l'istruzione in microistruzioni, che agiscono a livello circuitale sui registri, sull'ALU, ecc. e sono gestite da un microprogramma interno che definisce il flusso di dati e le operazioni da svolgere. Fra gli elementi “architettonici” ausiliari vi sono, oltre ai bus di comunicazione interni e verso l'esterno, piccole memorie di transito (buffers o memorie tampone) che agiscono come cuscinetto fra la CPU, che funziona a velocità molto elevata, e le unità periferiche, generalmente più lente. Infine vi sono alcuni registri con compiti generali o specifici, tra cui il contatore di programma che stabilisce la cadenza delle istruzioni e caratterizza il funzionamento sequenziale del microprocessore.
Dall'architettura di Von Neumann alla pipeline
A livello concettuale il termine architettura è associato all'impostazione di fondo dell'elaboratore: esemplare in questo senso, anche per l'importanza storica che ha avuto, è l'architettura di Von Neumann, lo scienziato che ha ideato la prima teoria completa degli elaboratori digitali. L'architettura di Von Neumann si basa sui seguenti principi costruttivi: A) l'assegnazione alla memoria del compito di immagazzinare non solo i dati ma anche le istruzioni, ossia i comandi che allineano i circuiti interni del calcolatore per un obiettivo fissato (somma, trasferimento, ecc.). In quest'ottica dati e istruzioni sono indistinguibili: per esempio l'insieme di 8 bit “10000110” può indifferentemente indicare il numero decimale -6 (il primo bit in questo caso ha la funzione di indicare il segno del numero decimale) o, in funzione di un microprogramma dato, l'istruzione “carica il contenuto della memoria nel registro”. B) I contenuti della memoria sono caratterizzabili in base alla loro posizione nella memoria stessa: l'indirizzo. Anche l'indirizzo è un insieme di bit. C) L'esecuzione avviene in modo sequenziale, per cicli scanditi da un contatore di programma che si incrementa automaticamente. Pertanto la macchina non passa all'esecuzione dell'istruzione successiva fino al completamento della precedente. L'architettura di Von Neumann è stata alla base della maggioranza degli elaboratori (sia microcalcolatori sia grandi macchine); tuttavia la necessità, sempre più sentita di superare il funzionamento sequenziale, che si traduce in tempi di attesa per le parti più veloci del sistema di elaborazione, ha portato a studiare diverse architetture alternative: da quelle canalizzate a quelle a parallelismo massiccio. Nelle architetture canalizzate (pipeline) l'esecuzione di più istruzioni può sovrapporsi parzialmente pur conservando l'avviamento sequenziale, in quanto ognuna si troverà in una fase diversa del ciclo di istruzione. In questo caso i cicli di ciascuna istruzione partono in istanti successivi, ma coesistono per alcune fasi, differenti di ognuna; a un risultato di tal genere, porta per esempio, l'impiego coordinato di due unità di elaborazione: una con il compito di reperire e decodificare l'istruzione, l'altra per le operazioni sui dati. Un'architettura più complessa della soluzione canalizzata, detta SIMD (Single Instruction Multiple Data), è quella che permette di eseguire contemporaneamente un'istruzione su più dati. Infine è risultato possibile costruire architetture capaci di combinare l'esecuzione contemporanea di molte istruzioni e l'azione su parecchi dati (MIMD, Multiple Instructions/Multiple Data). Si tratta di macchine particolarmente avanzate, i supercalcolatori, elaboratori vettoriali a canalizzazione (pipelined vector processing) che impiegano numerosi microprocessori. La complessità crescente delle architetture pone peraltro problemi sempre più critici anche alla programmazione; una programmazione di nuova concezione, capace di adattarsi a queste architetture fisiche e di sfruttare appieno le potenzialità del supercalcolatore, non è stata sviluppata industrialmente. Si è preferito, infatti, seguire la strada più economica dello sviluppo evolutivo dei programmi, ma il problema della ripartizione delle elaborazioni su una molteplicità di processori non ha avuto soluzione pienamente soddisfacente. Per ovviare a questi problemi, a partire dagli anni Novanta, è emersa la proposta delle architetture cosiddette a cluster, in cui diversi elaboratori di tipo standard cooperavano per la soluzione di problemi, sfruttando meccanismi di comunicazione efficiente. La programmazione di queste architetture può quindi essere separata nella programmazione delle singole attività di calcolo che ogni elaboratore deve svolgere e in quella dei meccanismi di distribuzione e di coordinamento delle varie attività.
L'architettura a flusso di dati
Mentre le architetture distribuite non richiedono particolari tipi di hardware, ma si basano sul passaggio di messaggi fra le diverse componenti, le tecniche di programmazione innovative hanno accompagnato lo sviluppo dell'architettura fisica nelle macchine a flusso di dati (data flow machines). L'architettura a flusso di dati si basa sull'idea di conseguire un funzionamento parallelo di un insieme di microprocessori identici. In teoria una qualsiasi delle unità di elaborazione, quando ha finito un'elaborazione, ed è quindi libera, può accedere a una memoria comune particolare, capace cioè di associare le informazioni per contenuto (memoria associativa, analoga a un dizionario), accertare la disponibilità completa dei dati per eseguire una fase autonoma del programma generale (in caso affermativo li elabora) e restituire i risultati alla memoria. Questo principio di funzionamento vale naturalmente per tutte le unità di elaborazione della macchina, che quindi non sono gerarchizzate ed eseguono i compiti, che assumono in un certo senso di propria iniziativa, in modo asincrono. Il coordinamento, che è l'aspetto più critico di questa architettura, va effettuato da un programma molto generale che controlla flussi di dati e di risultati dalla memoria comune alle numerose unità di elaborazione e viceversa. L'architettura a flusso di dati appare superiore anche a quella dei supercalcolatori, ma la sua realizzabilità richiede soluzioni accettabili per il problema della ripartizione equilibrata del lavoro fra le varie unità di elaborazione.
Le architetture software
L'aumentata complessità dei sistemi software, anche di utilizzo quotidiano, e la crescente eterogeneità e distribuzione fisica delle componenti dei sistemi informativi, sia nella loro dimensione fisica, sia in quella logica, hanno portato all'estensione del concetto di architettura anche ai programmi. In particolare, questo si è reso necessario quando gli sviluppi nei linguaggi di programmazione hanno permesso di superare il concetto di programma come un'unica sequenza di istruzioni che agisce su una memoria globale (replicando quindi nella struttura del software i vincoli imposti dalla struttura fisica dell'elaboratore), per passare a una visione dei programmi come composizione di diversi moduli. Ogni modulo è dotato di una vita indipendente, riutilizzabile in diversi contesti, ed è strutturato fra una parte pubblica, che descrive i servizi che esso può offrire agli altri moduli, e una parte privata, contenente l'implementazione, cioè le strutture dati e le parti di codice necessarie per realizzare tali servizi. L'architettura di un sistema software è quindi definita specificando il tipo di elementi che ne possono fare parte e le relazioni fra questi elementi. Le architetture software si sono evolute per raggiungere una tipica organizzazione stratificata, in cui, sopra un livello di base di servizi indipendenti dall'applicazione, per esempio data base, si definiscono servizi sempre più complessi e legati al dominio applicativo, alla specifica applicazione e alla gestione dell'interazione con il cliente. Mediante l'utilizzo di strumenti di middleware, componenti eventualmente realizzate con differenti linguaggi e operanti su dispositivi fisici diversi possono comunicare e cooperare per realizzare architetture distribuite. In generale, il termine architettura, nel campo software, è utilizzato anche per descrivere una qualunque organizzazione logica (gerarchica, a stella, a rete, ecc.) di componenti diverse utilizzate per la realizzazione di un'applicazione o di un servizio generico (per esempio, l'architettura di Internet).
R. Pancaldi (a cura di), Enciclopedia monografica di elettronica e informatica, Milano, 1988.