Also, nochmals begrüße ich Sie zur Fortsetzung der Foliosynchron-Leih
-Anatomatik 2.
Ich hoffe, dass Sie gestern alle gut zurechtgekommen sind mit der
Bonusklausur.
Und wir kommen dann ganz kurz zur Wiederholung des letzten Stoffes.
Wir hatten uns letztes Mal beschäftigt mit Speichern.
Wir hatten verschiedene Eigenschaften betrachtet.
Ich habe Ihnen die am Einzelnen vorgestellt.
Wir hatten dann einige Kennwerte angeguckt, eine Übersicht über das,
was wir an Speichern zur Verfügung haben, wo die wesentlichen
Unterschiede liegen.
Insbesondere bezüglich der Zugriffszeit, natürlich auch bezüglich der
Speicherkapazität.
Auch das spielt eine Rolle.
Und natürlich wollen wir möglichst großen Speicher, möglichst nah am
Rechner, an der Rechnereinheit haben und mit möglichst kurzer
Zugriffszeit.
Das geht halt leider alles so insgesamt nicht.
Deswegen braucht man die Speicher-Hierarchie.
Und braucht eben dann diese Organisation mit dem Cache.
Da hatte ich Ihnen vorgestellt, dass man den auf verschiedene Art und
Weise organisieren kann.
Das eine war mit dem Directly Mapped, das andere Assoziativ.
Das heißt, die Frage, wie ich ein Datum aus dem Hauptspeicher im Cache
ablege, wird entschieden natürlich über die Adresse.
Und je nachdem, ob ich das Directly Mapped mache oder Assoziativ, habe
ich immer einen festen Platz im Cache, wo ein Block aus dem Speicher
abgelegt wird.
Oder ich habe einen, je nachdem, wo gerade Platz ist.
Das war dieses Least Recently Used beim assoziativen Zugriff.
Beide Verfahren werden in der Realität eingesetzt, aber in einer etwas
modifizierten und komplexierteren Art, als ich das hier dargestellt
habe.
Das sind aber die wesentlichen beiden Mechanismen, die dort verwendet
werden.
Das andere ist, was mache ich, wenn ich ein Datum verändert habe im
Rechner und jetzt den Wert rausschreibe.
Auch das möchte ich schnell machen, also schnell den Cache rein.
Und dann muss ich nur dafür sorgen, dass dann irgendwann der Cache mit
dem Hauptspeicher abgeglichen wird, dass er konsistent ist.
Und das kann man eben entweder direkt machen, dann dauert es halt
jeweils länger.
Oder ich mache es etwas später, erst dann, wenn dieser Block aus dem
Cache wieder raus muss.
Das ist dann das Write Back.
Und das sind also die beiden Verfahren, für die wir das rausschreiben.
Dann haben wir uns die Externspeicher angeschaut, insbesondere die
Festplatte, welche Eigenschaften die hat, warum wir dort eigentlich
diese große Zugriffszeit haben, eben leider nicht in der Lage sind,
wahlfrei beliebig schnell darauf zuzugreifen, sondern wir haben halt
die Positionierzeiten des Schreib-Lese-Cams.
Und wenn wir einmal dort sind, geht es natürlich schnell, aber es muss
eben erstmal der Schreib-Lese-Cam dorthin bewegt werden.
Wir haben dann uns angeschaut, die anderen Speicherkarten, Speicher
-Sticks.
Ich habe kurz was zum Solid-State-Disk gesagt und auch hingewiesen auf
die Unterschiede bezüglich der Notwendigkeit, Speicher zu
defragmentieren, was bei der Festplatte sehr wichtig ist, beim Solid
-State -Disk nicht mehr erforderlich ist.
Magnetbandspeicher, immer noch relevant, wenn es um
Hintergrundspeicher geht, also um Archivspeicher, hier im
Rechenzentrum sind Roboter dabei, die ganzen Bänder immer hin und her
zu bewegen, zwischen den Lesegeräten und den Riesenregalen, in denen
diese Kassetten abgelegt sind, auf denen die Daten von sehr vielen
Rechnern hier am SCC gespeichert sind.
Also wenn man etwas backup macht und seine Daten archiviert, dann
werden die auf Kassetten abgelegt in solchen automatisierten
Archivsystemen.
Ganz kurz waren wir zu Optischen Plattenspeichern gekommen, da habe
ich Ihnen was zu virtuellen Speichern erzählt.
Und noch ganz kurz etwas zu Smart Cards.
Und dann kamen wir zu Rechnernetzen, das war im Wesentlichen die
letzte Folie.
Ich habe Ihnen dann auch noch erzählt, dass es eben diese Ebenen gibt
bei den Rechnernetzen, die Protokoll-Ebenen, Schichtenmodell des ISO
-OSI Modells, bei dem man eben die Funktionen aufteilt.
Und wir werden da jetzt heute noch etwas genauer drauf eingehen.
Sie werden kennenlernen, wie die in etwa aussehen, diese verschiedenen
Funktionen, was insbesondere TCP und IP machen.
Ich hatte Ihnen ganz kurz erzählt, was Intranet, Internet und Extranet
sind, wie die zusammenhängen, damit ich eben einerseits abgeschlossene
Bereiche habe in einem Unternehmen, in dem ich mit Internet
-Technologie kommunizieren kann, aber ohne dadurch einen weltweiten
Zugriff zu ermöglichen, der dann über das Extranet realisiert wird.
Und dann kommen jetzt die kurzen Informationen zum Internet.
Ich mache eine ganz kurze Übersicht über das, was dort eigentlich
heutzutage so läuft.
Ganz kurzer Einblick.
Was ist das Internet überhaupt?
Das Internet ist ein globales Informationssystem.
Diese Definition habe ich mir nicht ausgedacht, sondern das ist die
offizielle Definition des Internets.
Ein globales Informationssystem, das drei wesentliche Eigenschaften
hat.
Nämlich, dass die eine Eigenschaft ist, dass wir einen global
eindeutigen Adressraum haben.
Das heißt, egal, wo ein Rechner auf der Welt ist, jeder hat eine feste
Adresse.
Und Sie können auf jede Komponente in diesem großen Netz beliebig
zugreifen.
Oder Sie können sie adressieren.
Es ist eindeutig festgelegt, welche Komponente damit gemeint ist.
Dann gibt es ein Protokoll, damit Sie tatsächlich kommunizieren
können.
Sie wollen ja gerne zwischen den einzelnen Komponenten kommunizieren
können.
Das heißt, Sie müssen in der Lage sein, das vernünftig abzuwickeln.
Dafür brauchen Sie ein Protokoll.
Und das ist im Internet das TCP-IP-Protokoll bzw.
die Protokolle, die mit dem TCP-IP-Rahmenwerk zusammenhängen.
Und das Nächste ist, dass Sie dann natürlich nicht nur kommunizieren
wollen, sondern Sie wollen auch etwas auf diesen einzelnen Knoten
machen können.
Sie wollen Operationen ausführen.
Sie wollen Standard-Operationen zur Verfügung haben.
Und deswegen gibt es High-Level-Services, also Dienstleistungen, also
höherwertige Dienstleistungen, die Sie standardmäßig überall zur
Verfügung haben.
Das heißt, Standards sind eben Services wie FDP, E-Mail, also Standard
-Dinge oder Basiskommunikation zwischen Rechnern und Ähnlichem, sodass
Sie nicht selber sich dafür die Funktionen schreiben müssen, sondern
die sind standardmäßig auf jedem Rechner vorhanden, der ans Internet
angeschlossen ist.
Der unterstützt diese Standarddienste.
Das Ganze ist entstanden aus dem APANET Ende der 60er Jahre, Anfang
der 70er Jahre.
Es war zunächst ein rein militärischer Auftrag von akademischen
Institutionen in den USA ausgeführt, mit sehr wenigen Rechnern, die zu
Anfang verbunden waren.
Es hat dann sehr schnell weiter zugenommen, vor allen Dingen im
akademischen Bereich.
Und irgendwann kam dann auch der kommerzielle Bereich dazu.
Das war aber erst dann in den 90ern der Fall, also Anfang der 90er.
In Deutschland hatten wir das European Academic Research Network.
Das war ein Geschenk im Prinzip von IBM, weil die in ihren
Niederlassungen diese Netze brauchten, die in den USA bereits
verfügbar waren.
Seit 1983 gab es dieses EARN.
Dann gab es das deutsche Forschungsnetz seit 1984, im Wesentlichen
dafür gedacht, dass Rechner miteinander kommunizieren können, um
komplexe Rechnungen auszuführen, weniger für Kommunikation und
Ähnliches.
Dann seit 1996 das Wissenschaftsnetz in Deutschland.
Mittlerweile haben wir das GWIN, das Gigabit-Wissenschaftsnetz.
Wenn Sie darüber mehr hören wollen, können Sie darüber mehr hören in
der Vorlesung Algorithmen für Internetanwendung, die ich ja jedes
Wintersemester halte.
Alle Protokolle des Internets, was immer dort an wesentlichen
Funktionen, an Dienstleistungen, an Protokollen entwickelt worden ist,
alles das ist festgelegt in sogenannten Requests for Comments, das
sind Spezifikationen von Komponenten des Internets und die sind
abgelegt an einer festen Stelle in einem Archiv, sodass dort jeder
darauf zugreifen kann, kann das kommentieren.
Bevor etwas reinkommt, wird das erstmal geprüft von der IETF und wird
dann dort abgelegt.
Da ist alles standardisiert verfügbar, was das Internet ausmacht.
Dann kommen wir gleich auf das World Wide Web.
Zunächst mal zu den einzelnen Komponenten.
Der Adressraum, wenn wir sagen, wir haben global eindeutige Adressen,
das ging los mit dem, oder ging nicht los, aber die
Internetprotokollversion 4 ist eigentlich die
Standardadressvereinbarung gewesen für sehr lange Zeit, ist immer noch
heute aktiv.
32-Bit-Adressen, das heißt 32-Bit sind 4 Bytes, 4 mal 8-Bit, 8-Bit
sind Zahlen von 0 bis 255.
Deswegen werden die 32-Bit-Adressen in der Regel als so 4 Zahlen
dargestellt mit Werten jeweils zwischen 0 und 255, wobei nicht alle
Zahlen aber auftreten.
Und die Bedeutung ist, dass ein Teil dieser Adresse ein Netz
adressiert und der andere Teil dieser Adresse den konkreten Rechner.
Dafür gibt es gewisse Verfahren oder Vereinbarungen, wie eben diese
Netze und Rechner darin adressiert werden sollen.
Das war früher in 5 verschiedene Klassen eingeteilt, also von A bis D.
Mittlerweile macht man das in einem wesentlich flexibleren System, das
sogenannte Classless Inter-Domain Routing Protocol und weiteren
Ergänzungen.
Es gibt eine ganze Reihe von Ergänzungen für das 32-Bit-Adresssystem.
Und zwar deswegen, weil das Internet mittlerweile so groß ist, dass
die Anzahl der Komponenten über 2 auf 32 hinausgeht.
Das heißt, Sie haben auf einmal mehr Komponenten adressiert werden
müssen, als Sie adressieren können.
Und deswegen brauchen Sie dafür Erweiterungen, die gleich kommen.
Ein anderer Punkt ist, den ich gerade eben übersprungen habe.
Wenn Sie immer nur diese Zahlenadressen haben, dann ist es schwierig,
sich die zu merken.
Wesentlich einfacher ist es, wenn Sie entlesbare Namen haben, wie zum
Beispiel das, was hier steht, afbquadriga.afb.kit.edu.
Dann haben Sie hier einen Namen, der von dem einzelnen Rechner bis hin
zum Land geht.
Oder in dem Fall EDU, also Educational Institutions.
Und das ist deutlich einfacher zu merken.
Es sind aber nicht die Adressen im Internet, diese Namen.
Die müssen erst über einen Domain-Name-Server übersetzt werden, in die
entsprechende numerische Adresse.
Und erst dann können Sie tatsächlich den anderen Rechner adressieren.
Oder diese Rechner adressieren.
Deswegen braucht man immer solche Domain-Name-Server.
Wenn Sie die nicht haben, wenn der mal ausfällt, können Sie nicht
kommunizieren.
Wenn Sie dann immer noch die Zahlen wissen, können Sie kommunizieren.
Also das ist das Internetprotokoll Version 4.
Mittlerweile haben wir Version 6, die sich dadurch unterscheidet, vor
allen Dingen, dass wir 128-Bit-Adressen haben.
Also 128 verschiedene Adressen prinzipiell möglich.
Auch da werden nicht alle ausgenutzt.
Aber so ganz so knapp sind die Adressen da auch nicht.
Das sind mehrere tausend Adressen pro Quadratzentimeter Erdoberfläche.
Klingt wahnsinnig viel.
Ist aber ganz sinnvoll, das so zu machen, weil man ja dafür sorgen
muss, dass wirklich alles, was wir zukünftig adressieren wollen, auch
wirklich adressierbar ist.
Und die wesentliche Zahl der Komponenten, die adressiert sind, sind
eben nicht unbedingt die Einzelrechner, also nicht die Einzelrechner,
die wir in der Hand halten oder auf dem Tisch stehen haben, sondern
Komponenten in technischen Anwendungen, die adressiert werden.
Und wir haben heutzutage ja viele Komponenten, die wir auch mit uns
rumtragen, die wir im Gebäude haben, in Fahrzeugen haben.
Einzelkomponenten, die im Kühlschrank stehen und ähnliches, können Sie
sich vorstellen, dass die auch adressiert werden können.
Also die Anzahl der Bedarf an Adressen, der wächst zukünftig sehr
stark.
Und es ist sogar so, dass man dabei auch tatsächlich in den
Adressschemata daran gedacht hat, dass man das Interplanetar weiter
ausweitet, dass also auch auf dem Planeten gleich dafür auch schon
verschiedene Adressen vorgesehen sind.
Also da hat man wirklich einen weiten Zeithorizont, damit diese
Adressschemata tatsächlich ausreichen.
Das sind einige weitere Dinge verbunden mit diesem neuen Adresssystem,
was jetzt über das hinausgeht, was ich Ihnen in dieser Vorlesung
erzählen kann.
Wie gesagt, in anderen Vorlesungen, wie in der Vorlesung an
befindenden Anwendungen, wird das ein bisschen genauer dargestellt.
Aber wenn Sie schauen in Ihre Rechner, finden Sie in der Regel dann
die IPv6 Adresse und auch die IPv4 Adresse.
Und beide Protokolle laufen zur Zeit nebeneinander.
Das IPv4 wird aber sukzessive abgelöst.
Das sind die Adressen, dann haben wir die Protokolle.
Wie kommunizieren wir?
Ich sagte, wir haben TCP und IP.
TCP ist das Transmission Control Protocol.
Und das ist eine logische, verlässliche Verbindung zwischen Sender und
Empfänger.
Logisch.
Das heißt, wir haben hier den Sender, hier haben wir den Empfänger.
Und wie wird die Verbindung hergestellt?
Wir haben eine Reihe von sogenannten Ports, also Tore oder Türen,
Ports, über die wir kommunizieren können.
Hier oben sind alle möglichen Anwendungen.
Also zum Beispiel, ich sage mal hier FDP.
Und hier oben, hier drüben ist auch FDP.
Jetzt möchte ein FDP-Service hier mit dem FDP-Service dort
kommunizieren.
Dann muss eben eine Verbindung hergestellt werden zwischen den Ports,
die jeweils die FDP-Anwendung unterstützen.
Das ist genau die Aufgabe von TCP, eine solche Verbindung
herzustellen, und zwar eine logische Verbindung.
Das heißt, Sie haben im Prinzip hier irgendwo so ein Netz.
Und da sind alle möglichen Komponenten.
Und wenn jetzt hier Sender und da Empfänger ist, dann sollen die
logisch verbunden sein.
Physikalisch kann es aber sein, dass es da verschiedene Möglichkeiten
gibt, Daten zu verschicken, nicht nur einen Weg.
Trotzdem ist es die gleiche logische Verbindung zwischen den beiden
Sender und Empfänger.
Und es wird dann der Datenstrom von Sender zu Empfänger unterteilt in
Pakete, weil Sie nicht beliebig das im Streamingverfahren machen,
sondern Sie unterteilen den Datenstrom, den Sie dort verschicken, in
einzelne Pakete.
Und die werden dann halt verschickt.
Und die Endpunkte werden verschickt über die logische Verbindung.
Diese Endpunkte, die wir hier jeweils haben, also die Ports, die
miteinander kommunizieren, nennt man die Sockets.
Da ist also die Verbindung reingesteckt zwischen den beiden Sender und
Empfänger.
Und Sie kennen das vielleicht von Java, dass Sie Socket-Programmierung
machen können, dass Sie dort spezielle Ports auch adressieren können.
Und wie gesagt, diese Ports sind Nummern, es gibt 2 hoch 16
verschiedene Ports, von denen die ersten 1000 festgelegt sind in ihrer
Bedeutung.
Dann gibt es eine ganze Reihe, die sind reserviert für besondere
Aufgaben.
Und dann haben Sie einen freien Bereich, den Sie auch selber verwenden
können.
FDP, HTTP, SMTP usw., die verschiedenen Standarddienste haben feste
Nummern, alle im Bereich kleiner 1024.
Das sind die ersten Nummern, die dort auftauchen, also SMTP, Mail zum
Beispiel, Port 23.
Und so hat jeder Dienst eine feste Nummer und dadurch können die dann
gesichert miteinander kommunizieren.
Ein wichtiger Punkt neben dieser logischen Verbindung ist die
Verlässlichkeit der Verbindung.
Das heißt, es muss sichergestellt sein, dass alles was hier
losgeschickt wird, auch wirklich irgendwann hier unten beim Empfänger,
irgendwann ankommt.
Dazu muss der Sender natürlich wissen, dass das angekommen ist.
Das heißt, es muss etwas nicht nur in der einen Richtung laufen,
sondern es müssen auch Daten zurücklaufen.
Es werden also immer sogenannte Bestätigungen, Acknowledgements
verschickt.
Und jetzt ist die Frage, wie organisiert man das?
Wenn ich also wissen muss, dass ein Datenpaket angekommen ist, könnte
ich hier sitzen, könnte ein Paket losschicken und das würde jetzt hier
also rüberlaufen und dann würde die Bestätigung zurücklaufen.
Dann könnte ich das nächste Paket losschicken.
Das wäre sehr langsam.
Deswegen macht man das über das sogenannte Sliding-Window-Protokoll,
das ich hier einfach mal versuche grafisch zu symbolisieren.
Ein Sliding-Window, was hier dargestellt werden soll auf diesem Band,
das sind die einzelnen Datenpakete.
Und was hier angedeutet wird, ist, dass Sie ein Datenpaket
rausschicken.
Aber erst dann, wenn die Bestätigung für das Paket, das Sie eine Zeit
lang vorher geschickt haben, schon angekommen ist.
Das heißt, Sie haben eine Reihe von Paketen, die Sie rausschicken
können.
Das ist das sogenannte Fenster, die Fenstergröße.
F nenne ich die mal.
Das ist die Anzahl der Pakete, die Sie rausschicken können, bevor das
zuerst gesendete Paket bestätigt worden sein muss.
Und dadurch haben Sie eben eine bestimmte Anzahl von Paketen, die im
Netz bereits unterwegs sind, bevor Sie Bestätigung haben.
Und dadurch, über die Regulierung, wie viele Pakete Sie rausschicken
können, bevor Bestätigungen da sein müssen, über diese Anzahl wird der
Verkehr im Netz geregelt.
Das heißt, die Fenstergröße bestimmt, wie viele Pakete versandt werden
können.
Diese Fenstergröße wird dynamisch ausgehandelt zwischen Sender und
Empfänger.
Der Empfänger hat eine gewisse Puffergröße, also eine Speichergröße,
in die er die reinkommenden Nachrichten erstmal reinlegen kann.
Und es muss ihm klar sein, dass er in der Lage ist, einen bestimmten
Verkehr tatsächlich zu bewältigen.
Wenn er sie nicht bewältigen kann, wenn zu viele Pakete kommen, dann
würden eventuell Pakete verloren gehen.
Das möchte man nicht, die müssten dann wieder neu geschickt werden.
Und deswegen ist es wichtig, dass man das dynamisch aushandelt.
Das ist etwas, was geschieht zwischen Sender und Empfänger.
Da ist keine zentrale Institution, die den Verkehr regelt und sagt,
jetzt muss der Verkehr ein bisschen langsamer fließen, oder es werden
irgendwelche Daten aus dem Verkehr herausgenommen.
Sondern der Verkehr im Internet wird geregelt durch die jeweils
kommunizierenden Partner, völlig selbstorganisiert.
Das ist das größte selbstorganisierende technische System, das wir
jemals gebaut haben.
Da gibt es keine zentrale Steuerung dieses Internets, sondern es gibt
die Steuerung auf jedem einzelnen Router, auf jedem einzelnen, der die
Nachrichten verschickt und empfängt und weiterleitet.
Dadurch wird gewährleistet, dass wir einen zuverlässigen Datenverkehr
haben, der sich darauf einstellt, wenn dort Fehler passieren, wenn
Datenverbindungen ausfallen, wird der Verkehr automatisch eingestellt
auf die aktuelle Situation.
Das ist also eine gewaltige Entwurfsleistung gewesen, die in den 70er,
80er Jahren geleistet wurde bei der Entwicklung des Internets, als man
noch Größenordnung hatte von ein paar tausend, zunächst mal ganz
wenige, dann irgendwann ein paar tausend Knoten, die miteinander
kommunizieren mussten.
Mittlerweile haben wir halt Millionen und Milliarden von Rechnern, die
miteinander kommunizieren und wir haben im Prinzip immer noch das
gleiche Modell.
Man arbeitet daran, das weiterzuentwickeln, aber bisher ist das immer
noch die wesentliche Art, wie man logisch sicherstellt, dass man eine
verlässliche Verbindung hat.
Physikalisch laufen die Daten natürlich durch einzelne Knoten, also
Sie haben hier Ihren Sender, hier haben Sie den Empfänger, das sind
irgendwelche Knoten, Sender und Empfänger.
Und die einzelnen Knoten bekommen irgendwelche Daten geliefert,
irgendwelche Pakete, und man muss sich entscheiden, über welchen
nächsten Knoten jetzt ein solches Paket weitergeschickt wird.
Das heißt, der bekommt die Information in dem Paket mitgeteilt, wohin
das Paket laufen soll und aus der Zieladresse muss er ermitteln, was
ist der beste nächste Knoten auf diesem Weg.
Dafür muss man Informationen haben über die Struktur des Netzes.
Das geschieht in dem Routingverfahren Open Shortest Path First.
Eine Kombination von verschiedenen Routingverfahren, in denen im
Wesentlichen kürzeste Wege ermittelt werden, beziehungsweise der
nächste Knoten auf dem kürzesten Pfad von dem aktuellen Knoten zu dem
Ziel.
Und das wird also rein lokal entschieden.
IP kümmert sich nicht darum, ob ein Datum, das hier reingekommen ist,
dann tatsächlich irgendwann bei dem Empfänger angekommen ist, sondern
sorgt nur dafür, dass ein Datum, das ankommt, zu einem weiteren Knoten
geschickt wird.
Und alles weitere ist völlig irrelevant für die einzelnen IP-Knoten.
Deswegen steht hier oben ein unzuverlässiger, verbindungsloser
Versand.
Das heißt nicht, dass die Funktion unzuverlässig erfüllt wird.
Die ist sehr verlässlich, aber IP kümmert sich nicht darum, die
Verlässlichkeit des Datentransports sicherzustellen, in dem Sinne,
dass ein Paket, das rausgeschickt wird, auch tatsächlich irgendwann
ankommt.
Das ist Sache der darüber liegenden Protokollebene, nämlich von TCP.
Und wenn es darum geht, den kürzesten Weg zu finden, der Begriff
kürzeste kann auch heißen kostengünstigste oder verlässlichste, was
immer man gerade dort haben möchte, das kann durchaus spezifiziert
werden.
Das heißt, es kann um aktuelle Laufzeiten gehen, um Bandbreiten oder
um Zuverlässigkeit.
Und häufig wird nur Laufzeit angeguckt, aber man kann die anderen
Dinge eben auch angucken.
Und dann kann es eben sein, dass ein Paket über einen bestimmten Weg
läuft.
Und ich sagte, wir haben auf der TCP-Ebene eine logische Verbindung.
Hier auf der IP-Ebene wird eben entschieden, von wo nach wo ein Paket
weitergeschickt wird.
Es kann sein, dass das nächste Paket, das auch von Sender nach
Empfänger läuft, einen ganz anderen Weg wählt durch dieses Netz.
All dies ist in den Protokollen genauer festgelegt.
Weitere Einzelheiten kriegen Sie also aus den anderen Vorlesungen.
Ich wollte Ihnen nur ganz kurz darstellen, welche prinzipiellen
Eigenschaften TCP und IP haben.
Und dann gibt es noch auf der Ebene der Transportprotokolle das
Protokoll UDP als Alternative zu TCP.
TCP und UDP, das User Datagram Protocol, das reicht den IP weiter an
die Anwendungsschicht.
Das heißt, das Unzuverlässige wird weitergereicht an die
Anwendungsschicht.
Das heißt, dann muss sich auf einmal die Anwendungsschicht selber
darum kümmern, ob Pakete ankommen oder nicht.
Sofern Verlässlichkeit erforderlich ist, muss das dann auf der
Anwendungsebene gemacht werden.
Sonst wird das nicht durch die Transportebene erledigt, wie bei TCP.
Warum macht man sowas?
Weil es manchmal Kommunikationen gibt, bei denen es gar nicht darauf
ankommt, dass wirklich aus einem großen Datenstrom wirklich alle
Pakete geschickt werden oder empfangen werden.
Dann macht es nichts, wenn mal ein Paket ausfällt.
Und das ist zum Beispiel so bei manchen Audioübertragungen.
Wenn da ein Paket rausfällt, haben Sie einen kurzen Aussetzer im
Audiosignal.
Das ändert aber nicht viel an der Qualität.
Da geht ein ganz bisschen was verloren.
Aber es ist wichtig, dass Sie die Frequenz aufrechterhalten können, in
der die Audiosignale kommen.
Und deswegen nimmt man das in Kauf, dass dort vielleicht mal ein Paket
nicht ankommt, was bei TCP dazu führt, dass von dort an alles nochmal
neu gesandt werden muss.
Bei UDP ist das egal.
Da werden die einzelnen Pakete bearbeitet und dann kann man den Grad
an Verlässlichkeit, den man braucht, zum Beispiel für die Darstellung
des Audiosignals, dann eben auf Anwendungsebene sicherstellen.
Und deswegen wird so etwas dann auch eingesetzt.
Nur, dass Sie wissen, UDP ist eben auch eine Möglichkeit, wie man nur
das IP, die IP-Funktionalität weiterreicht.
Dann brauche ich nicht den ganzen Aufwand für Acknowledgements und so
weiter zu treiben, sondern ich habe nur die Aufgabe, Daten
rauszuschicken, weiterzuschicken und ich kümmere mich nicht darum, ob
etwas tatsächlich verlässlich ankommt.
Also wesentlich einfachere Aufgaben.
Das zu den Routing-Protokollen oder zu IP und TCP.
Jetzt zu einem besonderen Dienst, den wir haben.
Also das World Wide Web ist ja ein besonderer Dienst.
Ich hatte gesagt, wir haben die Adressen, wir haben die Protokolle und
wir haben Dienste, Services.
Und ein Service, ein hoherwertiger Service ist das World Wide Web.
Das wurde Anfang der 90er Jahre entwickelt von Tim Berners-Lee in Genf
am CERN, damit die Physiker miteinander besser kommunizieren können.
Die wollten ihre wissenschaftlichen Veröffentlichungen und Daten
besser austauschen können.
Und die wesentlichen Komponenten hier sind einerseits die Möglichkeit,
Dokumente zu beschreiben.
Das heißt, ich habe hier irgendein Dokument und über eine Markup
Language, HTML, kann ich das Dokument strukturieren.
Und das H da drin, Hypertext, sagt, ich kann, wenn ich zwei Dokumente
habe, von dem einen aus einen Link angeben, einen Hyperlink zu einem
anderen Dokument.
Kann die miteinander vernetzen, verbinden.
Das Ganze baut auf auf SGML, Standard Generalized Markup Language.
Das ist eine Sprache, die im Druckbereich entwickelt wurde, um
Dokumente zu strukturieren bezüglich der Druckanforderungen.
Und das ist auch eine Art der Darstellung.
Das heißt, mit der Hypertext Markup Language kann ich einerseits diese
Verbindungen zwischen Dokumenten herstellen.
Das andere ist, dass ich strukturieren kann und dass ich dadurch auch
eine Darstellung, eine Visualisierung machen kann.
Also der Druckaspekt ist auch mit drin.
Kommen wir gleich drauf.
Zunächst mal, um diese Links angeben zu können, braucht jedes Dokument
eine eindeutige Adresse.
Das ist eine andere Art der Adressanforderung, als wir sie gerade für
das Internet definiert haben.
Weil wir hier jetzt sagen müssen, welche Adresse ein Dokument hat.
Im Internet reden wir von Adressen für kommunizierende Komponenten.
Hier reden wir von Dokumenten, die Adressen haben sollen.
Wir haben also dann diese Uniform Resource Locators.
Zum Beispiel hier wird mit HTTP ein Protokoll angegeben.
Dann eine Domain, www.ifb.kt.edu.
Und dann ein Verzeichnis da drin und eine weitere Überschrift und ein
Unterverzeichnis da drin.
Also das sind die URLs.
Die kennen Sie im Prinzip, denke ich.
Sie haben auch schon mal was von HTTP gehört, unabhängig von der
Vorlesung.
Hypertext Transfer Protocol, das ist eben das Protokoll, mit dem man
dann tatsächlich zugreifen kann auf Dokumente, die im HTML-Format
abgelegt sind.
Und damit kann man dann eben diesen Link, der eventuell auf einen ganz
anderen Rechner verweist, wenn Sie unterschiedliche URLs haben und
unterschiedliche Domänen, dann müssen Sie dafür sorgen, dass dieses
Dokument dann tatsächlich auch versandt werden kann.
Und das geschieht über dieses Hypertext Transfer Protocol.
Ein klassisches Protokoll, um zu kommunizieren im Internet.
Also, das ist auch ein wesentlicher Punkt.
Und das dritte oder vierte, was Sie hier brauchen, nicht das dritte,
das vierte in dieser Aufzählung, ist die Darstellung der Dokumente,
der Browser, die Möglichkeit, die Informationen aus dem HTML-Dokument
bestmöglich oder nicht bestmöglich, einfach standardisiert, das ist
das Wesentliche, standardisiert darzustellen.
Also, wir haben diese Komponenten, das ist die Basis für das World
Wide Web, die Basistechnologie HTML, die Adressierung der Dokumente,
das Protokoll, um Informationen zuzugreifen und die zu verschicken,
und die einheitliche Darstellung im Browser.
Es sollte eine einheitliche Darstellung sein, auf allen Rechnern die
gleiche Art, Sie wissen, dass es viele verschiedene Browser
mittlerweile gibt, und dass durchaus die Darstellung nicht einheitlich
ist, aber das ist halt so, dass jeder Hersteller versucht, seine
eigenen Arten dort mit einzubauen.
Das Ganze, was im World Wide Web abläuft, was dort vorhanden ist, was
nicht nur dieses HTML und HTTP ist, sondern auch deutlich mehr
mittlerweile, auch hier eine Vielfalt von Technologien, XML zum
Beispiel, ein ganz wichtiger Teil, XML mit all den dazugehörigen
Varianten, weitere Möglichkeiten zur Strukturierung von Dokumenten,
ganz wichtige Teile, und eine ganze Reihe von vielfältigen Dingen, Web
-Services, und wie gesagt, viele verschiedene Dinge sind abgelegt
bezüglich des World Wide Web.
Das sind alles Anwendungen im Zusammenhang mit diesem Dienst World
Wide Web.
Unten drunter liegt das Internet.
Und diese ganzen World Wide Web-Technologien werden vom World Wide Web
-Konsortium verwaltet und dort auch dokumentiert.
Das heißt, Sie haben einen Ort im Internet, wo die ganzen Dokumente
zum World Wide Web abgelegt sind, das bei dem W3C bzw.
bei dieser Adresse abrufbar.
Schauen Sie sich dort um.
Vielfalt von Informationen werden in anderen Vorlesungen vorgestellt.
Dann gibt es noch eine andere Erweiterung des Internets zu dem
Semantic Web.
Haben Sie vielleicht auch schon von gehört, dass man eben nicht nur
syntaktisch auf Informationen zugreift im World Wide Web, also wenn
man guckt, ob irgendwelche Wörter auftauchen an irgendwelchen
Dokumenten, sondern dass man semantisch nach Bedeutung sucht und
dadurch in der Lage ist, sinnvolle oder bedeutungsbezogene Anfragen zu
stellen.
Also dass Sie z.B.
Fragen stellen können, welche Wissenschaftler haben mindestens 5 Mal
in den Jahren von 1990 bis 2010 bei der und der Konferenz etwas
veröffentlicht.
Das ist mit syntaktischen Abfragen so nicht möglich, mit den
Standardsuchmaschinen.
Semantisch im Semantic Web werden solche Anfragen unterstützt und da
werden logische Inferenzmechanismen eingesetzt.
Das ist etwas, was hier am IFB ganz massiv entwickelt wurde in der
Gruppe von Herrn Studer.
Die sind dort weltweit führend in der Entwicklung des Semantic Web.
Insgesamt ist es so, dass das Internet zu Beginn, hier steht bisher,
ist mittlerweile schon deutlich weiter, also das Netz war ursprünglich
etwas dafür da, um Daten zu übertragen zwischen Rechnern.
Mittlerweile ist es so, dass das Netz, das Internet im Prinzip Dienste
bereitstellt.
Das heißt, Sie wissen, wir reden viel von Cloud Computing, Web
Services und ähnlichem.
Es geht darum, dass das Netz Funktionen bereitstellt, nicht mehr der
einzelne Rechner, sondern Sie wollen aus dem Netz eine bestimmte
Funktionalität haben und bekommen die von irgendeinem dieser in
Funktionalität zugeordneten Rechenressourcen und
Informationsverarbeitungsressourcen geliefert.
Einzelheiten dazu finden Sie in der Vielfalt von weiteren Vorlesungen.
Ich hatte schon die Algorithmen für Internetanwendungen erwähnt.
Es gibt die Rechnernetze, Vorlesungen und Telematik.
Es gibt bei uns aus dem Institut die Intelligenten Systeme und World
Wide Web.
Es gibt Service Computing.
Es gibt Vielfalt von Vorlesungen zu dieser Thematik.
Und da haben wir hier in Karlsruhe wirklich viele Forschungsgruppen,
die in diesem Umfeld dieser Thematik arbeiten.
Und es ist so, dass wir da in Deutschland mittlerweile auch ganz gut
aufgestellt sind.
Die Bedeutung des World Wide Web für Wirtschaft und Gesellschaft wurde
bei uns allerdings erst relativ spät erkannt.
Erst Ende der 90er.
In den 90ern gab es in Nordamerika dazu schon sehr viele Überlegungen,
auch von staatlicher Seite.
Da wurde über Datenautobahnen und Ähnliches geredet.
Und diese Thematik wurde damals auch vom deutschen Kabinett, vom
Bundeskabinett besprochen.
Da gibt es also diese Anekdote tatsächlich, das was im Kabinett
besprochen wurde.
Und dass dann der damalige Bundeskanzler gesagt hat, naja das hat was
mit Autobahnen zu tun.
Es ging also um die Datenautobahnen, die in den USA ein Top-Thema
waren für die Regierung.
Und da hat man gesagt, naja es geht um Autobahnen, das ist eine Sache
für den Verkehrsausschuss.
Und damit war das erledigt.
In der Zeit hat man andere Technologien in Deutschland für wichtig
gehalten, die heute keine Rolle mehr spielen.
Wie zum Beispiel Kerntechnik und Ähnliches.
Das war eine falsche Entscheidung.
Und es sind halt andere Technologien entwickelt worden.
Man hat nicht gesehen, welche Bedeutung diese Dateninfrastruktur hat.
Witzigerweise hat man das natürlich heute mittlerweile erkannt.
Wir wissen, wie wichtig das ist.
Es gibt mittlerweile auf europäischer Ebene den Kommissar für digitale
Infrastrukturen.
Auch auf Bundesebene gibt es den.
Da gibt es ein Ministerium, das für die digitale Infrastruktur
zuständig ist.
Und witzigerweise ist das der Verkehrsminister.
Also es passt wieder zusammen.
Natürlich ist das Verkehrssystem auch eine relevante Infrastruktur.
Und das Internet ist auch eine relevante Infrastruktur.
Insofern passt das durchaus zusammen.
Ich will mich eines Kommentars enthalten.
Wie wichtig, wie relevant oder wie sinnvoll die Entscheidung jetzt
gewesen ist, das so zuzuordnen.
Aber auf jeden Fall ist es klar, das Thema digitale Infrastruktur ist
eines der Top-Themen heutzutage für die nachhaltige Entwicklung
unserer Gesellschaft.
Und deswegen muss das auf oberster Ebene tatsächlich auch adressiert
werden.
Wenn ein Land bezüglich der digitalen Infrastruktur nicht sinnvoll
aufgestellt ist, dann hat das nachhaltig Probleme für die
wirtschaftliche Entwicklung.
Und es ist eben ein Thema, bei dem es sehr, sehr viele Möglichkeiten
gibt, neue Geschäftsmodelle zu entwickeln und neue Produkte, neue
Dienstleistungen zu entwickeln.
Deswegen ist das für Wirtschaftsingenieure ein fantastisches Feld,
tätig zu werden.
Es hat kaum eine Zeit gegeben, wo man so viele neue Dinge machen
konnte, wie in dieser Zeit, wo wir von Digitalisierung reden, wo alle
Bereiche, mit denen wir zu tun haben, durchdrungen werden von
Informationsverarbeitung.
Und dazu braucht man halt Kenntnis über all diese Technologien und
muss sie intelligent, kreativ einsetzen, sodass wir dann aber auch
verlässlich die Funktionen bekommen, die wir uns davon erhoffen.
Also das ist eigentlich ein Paradies, wenn man sagt, ich möchte in
einem Bereich tätig werden, wo ich kreativ etwas gestalten kann.
Hier kann man das.
Das sind große Chancen und es geht nur dann, wenn man in der Lage ist,
diese Technologien auch sinnvoll einzusetzen.
Dafür muss man sie kennen, muss ein Experte sein da drin, muss aber
auch ein Experte sein in anderen Anwendungsbereichen, die eben nicht
nur Informatik betreffen, sondern auch die Anwendungsbereiche in der
Wirtschaft, in anderen technologischen Bereichen in der Industrie.
Ein wesentlicher Punkt, der mit zur Entwicklung des Internets
beigetragen hat, sind die Kommunikationssysteme, die Entwicklung der
Kommunikationssysteme, insbesondere die drahtlose Kommunikation.
Sie wissen, wir haben Mobilkommunikation, es ging los mit GSM, GPRS,
UMTS, dann gibt es WIMAX, LTE, Long Term Evolution, der aktuelle
Standard für Mobilkommunikation.
Wir haben das Wireless LAN, das wir mehr für Kommunikation zwischen
Rechnern verwenden, weniger zwischen Telefonen.
Wir haben Bluetooth, wir haben Bluetooth Low Energy, was ich hier gar
nicht mit drauf habe.
Also eine Vielfalt von Kommunikationsstandards für mobile
Kommunikation, drahtlose Kommunikation, sodass wir in der Lage sind,
eben mit Geräten jederzeit miteinander zu kommunizieren.
Sie wissen, wie stark das unser Leben beeinflusst und auch verändert,
zum Positiven verändern kann, manchmal auch zum Negativen verändert,
weil jeder nur noch auf seinen Smartphone startet und nicht mehr in
der Lage ist, verbal mit anderen zu kommunizieren, sondern nur noch
über SMS und WhatsApp und was immer Nachrichten hin und her
verschickt.
Wenn sich die Kommunikation darauf beschränkt, ist das auch nicht gut.
Ich gehe gar nicht im Einzelnen ein auf die Inhalte dieser Tabelle.
Sie können sich das anschauen.
Es ist klar, dass wir zu Beginn sehr niedrige Übertragungsbandbreiten
haben.
Heute sind wir da in sehr hohem Bereich, also hier bei LTE, in
Bereichen, die wir ansonsten nur mit Draht gebundener Kommunikation
haben.
Und das heißt, wir haben einfach die Möglichkeit, vielfältig, sehr
flexibel zu kommunizieren.
Und das führt halt zu all diesen Entwicklungen, dass wir sagen, wir
haben eine Digitalisierung von Wirtschaft und Gesellschaft, weil wir
halt diese Möglichkeiten haben, so mit einer hohen Bandbreite sehr
problemlos zu kommunizieren.
Was sind also die Konsequenzen?
Wir haben einen Zugang zu Internet und anderen Netzen über mobile
Geräte.
Das ist ein wichtiger Schritt auf dem Weg zum ubiquitären Rechnen.
Ubiquitär heißt, wir haben also überall Informationsverarbeitende
Systeme, die etwas machen.
Wir können an jedem Ort Informationsdienstleistungen abrufen.
Wir können umgebungsabhängige Informationsdienstleistungen anbieten,
dass Informationen so geliefert wird, wie das der aktuellen Umgebung
entspricht.
Hat Vorteile, hat auch Nachteile.
Kann eben dazu führen, dass Sie in einem Land Informationen bekommen,
die nur von der jeweiligen Umgebung, auch politischen Umgebung,
gewünscht und toleriert sind.
Und im anderen Land andere Informationen.
Das widerspricht eigentlich dem Anspruch des Internets, dass wir
überall die gleichen Informationen bereitstellen können.
Hat aber auch den Vorteil, dass Sie eben diese Informationen bekommen,
die für Sie relevant sind.
Hat also Vor- und Nachteile.
Aber wie es leider immer so ist, Technologien können positiv und
negativ eingesetzt werden.
Diese Anpassungsfähigkeit der Informationsübertragung auf die lokal
bestehenden Anforderungen kann dazu führen, dass Sie eben nicht mehr
wirklich die Informationen bekommen, die relevant sind, sondern die,
die Ihnen zugedacht sind.
Und das ist nicht unbedingt positiv.
Kann auch sein, dass jemand sagt, ich will das alles jetzt
torpedieren.
Dann haben Sie Information Warfare.
Auch das sind mittlerweile dann Varianten der Informationsübertragung,
die wir eigentlich nicht mehr so gut finden.
Okay, was wir auch haben, sind selbstorganisierende Systeme.
Ich hatte gesagt, das Internet ist ein selbstorganisierendes System.
Sie können aber auch dadurch, dass Sie verschiedene Komponenten
miteinander reden lassen, die können irgendwie miteinander reden, dann
können die Netze aufbauen, können sich verbinden und können über diese
Ad -Hoc-Netze miteinander kommunizieren und gemeinsam mit Aufgaben
erledigen.
Insgesamt haben wir damit Dienste oder Anwendungen, die stets
verbunden sind mit ihrer Umgebung.
Man sagt, sie sind always on, ständig irgendwie verfügbar und wir
bekommen etwas, was wir auch Internet of Everything nennen.
Wenn Sie in die Zeitung gesehen haben, gestern war der Bericht
darüber, dass wir in dem Projekt mit dem Kompetenzzentrum für
angewandte Sicherheitstechnologien hier in Karlsruhe-Castell genau an
solchen Themen arbeiten.
Internet of Everything und dort die Sicherheitsaspekte bearbeiten.
Wir haben hier eines der drei Kompetenzzentren,
Nationalkompetenzzentren für IT-Sicherheit.
Auf jeden Fall werden eben viele Infrastrukturen jetzt zu
cyberphysikalischen Systemen.
Das heißt, Sie haben eben Cyber, das ist die digitale Welt, die
Informationsverarbeitung und Sie haben die physikalische Welt, das ist
die Industrie, das ist Robotik, das ist Verkehr, das sind
Gesundheitssysteme und die sind alle miteinander verbunden.
Und Sie müssen in der Cyberwelt sich ein Modell machen von dem, was in
der physikalischen Welt passiert.
Und das Ganze muss insgesamt vernünftig miteinander arbeiten können.
Das ist durchaus eine Herausforderung.
Und Sie können zum Beispiel einen Roboter steuern, sodass der in eine
bestimmte Richtung läuft.
Das geht, wenn Sie hier einen Roboter haben, der soll in eine
bestimmte Richtung laufen.
Das ist überhaupt kein Problem in der Simulation.
In der Realität läuft der aber nicht gerade, sondern läuft irgendwie
über irgendwelche Hindernisse hinweg und läuft eben nicht genau
gerade.
Das heißt, die Realität sieht immer anders aus, als das, was Sie im
Rechner modelliert haben.
Und die Herausforderung besteht darin, dafür zu sorgen, dass die
technischen Systeme, die Sie steuern, auch in der physikalischen Welt
sich richtig verhalten und nicht nur in der Simulation.
Dass die digitale Steuerung vernünftig darauf reagieren kann.
Das ist das, was wir bei cyberphysikalischen Systemen so im Groben
machen müssen.
Es gibt dieses Schlagwort Industrie 4.0, haben Sie auch schon gehört,
hängt damit ganz stark zusammen, wie bei der Produktion, sinnvoll
steuert in einer vernetzten Art und Weise.
Wir machen das intensiv im Zentrum Information, Systeme, Technologien,
werden diese Technologien adressiert und es gibt Konzepte für die
Gestaltung cyberphysikalischer Systeme, die sehr viel zu tun haben mit
Autonomic Computing oder Organic Computing.
Da haben wir auch sehr stark daran mitgewirkt, dass solche Dinge
entstehen können.
Und in Bezug auf Energiesysteme, eindeutig auch cyberphysikalische
Systeme, wo wir Cybertechnologie brauchen und natürlich das
Energiesystem haben, da sind wir eben dabei, die Energieinformatik zu
entwickeln, damit ein Smart Grid tatsächlich realisiert werden kann.
Wir haben hier viele interessante Fragestellungen, an denen wir
arbeiten, mit einer Vielzahl von Personen, KIT ist da wirklich sehr
stark aktiv, wenn Sie Ihre Arbeit schreiben wollen oder als HIVI tätig
sein wollen, haben Sie hier viele Möglichkeiten, sich dort mit
einzubringen.
Also, das ist alles, was ich Ihnen zur Rechnerarchitektur erzählen
wollte.
Wir kommen dann zum nächsten Kapitel.
Und ich mache dann am besten jetzt erstmal eine kurze Pause.
Weiter machen.
Einmal kurz gucken.
Jetzt läuft es auch weiter, das ist gut.
Also, wir sind bei dem Kapitel gewesen, mit den Rechner, Netze,
Speicher und so weiter.
Und ich komme jetzt zu dem Kapitel 9, Programmierung.
Das geht natürlich mit der ersten Seite los.
Übrigens hat vorhin niemand sich beschwert darüber, dass das Feedback
-Tool nicht sichtbar war.
Hat offensichtlich keiner den Bedarf gehabt, etwas beizutragen oder
Fragen zu stellen.
Jetzt habe ich das gemerkt und habe es dann unten noch wieder
eingeblendet.
Es geht jetzt um den nächsten Aspekt.
Wir haben jetzt gesehen, wie man Rechner aufbaut.
Jetzt geht es darum, wie man sie eigentlich programmiert.
Wir hatten das zu Beginn ja schon gesehen in der Vorlesung, welches
die formalen Modelle sind, um die Programmiersprachen zu beschreiben.
Jetzt schauen wir uns nochmal an, welche Möglichkeiten eigentlich ein
Rechner bietet, um programmiert zu werden.
Das heißt, wir haben hier verschiedene Dinge, die man sich angucken
muss, verschiedene Sprachebenen.
Wir brauchen natürlich Möglichkeiten, dem Rechner zu sagen, was er tun
soll.
Und das Problem ist, dass der Rechner selber, das haben Sie gesehen,
Steuerwerk, Rechenwerk, Speicherwerk wohl ziemlich kompliziert zu
steuern ist.
Damit wollen wir uns eigentlich auf der Ebene der Programmierung, auf
einer hohen Ebene, gar nicht beschäftigen.
Und wir wollen uns eigentlich nur mit der Festlegung von irgendwelchen
Befehlen oder damit beschäftigen, wie Funktionen berechnet werden
sollen, wie Probleme gelöst werden, auf einer hohen abstrakten Ebene.
Wir wollen uns eigentlich nicht mit der nackten Maschine beschäftigen
müssen.
Ausgeführt wird aber alles auf dieser nackten Maschine.
Und das heißt, wir müssen sehen, wie man das organisiert, dass wir
einerseits unsere Programme formulieren können, sehr abstrakt, und
unten alles richtig ausgeführt wird im Rechner.
Wir haben also es zu tun mit einer Übertragung von Sprachen einer
höheren Ebene, wie zum Beispiel Java oder Smalltalk oder C++ oder was
immer Sie dort haben als höhere Programmiersprache oder auch ABAP,
wenn Sie SAP machen, in eine niedrigere Sprache, zum Beispiel Basic,
C, Fortran und dann eine noch niedrigere Sprache, Assembler oder
Maschinen -Sprache, die dann konkret in der Hardware ausgeführt wird.
Dieser Prozess muss vernünftig funktionieren, den muss man verstanden
haben, um zu wissen, was da eigentlich abläuft im Hintergrund.
Das eine ist, dass wir übersetzen.
Das heißt, wir haben hier ein Programm, das übersetzen wir in ein
Programm auf einer anderen Ebene, dann wieder in ein Programm auf der
Ebene und dann wird es in der Hardware ausgeführt.
Oder wir haben hier ein Programm und wir nehmen uns jede einzelne
Zeile her und interpretieren die über die Ebene hinweg, sodass die
einzelnen Anweisungen direkt ausgeführt werden in Hardware.
Das wäre eine Interpretierung.
Wenn Sie in Basic programmieren, kennen Sie das, dass einzelne Befehle
sofort ausgeführt werden.
Wenn Sie in Java programmieren, wird etwas nicht direkt ausgeführt,
sondern es wird erst übersetzt und dann das übersetzte Programm
ausgeführt.
Also, das eine ist die Übersetzung, das andere die Interpretierung.
Sie haben beim Übersetzer ein Programm auf einer höheren Ebene, Ebene
K, geht runter auf Ebene K-1.
Und das kann auch mehrfach passieren.
Bei der Interpretierung, da wird das Programm der hohen Ebene
interpretiert, die Bedeutung hergenommen und dann direkt ausgeführt.
Hört sich zunächst ganz toll an, ich brauche gar nichts zu übersetzen.
Heißt aber auch, wenn Sie in Ihrem Programm zum Beispiel irgendeine
Struktur haben, bei der Sie meinetwegen eine Schleife eingebaut haben,
und dann geht es hier irgendwo weiter, wenn Sie eine solche Schleife
haben, dann muss eben jedes Mal, wenn Sie zu einem Befehl kommen,
dieser Befehl neu interpretiert und ausgeführt werden.
Und das verzögert Ihre ganze Programmausführung wahnsinnig.
Das ist für einen Programmentwurf ganz sinnvoll, für die Ausführung,
für die Nutzung des Programms im echten Betrieb natürlich nicht mehr
sinnvoll.
Also, normalerweise auch die Übersetzer sind natürlich auch wieder
Programme, in der Regel in der Sprache der niedrigeren Ebene.
Jede Sprachebene ist im Prinzip eine Art virtuelle Maschine, bietet
eine gewisse Interface, eine Schnittstelle zu der
Informationsverarbeitung und insofern haben Sie hier über die
Übersetzer Möglichkeiten, solche Maschinen ineinander zu übersetzen.
Und das schauen wir uns genauer an.
Wir schauen uns die einzelnen Ebenen nochmal an, jetzt etwas
konkreter.
Wir haben unten die Maschinensprache, Sie sehen nicht ganz unten,
unten drunter kommt hier noch eine Mikroprogrammierungsebene.
Das ist eine Ebene, die Ihnen als Programmierer in der Regel nicht zur
Verfügung steht, sondern die fest verdrahtet ist, manchmal aber als
Firmware bezeichnet wird, das heißt dann können Sie das auch noch
verändern.
Und das führt zum Beispiel zu Möglichkeiten, dass Sie die Ausführung
eines Maschinenbefehls danach anpassen, weil nach Bedarf, wie häufig
er gebraucht wird, Sie erinnern sich an die nicht redundante Art zu
kodieren, bei der wir komprimiert haben und häufig auftretende Zeichen
mit kürzeren Codes dargestellt haben als weniger häufig auftretende
Zeichen.
So würden Sie hier also jetzt Befehle, die häufig ausgeführt werden
müssen in bestimmten Anwendungen, in einer anderen Art ausführen, in
einer kürzeren Zeit ausführen als Befehle, die nicht so häufig
hervorkommen.
Das nennt man Instruction Morphing.
Das hat übrigens ein früherer Kommiliton oder ein vor einiger Zeit,
Mark Fleischmann, Wirtschaftsingenieur hier aus Karlsruhe, der hat bei
HP und dann noch bei anderen Firmen gearbeitet und dort das
Instruction Morphing insbesondere eingesetzt bei der Entwicklung des
Crusoe Prozessors, der zusammen mit dem Linus Torwald, der den Linus
entwickelt hat, entwickelt wurde.
Also Wirtschaftsingenieure können auch Rechnerarchitekturen sehr
sinnvoll weiterentwickeln, auf Basis dessen, was sie hier gelernt
haben.
Wir werden uns diese verschiedenen Ebenen von problemorientierten
Sprachen bis runter zur Mikroprogrammierung gleich anschauen.
Das sind die problemorientierten höheren Sprachen, bei denen will ich
also Probleme aus einem bestimmten Anwendungsbereich adressieren und
das Programm entsprechend formulieren können, unabhängig von der
Rechenanlage.
Semler -Sprache, das sind maschinenorientierte Programmiersprachen,
die sich an den Eigenarten eines bestimmten Rechners orientieren.
Die sind ganz ähnlich, ganz nah dran an der Struktur der Maschinen
-Sprachen, sind aber etwas komfortabler zu benutzen.
Werden Sie auch genauer kennenlernen.
Maschinen-Sprache, wie gesagt, das, was dann unten drunter passiert.
Direktmöglichkeit, Befehle im Steuerwerk eines Rechners auszuführen
und dann haben wir unten drunter die Mikroprogrammierung.
Auf die wir auch noch kurz gleich eingehen werden.
Bis zu welcher Ebene gehen Hacker-Angriffe?
Die gehen bis runter in die Ebene der Maschinen-Sprache.
Das ist, wie gesagt, die Ebene, die frei zugänglich ist und in die
Firmware kommen sie normalerweise nicht rein.
Also wie weit Hacker dazu in der Lage sind, auch die Firmware zu
beeinflussen, das kann ich im Augenblick nicht sagen.
Aber die gehen also runter bis zur Maschinen-Sprache.
Selbstverständlich können die das.
Also, das sind die verschiedenen Ebenen und wir werden uns das jetzt
im Einzelnen anschauen und fangen bei der untersten Ebene an, bei der
Mikroprogrammierung.
Und wir haben hier die verschiedenen Aufgaben der Steuereinheit schon
mal betrachtet.
Wir wollen Befehle holen können, also wir holen Befehle in das
Steuerwerk hinein.
Wir dekodieren, entschlüsseln den Befehl und führen dann den Befehl
aus.
Und dazu sind aber einige Operationen erforderlich.
Wir hatten gesehen bei der Ausführung eines Additionsbefehls, da
müssen ja erstmal die Operanten entsprechend geholt werden aus dem
Speicher.
Es müssen die einzelnen Komponenten im Rechenwerk adressiert werden.
Es muss geguckt werden, was passiert dort in den Statusregister,
welche Informationen sind da drin und entsprechend muss reagiert
werden.
Das sind Elementar-Operationen, die ausgeführt werden, um einen
Maschinenbefehl tatsächlich auszuführen.
Also diese ganzen Einzeloperationen sind Elementar-Operationen auf der
Mikroprogramm -Ebene.
Und deswegen brauchen wir dafür eben auch diese Ebene.
Das geschieht über Steuersignale oder eben über elementare
Operationen.
Und das sieht mit Steuersignalen so aus, dass Sie auf den Wert
irgendeines Registers zugreifen wollen.
Und dann haben Sie eben hier so eine Tür davor, um das durchzulassen
über Ihr Steuersignal S.
Wenn das S auf 1 geht, dann wird über einen Undgatter der Wert
weitergegeben.
Wenn das S 0 ist, ist halt nur 0 auf dem Bus, dann wird nichts drauf
geschrieben.
So können Sie über Steuersignale regeln, wer etwas schreiben darf und
wer nichts schreiben darf.
Also registert wird auf den Bus gelegt, falls das Steuersignal gleich
1 ist.
Und die Steuereinheit muss also in der Lage sein, die geeigneten
Verbindungen im Rechner zu schalten, sodass zum richtigen Zeitpunkt in
der richtigen Reihenfolge, abhängig vom zu bearbeitenden Befehl, die
richtigen Elementar-Operationen ausgeführt werden.
Das Ganze geht eben entweder fest verdrahtet oder über
Mikroprogrammierung.
Das Interessante ist, das über Mikroprogrammierung zu machen und das
schauen wir uns jetzt genauer an.
Die Mikroprogramm-Einheit ist hier dargestellt mit den verschiedenen
Komponenten, die dort vorkommen.
Die Mikroprogramm-Einheit sieht so aus.
Das ist die Einheit, die dafür sorgt, dass das Steuerwerk vernünftig
diese Schritte Fetch, Decode, Execute ausführen kann.
Und dazu werden hier Einzel-Elementar-Operationen abgelegt, also in
Mikrobefehlen, in einem Mikroprogrammspeicher.
Jetzt müssen die einzelnen Befehle hier adressiert werden.
Ich habe also eine Ablauflogik und bestimme den Wert des
Mikrobefehlszeigers, Micro Instruction Pointer, und dieser
Mikrobefehlszeiger, der adressiert hier irgendeinen konkreten Befehl.
Der wird dann in das Mikroinstruktionsregister übertragen und dort
entsprechend interpretiert.
In dem Fall aber deutlich einfacher als bei den Maschinenbefehlen.
Hier kann es sein, dass Sie direkt dann Steuersignale dort drin stehen
haben.
Das heißt, das ist dann das Mikroinstruktionsregister, das
Steuersignale generiert bzw.
oder dieser Befehl generiert Steuersignale und stößt damit auch
Elementar -Operationen an.
Und es steht dort auch drin, welches die Folgeadresse ist, damit über
die Ablauflogik dann festgestellt werden kann, was der nächste
Mikrobefehlszeiger tatsächlich für einen Inhalt haben soll.
Also welche Mikrobefehle hier nacheinander ausgeführt werden und damit
auch welche Elementar-Operationen nacheinander ausgeführt werden
müssen.
Insofern ist also jeder einzelne Mikrobefehl ein Steuerwort fester
Länge, das eine oder mehrere Mikro-Operationen auslöst oder Elementar
-Operationen.
Und diese Elementar- oder Mikro-Operationen sind eben fest verdrahtet
und werden dann entsprechend ausgeführt.
Das sind dann Additions-Operationen oder was immer Sie dort machen
wollen.
Das Ganze, was ich gerade eben kurz erläutert habe, steht hier nochmal
genauer drin.
Ich habe also den Mikroprogrammspeicher, der Regel ist, dass ein
Speicher im Read-Only-Memory, also fest einprogrammiert, deswegen auch
nicht mehr veränderbar, wenn der Rechner ausgeliefert ist.
Mikrobefehlszeiger habe ich schon gesagt, Mikroprogrammzähler, benennt
man die manchmal auch.
Dann haben wir das Mikroinstruktionsregister, entsprechend dem
Instruktionsregister im Steuerwerk.
Und dann die Ablauflogik, die den nächsten Wert jeweils bestimmt,
abhängig von dem aktuellen Mikrobefehl und eventuell weiteren
Bedingungen.
Je nachdem, was in den Statusregistern im Rechenwerk gerade drinsteht,
werden dann hier entsprechend weitere Mikrobefehle aufgerufen.
Man unterscheidet zwei verschiedene Arten von Mikrobefehlen,
horizontale und vertikale.
Horizontal heißt, ich habe eine sehr große Wortbreite und da sind ganz
viele Elementaroperationen, die parallel angestoßen werden.
Vertikal bedeutet, ich habe ein kürzeres Wort und ich muss hier ein
bisschen mehr interpretieren, um daraus tatsächlich die Steuersignale
regenerieren zu können.
Also horizontal hat den Vorteil, dass ich vieles parallel machen kann,
vieles parallel ansteuern kann, brauche dafür aber sehr breite
Instruktionsregister, Mikroinstruktionsregister.
Das heißt, ich habe dadurch extra Hardwareaufwand.
Bei der vertikalen Mikroprogrammierung, da werden eventuell
Mikrooperationen stärker sequentiell ausgeführt, der Befehl muss
dekodiert werden.
Ich habe dann also mehr Zeitaufwand für die Befehlsausführung, habe
aber auch geringeren Hardwareaufwand.
Also ein Trade-off zwischen Hardwareaufwand und Zeit für die
Ausführung der Mikrobefehle.
Das ist ein Entwurfsproblem, wie entscheide ich mich zwischen diesen
konkurrierenden Anforderungen, möglichst schnell oder möglichst klein.
Okay, das ist schon alles zur Mikroprogrammierung.
Sie können sicher sein, dass ich von Ihnen nicht verlangen werde, ein
Mikroprogramm zu schreiben in einer Klausur.
Was ich von Ihnen erwarten kann, ist, dass Sie wissen, welche Aufgabe
ein Mikroprogramm hat.
Das Wesentliche ist aber, dass Sie die Dinge kennen, die jetzt darauf
aufbauen, nämlich Maschinensprachen, Decemder-Sprachen usw.
Was sind jetzt Maschinensprachen?
Da habe ich den Befehlssatz.
Der Befehlssatz, den ich habe, in einem Rechner, charakterisiert im
Prinzip die Rechnerarchitektur.
Weil der Befehlssatz, der Maschinenbefehlssatz angibt, wie ich welche
Funktionalität ich ansprechen kann in diesem Rechner.
Die einzelnen Maschinenbefehle sind binäre Worte fester Länge, um die
elementaren Operationen der CPU auszuführen oder anzustoßen.
Das Maschinenprogramm, dann entsprechend eine Folge von
Maschinenbefehlen.
Wie sind die aufgebaut?
Da habe ich hier meinen Maschinenbefehl.
Und in diesem Maschinenbefehl habe ich vorne einen sogenannten Opcode.
Das ist die Angabe der auszuführenden Operation.
Und dann habe ich hier ein paar Adressen drin, 1 bis 3 normalerweise,
kann aber auch sein, dass Sie manchmal mehr machen.
Adressen A1 bis AK.
Verschiedene Adressen, mit denen Operanden spezifiziert werden, auf
die die Operation angewandt werden soll oder die für die Operation
relevant sind.
Und Sie können dort sowohl Konstanten angeben oder auch
Registeradressen, also eben Rechenwerk oder Hauptspeicheradressen
irgendwo in Ihrem realen oder virtuellen Speicher.
Und dann müssen entsprechend die Operanden erst von diesen Orten
geholt werden.
Wir kommen später darauf zurück, welche Möglichkeiten der Adressierung
es gibt.
Da gibt es einige klare Klassifizierungen dieser Adressierungsarten.
Was für Befehlsformate haben wir?
Es gibt also den Einadressbefehl, wo Sie immer nur eine
Operandenadresse angeben können.
Und wenn Sie jetzt eine Operation machen wollen, wie Addition zum
Beispiel, wie können Sie eine Addition machen, wenn Sie nur einen
Operanden haben?
Das macht ja keinen Sinn.
Sie haben aber bei dem einen Operanden, können Sie halt irgendeine
Adresse im Speicher angeben.
Dann haben Sie hier irgendeinen Wert, den adressieren Sie.
Und in Ihrem Rechenwerk, da sind jetzt diese beiden Operanden, die
durch Ihr ALU kombiniert werden sollen zu einem Ergebnis.
Das waren unsere Register hier, meinetwegen A, B und wenn man das mal
R für Ergebnis oder Result.
Da haben Sie halt ein Register, der Akkumulator, das ist der
Standardoperand oder das Standardregister.
Und adressiert wird hier nur der Wert des zweiten Operanden, der mit
diesem ersten verknüpft werden soll.
Das erste ausgezeichnete Register ist der Akkumulator und das zweite
ist der Operand, der hier angegeben ist.
Die Operandenadresse gibt Ihnen an, welcher zweite Wert damit
verknüpft werden soll.
Und das Ergebnis der Berechnung ist anschließend im Akkumulator wieder
verfügbar.
Das heißt, das was hier als R angegeben ist, das wird im Prinzip da
vorne wieder reingeschrieben.
Das ist das Akkumulatorregister.
Das ist also ein extra Akkumulatorregister.
Und der erste Operand ist dann immer der Wert des
Akkumulatorregisters, der zweite Operand wird hier angegeben.
Sie können aber auch zwei Adressbefehle haben.
Beim Zwei-Adressbefehl werden beide Operanden so einer arithmetischen
Einheit adressiert.
Und das Ergebnis wird in der Regel in den zweiten Operanden
geschrieben.
Beim Drei-Adressbefehl geben Sie auch noch an, an welche Stelle das
Ergebnis geschrieben werden soll.
Und können Sie also zwei verschiedene Operanden angeben und auch noch
eine Adresse für das Ergebnis.
Dann haben Sie noch mehr Möglichkeiten, das genauer zu spezifizieren.
Entsprechend wird natürlich auch der Befehl immer länger.
Wenn Sie drei Adressbefehle haben, brauchen Sie deutlich mehr Bits,
als wenn Sie nur ein Ein-Adressbefehl haben.
Man redet dann auch entsprechend von verschiedenen
Rechenarchitekturen, von ein, zwei oder drei Adressmaschinen.
Je nachdem, was für Befehlssätze Sie zur Verfügung haben.
Und die Anzahl der Operandenadressen, die Sie brauchen, hängt
natürlich auch ab davon, ob Sie jetzt arithmetische oder logische
Operationen machen, wo Sie bis zu drei Adressen brauchen.
Wenn Sie Sprungoperationen machen, also Sprungbefehle, da brauchen Sie
nur das Sprungziel anzugeben.
Ein unbedingter Sprung, ein Go-Tour irgendwohin, da brauche ich nur
die Marke, wo ich hinlaufen muss.
Da brauchen Sie nur einen Operanden.
Insofern hängt das auch davon ein bisschen ab.
Also, welche Arten von Befehlen haben wir?
Wir haben Datentransportbefehle.
Wir müssen Daten zwischen verschiedenen Speicherbereichen hin und her
transportieren, zwischen Rechenwerk und Speicher.
Das sind Datentransportbefehle.
Wir haben arithmetisch-logische Befehle, da haben wir das schon ein
paar Mal angesprochen.
Ablaufsteuerungsbefehle, das sind Sprungbefehle, die man einbauen
kann, bedingt oder unbedingt.
Und wir haben Ein- und Ausgabebefehle, um Werte in den Rechner
hineinzuschreiben oder aus dem Rechner herauszuschreiben.
Und dann noch Sonderbefehle, die etwas damit zu tun haben, dass wir
etwas stoppen, starten oder ähnliches.
Und dafür brauchen wir eben auch Befehle.
Und das sind so die verschiedenen Arten von Befehlen, die man braucht.
Und ich werde Ihnen jetzt eine einfache Maschinensprache vorstellen,
die die Möglichkeiten bietet zu rechnen.
Eine einfache Maschinensprache, die in einem Adressformat arbeitet und
16 Bit zur Verfügung hat für einen Befehl.
16 Bit heißt, ich muss das aufteilen auf Operantencode und Adresscode.
Das heißt, ich spendiere 4 Bit für den Operationscode.
Das heißt, ich kann 16 verschiedene Befehle spezifizieren und habe
noch 12 Bit zur Spezifizierung der Hauptsprecheradresse übrig.
Mehr passt dann nicht rein.
Und das ist in dem Fall eine absolute Adressierung.
Das heißt, ich gehe davon aus, dass der Wert, der dort steht, die
Adresse eines Hauptspeicherelements ist.
Und da muss ich den entsprechenden Operanten von da holen und im
Rechner ausführen.
Dann habe ich einen Akkumulator, das Register A.
Und damit kann ich dann Befehle spezifizieren.
Das sind die Maschinenbefehle zunächst mal reine Bitkombinationen, 0,1
Kombinationen.
Und um das Ganze besser lesbar zu machen, schreibe ich daneben, dann
werden Sie gleich sehen, auch noch ein Wortsymbol.
Und die Operantenadresse stelle ich durch eine Dezimalzahl dar.
Aber das sehen Sie hier bei dem Befehlssatz.
Hier habe ich also jetzt einfach angegeben, wenn Sie also jetzt einen
solchen Befehl haben.
Hier vorne steht der Opcode und hier steht der Operant.
Da habe ich unten M geschrieben.
Das ist also die Adresse des Registers im Speicher.
Und wenn der Opcode Load ist, bzw.
wenn der Opcode 0001 ist, dann sage ich, das ist ein Ladebefehl, der
den Inhalt des Registers, das durch M adressiert ist, in den
Akkumulator schreiben soll.
Wenn dort 1,0 steht, ist das ein Storebefehl.
Der soll das Gegenteil machen, der soll etwas aus dem Akkumulator
holen, also den Inhalt des Akkumulators, das soll durch spitze
Klammern dargestellt sein, in die entsprechende Adresse im Speicher
schreiben.
Ein Additionsbefehl durch 1,1 angegeben, der soll also den Wert des
Akkumulators und den Wert des Operanten, der durch M adressiert ist,
soll er addieren und das Ergebnis in den Akkumulator hineinschreiben.
Entsprechend Subtraktion, Multiplikation, Division, wobei hier bei der
Division ein Diff steht.
Diff heißt, dass die ganzzahlige Division, der nicht ganzzahlige
Anteil wird weggeschnitten, also nur die ganzzahlige Division.
Und das Ergebnis der ganzzahligen Division wird dann in den
Akkumulator hineingeschrieben.
Dann haben wir einen unbedingten Sprung, wo gesprungen wird an die
Stelle, die durch M spezifiziert ist.
Und Jump Zero heißt, ich springe nach M, falls der Akkumulator den
Wert 0 hat.
Das ist also ein bedingter Sprung, da schaue ich nach, welcher Wert
steht im Akkumulator.
Und nur wenn der 0 steht, springe ich an die Adresse, ansonsten mache
ich mit dem nächsten Befehl weiter.
Und hier ist noch ein Sonderbefehl, Halt, damit soll das Programm
beendet werden.
Das sind also ganz einfache Befehle, ich habe gar nicht ausgenutzt,
dass ich 16 mögliche Befehle habe.
Und damit werden wir uns gleich ein Beispiel anschauen für ein
Programm.
Also hier ist in dem Fall M die Operandadresse, Akkumulator.
Und diese symbolische Notation, die wir hier hinschreiben, dient nur
zur Kommentierung oder zur besseren Lesbarkeit.
Das Maschinenprogramm enthält diesen Operationscode und die
entsprechende Adresse jeweils in binärer Form.
Also wenn ich Ihnen hier ein Beispiel angebe, da ist ein Programm
angegeben.
Das hier ist unser Maschinenprogramm, nur Bitkombinationen.
Die ersten vier Bits hier vorne, das ist der Opcode.
Und die letzten zwölf Bits, das sind jeweils die Operandadressen.
Und die Programmanfangsadresse ist in dem Fall 946, da steht der erste
Befehl.
Damit das Programm ausgeführt werden kann, muss also diese
Programmanfangsadresse im Steuerwerk, im Befehlszähler abgespeichert
sein.
Dann kann dieser Befehl aus dem Speicher in das Steuerwerk geholt
werden, wird interpretiert.
Und der wird interpretiert als ein Ladebefehl, der an der Stelle 959
im Speicher sich etwas holen soll.
Bei 959 steht hier der Wert 1.
Und der soll jetzt in den Akkumulator geladen werden.
Und anschließend steht hier, bei 947 bei dem Befehl, steht ein
Speicherbefehl.
Der soll das, was im Akkumulator steht, schreiben in die Zelle 958.
Das ist hier diese Adresse.
958, da steht zunächst mal noch nichts Definiertes drin.
Da wird dann die 1 reingeschrieben in dem Fall.
Also Sätze Y.
Und zwar soll, das stand hier oben drüber, der Wert in Speicherzelle
958 soll nach Ausführung des Programms genau den Wert X Fakultät
enthalten.
Und X ist ein Wert, der zu Beginn in der Speicherzelle 957 steht.
Und den holen wir uns mit dem nächsten Befehl.
Das ist also dieser Befehl, der dann hier, wieder ein Ladebefehl von
Adresse 957.
Das heißt, wird jetzt der Wert von X in den Akkumulator geschrieben.
Und jetzt wird getestet, ob dieser Wert 0 ist.
Wenn er 0 ist, 0 Fakultät ist 1, dann steht das Ergebnis bereits in
dem Register 958.
Also, der nächste Befehl ist ein Jump-Zero Befehl, der sofern der Wert
im Akkumulator 0 ist, springt nach 956.
Das ist dieser Befehl dort unten.
Wir sind dann fertig.
Wenn der nicht 0 ist, dann macht er weiter.
Und der nächste Befehl ist ein Multiplikationsbefehl, der sagt, der
Wert, der im Akkumulator steht, soll multipliziert werden mit dem
Wert, der aktuell in 958 steht.
Im Augenblick, hatten wir gesagt, steht hier eine 1 drin.
Mit dem Wert, mit der 1, wird also jetzt der Wert im Akkumulator
multipliziert.
Da stand das X drin, also X mal 1.
Entsprechend geht das hier weiter.
Es wird multipliziert, dann wird der Wert reingeschrieben nach 958.
Dann steht also hier als nächstes nicht mehr die 1, sondern dann steht
hier ein X.
Und entsprechend wird dann, das haben wir einmal X gerechnet, und dann
wird das abgespeichert, dann wird 957 geladen.
957, das war dieser Wert X, kommt also wieder das X rein in den
Akkumulator.
Und dann wird 959 subtrahiert, das ist also hier die 1.
Das heißt, dann haben wir hier oben X-1 stehen.
Und danach wird der Wert, wir haben erstmal im Akkumulator das stehen,
und dann speichern wir das nach 957.
Dann haben wir dort tatsächlich X-1 stehen.
Und dann wird das Ganze wieder neu ausgeführt, geht also bei 949
weiter.
949, das war der Test, ob der Wert, der steht jetzt Null ist oder
nicht.
Entsprechend iteriert das dann durch, und dann wird sukzessive hier X
mit X-1, mit X-2 und so weiter multipliziert.
Und hier oben steht dann entsprechend X-I jeweils drin.
Und entsprechend wird das so lange gemacht, bis wir das X auf Null
reduziert haben.
Und entsprechend haben wir dort dann den Wert Fakultät drin.
Das nur, um Ihnen anzudeuten, wie so ein Maschinenprogramm
abgearbeitet wird, wie man das aufbaut, sieht ein bisschen kompliziert
aus.
Sie müssen genau wissen, wo welche Daten stehen, und das ist also ein
bisschen aufwendig.
Trotzdem, das sind die Befehle, die in der CPU ausgeführt werden.
Und jetzt können Sie das Ganze noch komplizierter machen.
Sie können Stapelverarbeitung haben, Sie können also besondere
Operationen haben.
Oder was eben hier fehlt, ist Stapelverarbeitung.
Was fehlt bisher, sind verschiedene Adressierungsarten oder auch
Rechnung mit Leitpunktzahlen.
Sie haben dafür natürlich in den üblichen Maschinenbefehls-Sätzen für
alle diese Dinge entsprechende Möglichkeiten drin.
Das hier sind jeweils die Adressen.
Also diese Zahl, die hier steht, die Frage war gerade für diejenigen,
die das jetzt in der Aufzeichnung hören, was stehen hier für Werte.
Das sind die Adressen, das ist jeweils die Adresse.
Und hier steht ja 959, schauen Sie sich das hier an, das ist genau die
Zahl 959.
Und hier steht eine Zahl, die ist genau 1 kleiner.
Da oben stand eine 1, das war 959, das ist 958.
Dieses hier ist 957, das hier ist 956.
Und dann haben Sie hier wieder 958 und so weiter.
Das sind genau die Zahlen, die hier angegeben sind, das sind die
Adressen, die dort bei den einen Adressbefehlen als Operand jeweils
angegeben waren.
Und das sind die Adressen, die hier jeweils die entsprechenden
Speicher adressieren.
Dann, wie gesagt, braucht man weitere Möglichkeiten.
Die Maschinenbefehls sind deutlich ausgeweitet, die wurden dann zum
Teil deutlich komplizierter.
Je komplizierter ein solcher Befehl wird, desto länger dauert es, ihn
auszuführen.
Und das heißt, der Durchsatz an Befehlen bei der Ausführung von
Programmen sinkt.
Man möchte aber möglichst hohen Durchsatz haben.
Und deswegen hat man als ein wesentlicher Punkt bei der
Rechenarchitekturentwicklung die sogenannten RISC-Rechner entwickelt.
Die Reduced Instruction Set Computers, wo man gesagt hat, ich brauche
eigentlich nur einen Teil in den üblichen Programmen.
Und wenn ich mal kompliziertere Dinge machen möchte, dann muss ich das
halt durch entsprechende Kombinationen von einfachen Befehlen
ausdrücken.
Die RISC-Rechner waren über lange Zeit die leistungsfähigsten
Workstations, die es gab.
Mittlerweile ist man wieder komplexer geworden in der Darstellung,
also in den Maschinenbefehlsätzen ist so ein Mittelding zwischen RISC
und CISC.
Insbesondere hat man für Multimedia-Anwendungen deutlich andere
Befehle noch dazu geführt, auch Ausführungseinheiten.
Das heißt, die Maschinensprache, wie gesagt, die gibt Ihnen an die
Hand die Möglichkeiten, Informationsverarbeitung tatsächlich
auszuführen, zu organisieren.
Und nur das, was in den Maschinenbefehlen möglich ist, können Sie auch
machen.
Mehr geht nicht.
Und wenn Sie dort eben sehr komplexe Befehle haben, können Sie mit
wenigen Befehlen einen komplexen Vorgang ausdrücken.
Wenn Sie einfache Befehle haben, brauchen Sie mehr Befehle, um das
auszudrücken.
Das ist Ihre Schnittstelle, um Informationsverarbeitung zu
organisieren.
Und dann hatte ich gesagt, wir haben verschiedene Arten Operanten zu
adressieren, das hatte ich schon angedeutet.
Es gibt viele Möglichkeiten dafür, die hier aufgeführt sind.
Und ich kann noch ganz kurz anfangen, Ihnen das darzustellen, das ist
relativ schnell gemacht.
Sechs verschiedene Arten der Adressierung stehen hier, wir gehen die
der Reihe nach durch.
Die unmittelbare Adressierung bedeutet, dass Sie ein Zielregister mit
einer bestimmten Wertlabe wollen.
Sie wollen eine Zahl addieren auf einen Wert, der im Register steht,
im Rechenwerk.
Dann ist der Operant, der in dem Befehl steht, also das ist hier nach
wie vor unser Op-Code und unser Operant, oder die Adresse, die dort
steht, dann ist das M in dem Fall genau der Wert, der addiert werden
soll, zum Beispiel.
Oder der geladen werden soll.
Genau der Wert soll dort stehen.
Das andere, was wir gerade eben gemacht haben, in dem Beispiel, das
war die absolute Adressierung, da möchte ich, wenn ich da eine 3
angebe, dann ist das die Adresse für eine Speicherzelle.
In der Speicherzelle steht ein Wert und den lade ich in mein
Zielregister rein.
Also das ist dann, da würde eben normalerweise dann dieses Load 3
stehen.
Dann ist das eine Adresse und die wird dann genommen.
Indirekt geht noch ein Schritt weiter.
Ich habe angegeben hier die 3 und jetzt habe ich gesagt, das soll eine
indirekte Adresse sein.
Und in dem Fall heißt das, ich muss erstmal nachschauen im Register
Nummer 3, an welcher Adresse der Operant steht, den ich tatsächlich
reinschreiben soll in mein Register.
Das heißt, da habe ich erstmal noch diesen Umweg mit der indirekten
Adressierung.
Ich habe also zwei Speicherzugriffe, um den Operanten tatsächlich zu
bekommen.
Ganz wichtig, wenn Sie eben von vornherein nicht wissen, an welcher
Stelle ein Wert abgelegt wird, wenn das erst durch das Programm
festgelegt wird, müssen Sie in der Lage sein, durch das Programm im
Speicher abzulegen, an welcher Adresse ein bestimmter Wert geholt
werden soll.
Also indirekte Adressierung ist eine ganz wichtige Art der
Adressierung.
Und dann haben Sie die indizierte Adressierung.
Noch etwas wichtiges.
Indexregister.
Sie wollen gerne einen bestimmten Abschnitt in Ihrem Speicher.
Ab einer bestimmten Adresse wollen Sie bestimmte Werte rausholen.
Dann haben Sie ein Indexregister.
Das Indexregister hat einen bestimmten Wert.
Und Sie müssen erstmal, um die Adresse zu ermitteln, aus der Sie etwas
holen wollen, den Wert, der im Befehl steht, die 3, addieren zu dem
Wert, der im Indexregister steht, das ist also die Basisadresse, erst
dann bekommen Sie hier entsprechend den Wert, also hier in dem Fall
dritte oder vierte Komponente, je nachdem wie Sie es interpretieren,
habe ich dann erst den Wert, in dem Fall 5, dort steht der Wert, die
17, die kommt in das Register rein.
Ich muss erst eine Addition ausführen, um zu wissen, an welcher Stelle
ich einen Wert aus dem Speicher holen muss.
Das heißt, ich habe nicht nur einen Speicherzugriff zu machen und
einen Operanten zu holen, sondern ich muss auch noch eine Addition
ausführen und dann den Wert aus dem Speicher holen.
Noch mehr Aufwand.
Und schließlich habe ich dann auch noch die relative Adressierung.
Die relative Adressierung bezieht sich darauf, dass Sie in dem Fall
ein Basisregister haben, das ist eine ähnliche Anwendung wie
indizierte Adressierung, nur die relative Adressierung, die wird vor
allen Dingen angewandt, wenn Sie ein ganzes Programm in den Speicher
laden, dann haben Sie hier das Programm tatsächlich abgelegt und dazu
brauchen Sie die Basisadresse.
Die Adressen innerhalb Ihres Programms sind in dem Fall relativ zur
Anfangsadresse, also im Programm selbst von Null anfangend, und um
dann die richtige Adresse hier drin zu haben, müssen Sie eben das
Basisregister nehmen, um dann auf die richtige Adresse zu kommen in
dem Speicher.
Und damit haben wir alle Adressierungsarten, eigentlich schon noch
nicht ganz indizierte Adressierung, das sind Sprungbefehle, die wir
bereits betrachtet haben.
In der Praxis haben Sie häufig nur einen Teil dieser
Adressierungsarten, man kann sie kombinieren in einer sinnvollen Art
und Weise, Sie können also indirekt indiziert kombinieren und
ähnliches, aber es ist wichtig zu wissen, dass es diese verschiedenen
Adressierungsarten gibt.
Damit bin ich für heute ans Ende gekommen, ich danke Ihnen für die Aufmerksamkeit.