# Intel iAPX 432

L'Intel iAPX 432 fu il primo microprocessore a 32 bit prodotto da Intel. Il processore venne presentato nel 1981 ed era distribuito su tre integrati. L'iAPX 432 era il progetto che secondo Intel avrebbe dovuto guidare il mercato durante gli anni ottanta, il processore supportava nativamente il multitasking e la gestione della memoria protetta, caratteristiche importanti per il mercato dei server e dei micromainframe.
I moderni sistemi operativi implementano queste caratteristiche tramite l'utilizzo di molto codice e di processori ordinari. Il 432 invece integrava direttamente queste caratteristiche ma il progetto era estremamente complesso rispetto ai processori dell'epoca. La complessità del progetto impedì agli ingegneri Intel di creare una implementazione efficiente con le tecnologie dell'epoca e quindi il processore risultò essere molto lento e il progetto di sostituire l'architettura x86 con l'architettura dell'iAPX 432 fallì miseramente.
iAPX è l'acronimo di intel Advanced Processor architecture, la X deriva dalla lettera greca chi.

## Storia
### Sviluppo

Il progetto 432 iniziò nel 1975 con il nome in codice 8800, il seguito logico dei precedenti progetti 8008 e 8080. Il progetto era puramente a 32 bit e doveva essere la punta di diamante di Intel negli anni 80. Ma il progetto era eccessivamente ambizioso per le potenzialità tecniche dell'epoca e il processore fu diviso su più integrati.
Il nucleo del progetto erano i due integrati che formavano il General Data Processor (GDP). Il GDP era diviso in due integrati, il primo (il 43201) caricava e decodificava le istruzioni, il secondo (il 43202) eseguiva le istruzioni. Molti sistemi includevano un terzo integrato (il 43203) che si occupava dell'I/O. I due integrati del GDP complessivamente occupavano 97.000 transistor e quindi ogni integrato aveva circa 49.000 transistor. I due integrati erano molto grandi per l'epoca, basta pensare che il Motorola 68000 presentato nel 1979 aveva circa 68.000 transistor.
Nel 1983 Intel rilasciò due integrati addizionali per creale la iAPX Interconnect Architecture, il 43204 Bus Interface Unit (BIU) e il 43205 Memory Control Unit (MCU). Questi integrati permettevano la realizzazioni di sistemi con 63 processori.

### Errori di progetto

Molte caratteristiche del progetto iAPX 432 portarono il processore a essere molto più lento di quanto gli ingegneri si aspettassero inizialmente. L'implementazione del GDP su due chip limitò la velocità di collegamento del processore alla velocità della scheda madre, sebbene questo fosse un problema minore sicuramente rallentò il processore. La mancanza di una cache e di un buon numero di registri invece incise molto pesantemente sulle prestazioni. Il set di istruzioni inoltre era molto complesso e la decisione di utilizzare dei codici di lunghezza variabile per memorizzare le istruzioni rallentò l'unità di decodifica e la rese più costosa. Si ricordi che a quei tempi vi erano già studi sui codici di lunghezza fissa e sui miglioramenti di prestazioni che questi apportavano. Inoltre il bus BIU era progettato per gestire i guasti e quindi aveva circuiti aggiuntivi per gestire i guasti che ne complicavano lo sviluppo, ne innalzavano i costi e facevano stare per il 40% del tempo il bus in stato di attesa.
Studi successivi evidenziarono inoltre che i compilatori tendevano ad utilizzare con troppa disinvoltura istruzioni generali ad alto costo invece di utilizzare istruzioni più specifiche per il problema e più veloci. Per esempio i432 disponeva di un'istruzione di chiamata inter-modulo tra procedure molto costosa in termini di tempo macchina che i compilatori utilizzavano in ogni chiamata invece di utilizzare i salti e le istruzioni di link che sono molto più veloci da eseguire. Un'altra istruzione molto lenta controllava la memoria protetta e i compilatori la utilizzavano per gestire ogni singola variabile del sistema quando in realtà quell'istruzione serviva per proteggere i singoli programmi da errate scritture di altri programmi. Le variabili essendo all'interno del programma che le possedeva non avevano bisogno di effettuare controlli alla memoria protetta. Inoltre spesso il compilare passava i valori per copia invece che per riferimento generando delle continue copie degli elementi in memoria che rallentavano inutilmente il sistema.

### Impatto del progetto sulla ricerca

Il fallimento del progetto 432 fece concludere alla maggior parte dei progettisti che gestire a livello di microprocessore i linguaggi ad oggetti portava a un progetto lento e spesso il 432 veniva portato come contro esempio dai fautori del progetto RISC. Tuttavia anche senza supporto dei linguaggi ad oggetti il progetto 432 sarebbe stato inevitabilmente lento per via di un progetto discutibile. Dopo il progetto 432 nessuno cercò più di realizzare un processore con supporto dei linguaggio ad oggetti sebbene l'INMOS Transputer fornisse un supporto simile e fosse molto veloce.
Intel spese molti soldi, tempo e ingegneri esperti nello sviluppo del 432 e quindi era restia ad abbandonare totalmente il progetto dopo il primo fallimento. Un nuovo progettista capo, Glenford Myers partendo dal progetto 432 e tramite una collaborazione Intel/Siemens creò un nuovo processore chiamato i960 e una nuova architettura chiamata BiiN. Il processore non ebbe successo iniziale ma in seguito riscosse un discreto successo come processore per applicazioni embedded. Il processore i960 poteva gestire la memoria protetta ma questa caratteristica era disponibile solo per la versione militare.

## Architettura
### Gestione degli oggetti in memoria

L'iAPX 432 gestiva a livello hardware il supporto per i linguaggi di programmazione orientati agli oggetti. Il processore utilizzava la memoria segmentata e poteva gestire fino a 2$^{24}$ segmenti di 64 Kilobyte ognuno e forniva un indirizzamento virtuale di 2$^{40}$ byte. Lo spazio fisico indirizzabile era di 2$^{24}$ byte (16 Megabyte).
I programmi non possono accedere direttamente ai dati o alle istruzioni, i programmi per accedere alla memoria devono specificare il segmento e lo spiazzamento. I segmenti sono collegati alla memoria fisica tramite una tabella chiamata Access Descriptors (AD) che contiene un indice degli oggetti allocati e una tabella che specifica i diritti di accesso degli oggetti. La tabella permette di distinguere tra dati e oggetti e il processore impedisce ai programmi di utilizzare dati come oggetti o viceversa.
La definizione a livello di sistema degli oggetti permette di definire un singolo blocco per l'oggetto o un blocco per l'oggetto e un blocco per i dati. Ogni oggetto ha un campo che ne specifica il tipo e che viene controllato dal microcodice in modo da evitare che un oggetto possa essere utilizzato da un oggetto di un altro tipo. I programmatori possono creare nuovi oggetti che sfrutteranno le potenzialità di controllo dei tipi offerte dal processore.
Nella prima versione dell'architettura iAPX 432 gli oggetti erano formati da un segmento contenente l'oggetto vero e proprio e un segmento opzionale (dipende dal tipo di oggetto) contenente i dati specificato dall'access descriptor.
La terza versione dell'architettura riunì gli oggetti e i dati (fino a una dimensione di 128 KB) in un singolo segmento. La parte alta conteneva l'oggetto mentre la parte bassa conteneva i dati, questo stratagemma riduceva significativamente gli accessi alla memoria e raddoppiava lo spazio virtuale disponibile.

### Deallocazione della memoria

I programmi non potevano richiedere esplicitamente la deallocazione degli oggetti non utilizzati dato che non esistevano istruzioni per farlo. Il processore implementava un algoritmo che in parallelo analizzava gli oggetti e li segnalava come utilizzati o meno. Il processore provvedeva alla loro rimozione quando non erano utilizzati.

### Multitasking e comunicazione tra processi

Il microcodice includeva istruzioni per la gestione del multitasking, il processore rappresentava i processi in memoria come oggetti. Anche le porte di comunicazione tra i processi erano degli oggetti. Ogni processo era dotato di una porta di comunicazione e quando il processo è in idle invia un messaggio tramite la sua porta. Quando un processo termina il suo quanto di tempo il processore lo rimette in coda e invia un messaggio ad un nuovo processo per attivarlo.
La comunicazione tra processi è ottenuta tramite le porte di comunicazione. Le porte di comunicazione sono sostanzialmente delle porte FIFO che mettono in coda i messaggi ricevuti dal processo mentre il processo li elabora. Alcune istruzioni sono bloccanti per il processo mentre altre sono progettate per essere non bloccanti.
Uno degli aspetti eleganti dell'architettura iAPX 432 è che le porte di comunicazioni unificano il concetto di comunicazione interprocesso e di messaggi di sistema. Questo semplifica la gestione dei processi e la loro implementazione.

### Multiprocesso

L'iAPX 432 ha una gestione hardware del multiprocesso, il processore è in grado di gestire fino a 64 processori (combinazioni di GDP e IP). Normalmente tutti i GDP condividono il lavoro comune tramite un sistema di comunicazione basato su porte sebbene fosse possibile assegnare a dei processori specifici compiti. Con un adeguato hardware i processori potevano essere aggiunti o rimossi mentre il sistema era in esecuzione.

## Tolleranza ai guasti

Fin dall'inizio i processori della serie iAPX 432 inclusero il supporto per la tolleranza ai guasti detta anche Functional Redundancy Checking (FRC). Tutti gli integrati della famiglia 432 potevano essere configurati per funzionare in modo ridondante. Il primo componente funzionava in modalità master mentre il secondo integrato funzionava in modalità check. Il secondo integrato eseguiva le stesse istruzioni del master e verificava se i risultati coincidevano.
Per avere la piena tolleranza ai guasti il sistema non deve solo rilevare un guasto ma deve poter anche recuperare le situazioni di errore. Questo si può ottenere collegando due moduli ridondanti e ottenendo la configurazione Quad Modular Redundancy (QMR). In una configurazione QMR il primo modulo FRC lavora come primario, mentre il secondo lavora in modalità ombra. I moduli FRC si alternano nello svolgimento delle elaborazioni. Nel caso di rilevamento di un guasto il modulo viene disabilitato e il modulo gemello lo sostituisce. In questo caso il gestore del sistema può decidere di lasciare il modulo senza tolleranza e continuare le elaborazioni, può attivare delle unità di riserva o può disabilitare il modulo e ripartire il lavoro in modo da ottenere una degradazione controllata della prestazioni.

### I/O

L'integrato 43203 Interface Processor (IP) permetteva a un processore convenzionale di venir connesso all'Attached Processor (AP) di un sistema iAPX 432. L'AP è un controller intelligente di I/O della memoria. L'IP permetteva l'accesso agli oggetti memorizzati nel sistema iAPX 432 e permette la loro modifica.
L'IP inoltre offre una modalità speciale di accesso alla memoria che elimina le restrizioni e permette un accesso completo alla memoria. Questa modalità è stata prevista principalmente per fornire supporto durante l'avvio del sistema o durante le operazioni di debug.