Quali sono i diversi tipi di architetture informatiche?


20

Sto sfogliando il libro "Elementi di sistemi informatici". Questo libro insegna come costruire un intero computer da zero. Mentre stavo solo sfogliando i capitoli sull'architettura del computer, ho notato che tutto si concentrava sull'architettura di Von Neumann. Ero solo curioso di sapere quali sono le altre architetture e quando e dove vengono utilizzate.

Ne conosco solo due, uno è Von Neumann e il secondo è Harvard. Conosco anche RISC che viene utilizzato in uC di AVR.


2
C'è un terzo, che viene modificato Harvard. Un Harvard puro non sarebbe in grado di utilizzare la stessa memoria per conservare sia i programmi che i dati. Pertanto quasi ogni implementazione di Harvard è stata modificata per consentire di indirizzare la memoria delle istruzioni come dati.
Gorilla,

1
ottima domanda.
Tipo anonimo

Risposte:


27

Esistono molti tipi diversi di architetture informatiche.

Un modo di classificare le architetture informatiche è il numero di istruzioni eseguite per orologio. Molte macchine informatiche leggono un'istruzione alla volta e la eseguono (o fanno un grande sforzo per agire come selo fanno, anche se internamente fanno cose stravaganti e super ordinate). Io chiamo tali macchine "von Neumann", perché tutte hanno un collo di bottiglia di von Neumann. Tali macchine includono architetture CISC, RISC, MISC, TTA e DSP. Tali macchine includono macchine accumulatrici, macchine per la registrazione e macchine impilatrici. Altre macchine leggono ed eseguono diverse istruzioni alla volta (VLIW, super-scalare), che infrangono il limite di un'istruzione per orologio, ma colpiscono ancora il collo di bottiglia di von Neumann con un numero leggermente maggiore di istruzioni per orologio. Tuttavia altre macchine non sono limitate dal collo di bottiglia di von Neumann, perché pre-caricano tutte le loro operazioni una volta all'accensione e quindi elaborano i dati senza ulteriori istruzioni. Tali macchine non Von-Neumann includono architetture del flusso di dati,

Un altro modo di classificare le architetture dei computer è attraverso la connessione (e) tra la CPU e la memoria. Alcune macchine hanno una memoria unificata, in modo tale che un singolo indirizzo corrisponda a un singolo posto nella memoria e quando quella memoria è RAM, è possibile utilizzare quell'indirizzo per leggere e scrivere i dati, oppure caricare quell'indirizzo nel contatore del programma per eseguire il codice. Chiamo queste macchine macchine Princeton. Altre macchine hanno diversi spazi di memoria separati, in modo tale che il contatore del programma si riferisca sempre alla "memoria del programma", indipendentemente dall'indirizzo in cui è caricato, e le normali letture e scritture vanno sempre alla "memoria dei dati", che è una posizione separata che di solito contiene diversi informazioni anche quando i bit dell'indirizzo dati risultano identici ai bit dell'indirizzo di memoria del programma. Quelle macchine sono "pure Harvard" o "

Alcune persone usano una definizione ristretta di "macchina von Neumann" che non include le macchine Harvard. Se sei una di quelle persone, quale termine useresti per il concetto più generale di "una macchina che ha un collo di bottiglia di von Neumann", che include sia le macchine Harvard che Princeton, ed esclude NON-VON?

La maggior parte dei sistemi embedded utilizza l'architettura Harvard. Alcune CPU sono "pure Harvard", che è forse la disposizione più semplice da costruire nell'hardware: il bus degli indirizzi per la memoria del programma di sola lettura è esclusivamente collegato al contatore del programma, come molti primi Microchip PICmicros. Alcune macchine Harvard modificate, inoltre, inseriscono anche costanti nella memoria del programma, che può essere letta con un'istruzione speciale "lettura dati costanti dalla memoria programma" (diversa dall'istruzione "lettura dalla memoria dati"). Il software in esecuzione nei suddetti tipi di macchine Harvard non può modificare la memoria del programma, che è effettivamente la ROM per quel software. Alcuni sistemi integrati sono "auto-programmabili", in genere con memoria di programma nella memoria flash e uno speciale "cancella blocco di memoria flash" e un'istruzione speciale "Scrivi blocco di memoria flash" (diversa dall'istruzione normale "Scrivi nella memoria dati"), oltre all'istruzione "leggi i dati dalla memoria del programma". Numerosi microchip PICmicros e Atmel AVR più recenti sono macchine Harvard modificate auto-programmabili.

Un altro modo per classificare le CPU è in base al loro orologio. La maggior parte dei computer sono sincroni: hanno un unico orologio globale. Alcune CPU sono asincrone - non hanno un orologio - inclusi ILLIAC I e ILLIAC II, che un tempo erano i supercomputer più veloci sulla terra.

Aiutate a migliorare la descrizione di tutti i tipi di architetture informatiche su http://en.wikibooks.org/wiki/Microprocessor_Design/Computer_Architecture .


2
Wow, vergogna per te per aver trattenuto quella conoscenza per così tanto tempo DOPO che ho posto la domanda.
Rick_2047,

3
@Rick - Sembra che la risposta abbia richiesto molto tempo per comporre. Sii grato che David abbia avuto il tempo di rispondere alla tua domanda! Alcune persone non operano nello stesso programma in cui ti trovi.
Kevin Vermeer,

2
@reemrevnivek che era inteso come uno scherzo.
Rick_2047,

Sarebbe bello se questa risposta fosse contrassegnata come risposta wiki della comunità.
Trygve Laugstøl,

8

CISC è "l'opposto" di RISC. Mentre RISC preferisce avere istruzioni semplici che sono facili da ottimizzare per il compilatore e spesso della stessa dimensione, CISC è appassionato di istruzioni complesse di varie dimensioni.

Ad esempio, un'istruzione pop in CISC modificherà il puntatore dello stack e posizionerà i dati dallo stack in un altro registro. Tuttavia, un processore RISC legge i dati con un'istruzione e quindi modifica il puntatore dello stack con una seconda istruzione. (generalmente; ci sono alcune eccezioni, come il PowerPC che può aggiornare il puntatore dello stack e trasferire i dati nello stack, ma questa è un'eccezione)

Poiché le istruzioni RISC hanno tutte le stesse dimensioni, i disassemblatori sono più facili da scrivere. Anche la progettazione del processore è più semplice, poiché la pipeline non deve tenere conto delle diverse dimensioni delle istruzioni. Tuttavia, la densità del codice CISC tende ad essere migliore, sia perché le istruzioni complesse richiedono meno byte per rappresentare lo stesso numero di operazioni, sia perché la lunghezza variabile delle istruzioni consente una certa "compressione".

Esistono anche altre architetture esotiche, come VLIW / EPIC. Questo tipo di architettura è stata progettata pensando all'elaborazione parallela. Tuttavia, non hanno funzionato molto bene, perché hanno un onere molto pesante sul compilatore per l'ottimizzazione, mentre altre architetture hanno finestre di istruzioni elaborate che alleggeriscono un certo onere di ottimizzazione dal compilatore.


1
se ti piace, accettalo.
Kortuk,

5

Bene, c'è qualcosa come l'ENIAC, in cui hai essenzialmente singole ALU e le hai "programmate" collegando l'uscita di un alluminio all'ingresso di un altro alluminio che avrebbe eseguito l'operazione successiva su quella variabile intermedia. I tuoi "registri" e la memoria sono i fili che collegano l'alus.

Di recente ho acquistato il libro "I primi computer - Storia e architetture (Storia dell'informatica)", che si concentra in parte su questo argomento esatto. Non consiglio l'acquisto di questo libro, sebbene sia solo una raccolta di articoli accademici, difficile da leggere e sospetto che probabilmente sia stato pubblicato (gratuitamente) altrove. (Ci ho rinunciato prima di finire l'introduzione)

Una volta che la memoria è stata inventata e diventata pratica, ci siamo sistemati nei due popolari Von Neumann e Harvard. L'esecuzione da ricollegamento, schede perforate, nastro di carta o cose del genere è diventata meno pratica. E c'è uno stack based (la zpu per esempio), che sospetto probabilmente rientri nella categoria Harvard e non nella sua.

Che dire delle piattaforme von neumann che si avviano di un flash di sola lettura (in uso normale) su un'interfaccia di memoria e hanno una ram di dati di lettura / scrittura in un'altra (che a volte può operare su entrambi in parallelo) ma dal punto di vista dei programmi sono in una spazio indirizzo? O quelli che hanno più memorie / interfacce interne ed esterne che funzionano tutte in parallelo ma sono von Neumann per essere nello stesso spazio di indirizzi.

E a che serve una piattaforma Harvard in cui il processore non può accedere alla memoria delle istruzioni come dati per modificare / aggiornare il bootloader o per caricare il programma successivo nel bootloader? Perché questa non è un'architettura von neumann? Il processore sta eseguendo e operando sulla stessa memoria sulla stessa interfaccia in modo probabilmente sequenziale (istruzioni di recupero e scritture di memoria che non si verificano contemporaneamente)?

Le due popolari architetture basate sulla memoria sono più vicine di quanto non siano diverse nelle attuali implementazioni IMO.

Dove cade la GPU? O l'azienda in cui lavoro, i processori di rete (NPU). Laddove si disponga di questi microingegneri (processori) per scopi speciali relativamente piccoli che si eseguono da una ram del programma simile a quella di Harvard (indirizzabile ma non si desidera farlo per motivi di prestazioni), operare su vari RAM di dati ciascuno con il proprio spazio di indirizzi separato (processore separato istruzioni per ogni spazio), (gli spazi di memoria che operano in parallelo) e attraverso quegli arieti distribuiscono i dati intermedi per fare il calcolo successivo fatto dal prossimo microengine in un alu cablato (eniac) come la moda? Come lo chiameresti? Npus e gpus sono solo architetture harvard modificate di fantasia?


"a che serve una piattaforma harvard in cui il processore non può ... caricare il prossimo programma da eseguire?" Molte CPU hanno un programma fisso che non può essere modificato dal software in esecuzione su quella CPU. Un vantaggio di questa disposizione è che rende impossibile "murare" il sistema con un bug che scrive nella memoria casuale, o un cattivo aggiornamento del software, o anche con un buon aggiornamento del software e un'interruzione dell'alimentazione non temporizzata. Rende più difficile l'aggiornamento del software, ma in realtà quante volte hai cambiato il software nel tuo forno a microonde?
davidcary,

2
Sul microonde nessuno, ma passo una buona parte del mio tempo a programmare microcontrollori e ricaricare software molte volte al giorno. Essendo limitato a piccoli sistemi basati su rom senza bug, il problema del bricking può essere facilmente risolto usando von neumann. I sistemi descritti descrivono poco l'utile per le prestazioni dei bus separati, l'altra caratteristica dell'architettura di Harvard. Quindi il mio punto era che l'architettura di Harvard non si adatta bene senza un modo per caricare i programmi, rendendola in qualche modo obsoleta.
old_timer

1
Hmm, chiamano cortv-m3 harvard quando non lo è davvero, lo stesso con avr (beh lo chiamano un harvard modificato). Sono sicuro che ci sono alcuni processori di architettura di Harvard pura (PIC), e prima era più puro von Neumann, ma la maggior parte sono Harvard o von Neumann modificati (accessi ai dati e alle istruzioni in parallelo) che li rendono più gli stessi che diversi. È qui che mi ero diretto nella mia risposta, il puro Harvard e il puro von Neumann stanno rapidamente diventando obsoleti. Il poster vuole sapere cos'altro c'è là fuori, beh quasi tutto là fuori.
old_timer

4

Entrambe le architetture von Neumann e Harvard possono essere utilizzate con processori RISC come AVR e ARM. L'AVR usa Harvard, mentre alcuni chip ARM usano von Neumann e altri usano Harvard.


-1 per ordinarti sotto le risposte più interessanti.
Oskar Skog,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.