1.Was ist der Unterschied zwischen statischen und aktiven Internetseiten?(Bitte Bsp. angeben!) 2.Was sind typische Probleme der von Neumann-Architektur?
Internetanschluss und Tarife 23.336 Themen, 98.133 Beiträge
1. Was für eine Frage! Auf statischen Seiten tut sich einfach nichts, einfach eine Seite zum ansehen, keine Buttons zum klicken, keine Menüs, einfach nur anschauen, sonst nichts. Dementstprechend natürlich auf den interaktiven Seiten das genaue Gegenteil siehe nickles.
2. Typische Probleme?
Gegen Ende der 60er Jahre wurde erkannt, daß die Kosten für die Erstellung von Software überproportional zu den Hardware-Kosten angestiegen waren, und es war absehbar, daß sich dieser Trend noch verstärken würde. Zusätzlich mußte festgestellt werden, daß die bestehenden Forderungen nach Wartbarkeit, Erweiterbarkeit, Wiederverwendbarkeit und Korrektheit von erstellter Software in der Regel nicht gewährleistet werden konnte. Auf der NATO-Konferenz zum Thema "Software-Engineering" von 1968 wurde dann der Begriff der Software-Krise geprägt.
Zur Bewältigung der Software-Krise wurde zunächst hauptsächlich das Konzept der strukturierten Programmierung verfolgt, bei dem vor allem durch die konsequente Verwendung von Programmblöcken einer generelle Vereinheitlichung der Programmstruktur erreicht werden sollte. Spätestens Ende der 70er Jahre hat sich dann aber herausgestellt, daß mit diesem Konzept die entwickelten Qualitätsanforderungen an die Erstellung von Software nicht gewährleistet werden konnten, da dieses Konzept in der Praxis nicht konsequent durchsetzbar war.
In der Folge hat dann eine tiefergehende Ursachenforschung über den bestehenden Programmierstil eingesetzt. Dabei wurde erkannt, daß die am weitesten verbreiteten Programmiersprachen, d.h. vor allem Fortran, Algol und Cobol, demselben Sprachkonzept angehören, welches speziell auf dem Rechnerkonzept der von Neumann-Architektur basiert. Die daraus verursachten Unzulänglichkeiten der höheren Programmiersprachen implizieren einen ganz bestimmten, die Möglichkeiten der Entwicklung effizienter Programme stark beschränkenden Programmierstil.
Die von Neumann-Architektur
Ein von Neumann-Rechner besteht aus folgenden Funktionseinheiten:
einem Steuerwerk oder Befehlsprozessor, in dem die Anweisungen eines Programmes interpretiert und die Ausführung dieser Befehle gesteuert werden,
einem Rechenwerk oder Datenprozessor, in dem die notwendigen datentransformierenden Operationen durchgeführt werden,
einem Speicher, in dem Daten und Programme zusammen gespeichert werden und welcher für das Rechenwerk zugänglich ist und
einer Ein-/Ausgabe-Einrichtung.
Als wesentliches Konzept der von Neumann-Architektur wird die gemeiname Speicherung von Befehlen, d.h. den Anweisungen eines Programmes, und Daten in einem gemeinsamen Speicher angesehen, wodurch Befehle identisch wie Daten durch das Rechenwerk behandelt werden können. Demzufolge erfolgt die Verarbeitung der einzelnen Speicherzellen unabhängig von den darin enthaltenen Informationen. Diese Konzeption ermöglicht es auch prinzipiell, Programme ebenso wie Daten durch den Rechner selbst manipulieren zu können, was zumindest in der Anfangszeit der Rechnerentwicklung durchaus gewollt war.
Dieses Konzept der von Neumann-Archtektur bedingt aber auch eine streng sequentielle Programmausführung. Die Anweisungen des auszuführenden Programmes können nur durch einzelne Zugriffe des Rechenwerkes auf den Speicher abgearbeitet werden, so daß zu jedem Verarbeitungszeitpunkt immer nur eine der elementaren Maschinenoperationen ausgeführt werden kann. Die streng sequentielle Programmausführung "erfordert eine totale Ordnung der Operationsanweisung, die normalerweise nicht durch die Natur des auszuführenden Algorithmus vorgeschrieben ist. Ein Algorithmus erfordert in der Regel nur eine Teilordnung der auszuführenden Rechenschritte; die von der Maschine verlangte Totalordnung wird daher vom Programmierer (mehr oder weniger willkürlich) eingeführt." [Giloi1984: 56].
Die Nachteile der von Neumann-Architektur
Die Konzeption der von Neumann-Architektur enthält eine Reihe von Nachteilen, die sich vor allem durch gravierende Einschränkungen bei der Konzeption und der Anwendung des auf der von Neumann-Architektur basierenden Programmiersprachenkonzeptes bemerkbar machen. Diese Nachteile liegen vor allem in den bestehenden semantischen Lücken zwischen dem von Neumann-Rechner und dem dafür entwickelten Programmiersprachenkonzept, in der Möglichkeit von Seiteneffekten bei Anwendung der uneingeschränkten Zuweisungsmöglichkeiten der von Neumann-Architektur, vor allem aber in den durch den von Neumann-Flaschenhals entstehenden Nachteilen bei der Programmierung.
Die Semantischen Lücken
Die von Neumann-Architektur basiert auf einer generischen Informationsdarstellung, d.h. "die Objekte des (einzigen) Maschinen-Datentyps des von-Neumann-Rechners sind Bitketten, die im Prinzip jede Art von Information repräsentieren können und nicht dahingehend gekennzeichnet sind, welchen Informationstyp sie im Einzelfalle darstellen." [Giloi1984: 61]. Demzufolge werden bei der Verarbeitung eines Programmes maschinen-intern nur Bitketten manipuliert, unabhängig davon, ob die aktuelle Anweisung ein Datum oder einen Befehl repräsentiert. Darüber hiaus ist der von Neumann-Rechner nicht in der Lage, die von der auf ihm implementierten höheren Programmiersprache verwendeten Typen-Attribute für Datenobjekte zu erkennen und zu verarbeiten. Dieser Sachverhalt wird als semantische Lücke bezeichnet.
Eine weitere semantische Lücke zwischen dem von Neumann-Rechner und der verwendeten höheren Programmiersprache besteht in den prinzipiell uneingeschränkten Zugriffsmöglichkeiten des von Neumann-Rechners auf jedes beliebige Speicherobjekt. Diesem muß dafür nur die entsprechende Speicheradresse in einer Instruktion übergeben werden. Dadurch ist der Rechner nicht in der Lage, "unerlaubte Zugriffe, die als Folge von Hardware- oder Software-Fehlern auftreten können, zu erkennen und zu verhindern." [Giloi1984: 61]. Beispiele dafür können das Erkennen von nicht-initialisierten Variablen oder das Referieren von nicht definierten Elementen eines Feldes sein.
Darüber hinaus besteht keine Möglichkeit, daß die für solche Fälle in den höheren Programmiersprachen vorgesehenen Kontrollmechanismen, die die erforderlichen Zugriffsbeschränkungen durchsetzen sollen, von dem von Neumann-Rechner erkannt und verarbeitet werden können.
Das Auftreten von Seiteneffekten
Da der von Neumann-Rechner intern auf typenlosen Bitketten arbeitet, besteht eine uneingeschränkte Zuweisungsmöglichkeit von Werten an Objektnamen. Wird diese Möglichkeit bei der Programmierung weitgehend ausgenutzt, kann dies zu nur schwer durchschaubaren Seiteneffekten bei der Programmausführung kommen.
Die Handhabung dieser uneingeschränkten Zuweisungsmöglichkeit ist letztendlich nur aufgrund der durch den von Neumann-Architektur vorgegebenen streng sequentiellen Programmverarbeitung beherrschbar.
Der von Neumann-Flaschenhals
Bei der Verarbeitung eines Programmes können von dem von Neumann-Rechner nur skalare Operationen ausgeführt werden, d.h. in jedem Rechenschritt kann immer nur der Zustand genau eines Speicherobjektes transformiert werden. "Um eine solche skalare Operation ausführen zu können, muß die Maschine zuerst einen Befehl für die auszuführende Operation aus dem Speicher holen, um mit dem Befehl dann den Datenzugriff vornehmen zu können. [...] Auch bei der Verarbeitung von (programm-mäßig gegebenen) Datenstrukturen transformiert der von Neumann-Rechner in jedem Rechenschritt immer nur ein skalares Element der Struktur, wobei sie sich in expliziter Weise um jeden einzelnen Transport eines skalaren Elements vom und zum Speicher kümmern muß." [Giloi1984: 61].
Für die Verarbeitung einer einzelnen Programmanweisung sind also in der Regel mehrere Zugriffe durch das Rechenwerk auf den Speicher erforderlich, weshalb diese Verarbeitungsweise als der von Neumann-Flaschenhals bezeichnet wird.
Die von Neumann-Sprachen
Die Nachteile der von Neumann-Architektur wirken sich gravierend auf die für den von Neumann-Rechner entwickelten höheren Programmiersprachen aus, die im folgenden als von Neumann-Sprachen bezeichnet werden sollen. Eine von Neumann-Sprachen zeichnet sich vor allem dadurch aus, daß sie ausschließlich auf Bitketten operiert und deshalb nur streng sequentielle Programmabläufe zuläßt.
Repräsentation der von Neumann-Architektur
Die von Neumann-Sprachen stellen eine abstrakte Sicht des von Neumann-Rechners dar, d.h. einzelne Sprachelemente repräsentieren die einzelnen Elemente der von Neumann-Architektur.
Das in den von Neumann-Sprachen verwendeten Variablenkonzept wird dazu verwendet, die Speicherzellen des von Neumann-Rechner zu imitieren, d.h. die Variablen stellen symbolisch benannte Speicherplätze dar. Mit dem Konstrukt der Zuweisung erfolgt die Wertzuweisung zu diesen Variablen und durch deren Bearbeitung eine entsprechende Zustands-transformation in der Programmverarbeitung. Da aufgrund der von Neumann-Architektur nur die Verarbeitung von skalaren Ausdrücken möglich ist, dient die Zuweisung letztendlich auch dazu, entsprechende Zerlegung eines komplexen Ausdrucks vorzunehmen. Demzufolge stellt die Zuweisung den linguistischen von Neumann-Flaschenhals dar.
Der konzeptionelle von Neumann-Flaschenhals der von Neumann-Architektur bewirkt, daß für jede zustandstransformierende Operation mehrere zusätzliche Instruktionen explizit angegeben werden müssen, um die gewünschte Zustandstransformation erzeugen zu können. Demzufolge muß ungefähr das dreifache an derartigen, ausschließlich der internen Verwaltung des von Neumann-Rechners dienenden, organisatorischen Operationen durchgeführt werden, um eine solche Zuweisung ausführen zu können.
Der von Neumann-Programmierstil
Der Nachteil der von Neumann-Architektur liegt vor allem in dem beschriebenen konzeptionellen Flaschenhals. Die Handhabung dieses Flaschenhalses macht es für den Programmierer erforderlich, zusätzlich zur eigentlichen Problemlösung auch die für die interne Verarbeitung erforderlichen organisatorischen Operationen bei der Programmerstellung zu berücksichtigen. Dadurch hat sich ein Programmierstil herausgebildet, der vor allem damit beschäftigt ist, die Programmbearbeitung durch den von Neumann-Rechner zu ermöglichen. Dem Programmierer geht damit die Zeit verloren, eine sinnvolle konzeptionelle Lösung für das umzusetzende Problem zu entwickeln. Die Lösung des Problems tritt also hinter der organisatorischen Handhabung des von Neumann-Rechners zurück.
Darüber hinaus bewirkt die skalare und streng sequentielle Progammverarbeitung durch den von Neumann-Rechner einen entsprechenden Denk- und Programmierstil, der zum einen der natürlichen Denkweise des Menschen widerspricht und zum anderen zur Lösung des umzusetzenden Problems nicht erforderlich ist.
Ansätze zur Beseitigung der Nachteile der von Neumann-Sprachen
Um die aufgezeigten Mängel der von Neumann-Sprachen zu beseitigen, wurden zunächst die bestehenden Programmiersprachen überarbeitet und erweitert. Dies hatte aber zur Folge, daß diese damit überdimensioniert, komplex und unflexibel wurden, da jede Programmiersprache aus Kompatibilitätsgründen grundsätzlich sämtliche Möglichkeiten der vorangegangenen Version beinhalten mußte, zu denen dann die als notwendig erachteten Erweiterungen hinzugefügt wurden. Da es sich aber bei den Nachteilen der von Neumann-Sprachen um grundsätzliche Probleme des Sprachkonzeptes in Verbindung mit der von Neumann-Architektur handelt, verfügen auch die solcherart erweiterten Programmiersprachen in der Regel nur über eingeschränkte Ausdrucksmöglichkeiten. Sie wurden vielmehr nur weiter aufgebläht und damit letztendlich immer weniger handhabbar.
Ein sinnvoller Ausweg aus dieser Problematik schien nur in der vollständigen Abkehr von dem Sprachkonzept der von Neumann-Sprachen zu liegen, wobei die Lösung vor allem in dem Konzept der funktionalen Programmierung gesucht wurde. Es wurde allerdings schnell deutlich, daß eine endgültige Beseitigung der Nachteile vorhandener Programmiersprachen nur dann möglich war, wenn gleichzeitig eine veränderte Rechnerarchitektur eingesetzt wird. Aufgrund der Vormachtstellung der von Neumann-Architektur und der von Neumann-Sprachen konnte sich diese Konzeption allerdings nicht durchsetzen. Letztendlich stellt die Qualitätssicherung bei der Entwicklung von Software bis heute ein großes Problem dar.
Literatur
[Backus1983] Backus, John, Can Programming be Liberated from the von Neumann Style? A Functional Style and its Algebra of Programs, in: Horowitz, Ellis (Ed.), Programming Languages. A Grand Tour; Berlin, Heidelberg, New York: Springer 1983, S. 146-173; Reprinted from Communications of the ACM, 21(1978)8, S. 613-641
[Giloi1984] Giloi, Wolfgang K., Die Entwicklung der Rechnerarchitektur von der von-Neumann-Maschine bis zu den Rechnern der "fünften Generation", in: Elektronische Rechenanlagen, 26(1984)2, S. 55-70
[Giloi1993] Giloi, Wolfgang K., Rechnerarchitektur; Berlin, Heidelberg, New York: Springer, 2. vollst. überarb. Aufl. 1993
Noch Fragen?
