Semi-[OT] Von Neumann, Harvard und ?

Hallo allerseits!

Vor einiger Zeit wurde ich darauf aufmerksam, dass es unterschiedliche Rechner-Architekturen gibt. Im Wikipedia-Artikel zur Von-Neumann-Architektur habe ich im Abschnitt „Vergleich zur Harvard-Architektur“ gelesen, dass die Harvard-Architektur „eine der wichtigsten Konkurrenzarchitekturen“ zur Von-Neumann-Architektur ist.

Jetzt frage ich mich, welche Architekturen es denn noch gibt. Kann mir jemand hierzu etwas Hilfreiches sagen? Evtl. mit Links auf entsprechende Stellen im Netz?

Vielen Dank vorweg!

Gregor

Eigentlich sind die zwei Begriffe Schlagworte für getrennter bzw. gemeinsamer Speicherbereich für Code und Daten.

Nun kannst du über "etwas dazwischen" philosophieren:

  • Wie kann man verhindern, trotz gemeinsamem Speicher, in Datensegmenten Code auszuführen?

Oder aber dich fragen:

  • Gibt es komplett andere Arten von "Computern", z.B. Quantencomputer im Gegensatz zu unseren langweiligen Digitalrechnern.

etwas Hilfreiches

Hmm. Wobei soll das helfen?

michael_x:
Hmm. Wobei soll das helfen?

Dabei, mein „Meta-Wissen“ zu vertiefen.

Danke schon mal für Deinen Quantencomputer-Einwurf!

Gruß

Gregor

Es gab auch mal Analogrechner.

Gruß Tommy

Die Harvard Architektur ist übrigens der Grund weshalb PROGMEM so umständlich zu verwenden ist. Normale Anweisungen können nur mit RAM umgehen und um Flashspeicher anzusprechen muss man Adressen zwischen den Adressräumen umrechnen.

Es gibt noch eine modifizierte Harvard Architektur und das meiste was heute als Harvard Architektur bezeichnet wird fällt darunter. Dabei sind Instruktionen und Daten nicht so strikt getrennt wie theoretisch vorgesehen. Die Art wie das umgesetzt wird variiert allerdings.

Es gab auch mal Analogrechner

Die waren so viel schneller, das kann man gar nicht vergleichen :wink:

Kennt ihr noch Rechenschieber, Kinder?
Was ist deren Vorteil gegenüber digitalen Taschenrechnern?
Richtig: einmal eingestellt, kannst du alle Multiplikationen mit z.B. 3,14159 gleichzeitig ablesen.
Das ist unendlich mal schneller als digital (selbst wenn da jede einzelne Multiplikation nur wenige µs dauert).

Na ja, die zehn bis zwanzig Sekunden, bis das eine gewünschte Ergebnis abgelesen, überprüft (richtige Zehnerpotenz abgeschätzt), und auf Papier ist, wollen wir mal außen vor lassen. Und 3,14159 war natürlich auch Spaß :frowning:


Einen µC mit ein paar Byte RAM und einem Flash-Speicher kann man eigentlich nicht mit einem Computer vergleichen:
Der µC kommt gar nicht so weit, ein Programm auszuführen, sondern bleibt genaugenommen im BIOS hängen.

Da es gar keinen RAM mit ausführbaren Anweisungen gibt, hat sich das Thema "vonNeumann" erledigt und zwei Adressräume für Flash und RAM / IO sind sinnvoll.

michael_x:
Kennt ihr noch Rechenschieber, Kinder?

Ja, so einen habe ich hier herumliegen. Und den benutze ich ab und zu sogar.

michael_x:
Was ist deren Vorteil gegenüber digitalen Taschenrechnern?

Dass man sieht, wie „unwichtig“ die fünfte Nachkommastelle ist. Und dass sie ohne Strom funktionieren. Wahrscheinlich gibt es noch ein paar weitere Vorteile, aber das sind die beiden wichtigsten (IMO).

Gruß

Gregor

Es gibt sehr "spannende" Prozessoren.

z.B. der GA144
Welcher 144 heißt, weil er in 144 Zellen, je einen FA18A beinhaltet.

Der Prozessor arbeitet asynchron.
Es wird also kein interner Takt verwendet.

Der Befehlssatz mag einem absurd erscheinen, aber das Ding ist Turing vollständig.

michael_x:
Einen µC mit ein paar Byte RAM und einem Flash-Speicher kann man eigentlich nicht mit einem Computer vergleichen:
Der µC kommt gar nicht so weit, ein Programm auszuführen, sondern bleibt genaugenommen im BIOS hängen.

Da es gar keinen RAM mit ausführbaren Anweisungen gibt, hat sich das Thema "vonNeumann" erledigt und zwei Adressräume für Flash und RAM / IO sind sinnvoll.

Es ist eher umgekehrt.

Da man bei einer Harvard Architekture keinen Kode im RAM hat, braucht man viel weniger.
Ein von Neumann Rechner hat nur minimalen ROM/FLASH/... und maximalen RAM.

combie:
Der Befehlssatz mag einem absurd erscheinen, aber das Ding ist Turing vollständig.

Wer Brainfuck kennt, findet das gar nicht so erstaunlich. Brainfuck kommt mit gerade mal 8 Befehlen aus und ist trotzdem Turing-Vollständig.

Gruß

Gregor

Whandall:
Ein von Neumann Rechner hat nur minimalen ROM/FLASH/... und maximalen RAM.

Das hat aber nichts mit der Architektur zu tun, sondern mit dem Einsatzbereich. In den Bereichen, in denen auch der Arduino eingesetzt wird, hat auch ein von Neumann Rechner wesentlich mehr ROM/Flash als RAM. Es ist ja nicht so, als ob alle diese µC eine Harvard Architektur hätten. Das ist eine Spezialität der Atmel AtMegas/Tinys. Der Due, Teensy oder STM32 basierte µC's sind alles von Neumann Architekturen (ARM basiert) und auch da ist der Flash wesentlich größer als das RAM. Auch die bekannten 'klassischen' Microcomputer, von den z.B. Z80-Reihe und 8051 Reihe noch eingesetzt werden, sind von Neumann Architekturen.

Ein Vorteil der Harvard Architektur ist, dass man Programmspeicher und Datenspeicher unterschiedlich organisieren kann. Obwohl die AtMegas von der Datenverarbeitung her reine 8-Bit Rechner sind, ist der Programmspeicher als 16-Bit Speicher organisiert, was die Programmabarbeitung deutlich beschleunigt. Das RAM ist hingegen rein 8-bittig organisert.

MicroBahner:
Der Due, Teensy oder STM32 basierte µC's sind alles von Neumann Architekturen (ARM basiert)

ARM heisst nicht zwangsläufig von Neumann, ich weiss nicht welche Version von ARM in den obigen System läuft.

Is ARM a Von Neumann or Harvard architecture?

It depends what ARM you're talking about. The ARM7 uses the Van Neumann bus architecture (one bus for both data and instructions, and never both at the same time). The ARM9 uses a Harvard bus architecture (separate buses, one each for data and instructions).

Die Trennung von Speicherbereichen hat Vor- und Nachteile. Manche Prozessoren haben Spezialbefehle für I/O Geräte, andere betreiben memory-mapped I/O. Solange der Adressraum nicht vollständig belegt ist, kann alles an einem Datenbus hängen, mit einheitlichen Zugriffsbefehlen, DMA usw. Die Frage nach separaten Speicherbereichen stellt sich eigentlich erst, seitdem mehr Speicher als Adressen verfügbar ist. Damit stellt sich auch die Frage nach getrennten Bussen, mit parallelem oder asynchronem Betrieb, und ggf. unterschiedlichem Timing.

Die Trennung von Befehlen und Daten ist unverzichtbar für sichere Systeme, bei denen Daten weder versehentlich noch absichtlich als ausführbarer Code ausgeführt werden dürfen. Auch getrennte Caches können vorteilhaft sein. Doch wie kommen dann die Befehle in den Programmspeicher? Also muß ein Weg für Daten in jeden Speicherbereich hinein existieren, oder eine dynamisch änderbare Verwendung für Speicherbereiche vorgebbar sein. Bei den Controllern mit eingebautem Flash ist es allerdings kaum mehr notwendig, Programme dynamisch nachzuladen.

Whandall:
ARM heisst nicht zwangsläufig von Neumann, ich weiss nicht welche Version von ARM in den obigen System läuft.

Da ist ein Cortex M3 drin (beim Teensy bin ich mir nicht ganz sicher). Eigentlich ist der weder Fisch noch Fleisch :wink: Aus Performancegründen hat er zwar einen getrennten HW-Bus für Flash und RAM ( von daher Harvard ). Programmtechnisch ist es aber ein durchgehender Adressraum, und er kann daher linear programmiert werden ( van Neumann ). PROGMEM braucht man da nicht. Im Gegensatz zu den AtMegas merkt man programmtechnisch nichts von den getrennten HW-Bussen. Er programmiert sich wie ein reiner von Neumann-Rechner. Schreiben in den ROM-Bereich würde ja auch bei nur einem Bus nicht funktionieren. Ich meine mal gelesen zu haben, dass er auch Programme aus dem RAM ausführen kann - was dann eindeutig nicht mehr Harvard wäre.

Noch zwei Punkte:

Mit dem Aufkommen von Interpretern (Lisp, Basic, Forth...) und Skriptsprachen verwischt sich die Trennung zwischen Code und Daten. Zusammen mit Mikroprogrammierung ergibt sich damit sogar eine mehrstufige Organisation von ausführbarem Code. Soll dann eine Harvard-Architektur getrennte Bereiche für alle diese verschiedenen Befehlstypen haben?

DrDiettrich:
... Soll dann eine Harvard-Architektur getrennte Bereiche für alle diese verschiedenen Befehlstypen haben? ...

Was meinst Du mit „verschiedenen Befehlstypen“? Wie ich das sehe, gibt es nur einen Typ: Entweder etwas ist ein Befehl oder eben nicht.

Gruß

Gregor

Woran erkennst Du einen Befehl?

DrDiettrich:
Woran erkennst Du einen Befehl?

Daran, dass man ihn ausführen kann. Woran denn sonst?!

Gruß

Gregor

Beides (Daten und Befehle) sind nur Bytefolgen.

Gruß Tommy

Wer ist "man" bei der Ausführung? Ein Interpreter führt ein Programm aus, ein Prozessor führt seinen Maschinencode aus, und seine Subsysteme ihren Mikrocode. Maschinencode kann von Hardware oder von einem Emulator ausgeführt werden. Das ist alles sehr relativ :wink: