von Neumann-Architektur - von Neumann architecture

Ein von Neumann-Architekturschema

Die von Neumann-Architektur – auch bekannt als von Neumann-Modell oder Princeton-Architektur – ist eine Computerarchitektur, die auf einer 1945 von John von Neumann und anderen im ersten Entwurf eines Berichts über die EDVAC beschriebenen Beschreibung basiert . Dieses Dokument beschreibt eine Designarchitektur für einen elektronischen Digitalcomputer mit diesen Komponenten:

Der Begriff "von-Neumann-Architektur" hat sich dahingehend entwickelt, jeden Computer mit gespeichertem Programm zu bezeichnen, in dem ein Befehlsabruf und eine Datenoperation nicht gleichzeitig stattfinden können, weil sie einen gemeinsamen Bus haben . Dies wird als von Neumann-Engpass bezeichnet und schränkt häufig die Leistung des Systems ein.

Das Design einer Maschine mit von Neumann-Architektur ist einfacher als die einer Maschine mit Harvard-Architektur – die ebenfalls ein speicherprogrammierbares System ist, aber einen dedizierten Satz von Adress- und Datenbussen zum Lesen und Schreiben in den Speicher und einen weiteren Satz Adress- und Datenbusse zum Anweisungen holen .

Ein speicherprogrammierbaren Digitalrechner hält beiden Programmanweisungen und Daten in read-write , Direktzugriffsspeicher (RAM). Computer mit gespeicherten Programmen waren eine Weiterentwicklung gegenüber den programmgesteuerten Computern der 1940er Jahre, wie dem Colossus und dem ENIAC . Diese wurden durch das Setzen von Schaltern und das Einstecken von Patchkabeln programmiert, um Daten und Steuersignale zwischen verschiedenen Funktionseinheiten zu leiten. Die überwiegende Mehrheit der modernen Computer verwendet den gleichen Speicher sowohl für Daten als auch für Programmbefehle, verfügt jedoch über Caches zwischen CPU und Speicher, und für die Caches, die der CPU am nächsten sind, haben sie separate Caches für Befehle und Daten, sodass die meisten Befehle und Daten Abrufe verwenden separate Busse ( Split-Cache-Architektur ).

Geschichte

Die frühesten Rechenmaschinen hatten feste Programme. Einige sehr einfache Computer verwenden immer noch dieses Design, entweder aus Gründen der Einfachheit oder zu Schulungszwecken. Zum Beispiel kann ein Schreibtisch - Rechner (im Prinzip) ist ein Festprogramm Computer. Es kann grundlegende Mathematik betreiben, aber es kann kein Textverarbeitungsprogramm oder Spiele ausführen . Das Ändern des Programms einer Maschine mit festem Programm erfordert eine Neuverdrahtung, Umstrukturierung oder Neukonstruktion der Maschine. Die ersten Computer waren nicht so sehr "programmiert", sondern für eine bestimmte Aufgabe "entworfen". „Umprogrammieren“ – wenn überhaupt möglich – war ein mühsamer Prozess, der mit Flussdiagrammen und Notizen auf Papier begann, gefolgt von detaillierten Konstruktionskonstruktionen und dann dem oft mühsamen Prozess des physischen Umverdrahtens und Wiederaufbauens der Maschine. Es kann drei Wochen dauern, ein Programm auf ENIAC einzurichten und zu debuggen .

Mit dem Vorschlag des speicherprogrammierbaren Rechners änderte sich dies. Ein Computer mit gespeichertem Programm enthält konstruktionsbedingt einen Befehlssatz und kann im Speicher einen Satz von Befehlen (ein Programm ) speichern , der die Berechnung detailliert beschreibt .

Ein Stored-Program-Design ermöglicht auch selbstmodifizierenden Code . Eine frühe Motivation für eine solche Einrichtung war die Notwendigkeit, dass ein Programm den Adressteil von Befehlen inkrementieren oder anderweitig modifizieren musste, was Bediener in frühen Designs manuell ausführen mussten. Dies verlor an Bedeutung, als Indexregister und indirekte Adressierung zu üblichen Merkmalen der Maschinenarchitektur wurden. Eine weitere Verwendung war die Einbettung häufig verwendeter Daten in den Befehlsstrom unter Verwendung von Sofortadressierung . Selbstmodifizierender Code ist weitgehend in Ungnade gefallen, da er normalerweise schwer zu verstehen und zu debuggen ist und unter modernen Prozessor- Pipelining- und Caching-Schemata ineffizient ist .

Fähigkeiten

Im Großen und Ganzen macht die Fähigkeit, Anweisungen als Daten zu behandeln, Assembler , Compiler , Linker , Loader und andere automatisierte Programmierwerkzeuge möglich. Es macht "Programme, die Programme schreiben" möglich. Dies hat ein ausgeklügeltes Self-Hosting-Computing-Ökosystem rund um die von Neumann-Architekturmaschinen zum Blühen gebracht.

Einige Hochsprachen nutzen die von Neumann - Architektur durch eine abstrakte, maschinenunabhängige Art und Weise bereitstellt ausführbaren Code zur Laufzeit zu manipulieren (zB LISP ) oder durch Laufzeitinformationen zur Abstimmung mit Just-in-Time - Kompilierung (zB Sprachen gehostet auf der Java virtuelle Maschine oder in Webbrowser eingebettete Sprachen ).

In kleinerem Maßstab können einige sich wiederholende Operationen wie BITBLT oder Pixel- und Vertex-Shader auf Allzweckprozessoren mit Just-in-Time-Kompilierungstechniken beschleunigt werden. Dies ist eine Verwendung von selbstmodifizierendem Code, die nach wie vor beliebt ist.

Entwicklung des speicherprogrammierten Konzepts

Der Mathematiker Alan Turing , der durch die Vorlesungen von Max Newman an der University of Cambridge auf ein Problem der mathematischen Logik aufmerksam geworden war , schrieb 1936 eine Arbeit mit dem Titel On Computable Numbers, with an Application to the Entscheidungsproblem , die in den Proceedings . veröffentlicht wurde der Londoner Mathematischen Gesellschaft . Darin beschrieb er eine hypothetische Maschine, die er eine universelle Rechenmaschine nannte, die heute als „ Universelle Turing-Maschine “ bekannt ist. Die hypothetische Maschine hatte einen unendlichen Speicher (Speicher in der heutigen Terminologie), der sowohl Anweisungen als auch Daten enthielt. John von Neumann lernte Turing kennen, als er 1935 Gastprofessor in Cambridge war, und auch während Turings Doktoratsjahr am Institute for Advanced Study in Princeton, New Jersey von 1936 bis 1937. Ob er noch von Turings Arbeit von 1936 wusste? Zeit ist nicht klar.

1936 nahm Konrad Zuse in zwei Patentanmeldungen auch vor, dass Maschinenbefehle im gleichen Speicher wie für Daten gespeichert werden könnten.

Unabhängig davon schrieben J. Presper Eckert und John Mauchly , die den ENIAC an der Moore School of Electrical Engineering an der University of Pennsylvania entwickelten , im Dezember 1943 über das Konzept der gespeicherten Programme. Bei der Planung einer neuen Maschine, EDVAC , schrieb Eckert im Januar 1944, dass sie Daten und Programme in einem neuen adressierbaren Speichergerät, einem Quecksilber-Metall- Verzögerungsleitungsspeicher, speichern würden . Dies war das erste Mal, dass der Bau einer praktischen speicherprogrammierbaren Maschine vorgeschlagen wurde. Turings Werk war ihm und Mauchly damals noch nicht bekannt.

Von Neumann war am Manhattan-Projekt am Los Alamos National Laboratory beteiligt , das enorme Berechnungen erforderte. Dies führte ihn im Sommer 1944 zum ENIAC-Projekt. Dort beteiligte er sich an den laufenden Diskussionen über das Design dieses speicherprogrammierbaren Computers, des EDVAC. Als Teil dieser Gruppe verfasste er eine Beschreibung mit dem Titel First Draft of a Report on the EDVAC basierend auf der Arbeit von Eckert und Mauchly. Es war unvollendet, als sein Kollege Herman Goldstine es zur Bestürzung von Eckert und Mauchly nur mit dem Namen von Neumann darauf verteilte. Das Papier wurde von Dutzenden von von Neumanns Kollegen in Amerika und Europa gelesen und beeinflusste die nächste Runde von Computerdesigns.

Jack Copeland hält es für "historisch unangemessen, elektronische speicherprogrammierbare Digitalcomputer als 'von Neumann-Maschinen' zu bezeichnen". Sein Los Alamos-Kollege Stan Frankel sagte über von Neumanns Wertschätzung für Turings Ideen:

Ich weiß, dass sich von Neumann 1943 oder '44 der grundlegenden Bedeutung von Turings Arbeit von 1936 bewusst war… Von Neumann machte mich mit dieser Arbeit bekannt, und auf sein Drängen hin studierte ich sie sorgfältig. Viele Leute haben von Neumann als "Vater des Computers" (im modernen Sinne) gefeiert, aber ich bin mir sicher, dass er selbst diesen Fehler nie gemacht hätte. Man könnte ihn vielleicht die Hebamme nennen, aber er betonte mir und anderen sicher, dass die Grundauffassung Turing zu verdanken ist – soweit Babbage es nicht vorausgesehen hat… Sowohl Turing als auch von Neumann natürlich , hat auch wesentliche Beiträge zur "Reduktion auf die Praxis" dieser Konzepte geleistet, aber ich würde sie in ihrer Bedeutung nicht als vergleichbar mit der Einführung und Explikation des Konzepts eines Computers ansehen, der sein Aktivitätsprogramm in seinem Gedächtnis speichern und dieses modifizieren kann Programm im Rahmen dieser Aktivitäten.

Als der "Erste Entwurf" in Umlauf gebracht wurde, erstellte Turing einen Bericht mit dem Titel " Proposed Electronic Calculator" . Es beschrieb detailliert seine Idee einer Maschine, die er Automatic Computing Engine (ACE) nannte . Er präsentierte dies am 19. Februar 1946 dem Exekutivkomitee des British National Physical Laboratory . Obwohl Turing aus seiner Kriegserfahrung in Bletchley Park wusste, dass das, was er vorschlug, machbar war, verhinderte die Geheimhaltung um Colossus , die anschließend mehrere Jahrzehnte lang aufrechterhalten wurde er davon ab, es zu sagen. Es wurden verschiedene erfolgreiche Implementierungen des ACE-Designs produziert.

Sowohl von Neumanns als auch Turings Aufsätze beschrieben speicherprogrammierte Computer, aber von Neumanns früherer Aufsatz erreichte eine größere Verbreitung und die von ihm skizzierte Computerarchitektur wurde als "von Neumann-Architektur" bekannt. In der 1953 erschienenen Veröffentlichung Faster than Thought: A Symposium on Digital Computing Machines (herausgegeben von BV Bowden) lautet ein Abschnitt im Kapitel über Computer in Amerika wie folgt:

Die Maschine des Institute for Advanced Studies, Princeton

1945 veröffentlichte Professor J. von Neumann, der damals an der Moore School of Engineering in Philadelphia arbeitete, wo das ENIAC gebaut worden war, im Auftrag einer Gruppe seiner Mitarbeiter einen Bericht über den logischen Aufbau von Digitalcomputern . Der Bericht enthielt einen detaillierten Vorschlag für die Konstruktion der Maschine, die seither als EDVAC (electronic Discrete Variable Automatic Computer) bekannt ist. Diese Maschine wurde erst vor kurzem in Amerika fertiggestellt, aber der von Neumann-Bericht inspirierte den Bau des EDSAC (Electronic Delay-Storage Automatic Calculator) in Cambridge (siehe Seite 130).

1947 veröffentlichten Burks, Goldstine und von Neumann einen weiteren Bericht, der das Design eines anderen Maschinentyps (diesmal eine parallele Maschine) skizzierte, der außerordentlich schnell sein sollte und vielleicht 20.000 Operationen pro Sekunde erreichen würde. Sie wiesen darauf hin, dass das herausragende Problem beim Bau einer solchen Maschine die Entwicklung eines geeigneten Speichers mit sofort zugänglichen Inhalten sei. Zuerst schlugen sie vor, eine spezielle Vakuumröhre - das sogenannte " Selectron " - zu verwenden, die die Princeton Laboratories von RCA erfunden hatten. Diese Röhren waren teuer und schwer herzustellen, so dass sich von Neumann anschließend entschloss, eine Maschine auf Basis des Williams-Speichers zu bauen . Diese Maschine, die im Juni 1952 in Princeton fertiggestellt wurde, wurde im Volksmund als Maniac bekannt. Das Design dieser Maschine inspirierte mindestens ein halbes Dutzend Maschinen, die jetzt in Amerika gebaut werden und alle liebevoll "Johniacs" genannt werden.

Im selben Buch lauten die ersten beiden Absätze eines Kapitels über ACE wie folgt:

Automatische Berechnung am National Physical Laboratory

Einer der modernsten Digitalcomputer, der Entwicklungen und Verbesserungen in der Technik des automatischen elektronischen Rechnens verkörpert, wurde kürzlich im National Physical Laboratory in Teddington demonstriert, wo er von einem kleinen Team von Mathematikern und Elektronik-Forschungsingenieuren entworfen und gebaut wurde des Labors, unterstützt von einer Reihe von Produktionsingenieuren der English Electric Company, Limited. Die bisher im Labor errichtete Ausrüstung ist nur das Pilotmodell einer viel größeren Installation, die als Automatic Computing Engine bekannt sein wird, aber obwohl sie vergleichsweise klein ist und nur etwa 800 Glühventile enthält, wie aus den Tafeln XII ersichtlich ist, XIII und XIV ist es eine extrem schnelle und vielseitige Rechenmaschine.

Die grundlegenden Konzepte und abstrakten Prinzipien der Berechnung durch eine Maschine wurden von Dr. AM Turing, FRS, in einem Artikel formuliert 1 . 1936 vor der London Mathematical Society gelesen, aber die Arbeit an solchen Maschinen in Großbritannien wurde durch den Krieg verzögert. Im Jahr 1945 wurde jedoch im National Physical Laboratory von Herrn JR Womersley, dem damaligen Leiter der Mathematics Division des Labors, eine Untersuchung der Probleme vorgenommen. Zu ihm gesellten sich Dr. Turing und ein kleiner Stab von Spezialisten, und 1947 waren die Vorplanungen so weit fortgeschritten, dass die bereits erwähnte Sondergruppe eingerichtet werden konnte. Im April 1948 wurde letztere die Elektronikabteilung des Labors unter der Leitung von Herrn FM Colebrook.

Computer der frühen von Neumann-Architektur

Der erste Entwurf beschrieb ein Design, das von vielen Universitäten und Unternehmen verwendet wurde, um ihre Computer zu bauen. Von diesen verschiedenen Computern verfügten nur ILLIAC und ORDVAC über kompatible Befehlssätze.

Frühe Computer mit gespeicherten Programmen

Die Datumsangaben in der folgenden Chronologie lassen sich nur schwer in die richtige Reihenfolge bringen. Einige Termine sind für die erstmalige Ausführung eines Testprogramms, einige Termine für die erstmalige Vorführung oder Fertigstellung des Computers und einige Termine für die erste Lieferung oder Installation.

  • Die IBM SSEC hatte die Fähigkeit, Anweisungen als Daten zu behandeln, und wurde am 27. Januar 1948 öffentlich demonstriert. Diese Fähigkeit wurde in einem US-Patent beansprucht. Allerdings war es teilweise elektromechanisch, nicht vollelektronisch. In der Praxis wurden Anweisungen aufgrund des begrenzten Speichers vom Papierband gelesen.
  • Der von Andrew Booth und Kathleen Booth an der Birkbeck University of London entwickelte ARC2 ging am 12. Mai 1948 offiziell online. Er war mit dem ersten rotierenden Trommelspeicher ausgestattet .
  • Der Manchester Baby war der erste vollelektronische Computer, der ein gespeichertes Programm ausführte. Es führte am 21. Juni 1948 ein 52-minütiges Factoring-Programm durch, nachdem ein einfaches Divisionsprogramm und ein Programm ausgeführt worden waren, um zu zeigen, dass zwei Zahlen relativ prim sind .
  • Der ENIAC wurde modifiziert, um als primitiver, schreibgeschützter Computer mit gespeicherten Programmen zu laufen (unter Verwendung der Funktionstabellen für Programm- ROM ) und wurde als solcher am 16. September 1948 demonstriert, als er ein Programm von Adele Goldstine für von Neumann ausführte .
  • Das BINAC führte im Februar, März und April 1949 einige Testprogramme durch, wurde jedoch erst im September 1949 abgeschlossen.
  • Der Manchester Mark 1 entstand aus dem Baby-Projekt. Eine Zwischenversion des Mark 1 war im April 1949 für die Ausführung von Programmen verfügbar, wurde jedoch erst im Oktober 1949 fertiggestellt.
  • Die EDSAC führte ihr erstes Programm am 6. Mai 1949 durch.
  • Die EDVAC wurde im August 1949 ausgeliefert, hatte jedoch Probleme, die eine Inbetriebnahme bis 1951 verhinderten.
  • Das CSIR Mk I führte sein erstes Programm im November 1949 durch.
  • Der SEAC wurde im April 1950 demonstriert.
  • Der Pilot ACE führte sein erstes Programm am 10. Mai 1950 durch und wurde im Dezember 1950 demonstriert.
  • Der SWAC wurde im Juli 1950 fertiggestellt.
  • Die Whirlwind wurde im Dezember 1950 fertiggestellt und war im April 1951 im Einsatz.
  • Der erste ERA Atlas (später der kommerzielle ERA 1101/UNIVAC 1101) wurde im Dezember 1950 installiert.

Evolution

Einzelsystembus - Evolution der Architektur

Im Laufe der Jahrzehnte der 1960er und 1970er Jahre wurden Computer im Allgemeinen sowohl kleiner als auch schneller, was zu Entwicklungen in ihrer Architektur führte. Beispielsweise können Eingabe- und Ausgabegeräte mit speicherabgebildeter E/A wie Speicher behandelt werden. Ein einzelner Systembus könnte verwendet werden, um ein modulares System mit geringeren Kosten bereitzustellen. Dies wird manchmal als "Straffung" der Architektur bezeichnet. In den folgenden Jahrzehnten ließen einfache Mikrocontroller manchmal Funktionen des Modells weg, um Kosten und Größe zu senken. Größere Computer haben Funktionen für eine höhere Leistung hinzugefügt.

Designeinschränkungen

Von Neumann-Engpass

Der gemeinsame Bus zwischen Programmspeicher und Datenspeicher führt zum von Neumann-Engpass , dem begrenzten Durchsatz (Datenübertragungsrate) zwischen Zentraleinheit (CPU) und Speicher im Verhältnis zur Speichergröße. Da der einzelne Bus jeweils nur auf eine der beiden Speicherklassen zugreifen kann, ist der Durchsatz geringer als die Geschwindigkeit, mit der die CPU arbeiten kann. Dies schränkt die effektive Verarbeitungsgeschwindigkeit ernsthaft ein, wenn die CPU eine minimale Verarbeitung großer Datenmengen durchführen muss. Die CPU ist ständig gezwungen, darauf zu warten, dass benötigte Daten in den oder aus dem Speicher verschoben werden. Da die CPU-Geschwindigkeit und die Speichergröße viel schneller gestiegen sind als der Durchsatz zwischen ihnen, ist der Engpass zu einem größeren Problem geworden, ein Problem, dessen Schwere mit jeder neuen CPU-Generation zunimmt.

Der Engpass von Neumann wurde von John Backus in seinem Vortrag zum ACM Turing Award 1977 beschrieben . Laut Backus:

Sicherlich muss es eine weniger primitive Art geben, große Veränderungen im Laden vorzunehmen, als Unmengen von Wörtern durch den von Neumann-Flaschenhals hin und her zu schieben . Diese Röhre ist nicht nur ein buchstäblicher Flaschenhals für den Datenverkehr eines Problems, sondern vor allem ein intellektueller Flaschenhals, der uns an das wortwörtliche Denken gebunden hat, anstatt uns zu ermutigen, in Begriffen zu denken größere konzeptionelle Einheiten der Aufgabenstellung. Programmieren bedeutet also im Grunde die Planung und Detaillierung des enormen Wortverkehrs durch den von Neumann-Engpass, und ein Großteil dieses Verkehrs betrifft nicht signifikante Daten selbst, sondern wo sie zu finden sind.

Schadensbegrenzung

Es gibt mehrere bekannte Verfahren zum Mildern des Von-Neumann-Leistungsengpasses. Folgendes kann beispielsweise die Leistung verbessern:

Das Problem kann auch etwas umgangen werden, indem paralleles Rechnen verwendet wird , beispielsweise unter Verwendung der nicht einheitlichen Speicherzugriffsarchitektur (NUMA) – dieser Ansatz wird üblicherweise von Supercomputern verwendet. Weniger klar ist, ob sich der von Backus kritisierte intellektuelle Engpass seit 1977 stark verändert hat. Der Lösungsvorschlag von Backus hatte keinen großen Einfluss. Moderne funktionale Programmierung und objektorientierte Programmierung sind viel weniger darauf ausgerichtet, eine große Anzahl von Wörtern hin und her zu schieben als frühere Sprachen wie FORTRAN , aber intern verbringen Computer immer noch viel Zeit damit, selbst hochparallele Supercomputer.

Ab 1996 ergab eine Datenbank-Benchmark-Studie, dass drei von vier CPU-Zyklen damit verbracht wurden, auf den Speicher zu warten. Forscher erwarten, dass eine Erhöhung der Anzahl gleichzeitiger Befehlsströme mit Multithreading oder Single-Chip- Multiprocessing diesen Engpass noch verschlimmern wird. Im Kontext von Mehrkernprozessoren ist zusätzlicher Overhead erforderlich, um die Cache-Kohärenz zwischen Prozessoren und Threads aufrechtzuerhalten .

Selbstmodifizierender Code

Abgesehen von dem von Neumann-Engpass können Programmänderungen ganz schädlich sein, entweder durch Zufall oder beabsichtigt. In einigem einfachen speicherprogrammierbaren Computer - Design kann eine Fehlfunktion Programm beschädigen selbst, andere Programme oder das Betriebssystem , was möglicherweise zu einem Computer führt Absturz . Speicherschutz und andere Formen der Zugriffskontrolle können normalerweise sowohl vor versehentlichen als auch vor böswilligen Programmänderungen schützen.

Siehe auch

Verweise

Weiterlesen

Externe Links