So, schönen guten Morgen.
Ich begrüße Sie zu einer weiteren Fortsetzung der Vorlesung
Grundlageninformatik 2.
Das ist nicht zum letzten Mal am Mittwochmorgen, aber das letzte Mal,
dass wir zwei Veranstaltungen die Woche machen.
Wir werden in der letzten Vorlesungswoche, da mache ich die Vorlesung
auch noch mal am Mittwochmorgen, da wird am Montag dann vermutlich die
Saalübung sein, beziehungsweise das wird Ihnen noch mitgeteilt, wann
die Saalübung ist.
Aber ansonsten, wie gesagt, heute letztes Mal zwei Vorlesungen die
Woche.
Ich wollte ganz kurz eingehen auf die Evaluation.
Sie haben ja am Montag, Quatsch, am Samstag die Evaluation mitgemacht
und der Vorteil ist, dass wir eine sehr große Zahl dadurch haben von
Informationen über das, was Sie denken über die Vorlesung.
Es haben viele teilgenommen und natürlich nehmen auch viele teil, die
selten zur Vorlesung kommen, aus welchem Grund auch immer.
Trotzdem haben wir eine relativ gute Bewertung bekommen, also 95,5
beim Lehrqualitätsindex, was immer das heißt.
Das ist so eine gewichtete Summe aus einigen wesentlichen Fragen und
das ist auch besser als vor einem Jahr.
Da haben wir letztes Jahr, war das so in etwa bei 90, noch was, der
Lehrqualitätsindex.
Was ich immer besonders interessant finde, sind die ganzen verbalen
Aussagen.
Es gibt immer einen Punkt, noch mal kurz zu den einzelnen Fragen.
Da ist es so, dass es dort immer eine Frage gibt, die relativ schlecht
bewertet wird.
Das ist die Frage des Aufwandes.
Der wird hier immer traditionell als hoch angesehen und wird auch oft
als, naja, irgendwo in der Mitte zwischen unangemessen und angemessen
angesehen.
Und das zieht, das ist hier meistens dann noch ein bisschen stärker
Richtung unangemessen.
Ich weiß, dass die Vorlesung sehr viel Inhalte hat, sehr breit ist und
deswegen ist das eine ziemliche Herausforderung, das ist mir völlig
klar.
Trotzdem bin ich über die Bewertung sehr zufrieden.
Ich danke Ihnen auch insbesondere für die sehr positiven Bewertungen
zu meiner Person.
Das fand ich sehr nett, auch wenn ein paar Leute sagen, ich sollte
mich besser vorbereiten auf die Vorlesung.
Aber ich denke, das mache ich schon ganz gut und das kann auch mal
passieren, dass man vielleicht mal ganz kurz hakt beim Vortragen.
Aber übrigens sagen einige Leute, ich würde zu langsam reden.
Das ist ein ganz interessanter Effekt, weil bei einer Aufzeichnung
hört sich das häufig langsam an.
Wenn man das aber live erlebt, dann findet man das gar nicht so
langsam.
Das ist oft ein kleiner Unterschied, dass man beim Betrachten der
Aufzeichnung einfach nicht abgelenkt ist und die ganzen sonstigen
Wahrnehmungen, die man so hat, dann nicht bekommt und dann klingt es
gar nicht so.
Dann klingt es langsamer, als wenn man das live erlebt.
Das ist also eine typische Erfahrung und deswegen ist es durchaus
sinnvoll, eine Aufzeichnung etwas schneller abzuspielen als die Live
-Vorlesung.
Das kann man ja alles entsprechend manipulieren.
Wir werden die Ergebnisse der Evaluation online stellen und dann
können Sie sich das genau angucken.
Ich möchte hier auf die einzelnen Dinge nicht so explizit eingehen.
Das überwiegende an Rückmeldungen war positiv und es war kritisiert,
Kritikpunkte waren, dass bei dem Aufgabenpool zu viele Fehler drin
waren.
Es waren sehr viele Aufgaben.
Es ist so, dass man natürlich immer mal irgendwo einen Punkt hat, wo
etwas nicht ganz korrekt ist und es ist gut, dass Sie diese Fehler
entdecken.
Das wird also dann beim nächsten Mal noch besser werden.
Und was ja offensichtlich ist, dass auf diesen Aufgabenpool sehr stark
reagiert wird, dass da viele Anfragen von Ihnen kommen, die ich denke
von meinen Mitarbeitern auch sehr zügig immer beantwortet werden.
Auch das wurde positiv hervorgehoben.
Also ich danke Ihnen für die positive Bewertung und wir werden weiter
uns anstrengen, dass wir den Stand halten und möglichst noch
verbessern.
Dann zur Vorlesung letztes Mal haben wir uns mit Speichern
beschäftigt, haben uns die Eigenschaften von Speichern angeschaut und
haben dort also einige Dinge uns angeschaut.
Das waren die verschiedenen Attribute, die dann zusammengefasst waren
hier in dieser Tabelle bezüglich Speicherart, Zugriffsart, Kapazität,
Zugriffszeit.
Zugriffsart, Kapazität, Zugriffszeit ist natürlich das, was besonders
relevant ist, insbesondere die Zugriffszeit und die Kapazität.
Und da gibt es eben diese große Trennung zwischen den
Halbwerterspeichern und den sonstigen Speichern, wobei die
Flashspeicher sich immer stärker Richtung Halbwerterspeicher bewegen
in der Zugriffszeit.
Aber der wesentliche Unterschied ist eben, wenn wir zur Magnetplatte
kommen, weil wir dort einfach die mechanischen Elemente haben, die
halt dort mit eingebaut oder mit angesprochen werden, so dass wir dort
einfach nicht unter eine gewisse Zugriffszeit kommen können.
Und deswegen ist es halt unheimlich wichtig, dass man einen Puffer hat
zwischen dem Hauptspeicher und dem Hintergrundspeicher, damit man
nicht bei den Programmen, die man ausführt, verzögert wird oder
aufgehalten wird durch die Zugriffe auf die Hintergrundspeicher.
Also wenn sie bei einem Programm häufig auf Hintergrundspeicher
zugreifen müssen, haben sie das automatisch ausgebremst und deswegen
ist das also eine ganz wichtige Geschichte, dass man da entsprechend
aufpasst.
Ich hatte Ihnen dann was erzählt zu dem Cache, insbesondere dazu, wie
man auf den Cache zugreift, dass es dort dieses Tag-Feld gibt, in dem
steht, welcher Adresse oder welcher Block mit welcher Adresse
eigentlich gerade in einer Cache-Line drin liegt.
Und dieses Tag-Feld wird halt bestimmt, entweder dadurch, dass man den
Rest bei Division durch Anzahl der Cache-Lines dort rein... oder die
Cache -Line auswählt und dort reinschreibt, den vorderen Teil der
Adresse, nämlich den ganzzahligen Wert der Division durch die Anzahl
der Elemente der Cache-Line, also durch die Anzahl der Cache-Lines.
Und dann haben wir also diese beiden verschiedenen Arten, Directly
Mapped und Assoziativ, um Daten abzulegen und wenn wir halt dann etwas
reinschreiben, etwas verändern im Cache, dann müssen wir dafür sorgen,
dass zurückgeschrieben wird in den Hauptspeicher und das geschieht
halt entweder durch Write-Through oder Write-Back, hat gewisse
Randbedingungen in Bezug auf die Anforderungen oder in Bezug auf die
Wirkungen auf den Hauptspeicher.
Sie haben halt eventuell eine Inkonsistenz oder Sie müssen halt den
längeren Zeitaufwand für das Durchschreiben in den Hauptspeicher in
Kauf nehmen.
Wir waren dann auf die externen Speicher gekommen.
Ich hatte Ihnen erzählt, wie ein Magnetplattenspeicher funktioniert.
Ich hatte Ihnen etwas erzählt zu den Flash-Speichern, zu Solid-State
-Discs, wobei ich sagte, der Nachteil ist die begrenzte Anzahl von
Schreibvorgängen.
Ich habe nochmal genau geguckt.
Letztes Mal kam die Frage, wie sich eigentlich das auswirkt auf die
Lebensdauer solch einer Solid-State-Disc.
Es ist so, dass nach dem, was ich lesen kann über die Informationen,
die dazu im Netz verfügbar sind, dass mittlerweile die Solid-State
-Discs eine ähnliche Lebensdauer haben wie Festplatten.
Also dass es kein Nachteil ist.
Sie sind noch teurer, aber es ist halt einfach diese Abnutzung da und
man muss halt sehen, welche Technologie verwendet wird in einer Solid
-State -Disc.
Da gibt es verschiedene Technologien und je nachdem, welche
Technologie man verwendet, ist die Anzahl der Schreibzyklen, die dort
verträglich sind, unterschiedlich hoch.
Das kann von wenigen tausend bis zu hunderttausend gehen und
entsprechend verändert sich natürlich die Lebensdauer der
entsprechenden Solid-State-Discs.
Also da muss man aufpassen, wenn man eine kauft, dass man die richtige
Technologie da drin hat.
Da gibt es also verschiedene Arten der Realisierung.
Das sollte man sich vorher angucken und dann hat man auch dann
Sicherheit, dass die eine gewisse Zeit halten.
Aber wie gesagt, die Art, wie dort der Speicher verwaltet wird, ist
sehr unterschiedlich.
Wird auch unterschiedlich von den Betriebssystemen unterstützt und
deswegen muss man auch da sich genauer informieren, wie das aussieht.
Ich hatte noch kurz den Magnetbandspeicher erwähnt, optische
Plattenspeicher, den virtuellen Speicher, Smart Cards und dann kamen
wir zu den Rechnernetzen und das ist der Bereich, wo wir heute wieder
einsteigen.
Also ich hatte Ihnen dann noch kurz gesagt, dass wir diese
verschiedenen Schichten haben mit den verschiedenen Protokoll-Ebenen,
Transportnetz und Verbindungsnetz und dann unten drunter das
physikalische Netz und ich hatte angefangen, Ihnen etwas zu erzählen
über die verschiedenen Netze und dann etwas über das Internet, das war
noch kurz definiert und ich habe Ihnen etwas erzählt über die Art der
Adressen, über die Unterschiede zwischen IPv4 und IPv6.
IPv6 ist mittlerweile das, was wir im Netz üblicherweise zur Verfügung
haben, aber IPv4 ist immer noch darin eingebettet, also die 32-Bit
-Adressen und jetzt haben wir halt im Prinzip 128-Bit-Adressen, also
einen deutlich größeren Adressraum und wir haben auch etwas flexiblere
Arten oder flexiblere Art der Protokolle, also das IP-Protokoll ist
etwas verändert.
Jetzt wissen Sie noch gar nicht, was das IP-Protokoll ist, deswegen
muss ich Ihnen dazu kurz was erzählen und das ist jetzt die erste
Folie, die ich heute etwas ausführlicher zeige.
Also das war das letzte, was wir aufgehört hatten letztes Mal, nämlich
die Aufgaben von TCP, wobei TCP das Transmission Control-Protokoll ist
und bei diesem Protokoll geht es also darum, eine Verbindung
herzustellen zwischen einem Absender, also dem Sender und dem Receiver
oder Client und Server oder was, was immer.
Das heißt, Sie wollen zwischen zwei Rechnern eine Verbindung
herstellen.
Das ist die Frage, wer stellt die Verbindung her?
Zwischen zwei Rechnern, normalerweise sind das zwei
Anwendungsprogramme, die miteinander reden wollen und die reden über
bestimmte Sockets.
Also ich habe hier in meinem Rechner so eine Reihe von Ports, das sind
also Schlitztüren, über die ich im Prinzip reden kann und das sind 65
.000 solche verschiedenen Ports und diese, das sind 2 aus 16
verschiedene Ports und diese Ports haben Nummern und über diese
einzelnen Ports kann ich also zwischen den verschiedenen
Anwendungsprogrammen kommunizieren, dadurch, dass jede Anwendung einem
Port zugeordnet ist.
Also zum Beispiel ihr E-Mail-Programm hat Port 23 und dann gibt es
noch eine ganze Reihe so ganz fest zugeordnete Ports für die
Standarddienste, wie eben FDP, HTTP und so weiter.
HTTP, wissen Sie, ist Port 80 oder auch 8080, also sind manchmal
mehrere Ports zugeordnet und ich habe einen ganzen Bereich mit fest
zugeordneten Ports, einige, die reserviert sind und andere, die
einigermaßen frei verwendbar sind.
Sie haben in Java kennengelernt, dass man Socket-Programmierung machen
kann, dass man mit anderen Programmen auf anderen Rechnern reden kann,
über solche Sockets und also Sockets und Ports.
Was sind die Sockets, was sind die Ports?
Die Ports sind also diese 2 aus 16 verschiedenen Möglichkeiten,
miteinander zu reden und Sockets sind genau diejenigen, die man
auswählt für eine Verbindung.
Also ich habe eine solche, das sind also die Steckdosen und wenn ich
also eine Verbindung aufbaue, dann stecke ich also im Prinzip einen
Stecker einer Verbindung dort rein und dort rein.
Das sind die beiden Sockets, über die die beiden Anwendungsprogramme
miteinander reden können und dann reden die miteinander.
Ja, wie reden die miteinander?
Dadurch, dass ich weiß, ich muss jetzt Daten aus diesem
Anwendungsprogramm über diese Socket irgendwie in eine Folge von
Datenpaketen transformieren, die über das Netz geschickt werden, über
diese verschiedenen Ebenen hinweg.
Und TCP ist dafür verantwortlich, dass diese Daten vernünftig
geschickt werden.
TCP stellt eine logische Verbindung her, eine logische Verbindung,
dass ich weiß, wer mit wem redet.
Keine physikalische Verbindung, TCP kümmert sich nicht darum, auf
welchem Weg ein Datenpaket durch das Netz läuft.
Aber TCP sorgt dafür, dass ich eine verlässliche Verbindung habe.
Verlässlich heißt, es wird überprüft, ob jedes Paket, das
rausgeschickt wird, auch wirklich ankommt.
Wenn ich das überprüfen will, ob jedes Paket auch wirklich hier
ankommt, muss natürlich eine Rückmeldung geschehen von dem Empfänger
zu dem Absender, dass ein Paket angekommen ist.
Das heißt, wir haben hier so einen 2-W-Kommunikation, der erforderlich
ist, um festzustellen, ist jedes Paket tatsächlich angekommen.
Jetzt ist die Frage, wie macht man das?
Wenn ich ein Paket rausschicke, warte ich dann erstmal, bis es
angekommen ist, oder wie mache ich das?
Dazu haben wir dieses Sliding-Window-Protokoll, das hier etwas
vereinfacht angedeutet ist.
Was soll dieses sich bewegende Fenster hier andeuten?
Diese einzelnen Elemente hier sollen einzelne Datensegmente andeuten,
die geschickt werden.
Und dieses Fenster, was hier rübergelaufen ist, gibt gerade an, wie
viele Elemente, wie viele Datenpakete verschickt werden, bevor man
darauf wartet, dass ein Acknowledgement kommt, also eine Bestätigung,
dass dieses Paket angekommen ist.
Dieses Fenster verändert sich über die Zeit, das kann also mal ganz
klein sein, wird auch wieder größer, wird wieder kleiner.
Und die Größe hängt eben davon ab, wie zuverlässig man immer gerade
nach so und so vielen Paketen, also das hier unsere Fensterbreite,
nach irgendeiner Anzahl von Paketen kommt die Bestätigung.
Ich warte also, wenn ich ein Paket ausgeschickt habe, bis die
Bestätigung kommt.
Und wenn die nicht kommt, dann muss ich das Paket bzw.
alle Pakete von der Position an nochmal neu losschicken.
Also die Fenstergröße bestimmt, wie viele Pakete vor Erhalt der
Empfangsbestätigung abgesandt werden dürfen.
Und die Größe dieses Fensters wird ausgehandelt zwischen dem Sender
und dem Empfänger.
Das wird einmal bei der Herstellung der Verbindung, werden ein paar
Parameter festgelegt, die maximale Fenstergröße.
Und dann wird entsprechend der Transportleistung oder Qualität des
Netzes die Fenstergröße sukzessive verändert.
Man fängt zuerst an mit einer ganz kleinen Fenstergröße, macht das
immer größer.
So lange, bis man diese maximale Fenstergröße erreicht hat oder bis
Fehler auftreten.
Und dann hat man so einen Effekt, dass die Fenstergröße also zunächst
ansteigt, dann geht das hier irgendwann nur noch langsam weiter.
Wenn ein Fehler auftritt, geht die Fenstergröße runter auf null und
dann wird es wieder langsam erhöht.
Dann geht es wieder so weiter und steigt wieder an.
Das heißt, ich habe hier einen ständigen Wechsel zwischen kleinen und
großen Fenstergrößen.
Das heißt, die Transportleistung ändert sich ständig.
Und das ist etwas, was Sie beobachten können, wenn Sie mal den
größeren Dateien transferieren, dass Sie manchmal sehr langsame
Datenrate haben und dann wird es wieder schneller, dann wird es wieder
langsamer.
Das ist genau dieses, was hier gemacht wird von dem PCP-Protokoll, das
geguckt wird, wie ist die Qualität der Übertragung und wenn Sie
häufige Fehler bekommen, dann muss halt immer wieder nachgeschickt
werden und es wird die Fenstergröße verkleinert.
Das heißt, dann dauert es einfach länger und die Transportqualität
ändert sich.
Ich hatte gesagt, wann immer hier irgendein Paket mal nicht bestätigt
wird, muss alles, was danach geschickt wurde, nochmal geschickt
werden.
Das verlangsamt natürlich extrem die Übertragung und oder kann es
verlangsamen.
Das ist bei bestimmten Anwendungen nicht gut.
Bei bestimmten Anwendungen kann es dazu führen, dass Sie auf einmal
eben starke Schwankungen haben in der Übertragungsfrequenz und bei
Anwendungen wie Audioübertragung zum Beispiel ist es wichtig, dass Sie
eine gleichmäßige Frequenz aufrechterhalten.
Das können Sie mit PCP gar nicht garantieren und deswegen gibt es dazu
noch andere Protokolle, die diese Kontrolle der Übertragung gar nicht
machen, sondern einfach Daten rausschicken und sich gar nicht darum
kümmern, ob die ankommen und das in Kauf nehmen.
Dass manchmal etwas verloren geht, wenn mal bei einer Audioübertragung
ein Paket nicht kommt, ist das eine kurze Unterbrechung in der
Verbindung, aber ist nicht wirklich nachhaltig wichtig, dass alles da
gewesen ist.
Das ist also etwas, ich komme darauf gleich nochmal zurück, auf das,
was man dann macht, wenn man also solche Probleme vermeiden möchte,
die ich bei TCP erzählt hatte.
Wenn wir jetzt uns IP angucken, das liegt also unter TCP, zunächst
wird ein Datenpaket durch TCP geschickt, dann kommt es zur IP-Schicht
und IP ist nun für Folgendes verantwortlich.
Ich habe hier meine Knoten im Netz und wenn Sie hier also einkommende
Datenpakete haben in so einem Knoten, dann hat er irgendwelche
Möglichkeiten, das an nächste Knoten zu schicken, irgend so ein
Datenpaket und die Frage ist, wenn hier das Ziel ist, also mein
Receiver, dann muss ich sehen, was ist eigentlich der sinnvollste
nächste Schritt, wenn ich also hier verschiedene Möglichkeiten habe,
meine Daten zu schicken, was ist der sinnvollste nächste Link, über
den ich mein Paket schicken soll, wenn ich hier an diesem Knoten
angelangt bin.
IP sorgt in dem Sinne für einen unzuverlässigen, verbindungslosen
Versand.
Unzuverlässig heißt hier nicht, dass keine Daten ankommen.
Unzuverlässig heißt nur, IP kümmert sich nicht darum, ob ein Paket,
das hier durchgewandert ist, tatsächlich bei einem Empfänger ankommt.
IP sorgt nur dafür, dass also Daten auf den richtigen Weg gebracht
werden.
Es ist auch verbindungslos in dem Sinne, dass nicht alle Pakete mit
der gleichen Adresse auf den gleichen nächsten Knoten geschickt
werden, sondern es können sich Veränderungen ergeben in den
Bedingungen in der Nachbarschaft und dann werden eventuell
aufeinanderfolgende Pakete der gleichen logischen Verbindung über
verschiedene Wege im Netz geleitet.
Einfach wenn da irgendwo ein Engpass auftritt, dann nimmt man halt
einen anderen Weg und sorgt nur dafür, dass die Pakete trotzdem noch
zum Ziel kommen.
Das ist eine ganz wesentliche Eigenschaft, diese Redundanz in der
Verbindung oder die Flexibilität in der Verbindung, dass ich selbst,
wenn irgendwelche Knoten ausfallen, also wenn die Verbindung hier
ausgefallen ist, ich trotzdem die Daten noch rausschicken kann, dass
automatisch die Pakete umgeleitet werden auf einen anderen Knoten.
Das wäre anders, wenn ich in die Übertragung, also in die Pakete, eine
feste Route reinschreiben würde, dann könnte ich das so nicht machen.
Das ist also der Grund, warum das Internet so sehr zuverlässig ist.
Auch wenn Knoten ausfallen, wenn Wege ausfallen, haben wir immer noch
Ersatzwege, über die die Daten geschickt werden und IP sorgt dafür, an
jedem Knoten, an dem ein Paket ankommt, den richtigen oder den
sinnvollsten nächsten Knoten auszuwählen für einen möglichst schnellen
oder kurzen Weg von der Quelle zum Ziel.
Das ist also die Aufgabe von IP und das Verfahren, das angewendet
wird, ist das sogenannte Open Shortest Path First.
Das ist das, was ich gerade versucht hatte anzusprechen.
Man versucht immer, den nächsten Knoten auf dem kürzesten Weg zu
finden.
Ich habe das hier mal kurz angedeutet auf diesem Bild.
Wenn Sie also hier von Grün der Quelle nach Rot zum Ziel wollen, vom
Sender zum Empfänger, dann kann es sein, dass Sie diesen Weg wählen,
weil das gerade der kürzeste Weg ist.
Wir haben also auf jeder Verbindung irgendwelche Daten über Durchsatz,
Verzögerungszeit und so weiter.
Und jetzt wollen Sie also an jedem Knoten entscheiden, was ist der
sinnvollste nächste Weg, über den ich eine Verbindung oder ein Paket
schicken soll.
An ein paar Punkten gibt es hier Entscheidungsmöglichkeiten und da
kann es eben sein, dass ein weiteres Paket über einen anderen Weg
geschickt wird, aber natürlich auch zum Ziel kommt.
Diese Laufzeiten der Pakete können unterschiedlich sein, deswegen
können Sie nie gewährleisten, dass tatsächlich alle Pakete in der
gleichen Reihenfolge ankommen.
Auch darauf muss man achten bei diesen Protokollen, dass man dann in
der Lage ist, beim Empfänger die richtige Reihenfolge
wiederherzustellen.
Das steht alles in den Köpfen, in den extra Informationen drin, die in
den Datenpaketen dazugefügt werden.
Also Sie haben einen TCP-Header da drin, Sie haben einen IP-Header da
drin und der IP-Header, der wird also an jedem Knoten angeschaut.
Da stehen die Informationen drin, die man braucht, um zu entscheiden,
was ist der bestmögliche oder was ist die nächste Adresse.
Und ich habe im Knoten, in jedem Knoten habe ich Informationen über
die aktuelle Sicht auf das Netz.
Wir haben also ständig in jedem Knoten eine lokale Sicht auf das ganze
Netz.
Das wird durch Routingverfahren festgelegt.
Das ist dieses Open Shortest Path First, das in jedem Knoten, in jedem
Router ausgeführt wird.
In jedem Knoten entsteht eine lokale Sicht auf das ganze Netz und in
Bezug auf diese lokale Sicht auf das Netz und die dort verfügbaren
Betragungsleistungen werden die lokal bekannten bestmöglichen nächsten
Nachbarn ausgewählt, um ein Paket zum Empfänger zu schicken.
Diese lokale Sicht ist nie vollständig, ist ständig nur eine
approximierte Sicht auf das Netz.
Zum Teil guckt man einige Bereiche nur als einen dickeren Knoten an.
Da ist noch so eine gewisse Hierarchie da drin, dass man einige
Bereiche nur über Gateways betrachtet und die Interna weglässt.
Da gibt es also einige Vereinfachungen.
Dieses Open Shortest Path First ist ein sehr komplexes Protokoll.
Aber da steckt eine Sache drin, wie der Dijkstra-Algorithmus, um
kürzeste Wege zu finden und ähnliche Dinge.
Sehr interessantes Protokoll.
Darüber können Sie mehr erfahren in meiner Vorlesung über
Internetalgorithmen oder auch in anderen Vorlesungen über Telematik.
Also wie gesagt, das sind die Aufgaben von IP, den unzuverlässigen,
verbindungslosen Versand von Datenpaketen zu unterstützen, zu
garantieren.
Und es wird also nur entschieden, über welche Leitung ein Datagramm
als nächstes laufen wird.
Es wird nicht dafür gesorgt, dass überprüft wird, ob wirklich alles
ankommt.
Dann gibt es noch dieses andere Protokoll UDP.
Das ist also Alternative zu TCP.
Und ich hatte schon gesagt, dass TCP hat gewisse Nachteile bei
Anwendungen, bei denen man zum Beispiel Audiodaten überträgt, also bei
Multimedia -Übertragungen.
Da ist es nicht sinnvoll, dass man auf die Zuverlässigkeit als mit
höchster Priorität achtet, sondern da kommt es darauf an, eine gewisse
Bandbreite zu unterstützen.
Und das User-Datagram-Protokoll reicht im Prinzip den Dienst, die
Eigenschaften von IP, weiter an die Anwendungsschicht.
Das heißt, der unzuverlässige, verbindungslose Dienst wird
weitergereicht und dann muss alles, was mit Verlässlichkeit zu tun
hat, von der Anwendung selbst gemacht werden.
Das heißt, es wird dann nicht mehr von den Protokollen in dem Netz
darauf geachtet, dass alle Pakete,
die ich hatte schon darauf hingewiesen, wenn man das nicht zur
Verfügung hätte, dann könnte man eben nicht einen gleichmäßigen
Datenfluss gewährleisten.
Das geht dann nur, wenn man UDP verwendet oder Protokolle, die darauf
aufbauen und dann entsprechend stärker in die Anwendungsschicht
hineingehen.
Mittlerweile wird unter dem Stichwort Future Internet auch über
Alternativen geredet, weitere Protokolle, die man verwenden möchte, um
gewisse Anwendungen besser ausführen zu können.
Das aktuelle Netz ist aber im Wesentlichen immer noch charakterisiert
durch TCP, IP, UDP und entsprechend die damit zusammenhängenden
weiteren Eigenschaften.
Also das ist so das Wesentliche, was mit Netzen zu tun hat und was Sie
eben wissen sollten ist, dass man einerseits die verschiedenen
Aufgaben trennt und dann eben diese Möglichkeit hat, bei TCP eine
Verlässlichkeit der Datenübertragung zu gewährleisten und auch dafür
sorgt, dass eben der Verkehr auf dem Netz kontrolliert wird durch
diese Möglichkeit, ein Übertragungsfenster unterschiedlicher Größe,
dynamisch veränderlicher Größe zu definieren und damit kann ich also
den Verkehrsfluss im Netz steuern und wenn ich eben Verlässlichkeit
nicht als oberstes brauche, sondern im Wesentlichen daran interessiert
bin, möglichst viele Pakete durchzuschicken, dann mache ich das mit
UDP.
Aber man muss immer aufpassen, dass das Netz nicht überläuft.
Auch das wird gewährleistet, wenn ich also meine einzelnen Knoten
betrachte, dann haben die bei jeder Leitung nur einen begrenzten
Puffer, also begrenzten Zwischenspeicher zur Verfügung.
Wenn dort zu viele Pakete reinkommen, dann gehen halt einige einfach
verloren, die dort nicht reinpassen oder wenn ein Paket zu lange im
Netz rumgeschickt wird, Sie haben entweder mehrere Knoten oder aus
irgendeinem Grund wandert ein Paket immer im Kreis, dann ist die
Anzahl der Knoten, über die ein Paket geschickt wird, irgendwann zu
groß und dann wird das Paket einfach rausgeworfen, das wird dann
gelöscht.
Es sind verschiedene Mechanismen da drin, die dafür sorgen, dass das
Netz nicht überlaufen kann und das ist der Grund dafür, dass man bis
heute in der Lage ist, mit diesen Protokollen zu arbeiten, obwohl die
zu Anfang konzipiert wurden für ein Netz mit wenigen Knoten, also nur
hundert oder paar hundert Knoten.
Heutzutage haben wir hunderte Millionen von Knoten im Netz und es
werden ständig mehr und trotzdem arbeiten wir immer noch mit TCPIP und
das funktioniert.
Das ist also eine geniale Erfindung gewesen, diese TCPIP sehr
weitreichend oder sehr langfristig nutzbar.
Sie haben wenige Beispiele für Protokolle, die mit so
unterschiedlichen Randbedingungen so gut skalierbar arbeiten, auch in
sehr großen Netzen, die dann halt inzwischen entstanden sind.
Aber natürlich gibt es Überlegungen, wie man das weiterentwickeln
kann, aber diese neueren Überlegungen sind noch nicht alle wirklich
übertragen worden.
Okay, noch ganz kurz zum World Wide Web.
Eine spezielle Anwendung im Internet, die wir alle sehr stark
schätzen, das ist erst deutlich später gekommen als der Beginn des
Internets, hat gesagt AFANET, ist Ende der 60er Jahre entstanden und
TCPIP wurde in den 70er Jahren entwickelt.
Erst in den 90ern ist das World Wide Web entwickelt worden und zwar in
Europa, in Genf von theoretischen Physikern beziehungsweise für
Physiker, die Informationen austauschen wollten über ihre Arbeit auf
eine vereinfachte Art und Weise und das ist dann halt sehr stark
weiterverbreitet worden, weil das auch so eine geniale Idee war.
Die erste wesentliche Idee war, dass man Dokumente alle einheitlich
beschreibt und also mit dieser Hypertext Markup Language, die Sie
vielleicht kennen oder vielleicht auch Texte damit schreiben, ist eine
Variante einer sehr viel älteren Sprache, der Standard Generalized
Markup Language, die im Druckbereich, in der Druckindustrie verwendet
wurde und der wesentliche Punkt ist eben dieses Hypertext, das heißt,
ich habe in den Dokumenten Möglichkeiten zu verlinken auf andere
Dokumente und das ist eben wichtig, dass ich auf die Art und Weise in
der Lage bin, auch vernetzte Dokumente sinnvoll zu beschreiben und
über diese Links, eindeutige Adressen wiederum von Dokumenten, kann
ich halt von einem Dokument aufs andere verweisen.
Das ist eine ganz wichtige Geschichte.
Ich habe diese Sprache, die es mir erlaubt, dieses HTML, die es mir
erlaubt, die Darstellung auf eine einheitliche Art und Weise zu
machen.
Also HTML beschreibt, wie man etwas darstellen möchte, wird auch
unterstützt durch sogenannte Style Sheets, aber allein durch HTML wird
schon eine Standarddarstellung gewährleistet, die dann in den
verschiedenen Browsern dann auch verwendet wird.
Das heißt, ich kann in einem Stück Software oder Software oder durch
ein Programm die HTML-Dokumente alle auf gleichartige Art und Weise
auf den verschiedenen Rechnern darstellen.
Das ist eben auch eine wichtige Voraussetzung gewesen für die weite
Verbreitung des World Wide Web.
Und ich habe eben ein einfaches Protokoll zur Übertragung oder zum
Zugriff auf diese Dateien.
Ich habe die Adressen, die URLs, die Uniform Resource Locators, wie
zum Beispiel hier so etwas.
Das ist halt eine typische URL, wobei vorne angegeben wird, das
Protokoll, dann wird eben die Domain angegeben, also der Ort, der
Rechner, auf dem das Ganze liegt und innerhalb dieses Rechners in dem
Web -Server-Bereich dann das Verzeichnis, auf das ich dort zugreife
und dort entsprechend dann das entsprechende Dokument, das dort
abgefragt werden soll.
Und ich kann auf die Art und Weise also sehr einfach zugreifen auf
diese verschiedenen Dokumente, wird alles eindeutig interpretiert über
das Hypertext Transfer-Protokoll, das oberhalb von TCP sitzt, also
unter HTTP sitzt immer TCP und dann, wie gesagt, der Browser sendet
diese Anforderungen nach solchen Dokumenten über diese Adressen raus.
Das HTTP-Protokoll führt es aus, die Datei wird zurückgeliefert an den
Rechner, der Browser interpretiert das, was zurückgekommen ist, das
HTML -Dokument und stellt es dann entsprechend dar.
Sie kennen das alle, Sie können sich jederzeit die HTML-Version Ihres
Dokuments angucken, wenn Sie bei zum Beispiel bei Firefox sich die
Seitenquelltexte anzeigen lassen, dann sehen Sie, wie so ein HTML
-Programm aussieht und genauere Informationen darüber bekommen Sie ja
zum Beispiel in der Vorlesung angewandten Informatik 2 oder auch in
anderen Vorlesungen.
Das World Wide Web wird genauso wie das Internet standardisiert.
Ich hätte gesagt, da gibt es die ganzen Requests for Comments beim
Internet, wo alle Protokolle des Internets dargestellt werden.
Beim World Wide Web gibt es ein World Wide Web Konsortium, das
international alle Protokolle, alle Standards im World Wide Web zur
Verfügung stellt.
Das wird über diese URL halt verfügbar gemacht.
Das www.w3.org ist also der Ort im Netz, wo man alle Informationen
über das World Wide Web abrufen kann.
Da werden alle Standards dargestellt und damit hat man also weltweit
diese Möglichkeit, sich darüber zu informieren.
Insbesondere werden dort auch die ganzen Beschreibungssprachen von
HTML bis zu XML und den ganzen Teilvarianten dieser Sprache XML
dargestellt.
Das ist eine sehr wertvolle Bibliothek von unterschiedlichen
Standards.
Das Interessante ist eben, dass das World Wide Web stark von Europa
aus entwickelt wurde, während das Internet, die grundlegenden
Internettechnologien überwiegend in den USA entwickelt wurden.
Dort halt im Wesentlichen mit militärischem Hintergrund, weil man für
die militärische Kommunikation im Wesentlichen diese Eigenschaften der
Kommunikation brauchte.
Und dass das dann für zivile Zerge genutzt wurde, war ein Randprodukt,
wurde zunächst nur im akademischen Bereich genutzt.
Und erst mit dem Auftauchen des World Wide Web ist das irgendwann dann
auch von der Industrie entdeckt worden und kommerziell eingesetzt
worden.
Das war aber nicht der ursprüngliche Grund für das World Wide Web,
sondern der Grund war die Kommunikation zwischen Wissenschaftlern, um
ihre Forschungsergebnisse schnell austauschen zu können.
Dass das Ganze sich kommerziell weiterentwickelt hat, ist etwas, was
eben mit der Entwicklung der Technologie zusammenhängt, den hohen
Bandbreiten der Kommunikation, den höheren
Ausführungsgeschwindigkeiten in Rechnern.
Das heißt, wir haben einfach deutlich bessere Möglichkeiten für
Informationsverarbeitung und die Vorteile dieses HTTP-Protokolls, der
von HTML und den nachfolgenden Beschreibungssprachen im Zusammenhang
mit TCPIP und dieser guten Skalierbarkeit dieser Protokolle haben eben
dazu geführt, dass wir damit ein System haben, was eigentlich das
größte, im Wesentlichen selbstorganisierende technische System ist,
das es auf der Welt gibt.
Also das ist wirklich eine immense Entwicklungsleistung, die im
Wesentlichen geschehen ist im Zusammenwirken von einer ganzen Reihe
verschiedener Leute, die sich hier damit beschäftigt haben.
Irgendwie will heute mein Werkzeug hier nicht richtig funktionieren.
Also HTML 5 ist eine Weiterentwicklung von HTML.
Ich gehe auf die Dinge hier in dieser Vorlesung nicht ein.
Dazu müssen Sie in die Vorlesung angewandte Informatik 2 gehen oder
entsprechende Vorlesungen, wo es um Webprogrammierung geht.
Das ist jetzt nicht meine Aufgabe, hier intensiver einzugehen.
Das ist natürlich auch interessant, aber dafür haben wir andere
Vorlesungen.
Also ich konnte Ihnen hier nur kurz anreißen, was hier die
wesentlichen Grundlagen sind in die Einzelheiten des World Wide Web
kann ich in dieser Vorlesung nicht eingehen.
Das würde den Rahmen wirklich sprengen.
Ich weiß, dass Sie an diesen Dingen besonders Interesse haben, aber
ich muss halt hier ein paar Grundlagen legen und das ist dann zwar
auch wichtig, aber kann in dieser Vorlesung dann leider nicht
behandelt werden.
Also hier steht noch mal, wo man die ganzen weiteren Dinge dazu
nachlesen kann, beziehungsweise sich weitere Informationen holen kann.
Also hier stehen die Vorlesungen, hier Algorithms für Internet
Applications, meine Vorlesung, dann die Rechnernetze in der Telematik,
intelligente Systeme im World Wide Web, Service Computing, also die
intelligente Systeme im World Wide Web macht halt mein Kollege Studer,
Service Computing macht mein Kollege Tay und dann Herr Abeck macht
Webprogrammierung.
Also da gibt es viele verschiedene Möglichkeiten, sich da zu
vertiefen.
Was ich hier etwas überschlagen habe gerade eben, ist dieser kurze
Absatz, dass Semantic Web ist eine Entwicklung, die auch sehr starke
Bedeutung hat.
Was ist der Unterschied zwischen dem normalen World Wide Web und dem
Semantic Web?
Wenn wir uns anschauen, wie wir navigieren im normalen World Wide Web,
dann machen wir das über die URLs, über bestimmte Wörter, die wir in
irgendwelchen Dokumenten suchen.
Wir suchen nach irgendwelchen Schlagworten in den Suchmaschinen und
können dann angeben, in welchen Dokumenten irgendwelche Schlagworte
aufgetaucht sind.
Aber wir wissen wenig darüber, welche Bedeutung das eigentlich hat.
Und die wesentlichen Erweiterungen beim Semantic Web beziehen sich
darauf, dass man die Bedeutung der Information in einem Dokument mit
berücksichtigt.
Und da kann ich Fragen stellen, also intelligente Suchanfragen machen,
meinetwegen, welcher Wissenschaftler hat mindestens so und so viele
Veröffentlichungen in den und den Konferenzen gehabt.
Das können Sie über eine rein syntaktische Abfrage gar nicht
hinbekommen, da müssen Sie logische Inferenzen machen.
Oder auch wenn Sie fragen nach irgendetwas wie irgendwelchen Autos,
die einen elektrischen Antrieb haben, dann suchen Sie natürlich auch
noch irgendwelchen Cars und nach PKWs und vielleicht LKWs und Vans und
so weiter.
Das heißt, Sie brauchen eine Verallgemeinerung der Begriffe.
Da sind Sie bei dem Begriff der Ontologien.
Das heißt, Sie haben dann Bedeutungsräume für irgendwelche
standardisierten Begriffe und mit denen können Sie geeignet umgehen,
um daraus eine intelligentere Suche nach Inhalten zu machen.
Das sind alles Dinge, die im Semantic Web gemacht werden und das wird
hier in der Vorlesung von Herrn Studer gemacht.
Der ist weltweit einer der führenden Leute im Zusammenhang mit dem
Semantic Web.
Herr Tay ist einer der führenden Leute im Bereich des Cloud Computing,
Service Computing und so weiter.
Der hat eines der ersten Lehrbücher zu Cloud Computing geschrieben,
also ist da auch einer der Experten und insofern sollten Sie dann auch
zu denen gehen, wenn Sie darüber mehr hören wollen oder Sie gehen hier
in meine Vorlesung über Algorithms for Internet Applications.
Okay, was ich damit nur andeuten wollte, ist, dass wir mit dem World
Wide Web und dem Internet eine ganz starke Veränderung der gesamten
Umwelt eigentlich auf den Weg gebracht haben.
Das World Wide Web hat eine wahnsinnige Bedeutung für Wirtschaft und
Gesellschaft.
Deutschland war da insbesondere bei der Steuerung der ganzen
Technologien, was die Regierung angeht, sehr weit zurück über viele
Jahre.
Das ist in den 90er Jahren sträflich vernachlässigt worden.
Da hat man lieber in eine sehr andere Technologie investiert wie
Atomenergie.
Wir wissen, dass das nutzlos war, dass das uns nicht wirklich
technologisch herangebracht hat.
Andere haben ihre Forschungsgelder reingesteuert in Mikroelektronik
und in Informationstechnologien und sind damit langfristig deutlich
besser gefahren.
Da hat man bei uns einige Dinge einfach verschlafen.
Wir sind da inzwischen ganz gut unterwegs.
Auf jeden Fall gibt es durch die Möglichkeiten der
Informationstechnologie viele Chancen für Innovationen, für neue
Produkte, neue Dienstleistungen.
Sie haben vielleicht mal gehört, dass hier ein Carlsruhe Service
Research Institute gibt.
Also Dienstleistungsforschung ist ein ganz wichtiger Bereich.
Riesenfirmen wie IBM oder auch HP setzen mittlerweile auf
Dienstleistungen und nicht auf Hardwareprodukte, weil Dienstleistungen
das Geschäft der Zukunft sind.
Und da muss man wissen, welche Dienstleistungen brauche ich
eigentlich?
Und dazu muss man wissen, wo sind die Märkte und wie kann ich den
Bedarf an Dienstleistungen tatsächlich decken?
Und dazu muss ich wissen, welche Potenziale eigentlich die
Informations - und Kommunikationstechnologien bieten.
Das kann ich nur, wenn ich etwas weiß über Informatik.
Und ich habe in den, nochmal zurück zur Evolution, da gibt es immer
wieder, haben wir jedes Jahr diese Bemerkungen, Informatik brauche ich
nicht, bin Wirtschaftsingenieur, was soll ich mich mit sowas
beschäftigen wie Informatik?
Wer das sagt, der ist nicht richtig aufgestellt, der weiß nicht
worüber er redet.
Denn wer als Wirtschaftsingenieur zukünftig arbeiten möchte, der muss
wissen, welche Potenziale die Informations- und
Kommunikationstechnologien bieten.
Das kann man nur richtig einschätzen, wenn man auch weiß, was da
drunten alles so abläuft.
Sie werden sicherlich nicht später Assembler programmieren müssen oder
genau wissen müssen, was in einem Verneumdungsrechner abläuft.
Aber Sie müssen, um die Potenziale zu erkennen, auch die
Beschränkungen zu erkennen, müssen Sie sich damit einmal beschäftigt
haben, um zu wissen, dass es Probleme gibt, die schwierig sind,
inherent schwierig sind, wie NP-vollständige Probleme oder noch
schwierigere.
Das müssen Sie überhaupt erstmal wissen, dass man sich damit
beschäftigen muss und wie man sowas erkennen kann und wie man darauf
geeignet reagiert.
Wenn Sie das nicht einschätzen können, dann werden Sie ganz sicher
falsche Entscheidungen treffen.
Deswegen habe ich auch festgestellt, dass viele Industrieunternehmen,
die nur von Wirtschaftsleuten geführt werden, also von BWLern, leider
nicht in der Lage sind, technologisch wirklich zu überleben.
Sie brauchen die reitende Kombination von Wirtschafts-Know-how, von
technischem Know-how und das ist das, was die Wirtschaftsingenieure
haben.
Deswegen sind die Wirtschaftsingenieure auch so gefragt in der
Industrie, weil sie genau die Kompetenzen haben, die man braucht.
Aber wenn Sie sich nur konzentrieren auf irgendwelche
Finanzdienstleistungen und reine BWL-Kenntnisse, das reicht Ihnen
nicht aus.
Damit sind Sie genauso arm dran wie die BWL-Leute.
Sie müssen als Wirtschaftsingenieure Ihre Vorteile ausspielen.
Das sind die Vorteile, dass Sie kombinieren können, Ihre Kenntnisse
der Informationstechnologien und der Ingenieurwissenschaften mit den
geeigneten wirtschaftlichen Randbedingungen.
Wenn Sie das geeignet kombinieren können, dann haben Sie das Paket für
die Zukunft und können geeignet arbeiten.
Also diese Chancen für Innovation, Entwicklung neuer Produkt- und
Dienstleistungen, das ist das, was wir brauchen als ein Land, das nur
als Ressource die Köpfe, die guten Köpfe hat, die Fachleute, die eben
kreativ sind.
Und wenn wir das verlieren, dann verlieren wir die Möglichkeit,
wirklich zukünftig eine blühende Wirtschaft zu haben.
Also das ist das, woran wir arbeiten müssen, das ist das, wofür wir
Sie ausbilden.
Und deswegen ist gerade die Kombination von Wirtschaft, Informatik,
Methoden und Ingenieurwissenschaften das, was Ihre Qualität vor allen
Dingen ausmacht.
Muss nicht loswerden.
Also als noch mal Motivation für Sie, dass Sie einen tollen
Studiengang gewählt haben und damit beste Chancen haben, wenn Sie
erkennen, dass auch so etwas wie Informatik eine wichtige Vorlesung
ist.
Wer das nicht erkannt, der hat Pech gehabt und wird später damit
vermutlich Probleme haben.
Jetzt noch kurz zu den Hintergründen weiterer Technologien, die uns
heutzutage ermöglichen, ganz neue Anwendungen zu realisieren.
Kommunikation geht nicht nur über die drahtgebundenen Netze, sondern
natürlich auch über drahtlose Kommunikation.
Wird immer wichtiger.
Wir laufen alle mit unseren Handys in der Hosentasche rum und wollen
damit kommunizieren können und machen das mit verschiedenen
Technologien.
Das Ganze ist einerseits hier das GSM, Global System for Mobile
Communications.
Das war so der Einstieg mit etwa 9,6 Kilobit pro Sekunde.
Noch nicht sehr viel.
Wir sind dann weitergegangen oder man hat weitere Technologien
entwickelt.
Das ist ja auch eine faszinierende Geschichte, dass man durch diese
neuen Technologien, dass man da einerseits mit unterschiedlichen
Frequenzbändern arbeitet bei der Funkkommunikation, andererseits aber
auch die Art der Verschlüsselung, die Art der Informationskodierung
verändert und dadurch deutlich größere Bandbreiten erreichen kann.
Wir haben dann dieses GPRS, General Packet Radio Service.
Wir haben UMTS, erinnert sich an die große UMTS-Versteigerung von
Frequenzen, wo man eben die Bandbreite deutlich erhöhen kann, bis auf
zwei Megabit pro Sekunde.
Und das ist so das, was wir als 3G-Technologien bezeichnen, also 3G
für Third Generation Mobile Communication.
Und dann ist die Frage, wie kann man das noch weiterentwickeln, wie
kann ich also über so wenige Megabit pro Sekunde hinauskommen.
Hier sehen Sie die Latenzzeit liegt über 100 bis 150 Millisekunden.
Dann gibt es eine weitere Entwicklung, das war das WiMAX oder ist das
WiMAX, Worldwide Interoperability for Microwave Access.
Da kann man im Prinzip bis 260 Megabit pro Sekunde Dateien übertragen.
Diese Sachen werden wichtig, wenn ich zum Beispiel aufwändige Dinge
übertragen möchte, wie irgendwelche Spiele oder Filme oder ähnliches
oder auch Echtzeitkommunikation brauche in der Verkehrssteuerung.
Dann ist die Frage, wie kann ich das wirklich machen, so dass die
Latenzzeiten kurz genug sind, um zum Beispiel dafür zu sorgen, dass
wenn ich hier verschiedene Autos habe und ich habe hier irgendwie eine
Kurve, da fährt ein Auto, da ist ein Hindernis, dann möchte ich dafür
sorgen, dass das drahtlose Kommunikation ist ermöglicht, dass dieses
Fahrzeug dem Fahrzeug mitteilen kann, dass dort vorne ein Hindernis
ist und dass dieses Fahrzeug hier bitte abbremsen sollte.
Dazu muss ich sehr schnell reagieren können, sprich ich brauche sehr
kurze Latenzzeiten und man hat dann eben diese ganzen Technologien
weiterentwickelt.
Das, was sich jetzt durchsetzt, ist das LTE, Long Term Evolution, ein
seltsamer Name, Long Term Evolution für einen Funkstandard, wäre eine
typische Frage, die man bei, wer als Millionär fragen könnte, was ist
Long Term Evolution und dann würden sie viele verschiedene Antworten
kriegen, aber sicherlich nicht, dass das ein Mobilfunkstandard ist,
aber das ist der leistungsfähigste Mobilfunkstandard mittlerweile, der
also dafür sorgen wird, dass wir wirklich sehr schnell mit sehr kurzen
Latenzzeiten kommunizieren können, also fünf Millisekunden, das ist
die gleiche Verzögerung, die wir haben, wenn wir zwischen Rechnern im
Festnetz kommunizieren.
Also wenn Sie einen Ping machen zwischen verschiedenen Rechnern und
Sie die Zeiten angucken, das liegt im Millisekundenbereich und das
heißt, wir haben dann auf einmal über die Mobilfunkkommunikation die
gleichen Latenzzeiten wie im Festnetz und damit haben wir also hier
eine Möglichkeit, wie wir drahtlos genauso leistungsfähig
kommunizieren können, wie wir über das Festnetz kommunizieren und das
heißt also zukünftig werden wir wahrscheinlich alle mit solchen LTE
-Geräten rumlaufen und brauchen das Festnetz überhaupt nicht mehr.
Das ist also eine ganz wichtige Entwicklung, die also insbesondere
hohe Übertragungsleistungen bietet.
Ich hatte gesagt, Festnetz, hier mein Kabel, mit dem ich angeschlossen
bin, liefert 100 Megabit pro Sekunde, mit LTE bin ich im gleichen
Bereich und man wird also gerade in der Automobilkommunikation wird
man da ganz verstärkt auf LTE setzen.
LTE ist in Europa jetzt im letzten Jahr eingeführt worden und wird
also sich stärker verbreiten.
Das ist eine ganz frische Technologie, die erst jetzt sich allmählich
durchsetzt.
Dann gibt es die anderen Arten der Kommunikation, Wireless LAN, WLAN,
andere Technologie, bei der ich eben auch in der Lage bin, schnell zu
kommunizieren, bis 54 Megabit pro Sekunde und hier habe ich auch also
sehr kurze Latenzzeiten, bin vergleichbar mit einem drahtgebundenen
LAN, aber das wird also in der Bedeutung abgelöst werden durch das
LTE.
Ich werde irgendwann das LAN gar nicht mehr so sehr brauchen,
allerdings habe ich natürlich das Wireless LAN innerhalb von Gebäuden.
Innerhalb von Gebäuden kann ich Schwierigkeiten haben mit den
sonstigen Mobilfunkkommunikationen.
Da habe ich die Sendemasten außerhalb der Gebäude.
Ich habe keine UMTS-Sendemasten innerhalb der Gebäude.
Ich werde also innerhalb der Gebäude mit WLAN arbeiten außerhalb mit
diesen anderen Kommunikationsstandards, aber das muss eben dafür
sorgen, dass man dann, wenn man sich hier gerade mit über einen
Sendemast kommuniziert und dann sich weiter bewegt zum nächsten, dann
bin ich mit meinem Gerät zunächst mal mit dem verbunden,
beziehungsweise rede mit diesem Gerät oder mit dem Sendemast oder mit
dem Access-Punkt, wie man sagt und dann bewege ich mich weiter und
irgendwann muss ich umschalten auf den hier und alle Verbindungen, die
meine Datenpakete gelaufen sind, über diesen Sendemast hier müssen
umgeleitet werden auf den Sendemast.
Das ist das sogenannte Handover zwischen verschiedenen Zellen in
solchen Netzen und das Ganze soll so funktionieren, dass sie keine
Unterbrechung ihrer Verbindung haben.
Sie kennen das aus dem Mobilfunknetz, dass sie fahren mit dem Zug oder
sie fahren mit dem Auto und die Verbindung ist konstant da, aber sie
sind natürlich ständig in unterschiedlichen Funkzellen.
Ganz wichtige Technologie, drahtlose Kommunikation und hier wird eben
auch sehr viel entwickelt.
Hier gab es letzten Oktober oder November einen interessanten Vortrag
des Chefs von Alcatel SEL, der Herr Wolff hat hier vorgetragen über
die Entwicklungen im Mobilkommunikationsbereich und hat dort eben
gerade noch mal hingewiesen auf diese Bedeutung dieses LTE-Standards,
der auch als 4G bezeichnet wird, also fourth generation oder vierte
Generation Technologie in der Mobilkommunikation.
Das sind also dort ganz wichtige Entwicklungen, das heißt LTE wird die
Welt der Kommunikation nachhaltig beeinflussen und viele Lösungen, die
bisher über noch Festnetzanbindungen brauchten, dann deutlich
verändern.
Konsequenzen sind halt, dass wir den Zugang zum Internet eigentlich
überall haben.
Sie können mit ihren Smartphones alles das machen, was sie auch über
Festnetzrechner machen konnten und sie haben eben insbesondere dadurch
die Möglichkeiten, immer verbunden zu sein.
Wir wissen die ganzen Geschäftsmodelle für die Verbindung, für die
Kommunikationsanwendungen, die sie entwickelt haben, da kann man halt
viel Geschäfte machen.
Die Sache mit den selbstorganisierenden Systemen ist auch eine sehr
interessante Geschichte, haben wir in unserem Forschungsprogramm zur
Genicomputing intensiv untersucht und da gibt es so die sogenannten Ad
-Hoc -Netze oder auch die Mobile Ad-Hoc Networks, MA-Netz, wo Geräte
untereinander kommunizieren.
Sowas braucht man auch an verschiedenen Stellen in industriellen
Anwendungen, also da ist sehr viel, was sich an Entwicklungspotenzial
bietet, wo sie kreativ sein können und neue Konzepte, Dienste,
Produkte entwickeln können.
Wir haben in Karlsruhe nicht geschlafen und haben da einiges zu getan.
Also als die WLAN-Technologie sich stark verbreitet hat, haben wir
hier auf dem Campus der Universität sehr schnell mit dem Projekt
Ducat, das war die drahtlose Universität Karlsruhe, ist campusweit ein
WLAN -Netz aufgebaut worden.
Das Ducat-Projekt hat dann die Notebook-Universität Karlsruhe auf den
Weg gebracht, wo wir Dienste, mobile Dienste entwickelt haben, unter
anderem diese Werkzeuge hier für die Feedback-Kommunikation, also für
Feedback in Vorlesungen.
Das ist ein Produkt von Ducat und das ist eben etwas, was sich immer
noch weiterentwickelt, dass wir hier am KIT Dienste für Studierende
unter Nutzung der modernsten Technologien entwickeln und verfügbar
machen.
Dieses Schwerpunktprogramm Organic Computing hatte ich schon erwähnt,
das lief bis letztes Jahr, hatten wir hier von Karlsruhe maßgeblich
gesteuert, ich habe das koordiniert und da ist sehr viel entwickelt
worden im Zusammenhang mit Technologien für selbstorganisierende
adaptive Systeme und Sie wissen, dass wir am KIT alle Aktivitäten in
dem Bereich zusammenfassen, in dem KIT-Schwerpunkt Computation, wo wir
also Infrastrukturen für vernetzte adaptive Systeme betrachten, die
halt eine interne Verbindung zwischen Communication und Computation
haben und Sie wissen, ein Bereich, wo das ganz wichtig ist heutzutage,
ist der Bereich der Energie, Energiesysteme.
Die ganze Energiewende wird nicht möglich sein, wenn wir nicht
geeignet solche selbstorganisierenden Systeme der
Informationsverarbeitung dort mit integrieren, weil wir sonst nicht in
der Lage sind, auf die Randbedingungen der erneuerbaren Energien
einzugehen.
Wer den letzten Spiegel gelesen hat, da gibt es einen sehr kritischen
Artikel zu der Energiewende, da steht, dass man auf einmal erkannt
habe, dass die erneuerbaren Energiequellen halt nicht dauernd zur
Verfügung stehen, dass wir halt da gewisse Schwankungen haben, das
sieht also manchmal so aus, manchmal so, dass wir über einen gewissen
Zeitraum überhaupt keine Energieanspeisung haben, aber auf jeden Fall
eine sehr relative Energieproduktion, das ist etwas, was lange bekannt
ist, wir wissen auch, wie wir damit umgehen oder dass wir damit
umgehen müssen und das können wir nur durch eine geeignete Steuerung
der Energieerzeugung und eine Steuerung des Energieverbrauchs, das
geht nur mit den Methoden der Informationsverarbeitung, braucht auch
die hervorragende Leistung der Energietechnik, aber die geeignete
Verbindung macht es.
Und auch da würde ich sagen, die Wirtschaftsingenieure, die sowohl
Informatik kennen als auch Ingenieurwissenschaften sind auch da die
besten Leute, die dort Ideen liefern können und das weiter
voranbringen können.
Da sind wir am Institut AIFB auch ganz massiv unterwegs und machen
Dinge, die man jetzt auch nennt Energieinformatik, neue Variante der
Informatik, wo man also speziell die Informatikanwendungen ausrichtet
auf die Anforderungen im Energiebereich und da entsprechend neue
Technologien entwickelt.
Da sind wir also ganz massiv dran.
Wer Interesse hat, sich da mit zu beschäftigen, sollte einfach zu uns
kommen und bei uns als HIWI arbeiten oder seine Bachelor- oder
Masterarbeit mal bei uns machen.
Also hier sind viele Themen für, hier steht noch Diplomarbeiten,
Bachelorarbeiten, Masterarbeiten, selbstverständlich auch.
Okay, das ist das, was ich erzählen wollte zu den ganzen
Rechenarchitekturdingen und wir kommen damit zum nächsten Kapitel.
Wir wissen, ich hatte gesagt oder Sie wissen, dass wir ein sehr
umfangreiches Programm haben in dieser Vorlesung und das nächste
Kapitel, das wir uns angucken müssen, ist die Programmierung.
Also Programmierung, Bildschirmpräsentation ab aktueller Folie.
Wir haben jetzt gesehen, die formalen Grundlagen, dass man im Prinzip
etwas schreiben kann oder dass man Programme schreiben kann für
Rechner.
Wir wissen, wie Rechner aufgebaut sind, welche prinzipiellen
Möglichkeiten die haben.
Jetzt müssen wir sehen, wie können wir eigentlich solche Rechner
tatsächlich programmieren.
Wir wissen, was ein von Neumann Rechner macht mit den einzelnen
Befehlen, aber wie die genau aussehen und so weiter, das wissen wir
eigentlich noch nicht.
Deswegen muss ich Ihnen dazu einiges erzählen.
Ich muss Ihnen etwas erzählen, darüber, wie man jetzt konkret dafür
sorgen kann, dass ein Rechner für die Probleme, die wir bearbeiten
wollen, richtig programmiert wird und auf effiziente Art und Weise
programmiert wird.
Es ist klar, dass die nackte Maschine so zunächst mal nicht gut
geeignet ist, um uns zu unterstützen bei der Ausführung von
irgendwelchen Lösungsverfahren.
Die nackte Maschine ist sehr unkomfortabel für die Programmierung.
Wir müssten dann diesen von Neumann Engpass, diesen logischen von
Neumann Engpass oder intellektuellen von Neumann Engpass beachten,
dass wir alles genau sequentialisieren müssen.
Das wollen wir eigentlich gar nicht.
Wir wollen eigentlich möglichst problemorientiert etwas programmieren
können, angepasst an die Problemstellung und die Anpassung an die
Maschinenanforderungen soll eigentlich intern passieren von unseren,
von den ganzen Softwarepaketen, die dafür sorgen, dass etwas
ausgeführt werden kann.
Wenn wir uns jetzt unseren Rechner anschauen, dann gibt es also
einerseits die Sprachen, mit denen wir direkt unseren Rechner
programmieren können und wir haben oben drüber gebaut eine Reihe von
Sprachebenen, mit denen wir ganz anders programmieren können.
Ganz oben steht hier sowas wie Java oder Smalltalk oder C++, das sind
die objektorientierten Sprachen.
Unten drunter sowas wie Basic, Fortran oder C++.
Prozeduralen Sprachen, worum stärker der Ablauf genau festgelegt wird
und wie gesagt unten drunter die Maschinensprachen.
Und die Frage ist, wie komme ich eigentlich von einem Programm, das
also in dieser Sprache geschrieben wurde, zu einem Programm in der
Sprache oder irgendwann zu der Sprache, die im Rechner ausgeführt
wird.
Das muss man sich angucken.
Das muss man auch angucken, welche Möglichkeiten es gibt auf diesen
verschiedenen Ebenen etwas auszudrücken und Programme zu formulieren.
Das heißt, ich muss das Ganze geeignet, ich muss erst mal wissen,
welche Möglichkeiten habe ich auf jeder Ebene und wie kann ich etwas
von dieser Ebene überführen in etwas auf der Ebene.
Dazu brauche ich Programme, die mir ein Programm in der Quellsprache
übersetzen, in ein Programm in der Zielsprache oder die Alternative
ist die Interpretierung.
Ich habe ein Programm, habe dort eine Reihe von Anweisungen, bin an
einer bestimmten Stelle und führe das Programm so aus, dass ich jede
Anweisung direkt interpretiere und überführe in die entsprechenden
Maschinenbefehle und dann so sukzessive durch das Programm durchlaufen
kann.
Das dauert dann entsprechend länger und das Problem ist, wenn ich hier
drin eine Schleife habe, ich bin also jetzt hier angelangt, laufe hier
durch und muss dann irgendwann nochmal da zurück.
Wir wissen, dass viele unserer Programme iterativ arbeiten, also
Schleifen drin haben, dann führt das dazu, dass wir auf einmal, jedes
Mal, wenn wir hier zu einem Befehl kommen, den erneut interpretieren
müssen und ausführen müssen, umsetzen müssen, Maschinenbefehle und
dann direkt ausführen müssen.
Das ist ein ziemlicher Aufwand, da ist es also wesentlich besser, wenn
man das einmal übersetzt hat und dann dieses Programm hier direkt in
der Maschine ausführt.
Aber für die Entwicklung eines Programms kann es sinnvoll sein, mit
Interpretierung zu arbeiten.
Beides tritt in Rechnern auf und wenn Sie also zum Beispiel Basic
programmieren, dann wird das interpretativ normalerweise ausgeführt.
Auch wenn Sie Java programmieren, wird das zunächst übersetzt in ein
Programm auf einer Java Virtual Machine oder die Programme der Java
Virtual Machine werden interpretativ ausgeführt auf Ihrem Rechner.
Das sind verschiedene Möglichkeiten, die beide sehr wichtig sind.
Wir haben auf jeden Fall in jeder Programmebene eine bestimmte Sicht
auf die Möglichkeiten der abstrakten Maschine und genau mit diesen
entsprechenden Möglichkeiten der abstrakten Maschine sind die
einzelnen Befehle der Programmiersprache gestrickt.
Wir haben also jetzt konkret in unseren Rechnern einerseits etwas
vereinfacht die problemorientierten Sprachen wie C, Pascal, Java und
so weiter.
Und das geht dann runter über die Assembler-Sprache zur
Maschinensprache oder manchmal auch noch runter in die
Mikroprogrammierung.
Das heißt, dann kann man etwas, was sich Firmware nennt, noch nutzen.
Das heißt, ich kann zum Beispiel die Ausführung von bestimmten
Befehlen anpassen an die Häufigkeit, mit der bestimmte Befehle
auftauchen.
Solche Dinge werden in Rechnern gemacht.
Hier ist ein interessantes Beispiel, das sogenannte Instruction
Morphing.
Da werden also bestimmte Befehle besser oder weniger gut durch
Hardware direkt unterstützt.
Das ist etwas, was ein früherer Kommilitone von Ihnen gemacht hat, der
Marc Fleischmann, der bei HP eine Diplomarbeit geschrieben hat und
dann dort in den USA geblieben ist und dort dann später gegangen ist
zu einer Firma, die den Cruzo-Prozessor entworfen haben.
Ein sehr leistungsfähiger, energiearmer Rechner, der also insbesondere
für mobile Anwendungen entwickelt wurde und die Rechenarchitektur
wurde ganz wesentlich von dem Marc Fleischmann mitgestaltet.
Das heißt, der hat mit der Ausbildung, die er hier in Karlsruhe
genossen hat, dann dort sehr innovativ gewirkt, zusammen mit dem Linus
Torwald, der das Linus entwickelt hatte.
Ja, das ist also, Firmware ist etwas, wo ich Maschinensprachen
anpassen kann auf spezielle Ausführungsprofile.
Das heißt, wenn bestimmte Befehle häufiger auftauchen, werden die
besser ausgeführt, als wenn sie nicht so häufig ausgeführt werden.
Das sind Möglichkeiten, die ich also habe und wir werden uns jetzt
diese verschiedenen Ebenen anschauen und erstmal die
problemorientierten Programmiersprachen dienen also zur Formulierung
von Programmen aus einem Anwendungsbereich.
Da kann ich problemorientiert sehr gut meine Programme schreiben.
Die SEMLA-Sprache ist deutlich mehr maschinenorientiert, aber hat eine
Möglichkeit, in einer verbalen Form, also in einer symbolischen
Notation die einzelnen Befehle zu spezifizieren.
Darunter liegt dann die Maschinensprache, in der ich nur binär
kodierte Befehle habe.
Also ein binär kodierter Befehl ist natürlich schwer zu interpretieren
für unser menschliches Auge.
Da wollen wir gerne eine symbolische Beschreibung haben.
Es ist normalerweise die semantisch niedrigste Ebene der
Programmierung, aber wir haben dann eventuell unten drunter noch die
Mikroprogrammierung, die es uns erlaubt, die Befehle tatsächlich
auszuführen durch Elementaroperationen.
Und jetzt werden wir im weiteren sukzessive von der
Mikroprogrammierung hoch bis zur problemorientierten Sprache uns das
anschauen und ganz kurz sehen, welche Strukturen haben wir eigentlich
in der Mikroprogrammierung, in der Maschinensprache, was ist das Thema
Sprache und wie geht das Ganze dann weiter.
Das geht relativ schnell.
Mikroprogrammierung muss das unterstützen, was ich Ihnen in den
letzten Vorlesungen erzählt habe.
Dieser Befehls- oder Maschinenbefehlszyklus, das Ausführen von
einzelnen Befehlen, muss durch Mikroprogrammierung unterstützt werden.
Sie wissen, dass die Steuereinheit diese Aufgaben hat, ein Befehl zu
holen, ihn zu dekodieren, ihn auszuführen.
Der Befehl ist zum Beispiel irgendein Additionsbefehl und da stehen
dann irgendwelche Adressen, irgendeine Adresse A1, A2 beim Zwei-Adress
-Befehl und da muss das geeignet interpretiert werden, die Operanten
müssen geholt werden in ihres Rechenwerk und so weiter.
Das sind alles elementare Operationen, die in der richtigen
Reihenfolge angestoßen werden müssen.
Wir sagten, dass wir das ja auch machen im Pipelining-Verfahren und
das sind, wie gesagt, eine Reihe von Elementaroperationen und das wird
auf der Ebene der Mikroprogrammierung gesteuert.
Ich kann das, ich könnte das alles fest verdrahten, dann wäre das
alles, wären diese Operationen einfach fest verdrahtet ausgeführt.
Ich kann das Ganze aber auch durch Steuersignale machen, die das dann
in einer Programmierung, die erlauben, das alles zu programmieren.
Wenn ich also nochmal anschaue, wie so ein Steuersignal wirkt, ich
hatte schon gesagt, wir haben, das haben wir ganz angesehen, als ich
Ihnen etwas über Register erzählt habe, wenn wir dafür sorgen wollen,
dass eine Verbindung von irgendeiner Komponente, wie zum Beispiel
einer Speichereinheit, auf einen Bus geblockiert wird, dann setzen wir
ein Steuersignal für einen UND-Gatter einfach auf 0, dann wird dort
nichts rausgegeben.
Wenn wir die Informationen weitergeben wollen, setzen wir das
Steuersignal auf 1, dann wird genau das, was hier im Register steht,
auf den Bus raufgeschrieben.
Das sind so eine Art Sperren oder Wächter für solche Verbindungen und
die müssen geeignet gesteuert werden.
Das heißt, dadurch kann ich Informationsflüsse im physikalisch
verdrahteten Rechner geeignet steuern.
Und ich muss also in der Steuereinheit diese Signale geeignet erzeugen
und zwar so, dass das zum richtigen Zeitpunkt in der richtigen
Reihenfolge die Elementaroperationen ausgeführt werden von dem
geradezu bearbeitenden Befehl.
Das kann ich eben entweder machen über Programmierung oder über feste
Verdrahtung.
Man hat das heutzutage in der Regel alles über Mikroprogrammierung
gemacht, zumindest in den größeren Rechnern.
In kleineren Rechnern ist das fest verdrahtet.
Und man kann das halt dann auch noch später modifizieren und deswegen
wird das über Mikroprogrammierung gemacht.
Das, was wir in solch einer Mikroprogramm-Einheit haben, ist
eigentlich noch mal so eine kleine Variante unserer ganzen von Neumann
-Architektur.
Das heißt, wir haben hier eine gewisse Ablauflogik.
Das heißt, wir wissen, wann welcher Befehl ausgeführt werden sollte.
Wir haben also hier den Mikrobefehlszeiger, der uns angibt, welcher
Befehl jetzt konkret ausgeführt wird.
Wir haben ein Mikroprogramm speichert.
Da wird also dann durch den Mikrobefehlszeiger gezeigt, auf den
nächsten auszuführenden Mikroprogrammbefehl.
Es wird der Befehl aus dem Speicher geholt, wird in das
Mikroinstruktionsregister geholt und in dem Mikroinstruktionsregister
stehen dann eine ganze Reihe von Informationen, die interpretiert
werden durch Steuersignale.
Und außerdem steht dort, welcher Befehl als nächstes ausgeführt werden
soll.
Und das ist also die Adresse des nächsten Befehls.
Und jetzt muss man sich anschauen, was stehen eigentlich hier für
Informationen in den Mikroinstruktionsregister drin.
Wie gesagt, die werden interpretierte Steuersignale für die einzelnen
Komponenten, die in Steuerwerk und Rechenwerk und Speicher aktiv
werden müssen.
Ich habe also im Mikroprogramm eine Folge von Mikrobefehlen, die
nacheinander ausgeführt werden müssen.
Ich habe den Mikrobefehl als Steuerwort, das eine oder mehrere
Elementaroperationen oder Mikrooperationen ausführen soll.
Und diese Mikrooperation ist nun wirklich etwas, was nicht mehr
programmiert werden kann, sondern was fest verdrahtet ist und
ausgelöst wird durch ein ganz spezielles Steuersignal.
Jetzt kann man das Ganze, hier stehen die ganzen Dinge drin.
Die Erläuterungen, die ich gerade gegeben habe, sind hier nochmal
dargestellt.
Also der Mikroprogrammspeicher, Mikrobefehlszeiger, das
Instruktionsregister dient eben zur Interpretation oder enthält den
Mikrobefehl, der ausgeführt werden soll.
Und die Ablauflogik bestimmt halt den nächsten Wert des
Mikrobefehlszählers, der bestimmt werden kann durch eine Adresse im
aktuellen Befehl oder durch irgendwelche Bedingungen oder Bits des
Statusregisters.
Jetzt kann man unterscheiden, noch zwei verschiedene Arten der
Mikroprogrammierung, die horizontale oder die vertikale.
Bei der Horizontalen ist es so, dass ich in jedem Mikrobefehl mehrere
Einzeloperationen habe.
Das heißt, ich kann eine ganze Reihe unterschiedlicher
Elementaroperationen parallel ansteuern, durch einen Befehl.
Das sind sogenannte Very Long Instruction Words, also VLIW,
Rechnerarchitekturen haben solche horizontalen mikroprogrammierten
Befehle.
Wenn man das anders macht, dann hat man also eine, bei der vertikalen
Programmierung hat man eine sequenzielle Ausführung von
Mikrooperationen, da muss der Befehl dekodiert werden und in einzelne
Folgen von Steuersignalen übersetzt werden.
Das ist etwas, was man auch machen kann, was weniger Platz braucht,
weniger Hardwareaufwand in der Mikroprogramm-Einheit, aber dafür
sorgt, dass man weniger Platz braucht, weniger Kosten für die
Komponente, aber der Nachteil ist eben, dass man dann mehr Zeit
braucht für die Befehlsausführung und das ist halt dieser Trade-off
zwischen mehr Platz, dadurch schneller oder weniger Platz und dann
etwas längere Zeit und so sind halt die Mikroprogramm-Einheiten
unterschiedlich gestrickt.
Ich werde also von Ihnen nicht verlangen, dass Sie in der Lage sind,
irgendwelche Mikroprogramme zu schreiben, das ist eine Ebene, von der
Sie wissen sollten, dass sie existiert, Sie sollten wissen, welche
Strukturen davor kommen, was der Unterschied ist zwischen horizontaler
und vertikaler Programmierung in solchen Mikroprogrammen, aber auf
viele Einzelheiten werden Sie dort nicht eingehen müssen.
Deswegen gehe ich auch etwas schnell darüber, ich will Ihnen die
Informationen liefern, dass Sie wissen, dass diese Einheiten
existieren, dass sie bestimmte Eigenschaften haben, aber wir gehen in
die Einzelheiten nicht sehr stark rein, ein bisschen tiefer gehen wir
rein in die Maschinensprachen, die also über der Mikroprogramm-Ebene
liegen, das ist eigentlich die Ebene, auf der wir kommunizieren mit
dem Rechner, das sind die Befehle, die wir ansprechen in unseren, auch
in den Assembler-Programmen, das sind die wesentlichen Befehle, wobei
Assembler noch eine Ebene drüber ist, das werden Sie etwas später
kennenlernen.
Die Maschinensprachen sind also alle Maschinenbefehle einer CPU, im
Prinzip wird durch die Maschinenbefehle, also durch den Satz der
Maschinenbefehle, die Rechner-Architektur bestimmt, wir reden deswegen
von der IBM 360-Architektur oder von einer Intel-Architektur oder wer
weiß was, Architektur, die Architektur eines Prozessors ist bestimmt
durch den Maschinenbefehls-Satz, also durch den Instruktionssatz, das
gibt uns an, wie wir mit dem Rechner kommunizieren können.
Jeder Maschinenbefehl ist so ein binäres Wort fester Länge, das ist
klar, das Maschinenprogramm eine Folge von Maschinenbefehlen und in
jedem einzelnen Maschinenbefehl hatte ich Ihnen schon mehrfach gesagt,
haben wir also diese Aufteilung in den Op-Code und dann in die
verschiedenen Adressen A1, A2, A3, A4 und so weiter, wobei wir
normalerweise halt mindestens eine Adresse haben, wenn wir viel haben,
haben wir drei Adressen, aber mehr eigentlich auch nicht und jede
Operandenadresse ist jetzt, die heißt Adresse, also das was ich hier
angedeutet habe, A1 zum Beispiel ist eine Adresse, aber ich
interpretiere eine solche Adresse entweder als einen Wert, also nimm
den direkt zum Rechnen, hatte ich Ihnen auch schon mal erläutert, als
ich Ihnen etwas erzählt habe über die Rechenarchitektur oder wir sehen
das als Registeradresse, das heißt wir haben hier irgendeinen Teil in
unserem Rechenwerk, da haben wir also eine Reihe von einzelnen
Registern, die dort vorhanden sind, direkt im Rechenwerk, die können
adressiert werden oder es sind irgendwelche Hauptspeicheradressen oder
noch etwas anderes kann sein, dass wir, da gehe ich noch später darauf
ein, wie wir adressieren können, dass wir hier etwas kompliziertere
Adressierung von Operanden haben, als direkt hier ranzugehen, also es
kann sein, dass wir die eigentliche Adresse eines Operanden erst
bekommen, wenn wir den Inhalt uns hier anschauen und dieser Inhalt
gibt uns dann die eigentliche Adresse, an der wir nachschauen müssen.
Solche Dinge können ja alle mit kodiert sein und das ist also eine
wichtige Art der Steuerung oder des Umgangs mit dem Speicher, wie
können wir auf die verschiedenen Adressen tatsächlich zugreifen, wie
können wir den Zugriff auf Daten gestalten.
Hier sind jetzt die verschiedenen Adressarten nochmal dargestellt,
also von einem Adressbefehl, bei der ja nur eine Adresse angegeben
wird.
Was mache ich jetzt, wenn ich addieren will, wenn hier eine Addition
steht und hier steht irgendwie 17 und das soll mal wegen der Adresse
sein.
Wie kann ich jetzt nur einen Operanden addieren?
Das geht natürlich nicht.
Dann habe ich hier implizit immer ein weiteres Register zur Verfügung,
ein Akkumulator, also ein Register im Rechenwerk und dieser
Akkumulator, dieses Register im Rechenwerk enthält den Operanden, auf
den ich den Operanden, der durch diese 17 spezifiziert ist, jetzt
addieren soll.
Und das Ergebnis des Ganzen wird wieder im Akkumulator abgespeichert.
Das heißt, was ich ausführe durch einen solchen Befehl, ist eine
Operation, bei der der Akkumulator verknüpft wird mit dem Wert dieser
Operandenadresse und das Ergebnis wird wieder in den Akkumulator
geschrieben.
Also irgendeine Adresse im Rechenwerk, da habe ich also, wenn das mein
Rechenwerk ist hier, dann habe ich dort irgendein Register, was
Akkumulator heißt und da sitzt der zweite Operand und am Ende das
Ergebnis.
Das ist also eine einfache Art, Befehle zu schreiben.
Dann habe ich eben kurze Befehle und muss die entsprechend dann
interpretieren.
Beim Zwei-Adress-Befehl kann ich zwei Operanden spezifizieren, die
verknüpft werden sollen und das Ergebnis kommt dann in der Regel, in
den meisten Programmiersprachen ist das so, in den meisten
Maschinensprachen zum zweiten Operanden oder zum ersten Operanden.
Das sind alles Dinge, die müssen halt in der Maschinenarchitektur
festgelegt werden.
Oder ich habe ein Drei-Adress-Befehl, da kann ich sogar noch angeben,
wo das Ergebnis hingelegt werden soll.
Das heißt, ich habe noch mehr Spezifikationsmöglichkeiten und kann
direkt sagen, welches die Operanden sind für meine Operation und wo
das Ergebnis hingelegt wird.
Also ich habe dann deutlich größere Spezifikationsmöglichkeiten für
die Ausführung von Befehlen, aber ich brauche natürlich auch deutlich
breitere Befehle.
Eine Adresse hatten wir gesagt, ist normalerweise 32-Bit lang oder 64
-Bit rechnen.
Wenn Sie jetzt drei Befehle, drei solche Operanden haben, 3 x 64-Bit
plus ein Operationscode, dann brauchen Sie natürlich entsprechend
viele Bits für Ihren Befehl und in entsprechenden vielen
Speicherzellen im Rechner sitzt dann Ihr Befehl im Speicher.
Das heißt, Ihre Programme werden deutlich länger.
Es ist aufwendiger, das alles zu interpretieren und es ist wesentlich
effizienter, was den Platz angeht, wenn Sie ein Adressbefehle haben.
Also auf den einfachen, kleinen Rechnern haben Sie ein Adressbefehle,
auf den größeren, komfortableren haben Sie komplexe Instruktionssätze,
wo Sie drei Adressbefehle haben.
Aber man muss immer sehen, da ist dieser Trade-off da.
Also man redet dann von diesen verschiedenen Maschinen und wir haben
dann natürlich in den einzelnen Befehlen unterschiedliche Dinge zu
tun, je nachdem, ob wir zum Beispiel Arithmetik machen wollen oder
Logikoperationen oder nur etwas verschieben wollen, haben wir
unterschiedliche Anforderungen an die Anzahl der Adressen.
Bei arithmetischen Operationen macht es Sinn, drei Adressbefehle zu
haben.
Bei einfachen Sprungbefehlen oder bei Befehlen, bei denen wir nur ein
Datum vom Steuerwerk oder vom Rechenwerk, nicht vom Steuerwerk, vom
Rechenwerk in den Speicher schieben wollen oder vom Speicher ins
Rechenwerk holen, da reicht uns eine Adresse.
Also da sind die Anforderungen unterschiedlich und ich hatte schon
gesagt, die Ausführung von Befehlen wird manchmal etwas modifiziert,
je nachdem, welche Art von Befehlen am häufigsten auftauchen.
Da wird man dann also dafür sorgen, dass solche Befehlssätze auch
eventuell unten drunter geeignet optimiert werden.
Aber die Maschinensprache ihres Rechners wird also festgelegt in eine
dieser Klassen.
Das sind dann in der Regel irgendwelche zwei Adressmaschinen.
Das, was ich Ihnen gleich vorstellen werde, sind Beispiele für diese
verschiedenen Befehle, also Datentransportbefehle zum Hin- und
Herschieben von Daten, arithmetische und logische Befehle, also Plus,
Minus, Mal und Modifikation, Division oder Ablaufsteuerungsbefehle,
irgendwelche Sprünge oder Abbrechen eines Programms und ähnliche
Dinge, Sprungbefehle, auch abhängig von irgendwelchen Bedingungen, die
dann noch ausgeführt werden sollen.
Solche Dinge stehen in unseren Befehlen drin.
Ich sehe durchaus, dass Sie gerne möchten, dass ich langsamer werde,
aber ich kann heute darauf nicht so sehr eingehen, weil ich auf die
Zeit gucke und sehe, dass ich Ihnen vor allen Dingen das darstellen
möchte, was auf der nächsten Folie kommt, aber erst mal noch hier
diese Dinge, die hier stehen.
Ein- und Ausgabebefehle zur Kommunikation mit Ein- und Ausgabegeräten
und Sonderbefehle anhalten, zurücksetzen in der CPU und ähnliche
Dinge.
Das sind so die Befehlsarten, die vorkommen und ich werde Ihnen das
jetzt an einem Beispiel vorführen, einer einfachen Maschinensprache in
einem Adressformat, wo wir uns genauer angucken, welche Arten Befehle
brauchen wir.
Und da wird das, was auf den vorherigen Folien kam, dann noch mal
etwas wiederholt, sodass es dann zwar schnell war, aber ich habe jetzt
noch die Möglichkeit, das ein bisschen zu vertiefen.
Also, wenn ich ein Adressbefehle nehme, brauche ich also einen
Operationscode.
Wie gesagt, ich habe hier bestimmte Anzahl von Bits für den
Operationscode zur Verfügung.
Das sind in dem Fall nur vier Bits und die übrigen zwölf Bits habe ich
für die Adressen.
Da kann ich also nicht einen großen Adressraum spezifizieren.
Zwei hoch zwölf sind also gerade 4000 verschiedene Adressen.
Vier Kibibyte verschiedene Adressen und wir haben dann noch einen
Akkumulator.
Bei einem Adressbefehl, hatte ich gesagt, müssen wir immer im Register
einen Akkumulator mit ansprechen können, der also irgendeinen Register
A bezeichnen soll für Akkumulator.
Und die Programme werden also dargestellt durch solche 16-Bit-Wörter,
einfach binäre Wörter.
Wenn man jetzt ein Maschinenprogramm schreibt, wird man immer neben so
ein Wort, hier stehen also irgendwelche Bits, vier Bits müssten da
stehen, nicht fünf, und dann wird hier daneben immer in irgendwie
verbaler Form dann hier daneben geschrieben, was für eine Art Befehl
das ist, damit ich das beim Lesen eines Programms auch in etwa
interpretieren kann.
Also die gefuchsten Programmschreiber von Maschinenbefehlen, die
wissen, welche Bedeutung die einzelnen Bitkombinationen haben, aber
normalerweise wird man das kaum so lesen wollen.
Also der Befehlssatz sieht so aus, dass die Opcodes hier angegeben
sind, diese einfache Sprache.
Wir haben vier Bit, also haben wir 16 verschiedene Möglichkeiten,
jetzt Befehle zu definieren und hier habe ich einige jetzt angegeben.
Load und Store sind also solche Befehle, bei denen ich nur etwas
transportieren möchte.
Und zwar transportieren zwischen dem Rechenwerk und dem Hauptspeicher.
Also Load heißt, ich möchte etwas aus dem Hauptspeicher in das
Rechenwerk reinschreiben und das, was ich da reinschreiben möchte, ist
M.
Also mein Befehl sieht in dem Fall so aus, dass ich hier hinschreibe
Load und dann irgendein M.
Eigentlich schreibe ich hin eine 0001 und dann hier irgendeine andere
Kombination von Bits, das sind also wieder irgendwelche 0 und hier
irgendwelche 12 Bit, um den Operanten anzugeben.
Also nur das binäre Wort, daneben schreiben wir dann das Symbol, damit
wir interpretieren können, was damit eigentlich gemeint ist.
Also das sind die beiden verschiedenen Möglichkeiten, Load und Store.
Load geht vom Hauptspeicher ins Rechenwerk, Store geht vom Rechenwerk
in den Hauptspeicher.
Das sind Transportbefehle.
Der Operant ist das M und wird interpretiert in der eigenen Weise, das
heißt der Wert, der durch diese Adresse M spezifiziert wird, wird in
den Akkumulator geschrieben.
Oder andersrum beim Store, der Wert, der hier im Akkumulator steht,
wird an den Ort geschrieben, der durch die Adresse M spezifiziert ist.
Dann haben wir die arithmetischen Operationen, das sind hier diese
nächsten vier Operationen, Addition, Subtraktion, Multiplikation und
Division, wobei wir hier ganzzahlig Operationen haben und
entsprechend, also Addition heißt, auf den Akkumulator wird der Wert
addiert, also auf den Wert, der im Akkumulator steht, wird der Wert
addiert, der an der durch M spezifizierten Adresse steht und das
Ergebnis steht anschließend im Akkumulator.
Bei der Subtraktion entsprechend wird subtrahiert, bei der
Multiplikation multipliziert, bei der Division wird dividiert, aber
ganzzahlig dividiert, das heißt, es steht dort der ganzzahlige Anteil
der Division durch den Wert, der durch die Adresse M spezifiziert
wird.
Das ist also dann unsere Division, ganzzahlige Division, der Rest wird
einfach weggeworfen und der ganzzahlige Anteil steht dann in dem
Akkumulator anschließend.
Ich habe dann zwei Sprungbefehle, einmal einen unbedingten Sprung, das
ist der Jump-Befehl, da habe ich also dann einfach einen Jump, also
0111 ist der Jump-Befehl und ich kann dann springen an die Adresse M
in meinem Programm, habe ich also hier mein großes Programm und ich
muss dann entsprechend an den Ort springen, der durch das M adressiert
wird oder spezifiziert wird und es kann sein, dass ich einen Jump-Zero
mache, dann springe ich nur, falls der Akkumulator den Wert 0 enthält.
Das heißt, jetzt habe ich die Möglichkeit, einen bedingten Sprung zu
machen, aber einen sehr einfachen bedingten Sprung, ich teste einfach,
ob der Akkumulator den Wert 0 hat, wenn er den Wert 0 hat, dann kann
ich entsprechend hier einen Sprung ausführen.
Ansonsten wird der nächste Befehl ausgeführt in meinem Programm, also
wenn ich hier irgendwo so ein Jump-Befehl habe, also ich hier dieses
1000 und hier hinten steht irgendein M, dann wird entweder dahin
gesprungen oder es wird der nächste Befehl ausgeführt.
Das soll nur andeuten, einen sehr einfachen Befehl, das ist eine
fiktive Maschine.
Jetzt will ich Ihnen darstellen, was wir damit machen können.
Wie Sie sehen, habe ich hier nur arithmetische Befehle drin, ich habe
keine logischen Befehle aufgenommen, einfach um Ihnen ein kleines
Beispiel zu geben, wie ein solcher Maschinenbefehlssatz aussehen
könnte.
Das hier mit M und Akkumulator hatte ich Ihnen schon gesagt, das ist
also das Register A, das hier der Akkumulator darstellt und damit
können wir also jetzt einfache Operationen machen.
Diese symbolische Notation, noch mal deutlich hervorgehoben, ist kein
Bestandteil der Maschinensprache.
Die Maschinenbefehle werden rein binär kodiert und entsprechend
interpretiert.
Sie werden ja so abgelegt im Rechner.
Und jetzt gebe ich Ihnen ein Beispiel für ein Programm, also ein
Maschinenprogramm, das eine einfache Funktion ausführt.
In diesem Fall soll das die Funktion xFakultät berechnen.
Wobei das ein Beispiel ist für ein Programm, bei dem wir sehr große
Zahlen erzeugen.
Das Ganze wird ganzzahlig gemacht.
Das heißt, wir wissen, wenn wir Fakultät berechnen, kriegen wir sehr
große Zahlen raus.
Da werden wir, wenn wir ein großes x haben, sofort den Zahlenbereich
sprengen.
Sie wissen, dass wir ganzzahlig nur in einem bestimmten Zahlenbereich
arbeiten können.
Das ignorieren wir jetzt mal und nehmen an, dass wir das Ergebnis
immer richtig abspeichern können.
Zur Not würde man dann mehrfach lange Arithmetik machen, aber darauf
verzichten wir bei diesem Beispiel.
Es geht einfach nur darum, Ihnen ein einfaches Beispiel für ein
Programm zu geben.
Und wie sieht so ein Programm aus?
Alles, was wir brauchen, steht an diesen Stellen.
Ein Teil ist also der Programmteil.
Unten drunter ist der Datenteil.
Die Programmanfangsadresse muss ich kennen, damit ich weiß, wo der
erste Befehl steht.
Das ist in dem Fall also bei der Adresse 946.
Das heißt, in unserem Befehlszähler im Steuerwerk müsste jetzt 946
stehen, damit ich auf den ersten Befehl zugreifen kann.
Dann habe ich bestimmte Eingaben, die ich brauche für dieses Programm,
nämlich den Wert x.
Der x-Wert, der steht vor der Ausführung an einer bestimmten Stelle.
Hier, dort im Speicheradresse 957.
Die muss ich kennen, damit ich darauf zugreifen kann.
Und dann habe ich also hier 957 und an der Zelle 958 soll anschließend
das Ergebnis stehen.
Das heißt, ich muss dafür sorgen, dass der Wert, der im Akkumulator
berechnet wird, am Ende geschrieben wird in die Adresse 958.
Und ich habe noch einen weiteren Wert hier drin.
An der Position 959 steht der Wert 1.
Und jetzt mache ich folgendes.
Ich lade zunächst mal den, also es wird dieser Befehl ausgeführt und
ich weiß, die ersten 4 Bit hier sind gerade mein Ladebefehl.
Und zwar will ich etwas laden von der Adresse, das was hier steht, ist
gerade 959.
Das soll also der Wert des Akkumulators gesetzt werden auf den Wert
des Registers 959.
Ich setze also den Akkumulator auf 1.
Dann speichere ich diesen Wert in die Speicherzelle 958.
Das heißt, ich setze jetzt das, was hier steht, da, also der Zelle
steht, setze ich jetzt auf 1.
Das heißt, anschließend mache ich Load 957.
957 ist der Wert X.
Der kommt jetzt in den Speicher, in den Akkumulator.
Und also der Wert, der dort steht, in 957, wird in den Akkumulator
geschrieben.
Und anschließend teste ich den Wert des Akkumulators.
Wenn der 0 ist, bin ich fertig.
Warum bin ich fertig?
Weil 0 Fakultät 1 ist und der Wert von 0 Fakultät steht bereits
aufgrund dieses Befehls hier in der Speicherzelle 958.
Wenn das nicht 0 ist, dann mache ich weiter, dann multipliziere ich
den Wert, der im Akkumulator steht, mit dem Wert an der Stelle 958.
Das ist der Zwischenwert, den ich habe.
Und ich multipliziere also hier jetzt den Akkumulatorinhalt mit Y,
speichere den wiederum ab an die Stelle 958, das ist der neue Wert,
lade den Wert des Akkumulators wieder in den Akkumulator und reduziere
diesen Wert jetzt um 1.
959, also der Wert davon wird abgezogen.
Das heißt, ich habe als nächstes X-1 dort stehen und dann speichere
ich diesen Wert an die Position, wo das X vorher stand und habe dort
jetzt X-1 stehen, dann wird die Schleife fortgesetzt.
Das heißt, ich multipliziere so lange die Werte mit dem Zwischenwert,
bis ich auf den Wert 0 komme.
Das heißt, ich rechne hier genau X mal X-1 mal X-2 und so weiter mal X
-3, bis ich hier auf 1 gekommen bin.
Dann habe ich die Fakultät berechnet.
Der Wert steht anschließend hier unten drin in der Speicherzelle 958.
Das heißt, das ist ein einfaches Programm.
Überlegen Sie sich das nochmal, wie der Ablauf hier ist und Sie werden
feststellen, das macht genau das, was ich Ihnen gesagt habe.
Wir haben hier sukzessive immer wieder den Wert der Variablen X
reduziert, bis wir auf 0 kommen und haben dazwischen immer wieder den
Zwischenwert multipliziert mit dem aktuellen Wert der Variablen X und
haben dadurch X-Fakultät geeignet berechnet.
Das ist genug für heute.
Ich danke Ihnen für die Aufmerksamkeit.
Wir sehen uns am Montag wieder zur gewohnten Zeit um 11.30 Uhr.
Vielen Dank für die Aufmerksamkeit.