Home Computer Prozessor Basics Site Map counter

Die Harvard und von Neumann Architektur

Es gibt in der Informatik mehrere Möglichkeiten einen Computer aufzubauen. In der Praxis haben sich zwei Architekturen durchgesetzt. Es geht vor allem um das Prinzip wie die Daten (Variablen) und der Code (die Programme) angesprochen werden. Es gibt die Möglichkeit diese beiden zu trennen oder zusammenzulegen. Ihr PC arbeitet nach der Von-Neumann Architektur, bei der die beiden Bereiche zusammengelegt sind und einen gemeinsamen Speicher bilden. Das ist nicht nur bei den X86 Prozessoren so, sondern auch den Vorgängern und anderen populären Mikroprozessoren in PC's und Heimcomputern wie der 68er Linie und der 80er Linie oder den Power-PC.

Bei der Von Neumann Architektur gibt es einen Datenbus, an dem das gesamte RAM hängt. Daten (Variablen, Text, Bilder ....) und Code (Betriebssystem, Anwendungsprogramme, etc...) teilen sich diesen Speicher. Das hat Vor- und Nachteile. Zum einen ist diese Architektur sehr flexibel. Ein Prozessor kann in verschiedensten System eingesetzt werden. Bei einem PC-System werden ja unterschiedlichste Anwendungsprogramme eingesetzt. Wie viel Speicher man für Code oder für Daten braucht ist daher nicht vorhersehbar. Der gleiche Prozessor kann Videos bearbeiten und dabei große Datenmangen verarbeiten. Er kann aber auch viele Anwendungsprogramme und ein großes Betriebssystem im Speicher haben und nur wenige Daten verarbeiten, wenn z.B. der Anwender ein Officeprogramm im Speicher hat aber nur einige Seiten Text damit bearbeitet - der Text belegt vielleicht einige Kilobyte, das Officeprogramm einige Megabyte. Die flexible Aufteilung ermöglicht einen universellen Einsatz.

In einem hypothetischen Rechner könnte in Maschinensprache eine Addition z.B. so ablaufen:

10000 MOV R1,(adresse1) ; Hole den inhalt der Adressstelle die mit "adresse1" bezeichnet ist in das Register R1

10003 MOV R2,(adresse2) ; Hole den inhalt der Adressstelle die mit "adresse2" bezeichnet ist in das Register R1

10006 ADD R1,R2 ; Addiere die beiden Register R1 und R2 und lege das Ergebnisse in R1 ab.

10007 CALL Ausgabe ; Rufe die Unterroutine Ausgabe auf

Die Zahlen links geben den Befehlszähler an. Bei einer von Neumann Architektur wechseln sich nun Zugriffe an die Adressen über 10000 ab, um Befehle zu holen und Zugriffe auf die Adressen "adresse1" und "adresse2" um Daten zu holen. Das zeigt den grundlegenden Nachteil dieser Architektur.

Für das Verständnis ist noch wichtig zu wissen, dass die Befehlsausführung in mehreren Schritten erfolgt:

  1. Holen des Befehls aus dem Speicher
  2. Dekodieren des Befehls - Welche Operation ist gemeint?
  3. Ausführen des Befehls

Für jeden Schritt benötigt eine CPU mindestens einen Taktzyklus, manchmal auch mehrere. So ist z.B. bei dem Ladebefehlen, nachdem klar ist, dass der Befehl ein Ladebefehl ist und es müssen die Daten von Adresse1 und Adresse2 geholt werden.

Von Neumann architekturDer grundlegende Nachteil der Von-Neumann Architektur ist, dass es nur einen Datenbus und nur einen Adressbus für beide Speicherinhalte gibt. Das hat Folgen. Zum einen laufen nun Code und Daten über einen Bus. Das verlangsamt die Programmusführung. (die Zugriffe auf 1000x und Adresse1/2 können nicht parallel erfolgen). Zum einen kann während die Daten gelesen und geschrieben werden nicht schon der nächste Befehl über den Bus geholt werden, zum anderen ist eine parallele Verarbeitung von Daten und Code zwar nicht unmöglich, aber doch deutlich komplizierter als bei der Harvard Architektur. Sie wurde nach dem österreichisch-ungarischen Mathematiker John von Neumann benannt, der sie 1945 skizzierte. Die wesentlichen Grundlagen hatte aber schon Konrad Zuse in seinen Prototypen für Computer verwirklicht. John von Neumann entwarf nicht nur die Architektur eines gemeinsamen Speichers für Daten und Befehle, sondern im wesentlichen die Grundarchitektur heutiger Computer mit den Elementen Rechenwerk, Steuerwerk und Speicher und den grundlegenden Befehlen einer Maschinensprache inklusive der Möglichkeit zu Verzweigungen. Daher werden sehr oft heutige Rechner allgemein als "Von Neumann Computer" bezeichnet, wobei dieser Begriff weiter geht als nur die Architektur des Speichers. In der Frühzeit des Computers gab es auch andere Architekturansätze und auch Mischformen zwischen analogem und digitalem Computer.

Die Harvard-Architektur trennt dagegen Daten und Code. Es gibt zwei Datenbusse und sehr oft auch zwei Adressbuse. Die Vorteile: Während ein Befehl dekodiert wurde können die Daten eingeladen werden, während der nächste Befehl geholt wird können die Ergebnisse geschrieben werden. Die Trennung beider Bereiche macht es einfacher die Geschwindigkeit zu steigern, da die Verarbeitung der Daten auf dem Speicher (ein Teil der Programmausführung) parallelisierbar ist. Sie wurde nach dem Rechner Harvard Mark I benannt, der 1944 entworfen wurde.

Harvard ArchitekturDie Trennung hat dann Vorteile, wenn bekannt ist, wie groß der Datenbereich ist. Prozessoren mit der Harvard-Architektur sind daher oft eingesetzt für Steuerungsaufgaben, Prozessdatenverarbeitung, Embedded Controller weniger als universelle Prozessoren für jede Aufgabe. Sehr oft waren bei früheren Harvard Architekturen die beiden Bereiche unterschiedlich groß und auch in unterschiedlichen Technologien gefertigt. Der Datenbereich ist dann relativ klein und in RAM-Chips gefertigt und der Programmteil sehr groß und ein preiswerter, nicht flüchtiger Festwertspeicher z.B. ROM's oder EEPROMs. Selbst wenn die gleiche Technologie verwendet wird können unterschiedlich schnelle Chips zum Einsatz kommen. z.B, langsame Chips für den großen Befehlsspeicher und schnelle Chips für den kleinen Datenspeicher auf den aber sehr häufig zugegriffen wird.

Das verhindert auch das Software das Programm verändert. Sicherheitsprobleme die heute bei komplexen Betriebssystemen gegeben sind, entstehen dadurch das Code und Daten nicht getrennt sind. Programmcode kann anderen Programmcode überscheiben (selbstmodifizierender Code) - das kann dadurch verhindert werden, das bei der Harvard Architektur der Programmcode in einem unveränderlichen Speicher steckt. Vom Problem, dass Daten sogar Code überschreiben (sogenannte Buffer-Overflows) ganz zu schweigen, die sind Prinzip bedingt bei der Harvard Architektur nicht möglich, da im Datenbereich kein Code stehen kann.

Die Harvard Architektur ermöglicht es, Prozessoren mit einer relativ geringen Integrationsdichte zu bauen, die trotzdem recht schnell sind. Dies liegt darin, dass die Architektur viel einfacher eine Parallelisierung zulässt. Schon durch die Entkopplung von Daten- und Programmbus wird die Programmausführung beschleunigt. Das Steuerwerk kann parallel Daten von beiden Bussen holen und während der Befehl dekodiert wird Daten ablegen. Der wichtigste Nachteil ist, dass die Busse doppelt vorhanden sind. Das ist nicht trivial, da man dann doppelt so viele Daten- und Adressleitungen vom Prozessor nach außen führen muss. Bei CPUs für PC bedeutet dass mehr Pins auf dem Sockel, aber auch mehr Leitungen zu den RAM-Bausteinen und Modulen. An diesen hat sich seit der Einführung des Pentium nicht viel geändert: er hat einen 64 Bit Daten und 36 Bit Adressbus (typisch werden nur 32 Adressbits genutzt). Dagegen benutzt ein 2014 aktueller Prozessor intern Pfade mit bis zu 256 Bit Breite. Bei Großrechnern wo Speicher und CPU auf mehreren Platinen untergebracht werden ist das Platzproblem durch die vielen Punkt-zu-Punkt Verbindungen noch stärker gegeben.

Verbunden mit der Harvard Architektur, aber nicht dazu gehörend, ist sehr oft eine drastische Vereinfachung der Architektur. Dies sind üblicherweise auch Elemente von RISC Architekturen. dazu gehören Punkte wie:

Die Von Neumann Architektur basiert dagegen auf eher komplexen Befehlen, mit unterschiedlichen Breiten für die verschiedenen Daten, (verschiedene Datenformate wie Byte, Wort, Doppelwort....) da so der vorhandene Speicher am besten ausgenutzt werden kann.

Zahlreiche Computer in der Raumfahrt verwendeten die Harvard Architektur. Bei Architekturen die nur kleine Befehlswortbreiten hatten, spielte auch eine Rolle, das so der Programmspeicher durch zwei Bussysteme doppelt so groß war. Sehr oft waren aber auch Breite der Datenwort und Adressraum getrennt, z.B. 13 Bits für ein Datenwort und 2 x 13 Bits = 26 Bits für den Adressbereich.

Eine gewisse Übertragung des Harvard Konzepts auf die von Neumann Architektur ist die, von getrennten Segmenten für Code, Daten und Stack, wie sie auch die X86 Architektur übernommen hat. Moderne Prozessoren können auch verhindern, das Code im Datensegment ausgeführt wird und so die Systemsicherheit erhöhen. Damit deklarieren sie einen Teil des Codes als Datenbereich und einen anderen als Codebereich ohne das der Speicher physisch wie in der Harvard Architektur getrennt ist.

Beispiele für Systeme

Die meisten Mikroprozessoren die in Heimcomputern, Spielekonsolen und PC's eingesetzt werden, verwenden und verwandten die von Neumann Architektur so:

Von Harvard Systeme in der Raumfahrt:

Die Apollo AGC zeigt sehr gut die Trennung der Daten und Programme und die Einflüsse auf die Architektur.

Der Programmspeicher hatte einen Adressbereich von 16 Bits (64 kWorte, von denen 36 kWorte genutzt wurden). Er war als Permanentspeicher ausgelegt, wobei eine besondere Abart des Kernspeichers eingesetzt wurde. Er war fest verdrahtet und nicht veränderlich.  (ob ein Draht um einen Ringern herumführte, legte fest ob eine "1" oder "0" ausgelesen wurde). Der Speicher für die Daten war auch Ringkernspeicher, jedoch wie gewöhnlicher Ringkernspeicher konnte sein Inhalt verändert werden.

Die 16 Bit für eine Instruktion zerfielen in:

Die restlichen 15 Bits wurden bei Befehlen so aufgeteilt:

Bei Daten dagegen so:

Heute beschränkt sich die Harvard Architektur auf Spezialaufgaben, bei denen es zum einen auf eine hohe Rechenleistung ankommt, aber gleichzeitig eine normale CPU ausscheidet wie Signalverarbeitung. Der ursprüngliche Vorteil von Harvard  ist, dass die Architektur einfacher ist und trotzdem eine hohe Geschwindigkeit resultiert hat die von Neumann Architektur durch Einführung von mehreren Rechenwerken, heute sogar mehreren Kernen pro CPU kompensiert. Pipelines verringern die Dekodierzeit und synchrone RAM's liefern die folgenden Datenworte erheblich schneller. Caches können schon dekodierte Anweisungen aufnehmen und auch den zusätzlichen Zeitaufwand für das Holen der Daten reduzieren. Weiterhin egalisieren sehr breite Datenbusse, die breiter als die Verarbeitungsbreite sind, die Vorteile der Harvard Architektur. Dies nutzen z.B. alle x86 Prozessoren ab dem Pentium, der einen 64 Bit Datenbus bei nur 32 Bits Verarbeitungsbreite aufweist.

Heute ist die Anwendung der Harvard Architektur beschränkt auf Anwendungen wo es um Steueraufgaben geht (Programmgröße liegt fest, wenige Daten zu bearbeiten). Der entsprechende Chip aber einfach oder stromsparend sein soll. Beispiele dafür sind die AVT Chips von ATMEL, (stecken in vielen Roboterbausätzen, waren Basis für Arduino oder als Embedded Controller) die PIC Serie von Microchip Technologies, und die ARM Cortex M3 CPU (die meisten ARM Prozessoren haben keine Harvard Architektur).

Eine zweite Gruppe sind die Digitalsignalverarbeitungsprozessoren. (DSP) Hier ist das genaue Gegenteil vorherrschend: Daten müssen sehr schnell verarbeitet werden, das Programm ist viel kleiner als der Datenspeicher. Derartige CPU's können z.B. Videosignale transkodieren oder Verschlüsslungen durchführen, werden heute aber, wenn es nur um eine Aufgabe geht (also keine universelle Programmierung erforderlich ist) durch dezidierte Hardware ersetzt, die genau diese Aufgabe als Verschaltung durchführt. Das ist bei Großserien preiswerter, wie sie z.B. bei Konsumerelektronik vorliegen.

Signalprozessoren wie der erwähnte ADSP 210xx Serie, aber in einer modifizierten Forme auch die Texas Instruments TMS 320xxx und die Motorola DC 560xx Serie ,setzen noch immer auf die Harvard Architektur.

Wie bei anderen Konzepten verschwimmen die Begriffe aber im Laufe der Zeit, das heißt die Architekturen versuchen Vorteile des anderen Konzepts zu übernehmen. So haben viele moderne CPU's die nach von Neumann arbeiten, getrennte Caches für Code und Daten, setzen also in den Caches die Harvard Architektur ein. Die erwähnten Signalprozessoren haben die Harvard Architektur dahingehend modifiziert, dass sie zwei Datenspeicher haben. Dies erklärt sich daraus, dass eine häufige Operation nämlich die Berechnung mit zwei Operanden (Addition, Multiplikation, Subtraktion, Division) so beschleunigt werden kann.

Anleihen der Hardvard-Architektur in der von Neumann Architektur

Auch wenn die meisten Computer die Von Neumann Architektur einsetzen, einfach weil der Systemaufbau einfacher ist (es gibt nur einen Datenbus und einen Adressbus und nur eine Art von Speicher) und sie natürlich auch den Vorteil hat das man den Speicher frei aufteilen kann, was vor allem für Rechner wichtig ist die keine vorgegebene aufgabe haben, sondern beim Start ein Betriebssystem laden, dass dann beliebige Programme ausführen kann, so bietet Harvard doch einige Vorteile die man versucht in der von Neumann Architektur einzusetzen.

Das erste ist es im Speicher Daten von Code zu trennen. Das geschieht meistens auch ohne Unterstützung so üblicherweise befinden sich bei Programmen die Daten hinter dem Programm und es folgt dann ein unbenutzter Bereich für dynamische Daten, der Heap. Viele Prozessoren formalisieren dies aber. Die x86 Serie hat z.B. ein Codesegment und ein Datensegment. Befehle werden immer vom Codesegment aus geholt, Daten immer aus dem Datensegment. Die Trennung erfolgt durch Segmentregister die angeben wo im Speicher beide Segmente liegen. Als Sicherheitsprobleme durch Viren aus dem Internet immer mehr zunahmen hat man in der x86/IA64 Architektur auch einen Schutz eingebaut, das NX Bit. Ist es vom Betriebssystem gesetzt, so kann ein Datensegment als nicht ausführbar gekennzeichnet werden. das bedeutet man kann nicht eine Adresse aus diesem Daten Segment in den Programmzähler laden und so den Code an dieser Stelle ausführen. In diesem falle wird ein Hardware Interrupt ausgelöst der vom Betriebssystem abgefangen wird. So kann Schadsoftwäre bekämpft werden. Windows XP nutzt das NX-Bit ab dem Service Pack 2. Andere Prozessoren wie er Alpha oder Power PC nutzten ähnliche Schutzvorrichtungen schon vorher.

Eine noch größere Bedeutung bekamen die beiden Segmente als es um die Geschwindigkeitserhöhung der Prozessoren ging. Code unterscheidet sich Daten auch dadurch das er in Teilen sequentiell durchlaufen wird (es gibt immer Sprünge und Verzweigungen, doch dazwischen wird ein Befehl nach dem anderen durchgeführt und er eine hohe Lokalität hat, das heißt bestimmte Codebereiche werden immer wieder durchlaufen. So Kernroutinen des Betriebssystems oder wichtige Berechnungsroutinen. Daten haben diese Lokalität und diesen sequentiellen Zugriff nicht, zumindest nicht beides gemeinsam (Felder werden oft linear durchlaufen aber sie sind meistens groß, also ist die Lokalität oft nicht gegeben). So hatte schon der 8086 einen Prefetch: er holte während ein Befehl verarbeitet wurde schon mal die nächsten Bytes aus dem Codesegment die auf diese Adresse folgten. Bei Daten gab es dies nicht, es machte hier weniger sinn, zudem gibt es bei Daten auch viel mehr Schreibzugriffe (nicht selbst modifizierender Code hat in der Regel fast keine Schreibzugriffe in das Codesegment).

Als man Caches in Prozessoren einführte, stellte sich bald heraus, das man die Performance steigern konnte wenn es nicht einen Cache für den gesamten Speicher gab sondern einen getrennten für das Codesegment und das Datensegment eben aufgrund der Unterschiedlichen Zugriffsmuster. Bei manchen Prozessoren waren diese beiden Caches sogar unterschiedlich groß. So ist dies bis heute geblieben.

Zum Thema Computer ist auch von mir ein Buch erschienen. "Computergeschichte(n)" beinhaltet, das was der Titel aussagt: einzelne Episoden aus der Frühzeit des PC. Es sind Episoden aus den Lebensläufen von Ed Roberts, Bill Gates, Steve Jobs, Stephen Wozniak, Gary Kildall, Adam Osborne, Jack Tramiel und Chuck Peddle und wie sie den PC schufen.

Das Buch wird abgerundet durch eine kurze Erklärung der Computertechnik vor dem PC, sowie einer Zusammenfassung was danach geschah, als die Claims abgesteckt waren. Ich habe versucht ein Buch zu schreiben, dass sie dahingehend von anderen Büchern abhebt, dass es nicht nur Geschichte erzählt sondern auch erklärt warum bestimmte Produkte erfolgreich waren, also auf die Technik eingeht.

Die 2014 erschienene zweite Auflage wurde aktualisiert und leicht erweitert. Die umfangreichste Änderung ist ein 60 Seiten starkes Kapitel über Seymour Cray und die von ihm entworfenen Supercomputer. Bedingt durch Preissenkungen bei Neuauflagen ist es mit 19,90 Euro trotz gestiegenem Umfang um 5 Euro billiger als die erste Auflage. Es ist auch als e-Book für 10,99 Euro erschienen.

Mehr über das Buch auf dieser eigenen Seite.

Hier geht's zur Gesamtübersicht meiner Bücher mit direkten Links zum BOD-Buchshop. Die Bücher sind aber auch direkt im Buchhandel bestellbar (da ich über sehr spezielle Themen schreibe, wird man sie wohl kaum in der Auslage finden) und sie sind natürlich in den gängigen Online-Plattformen wie Amazon, Libri, Buecher.de erhältlich.


© des Textes: Bernd Leitenberger. Jede Veröffentlichung dieses Textes im Ganzen oder in Auszügen darf nur mit Zustimmung des Urhebers erfolgen.
Sitemap Kontakt Neues Hier werben Bücher vom Autor Buchempfehlungen Top 99