# Architettura (computer)

Con architettura hardware si intende l'insieme dei criteri di progetto in base ai quali è progettato e realizzato un computer, oppure un dispositivo facente parte di esso. Per estensione, descrivere l'architettura di un dispositivo significa, in particolare, elencarne le sottoparti costituenti ed illustrarne i rapporti interfunzionali.

## Definizione

Gene Amdahl, Gerrit A. Blaauw e Frederick P. Brooks introdussero il termine "architettura" nel 1964 per distinguere le caratteristiche comuni di tutti i modelli IBM System/360 dalle loro versioni molto diverse in termini di tecnologia, capacità e velocità operativa. Questa comunanza aveva lo scopo di rendere più facile la sostituzione di parti e programmi del computer quando le esigenze dei clienti cambiavano.
Si trattava quindi di un'astrazione simile al concetto matematico di struttura algebrica. In essa, ad esempio, l'aritmetica è astratta dalle regole di sequenza e di scambio degli operandi o di risoluzione delle parentesi, in modo da applicarsi a vari insiemi e combinazioni di base, come i numeri naturali con l'addizione o gli insiemi con l'unione.
Gli autori hanno evitato la parola astrazione tentando una definizione per enumerazione in una nota a piè di pagina: “Il termine architettura viene qui utilizzato per descrivere gli attributi di un sistema visti dal programmatore, cioè la struttura concettuale e il comportamento funzionale, distinti dall'organizzazione del flusso di dati e dei controlli, dalla progettazione logica e dall'implementazione fisica”.
Autori successivi come Peter Stahlknecht e Ulrich Hasenkamp hanno specificato, integrato e modificato questo elenco, perdendo di vista l'aspetto dei punti in comune e dell'astrazione. Di conseguenza, l'espressione "architettura dei computer" perse il suo carattere essenziale e divenne una parola d'ordine sofisticata per progetti arbitrari.

## Descrizione

I soggetti che si occupano di architettura dei calcolatori hanno il compito di costruire sistemi di elaborazione di diversa complessità (da una semplice scheda elettronica a un complesso sistema con grossa potenza di calcolo) mettendo insieme questi componenti elementari.
È anche importante sottolineare la differenza che intercorre tra elettronica e architettura dei calcolatori: l'elettronico ha il compito di costruire circuiti veloci ed efficienti, si occupa quindi di migliorare i "mattoni", i componenti elementari del sistema; l'architetto dei calcolatori ha invece il compito di ottenere le migliori prestazioni possibili (in termini di potenza di calcolo, costi in termini economici) assemblando in maniera efficiente i componenti elementari.

### Elementi base

I "mattoni" che costituiscono un sistema di calcolo sono:
* porte logiche (and, not, or)
* generatori di segnali (ad es. clock)
Mettendo insieme le porte logiche, che sono tipicamente circuiti realizzati con diverse tecnologie elettroniche (CMOS, TTL, ECL) è possibile costruire le cosiddette macchine elementari che si dividono in macchine combinatorie e macchine sequenziali.

## Tipologia
### Macchine combinatorie

I circuiti (o macchine) combinatori possono essere modellati matematicamente con funzioni booleane di variabili booleane del tipo $y=f(u)$ dove $y$ è il vettore delle uscite del sistema e $u$ è il vettore degli ingressi; come si nota dall'argomento della funzione $f$, i circuiti combinatori non sono dotati di stato, sono sistemi adinamici e quindi l'uscita del sistema in un istante $t$ dipende solo dall'ingresso applicato al sistema nello stesso istante e non dagli ingressi precedentemente applicati (supponendo per semplicità che non ci siano ritardi di propagazione tra ingresso e uscita).
Le macchine combinatorie elementari sono le seguenti:
* multiplexer
* demultiplexer
* decodificatori
* sommatori, divisori, moltiplicatori

### Macchine sequenziali

Le macchine sequenziali invece sono sistemi del tipo $y=f(x,u)$ dove $y$ è il vettore delle uscite, $u$ è il vettore degli ingressi e $x$ è il vettore degli stati. Quindi una macchina sequenziale è un sistema dinamico, la cui uscita in un generico istante dipende sia dall'ingresso sia dallo stato del sistema in quell'istante.
Le macchine sequenziali fondamentali sono:
* flip-flop
* memorie
* registri a scorrimento
* contatori

### Processori e sistemi

Interconnessioni di reti logiche sotto forma di circuiti integrati danno vita a sistemi elettronici di elaborazione più complessi (es. programmable logic device e microcontrollori) fino ad arrivare ai processori. Il termine architettura viene dunque usato in riferimento alla configurazione di quest'ultimi (architettura x86, CISC, RISC, SPARC, 32-bit, 64-bit, pipeline, ecc...) e, quando si parla di prodotti di consumo, si usa in contrapposizione alla parola software: le soluzioni hardware risolvono le loro funzionalità sotto forma di dispositivo dedicato, quelle software sono soluzioni sviluppate sotto forma di programmi eseguibili che possono essere caricati su dispositivi general purpose.
A livello più esteso il termine architettura si riferisce all'architettura logica del computer nel suo intero comprendendo processore, memoria, registri e collegamenti tra loro, scheda madre, schede di espansione, case o cabinet ecc...(architettura di von Neumann, architettura Harvard, architettura di un processore basato su registri generali ecc..). Nell'ambito dei sistemi informatici diffuse sono invece le architetture hardware n-tier, mentre nelle grandi realtà si parla di architettura telematica.

## Architettura software

L'architettura software è l'organizzazione fondamentale di un sistema, definita dai suoi componenti, dalle relazioni reciproche tra i componenti e con l'ambiente, e i principi che ne governano la progettazione e l'evoluzione. Questa definizione deriva dallo standard IEEE 1471-2000. Al pari delle architetture hardware, descrivere l'architettura software di un sistema significa elencarne le sottoparti costituenti ed illustrarne i rapporti interfunzionali. Più precisamente, l'architettura software include l'insieme delle decisioni significative sull'organizzazione di un sistema software. L'implementazione di architetture software complesse spesso dà vita a piattaforme software.
Nelle grandi realtà l'architettura software è parte dell'architettura telematica. Nell'ambito delle reti informatiche un esempio di architetture software sono le architetture di rete a strati, mentre nelle applicazioni web sono diffuse le architetture software multi-tier.

## Applicazione

Come l'architetto di un edificio definisce i principi e gli obiettivi di un progetto di costruzione come base per i piani del progettista, così anche l'architetto informatico definisce l'architettura del computer come base per le specifiche di progettazione.
Il termine viene utilizzato per diversi significati:
* L'architettura del set di istruzioni: la progettazione dell'architettura del processore di un computer e del suo set di istruzioni e tecniche come il parallelismo SIMD e MIMD;
* architettura hardware più generale e completa, come il cluster computing e le architetture NUMA;
* un'accezione meno formale si riferisce alla descrizione dei requisiti (soprattutto di velocità e connettività) o delle implementazioni progettuali dei vari componenti di un computer (come la memoria, la scheda madre, le periferiche elettroniche o, più in generale, il processore principale).