WEBVTT

00:01.060 --> 00:02.220
So, schönen guten Tag.

00:02.280 --> 00:04.740
Ich begrüße Sie zur Fortsetzung der Vorlesung Grundlagen der

00:04.740 --> 00:05.560
Informatik II.

00:06.160 --> 00:09.560
Es ist ja interessant, dass ich bereits zwei Leute habe, die hier

00:09.560 --> 00:13.360
sagen, ich soll langsamer machen.

00:16.020 --> 00:17.320
Noch langsamer geht es nicht.

00:17.860 --> 00:19.560
Also, kurze Bemerkung zu Beginn.

00:19.640 --> 00:23.500
Wir haben heute den letzten Tag der Anmeldung für die Klausur.

00:24.000 --> 00:26.140
Also wer das noch nicht gemacht hat, soll das dringend tun.

00:26.660 --> 00:29.500
Diejenigen, die heute nicht hier sind, werden das nicht rechtzeitig

00:29.500 --> 00:30.360
erfahren.

00:30.600 --> 00:34.520
Wenn Sie auf diese Aufzeichnung klicken, ist das nicht heute, sondern

00:34.520 --> 00:35.800
irgendwann morgen, übermorgen.

00:35.940 --> 00:38.900
Und dann werden Sie sehen, dass Sie sich bis heute hätten anmelden

00:38.900 --> 00:39.180
können.

00:39.280 --> 00:44.580
Aber ich denke, das ist allen bekannt, dass die Anmeldung erfolgen

00:44.580 --> 00:45.000
sollte.

00:45.000 --> 00:54.440
Also wer sich am Ende dieses Semesters schon in zwei Wochen prüfen

00:54.440 --> 00:58.420
lassen möchte über diese Vorlesung, der sollte dann sehen, dass er

00:58.420 --> 01:03.760
sich bis heute anmeldet.

01:03.760 --> 01:04.120
Ja.

01:06.740 --> 01:07.420
Bitte?

01:09.160 --> 01:09.840
Oh.

01:12.460 --> 01:17.720
Da sollte jemand am besten mir Strom holen.

01:18.600 --> 01:20.620
Ich kann das...

01:23.330 --> 01:25.130
Mein Auto steht genau vor der Tür.

01:26.530 --> 01:27.570
Damit kriegen Sie das auf.

01:28.550 --> 01:32.050
Und hinter meinem Sitz ist die Tasche.

01:32.510 --> 01:33.110
Da ist das alles.

01:34.230 --> 01:34.890
Bitte?

01:38.110 --> 01:38.770
HS...

01:38.770 --> 01:39.450
732.

01:40.350 --> 01:41.010
732.

01:41.210 --> 01:42.110
Steht direkt vor der...

01:42.110 --> 01:42.570
Gerade raus.

01:44.990 --> 01:45.190
So.

01:45.970 --> 01:48.230
Diese Episode können wir rausschneiden aus der Aufzeichnung.

01:49.430 --> 01:50.090
Also.

01:50.390 --> 01:54.890
Wir kommen damit zum Thema der Vorlesung.

01:55.150 --> 01:58.550
Ich bin also sehr im Zeitdruck.

01:58.550 --> 02:00.110
Trotzdem muss ich eine Sache machen.

02:00.270 --> 02:03.210
Ich muss Ihnen natürlich ganz kurz Rückmeldung geben zu dem, was in

02:03.210 --> 02:04.650
der Umfrage gewesen ist.

02:04.790 --> 02:12.150
Sie haben ja in großer Zahl hier zurückgemeldet, wie Sie diese

02:12.150 --> 02:13.190
Vorlesung bewerten.

02:13.990 --> 02:17.850
Wir haben einen Lehrqualitätsindex von 95,9.

02:18.830 --> 02:20.270
Ich hätte lieber 100 gehabt.

02:20.410 --> 02:21.450
Man kann nicht immer alles erwarten.

02:22.210 --> 02:26.290
Grundlagenvorlesung ist immer so, dass die nicht notwendigerweise

02:26.290 --> 02:30.570
immer nur auf Zustimmung stößt.

02:31.030 --> 02:33.970
Und Sie haben also viele Dinge uns hier erzählt dazu.

02:34.410 --> 02:37.550
Es haben 452 Personen teilgenommen an der Umfrage.

02:38.450 --> 02:42.350
Und dann gibt es hier eben alle möglichen Einschätzungen zur

02:42.350 --> 02:42.790
Vorlesung.

02:42.870 --> 02:46.150
Ich brauche hier auf die Einzelsachen eigentlich gar nicht einzugehen,

02:46.230 --> 02:46.630
glaube ich.

02:46.630 --> 02:53.630
Die Noten liegen meistens so im Bereich eher um die 2 herum, was alles

02:53.630 --> 02:54.570
sehr positiv ist.

02:54.730 --> 02:56.810
Ein paar Mal ist ja auch ein grünes Zeichen.

02:57.010 --> 02:59.290
Also hier ist mal was gelb.

02:59.710 --> 03:01.530
Das ist so notwendiger Arbeitsaufwand.

03:01.630 --> 03:04.550
Ist irgendwo im Mittel zwischen angemessen und unangemessen.

03:05.830 --> 03:08.110
Also finden Sie das etwas zu hoch.

03:09.630 --> 03:11.490
Dann haben wir hier grün.

03:12.050 --> 03:14.350
Ist also wie gut die strukturiert ist.

03:14.490 --> 03:18.390
Und dann kommen hier so einige Dinge zu inhaltlichen Aspekten, zur

03:18.390 --> 03:19.310
Geschwindigkeit.

03:20.030 --> 03:21.550
Das ist also gerade so in Ordnung.

03:21.730 --> 03:23.490
Ich hätte also noch schneller machen können offensichtlich.

03:25.690 --> 03:28.770
Dann ist hier erforderliche Vorkenntnisse.

03:28.970 --> 03:29.870
Alles so in der Mitte.

03:30.050 --> 03:31.030
Das ist alles in Ordnung.

03:32.550 --> 03:37.850
Das ist etwas, wenn Sie in den USA wären, im amerikanischen System.

03:38.430 --> 03:41.670
Und es würden alle Leute sagen, ich habe mir die Vorlesungsunterlagen

03:41.670 --> 03:42.990
vor dem Vordiensttermin angeschaut.

03:43.310 --> 03:44.250
Nein, gar nicht.

03:45.070 --> 03:47.250
Damit kommt man in Nordamerika nicht durch.

03:47.570 --> 03:50.250
Da gibt es ganz viele Vorlesungen, wo selbstverständlich erwartet

03:50.250 --> 03:52.870
wird, dass man vorher schon im Textbuch die Sachen angeguckt hat.

03:53.550 --> 03:56.050
Aber da ist eben auch vieles schon vorher verfügbar in einer anderen

03:56.050 --> 03:56.450
Form.

03:57.850 --> 04:00.630
Hier ist häufig ein Nacharbeiten weniger Vorarbeiten.

04:01.090 --> 04:05.230
Das wird viel interessanter, wenn man schon vorher weiß, was man

04:05.230 --> 04:05.830
eigentlich erwartet.

04:05.930 --> 04:08.510
Dann kann man auf interessante Punkte zurückkommen.

04:08.630 --> 04:10.350
Das sollte eigentlich anders sein.

04:11.130 --> 04:15.330
Und die Note für die Vorlesung, mit der bin ich sehr zufrieden.

04:15.550 --> 04:16.990
Etwas über 2.

04:17.130 --> 04:18.170
Das ist in Ordnung.

04:18.990 --> 04:20.530
Das sieht alles sehr gut aus.

04:20.530 --> 04:24.870
Ich bin auch einigermaßen gut bewertet worden.

04:25.590 --> 04:26.830
Das freut mich natürlich auch.

04:27.410 --> 04:29.650
Und dann stehen hier, das ist für mich immer viel interessanter nach

04:29.650 --> 04:31.330
Ihren persönlichen Bemerkungen.

04:33.590 --> 04:36.950
Da gibt es dann erstmal, das sind so Hilfsmittel, Arbeitsmaterialien

04:36.950 --> 04:37.530
und Lernplattformen.

04:38.370 --> 04:41.710
Hätten beim Lernen besser unterstützt, denn es kommen hier eine ganze

04:41.710 --> 04:44.310
Reihe Sachen zu den Übungen, zum Aufgabenpool usw.

04:45.730 --> 04:50.710
Dass Ihnen da zu viele Fehler in den Lösungen aufgefallen sind.

04:51.850 --> 04:55.810
Es sind immerhin um die 200 Aufgaben, die Ihnen angeboten werden.

04:56.770 --> 05:01.730
Und insofern, da sind auch mal Fehler drin.

05:02.130 --> 05:06.630
Aber das ist auch etwas, was man erkennen muss, dass nicht alles, was

05:06.630 --> 05:09.870
einem vorgesetzt wird, immer 100% genau so richtig ist.

05:09.930 --> 05:12.610
Wir werden immer damit rechnen müssen, dass es irgendwo Fehler gibt.

05:12.610 --> 05:16.050
Und wenn man merkt, wir haben das hier immer wieder erfahren, Sie

05:16.050 --> 05:19.870
müssen auch, wenn Sie Literatur lesen, auch immer überlegen, ist das

05:19.870 --> 05:21.250
eigentlich richtig, was da steht.

05:21.530 --> 05:23.530
Kritische Haltung zu dem, was Ihnen angeboten wird, ist nicht

05:23.530 --> 05:27.110
schlecht, wobei ich nicht explizit versuche, Fehler einzubauen.

05:27.470 --> 05:29.890
Wobei man auch sagen muss, die Lösungen, die dort stehen, sind

05:29.890 --> 05:33.190
entstanden, selbstorganisierend, von den Tutoren eingebracht worden,

05:33.710 --> 05:38.550
von meinen Mitarbeitern korrigiert oder überprüft worden.

05:38.550 --> 05:42.190
Und dann kann auch mal etwas passieren, dass man nicht alles gesehen

05:42.190 --> 05:42.450
hat.

05:43.130 --> 05:46.530
Dann hätten die Folien etwas selbsterklärender sein müssen, besser

05:46.530 --> 05:47.690
erklärt werden sollen.

05:48.450 --> 05:51.690
Na gut, wenn ich alles auf die Folie raufschreibe, dann brauche ich

05:51.690 --> 05:52.410
die Folie so nicht mehr.

05:52.490 --> 05:54.950
Dann kann ich Ihnen die Folien schicken und dann ist es erledigt.

05:55.590 --> 05:56.570
Das macht auch keinen Sinn.

05:56.670 --> 06:00.070
Ich habe kein Skript, da hätte man eigentlich auch mal ein Buch

06:00.070 --> 06:00.630
schreiben können.

06:01.090 --> 06:03.230
Dann habe ich wirklich immer die Ausarbeitung.

06:03.230 --> 06:07.250
Aber die Bemerkungen, die hier draufstehen, machen zum Teil deutlich,

06:07.570 --> 06:10.810
dass es Personen gibt, die sich nur die Folien und die annotierten

06:10.810 --> 06:14.570
Folien anschauen und sich dann wundern, dass bei den Annotationen auf

06:14.570 --> 06:17.490
den Folien nicht immer alles 100% lesbar ist.

06:18.030 --> 06:22.010
Die Annotationen auf den Folien haben vor allen Dingen den Zweck, dass

06:22.010 --> 06:25.970
die Aufmerksamkeit während der Aufzeichnung auf den Bildschirm

06:25.970 --> 06:28.970
gerichtet wird, auf die Punkte, auf die Stellen, auf die ich mich

06:28.970 --> 06:30.210
gerade inhaltlich beziehe.

06:30.210 --> 06:33.110
Und dann reicht es, wenn ich ein paar Mal einfach was unterstreiche

06:33.110 --> 06:33.910
oder einkringle.

06:34.290 --> 06:35.650
Sie hören ja, was ich dazu sage.

06:35.750 --> 06:36.690
Und das ist dann das Wesentliche.

06:36.770 --> 06:40.030
Wenn man nur die annotierten Folien anschaut, ist häufig die

06:40.030 --> 06:42.110
Annotation nicht unbedingt sehr hilfreich.

06:42.750 --> 06:45.230
Dann steht hier, Folien werden völlig überladen.

06:45.370 --> 06:48.550
Sehen Sie, einerseits selbst erklären, andererseits völlig überladen.

06:48.790 --> 06:52.810
Skript nicht nur aus mathematischen Hieroglyphen bestehen würde.

06:53.270 --> 06:54.650
Kann ich nicht nachvollziehen.

06:54.750 --> 06:56.570
Da hat sich jemand eine andere Vorlesung angeguckt.

06:58.710 --> 07:00.330
Dann auch noch was Positives.

07:00.670 --> 07:01.790
Gutes Forum und so weiter.

07:01.970 --> 07:03.690
Weniger Wiederholungen in den Folien.

07:04.830 --> 07:07.890
Naja, gewisse Dinge werden wiederholt, weil sie ganz wichtig sind.

07:07.930 --> 07:10.850
Wie das Thema der Nebenläufigkeit zum Beispiel, das Pipelining.

07:11.890 --> 07:14.570
Dann stehen hier ganz viele...

07:15.130 --> 07:16.730
Alles top steht hier, das ist schön.

07:17.310 --> 07:19.610
Wenn das im Ilias gewesen wäre...

07:19.610 --> 07:22.590
Naja, also zum Teil der Aufgabenpool ist ja im Ilias.

07:22.590 --> 07:25.930
Die Vorlesung ansonsten im VAB, aber die ergänzen sich ja eigentlich

07:25.930 --> 07:26.610
auch ganz gut.

07:27.670 --> 07:29.630
Und hier sind natürlich wahnsinnig viele Dinge.

07:30.470 --> 07:31.470
Skript und so weiter.

07:32.170 --> 07:33.070
Hier und da noch was.

07:33.430 --> 07:34.770
Hier perfekt ein paar mal.

07:35.210 --> 07:37.970
Also es sind hier einige Dinge drin, nochmal.

07:38.110 --> 07:41.190
Die annotierten Folien lesbar wären, ordentlicher schreiben.

07:41.770 --> 07:43.250
Also da habe ich gerade was zu gesagt.

07:45.090 --> 07:49.030
Und dann Sprachqualität der späteren Aufzeichnung war sehr schlecht.

07:49.290 --> 07:50.210
Das tut mir sehr leid.

07:50.210 --> 07:53.130
Zur Sprachqualität, heute machen wir ein Experiment.

07:53.750 --> 07:56.650
Heute haben wir hier ein neues Kabel, einen neuen Anschluss.

07:56.950 --> 08:00.430
Der hoffentlich dazu führt, dass das richtig aufgezeichnet wird.

08:00.950 --> 08:03.110
Oder dass der Ton besser ist.

08:03.170 --> 08:06.470
Ich habe alle anderen Aufzeichnungen immer mit dem Laptop-internen

08:06.470 --> 08:07.230
Mikrofon gemacht.

08:08.010 --> 08:10.910
Früher habe ich das sehr schön aus dem Saal-Mikro übernehmen können.

08:10.910 --> 08:20.130
Leider war hier bei meinem Laptop jetzt durch den neuen Kontakt, wo

08:20.130 --> 08:24.370
das reingesteckt werden sollte, brauchte ein anderes Format.

08:24.590 --> 08:27.790
Das Windows 8 hat nicht erkannt, dass das nicht direkt aus dem

08:27.790 --> 08:32.130
Mikrofon kommt, sondern über ein Saal-Mikro und konnte das nicht

08:32.130 --> 08:32.750
richtig aufnehmen.

08:33.110 --> 08:38.270
Technische Probleme durch neue Treiber auf den modernen Laptops.

08:38.350 --> 08:39.190
Das war sehr ärgerlich.

08:39.190 --> 08:41.790
Wir hoffen, dass wir das heute das erste Mal wieder im Griff haben.

08:41.930 --> 08:44.730
Wir werden sehen, welche Qualität die Aufzeichnung dann tatsächlich

08:44.730 --> 08:45.010
hat.

08:45.590 --> 08:49.250
Das ist etwas, was mich sehr ärgert, weil ich seit zehn Jahren fast

08:49.250 --> 08:53.910
die Aufzeichnungen mache und fast jedes Mal gibt es irgendwelche

08:53.910 --> 08:54.930
technischen Schwierigkeiten.

08:55.370 --> 08:58.130
Wir sollten es eigentlich im Griff haben und wissen, wie das geht.

08:58.270 --> 09:01.030
Nur dann kommen einem die Hersteller von Laptops in die Quere und

09:01.030 --> 09:03.850
verändern auf einmal die Treiber und man muss sehen, wie man damit

09:03.850 --> 09:04.490
wieder zurechtkommt.

09:04.650 --> 09:05.970
Also das ärgert mich auch.

09:06.890 --> 09:09.250
Dann ist es schön, wenn jemand sagt, die Aufzeichnung war super.

09:10.630 --> 09:11.590
Was steht hier?

09:11.690 --> 09:12.930
Falls nicht, woran lag das?

09:13.310 --> 09:15.290
Also ob man an den Vorlesungen teilgenommen hat.

09:15.390 --> 09:16.370
Besuchte Vorlesung nicht.

09:16.450 --> 09:17.170
Keine Zeit.

09:17.310 --> 09:17.850
Keine Zeit.

09:17.970 --> 09:18.550
Keine Zeit.

09:19.130 --> 09:20.150
Wieso keine Zeit?

09:20.630 --> 09:22.810
Das sollte doch eigentlich im Studienplan mit drin sein.

09:23.250 --> 09:26.650
Also nicht nötig.

09:26.770 --> 09:28.210
Okay, wegen der Aufzeichnung.

09:28.350 --> 09:30.250
Das ist alles soweit in Ordnung.

09:30.370 --> 09:32.810
Dann gibt es noch eine Reihe anderer Bemerkungen.

09:32.810 --> 09:34.750
Hier, ich war nie in der Vorlesung.

09:34.970 --> 09:36.150
Faul und so weiter.

09:39.210 --> 09:42.650
Und da steht also sehr viel hier eben drin.

09:43.990 --> 09:45.130
Vorlesung nicht besuchte.

09:45.150 --> 09:46.230
Aufzeichnung geschaut.

09:46.410 --> 09:47.650
Und so weiter und so weiter.

09:48.090 --> 09:51.170
Ganz viel lag alles da dran.

09:51.290 --> 09:52.510
Zu viele andere Fächer.

09:52.810 --> 09:54.710
Zeitmangel und so weiter.

09:55.150 --> 09:55.970
Also das geht hier.

09:56.870 --> 09:58.190
Gut gefallen hat mir.

09:58.190 --> 09:59.730
Und da steht jetzt immer das gleiche.

10:00.090 --> 10:03.090
Aufzeichnung, Aufzeichnung, Aufzeichnung, Aufzeichnung, Aufzeichnung

10:03.090 --> 10:03.650
und so weiter.

10:04.270 --> 10:06.390
Also ich brauche glaube ich da nicht weiter darauf einzugehen.

10:06.750 --> 10:08.290
Wir haben viele positive Rückmeldungen gemacht.

10:08.430 --> 10:10.310
Es gibt ein paar kritische Bemerkungen, auf die versuchen wir

10:10.310 --> 10:10.890
einzugehen.

10:12.110 --> 10:14.350
Und viel mehr kann ich Ihnen, glaube ich, dazu im Augenblick nicht

10:14.350 --> 10:14.730
sagen.

10:15.130 --> 10:18.650
Ich sehe das immer gerne an, was hier an verbalen Äußerungen kommt,

10:18.750 --> 10:21.310
wenn man da auch mal spezifische Hinweise bekommt.

10:21.490 --> 10:24.710
Aber das ist nicht immer einfach, darauf dann konkret einzugehen.

10:24.710 --> 10:29.170
Also der Aufgabenpool, denke ich, das ist etwas, das wird ja auch

10:29.170 --> 10:30.090
positiv hervorgehoben.

10:30.170 --> 10:32.630
Wird wahrscheinlich noch stärker berücksichtigt werden bei der

10:32.630 --> 10:33.490
Bewertung der Übungen.

10:35.030 --> 10:37.730
Und das ist ein ziemlicher Aufwand, den wir hier treiben.

10:37.870 --> 10:40.010
Ist allerdings auch durch Studiengebühren finanziert worden.

10:40.710 --> 10:44.930
Und ich hätte eigentlich gedacht, dass da noch viel mehr an positiven

10:44.930 --> 10:46.290
Rückmeldungen dazu kommen würde.

10:46.890 --> 10:50.610
Aber ja, da kommt schon eine Frage mit Nuketours.

10:50.670 --> 10:52.870
Die Nuketours werden auch mehrfach positiv erwähnt worden.

10:52.870 --> 10:55.450
Wann ist eigentlich die zweite Saalübung bzw.

10:55.690 --> 10:56.810
das Klausurtraining?

10:57.910 --> 10:58.830
Was bieten Sie alles an?

10:58.890 --> 11:01.690
Zweite Saalübung weiß ich, sollte nächste Woche Mittwoch sein, glaube

11:01.690 --> 11:02.330
ich.

11:02.430 --> 11:02.590
Bitte?

11:03.970 --> 11:04.450
Ja.

11:06.230 --> 11:06.850
Am Montag?

11:07.610 --> 11:08.550
Da halte ich eine Vorlesung.

11:09.410 --> 11:10.630
Das müssen wir noch klären.

11:10.730 --> 11:12.050
Also entweder Montag oder Mittwoch.

11:12.330 --> 11:12.730
Nächste Woche.

11:14.070 --> 11:16.010
Aber dann ist also Montag und Mittwoch auf jeden Fall.

11:17.670 --> 11:20.690
Ok, das geht dann ansonsten nicht anders.

11:20.690 --> 11:24.750
Und wie gesagt, hier steht tolle Organisationen, Fragenpool,

11:24.870 --> 11:26.710
Forumsbetreuung, sowas höre ich natürlich gerne.

11:27.650 --> 11:28.150
Und so weiter.

11:28.290 --> 11:29.530
Da ist also sehr viel hier drin.

11:32.630 --> 11:35.630
Der zweite Teil der Vorlesung war besser, damit praxisrelevant.

11:36.230 --> 11:40.670
Da steht es mir klar, dass manche mit den formalen Modellen nicht so

11:40.670 --> 11:41.830
zurechtkommen.

11:42.530 --> 11:45.190
Ich glaube, ich kann das dann auch hier zumachen.

11:46.370 --> 11:49.210
Also Vorlesesaufzeichnung taucht hier immer wieder auf, was sehr gut

11:49.210 --> 11:49.490
ist.

11:50.310 --> 11:53.570
Was nicht so gut war, ist hier die teilweise unleserliche Schrift des

11:53.570 --> 11:54.250
Professors.

11:54.610 --> 11:55.610
Ok, das ist halt so.

11:57.190 --> 12:00.930
Ich versuche besser zu schreiben, aber versuchen Sie mal mit so einem

12:00.930 --> 12:03.290
Stift auf dem Bildschirm sehr leserlich zu schreiben.

12:05.250 --> 12:06.510
Gibt es dazu noch Fragen?

12:07.890 --> 12:08.330
Revelation.

12:09.330 --> 12:10.770
Haben Sie noch irgendwelche Bemerkungen dazu?

12:11.510 --> 12:11.950
Nicht?

12:12.130 --> 12:15.550
Ok, dann mache ich das zu und komme zur Vorlesung.

12:15.550 --> 12:18.910
Da haben wir uns letztes Mal mit Speichern beschäftigt und sind hier

12:18.910 --> 12:19.970
schon ziemlich weit gekommen.

12:20.390 --> 12:26.310
Ich hatte Ihnen hier diese Kennwerte der Speicher dargestellt, die in

12:26.310 --> 12:28.230
sehr unterschiedlichen Bereichen liegen.

12:29.110 --> 12:33.590
Das Wesentliche waren hier die Grenze bei den Zugriffszeiten von den

12:33.590 --> 12:36.430
Halbleiterspeichern zu den Leerspeichern.

12:36.590 --> 12:38.930
Das hat auch etwas mit Halbleitern zu tun, aber in einer anderen Art

12:38.930 --> 12:39.930
und Organisation.

12:39.930 --> 12:43.930
Dann Plattenspeicher, Hintergrundspeicher mit also deutlich um

12:43.930 --> 12:45.730
Größenordnung größeren Zugriffszeiten.

12:46.110 --> 12:48.770
Das ist der wesentliche Punkt, dass man dann eine effiziente

12:48.770 --> 12:54.550
Organisation der Dateien auf diesen Hintergrundspeichern tatsächlich

12:54.550 --> 12:55.250
auch haben muss.

12:56.010 --> 12:59.630
Und dann geht das weiter mit dem Cache-Speicher.

12:59.730 --> 13:03.870
Da habe ich Ihnen die Art der Abspeicherung, Art des Zugriffs, Art des

13:03.870 --> 13:05.030
Schreibens vorgestellt.

13:05.030 --> 13:08.930
Wir hatten da dieses Directly Mapped, das Assoziative angeschaut.

13:09.030 --> 13:11.270
Ich hatte Ihnen was erzählt über Write-Through, Write-Back.

13:12.070 --> 13:16.030
Also da ging es um Konsistenz von Cache und Originalspeicher.

13:16.710 --> 13:19.350
Ich habe Ihnen dann noch etwas über Magnetplattenspeicher erzählt,

13:19.510 --> 13:22.210
über diese anderen Speicherelemente.

13:22.290 --> 13:27.670
USB-Speichersticks, Solid-State-Disks, Magnetbandspeicher und

13:27.670 --> 13:29.610
schließlich noch über optische Plattenspeicher.

13:29.610 --> 13:33.870
Virtuelles Speicher in der Cloud, ganz wichtiges Thema, wenn Sie

13:33.870 --> 13:35.050
Speicher nutzen wollen.

13:35.730 --> 13:40.050
Und dann noch kurz etwas zu Smartcards, ganz andere Größenordnung von

13:40.050 --> 13:41.090
Rechnern.

13:41.250 --> 13:46.790
Und als letztes kamen dann die Netze, einige Informationen dazu.

13:46.910 --> 13:48.150
Ich habe die Ihnen klassifiziert.

13:48.650 --> 13:52.370
Ich habe Ihnen ein bisschen Informationen gegeben zum Internet, was

13:52.370 --> 13:54.450
eigentlich der Hintergrund des Internets ist.

13:54.450 --> 13:58.130
Und damit kommen wir zur ersten Folie, die neu ist.

13:58.370 --> 13:59.410
Und das ist diese hier.

14:00.710 --> 14:03.050
Damit machen wir also jetzt hier weiter.

14:03.870 --> 14:07.550
Und ich sage Ihnen kurz etwas zum Adressraum.

14:08.050 --> 14:13.010
Wesentlich war ja, dass wir einen globalen Adressraum haben.

14:13.070 --> 14:16.330
Wir können jeden Knoten adressieren in irgendeiner Form.

14:16.330 --> 14:21.990
Und da war es eben so, dass zunächst mal, also in der Originalversion,

14:22.570 --> 14:26.830
zum Zeitpunkt, als das Ganze entworfen wurde, in den 70er Jahren, da

14:26.830 --> 14:31.230
hat man 32-Bit-Adressen, um damit alle Knoten adressieren zu können.

14:31.310 --> 14:33.710
Zu Anfang hatte man so eine Handvoll Rechner, da war das natürlich

14:33.710 --> 14:35.090
kein Problem, oder auch ein paar hundert.

14:35.850 --> 14:39.470
Aber 2 hoch 32 Adressen reichen heutzutage nicht mehr aus.

14:40.330 --> 14:43.330
Früher waren die noch systematisch aufgeteilt, ist alles etwas

14:43.330 --> 14:44.230
aufgeweicht worden.

14:44.230 --> 14:47.110
Man hat also Glassless Inter-Domain Routing.

14:48.610 --> 14:52.510
Und das, was Sie also hier sehen, diese Zahlen, sind eben gerade diese

14:52.510 --> 14:56.670
4 Bytes, die zusammen 32 Bit ausmachen, die oft so numerisch

14:56.670 --> 14:57.490
hingeschrieben werden.

14:57.830 --> 15:03.070
Sie wissen, dass man die über das Domain-Name-System auch in

15:03.070 --> 15:07.230
textueller Form hinschreibt, sodass man die auch lesen kann und sich

15:07.230 --> 15:07.910
merken kann.

15:08.290 --> 15:09.550
Niemand merkt sich normalerweise.

15:09.590 --> 15:11.470
Ich kann mir keine Zahlen in der Form merken.

15:11.470 --> 15:15.790
Aber wenn ich dieses Domain-Name-System habe, kann ich mir etwas

15:15.790 --> 15:16.090
merken.

15:16.150 --> 15:19.130
Das Problem ist nur, wenn Ihr Domain-Name-Server nicht zur Verfügung

15:19.130 --> 15:24.290
steht, wissen Sie nicht, wie der Name, der hier steht, umgesetzt

15:24.290 --> 15:26.690
werden kann auf so eine Adresse.

15:27.450 --> 15:30.650
Und wenn das System das nicht weiß, kann auch nichts verschickt

15:30.650 --> 15:31.050
werden.

15:31.510 --> 15:35.250
Wenn Sie allerdings diese numerische Adresse kennen, können Sie auch

15:35.250 --> 15:36.970
ohne einen Domain-Name-Server etwas verschicken.

15:36.970 --> 15:42.250
Das ist also wichtig für die Lesbarkeit, für die Nutzbarkeit dieser

15:42.250 --> 15:45.150
ganzen Internet-Adressen.

15:46.010 --> 15:50.450
Das Ganze ist erweitert worden, mittlerweile auf 128 Bit, sodass das

15:50.450 --> 15:53.410
also reicht damit für die nächste Zukunft aus.

15:53.510 --> 15:56.590
Das sind so mehrere tausend Adressen pro Quadratzentimeter

15:56.590 --> 15:57.230
Erdoberfläche.

15:57.790 --> 15:59.890
Das dürfte vielleicht gerade so reichen.

15:59.890 --> 16:03.110
Aber pro Quadratzentimeter Erdoberfläche, stellen Sie sich vor, Sie

16:03.110 --> 16:08.470
haben ein Haus mit 100 Stockwerken und in jeder Wohnung haben Sie

16:08.470 --> 16:11.990
hunderte von Einzelkomponenten, die adressiert werden müssen.

16:12.490 --> 16:14.890
Dann ist das eine unheimliche Masse von Einzeladressen.

16:15.890 --> 16:17.090
Dass es damit geht, muss man gucken.

16:17.510 --> 16:20.590
Außerdem sind da nicht nur Erde, sondern auch Mond und Mars und noch

16:20.590 --> 16:22.670
irgendetwas, die sollen auch mit eingeschlossen werden.

16:22.670 --> 16:26.790
Die sind in diesem Adresssystem hier tatsächlich vorgesehen, dass man

16:26.790 --> 16:32.550
also wirklich galaktisch hier Adressen verteilen kann.

16:32.970 --> 16:34.510
Also zunächst mal reicht uns das aus.

16:34.950 --> 16:37.570
Aber das ist nur eine Sache, dass man einen größeren Adressraum hat.

16:37.910 --> 16:42.990
Das andere ist, dass man die Header, also ich hatte Ihnen gesagt, wir

16:42.990 --> 16:46.310
haben unsere Datagramme, da sind also irgendwelche Daten drin.

16:46.650 --> 16:50.350
Dann habe ich hier erst so einen TCP-Header, dann habe ich einen IP

16:50.350 --> 16:50.750
-Header.

16:50.750 --> 16:56.590
Und dieser IP-Header hier, der von IPv6 kommt, der ist im Rahmen

16:56.590 --> 17:03.450
dieser Umwandlung von IPv4 auf IPv6 etwas verbessert worden, ist

17:03.450 --> 17:07.550
flexibler geworden und ist also in der Standardversion deutlich

17:07.550 --> 17:07.890
schneller.

17:09.650 --> 17:11.810
Also da sind einige weitere Dinge noch dabei.

17:12.910 --> 17:16.990
IPv6 ist inzwischen relativ breit eingeführt, aber die beiden

17:16.990 --> 17:20.970
Protokolle sind im Augenblick nebeneinander im Netz verfügbar.

17:21.630 --> 17:24.350
Und wenn Sie sich einen neuen Rechner kaufen, haben Sie normalerweise

17:24.350 --> 17:26.110
da auch IPv6-Adressen drin.

17:26.510 --> 17:28.730
Also der Umstieg ist bereits auf dem Weg.

17:29.490 --> 17:30.870
Jetzt kurz zu den Protokollen.

17:30.950 --> 17:32.150
Das kann nur ganz kurz sein.

17:32.670 --> 17:35.290
Wir haben das Transmission Control Protokoll, das ist also das eine

17:35.290 --> 17:37.850
eisenwesentliche Teil, der das Internet ausmacht.

17:37.850 --> 17:42.630
Und hier geht es darum, eine logische, verlässliche Verbindung

17:42.630 --> 17:44.550
zwischen Sender und Empfänger herzustellen.

17:44.670 --> 17:50.810
Also das ist hier mein Sender, das ist der Empfänger und der soll

17:50.810 --> 17:52.310
jetzt hier irgendwie verbunden werden.

17:52.370 --> 17:57.790
Das ist eine logische Verbindung und zwar von irgendeinem Port aus in

17:57.790 --> 17:59.010
irgendeinen anderen Port.

17:59.170 --> 18:03.990
Also jeder dieser Stellen hier ist ein Port, also eine Steckdose, wo

18:03.990 --> 18:05.450
so ein Kabel reingesteckt werden kann.

18:05.450 --> 18:08.030
Und im Prinzip über diese Ports kann man miteinander reden.

18:08.190 --> 18:11.270
Wer da miteinander redet, das sind irgendwelche Anwendungen, hier eine

18:11.270 --> 18:14.730
Anwendung A, die dort mit der Anwendung A' vielleicht redet.

18:15.030 --> 18:20.150
Die haben bestimmte Kanäle oder bestimmte Tore über die, die halt

18:20.150 --> 18:21.530
miteinander reden können.

18:22.070 --> 18:27.330
Es gibt einige Standarddienste wie FDP, HTTP, Hello, Echo und so

18:27.330 --> 18:30.130
weiter, die festen Ports zugeordnet sind.

18:30.250 --> 18:33.270
Es gibt andere, die sind für bestimmte Dinge auch schon reserviert und

18:33.270 --> 18:34.030
andere sind frei.

18:34.030 --> 18:37.450
Die können Sie dann frei wählen und können dort dann beliebig

18:37.450 --> 18:40.850
Verbindungen zwischen Programmen herstellen.

18:40.950 --> 18:45.010
Das Ganze haben Sie, wenn Sie Java etwas fortgeschritten programmiert

18:45.010 --> 18:47.730
haben, dort schon mal gemacht, wenn Sie ein verteiltes System dort

18:47.730 --> 18:48.490
implementiert haben.

18:49.970 --> 18:52.690
Es steht hier drin, eine logische, verlässliche Verbindung.

18:52.890 --> 18:57.090
Das heißt, die konkrete Verbindung in einem Netz wird dadurch noch gar

18:57.090 --> 18:58.510
nicht festgelegt.

18:59.250 --> 19:04.370
Das kann durchaus unterschiedlich sein, je nachdem, wo etwas hinlaufen

19:04.370 --> 19:04.610
soll.

19:04.710 --> 19:09.110
Und es ist so, wenn Sie hier den Sender haben und hier irgendwo den

19:09.110 --> 19:12.390
Empfänger und zwischendrin sind natürlich alle möglichen anderen

19:12.390 --> 19:17.370
Knoten da, die hier auf dem Weg eventuell durchlaufen werden, viele

19:17.370 --> 19:18.190
verschiedene Möglichkeiten.

19:19.190 --> 19:22.690
Dann ist die Frage, wenn ich hier jetzt ein Paket rausschicke, wann

19:22.690 --> 19:23.950
schicke ich denn das nächste Paket?

19:23.950 --> 19:26.030
Warte ich jetzt, es soll verlässlich sein.

19:26.110 --> 19:33.450
Verlässlich heißt, es muss dem Sender bewusst werden, oder der muss

19:33.450 --> 19:36.190
die Informationen darüber kriegen, ob das, was er hier losgeschickt

19:36.190 --> 19:39.310
hat, tatsächlich irgendwann auch dort angekommen ist.

19:39.790 --> 19:43.290
Das heißt, es muss eine Information von dort wieder zurückwandern,

19:43.730 --> 19:44.490
zurück zum Sender.

19:45.910 --> 19:50.970
Das heißt, ich habe einen sogenannten Roundtrip, also einen Umlauf,

19:51.050 --> 19:53.710
einen Durchlauf hin zum Empfänger und wieder zurück.

19:54.930 --> 19:58.110
Und damit es verlässlich ist, muss ich diese Bestätigung haben, das

19:58.110 --> 19:59.050
Paket ist angekommen.

19:59.850 --> 20:01.650
Und wann schicke ich jetzt das nächste Paket los?

20:01.710 --> 20:04.550
Schicke ich das erst los, wenn ich die Bestätigung dafür habe, dass

20:04.550 --> 20:05.750
dieses Paket angekommen ist?

20:06.470 --> 20:09.810
Oder ich habe ja hier vor meinem Sender eine ganz lange Latte von

20:09.810 --> 20:12.170
irgendwelchen Paketen, die ich schicken möchte, die in verschiedene

20:12.170 --> 20:15.010
Pakete aufgeteilt sind, schicke ich einfach schon ein paar los.

20:15.110 --> 20:18.710
Und genau so ist das, dass man einfach schon eine Reihe von Paketen

20:18.710 --> 20:19.270
losschickt.

20:19.750 --> 20:23.050
Und das, was ich hier animiert habe, soll Folgendes andeuten.

20:23.130 --> 20:26.510
Ich habe hier den Strom von Paketen, das ist also mein Datenstrom

20:26.510 --> 20:29.270
hier, das sind die einzelnen Datenpakete.

20:29.810 --> 20:34.690
Und jetzt schicke ich immer bei diesem Bewegen, heißt das, das

20:34.690 --> 20:36.310
vorderste Paket wird losgeschickt.

20:36.310 --> 20:40.210
Und das Ganze geht immer in dem Augenblick weiter, wo eine Bestätigung

20:40.210 --> 20:42.690
für das letzte Paket eingetroffen ist.

20:43.050 --> 20:45.950
Das heißt, mit jeder Bestätigung für das Paket, das ich in der

20:45.950 --> 20:46.550
Vergangenheit...

20:49.270 --> 20:52.830
Ich muss also warten, bis das Paket, das hier hinten steht, das ist

20:52.830 --> 20:53.890
irgendwann losgeschickt worden.

20:54.530 --> 20:57.390
Die Bestätigung muss gekommen sein, damit ich dann irgendwann wieder

20:57.390 --> 20:58.290
das nächste schicken kann.

20:58.410 --> 21:00.350
Aber ich schicke eben mehrere schon mal los.

21:02.310 --> 21:05.690
Und zwar versucht man, dieses Fenster möglichst groß zu machen.

21:05.690 --> 21:10.170
Nun ist klar, wenn das da groß ist, dann schicken alle Knoten ganz

21:10.170 --> 21:12.990
viele Pakete los, in kurzen Abständen.

21:13.050 --> 21:14.070
Und dann wird das Netz ganz voll.

21:14.790 --> 21:17.590
Und dann sind irgendwann an irgendwelchen Knoten die Puffer vielleicht

21:17.590 --> 21:17.910
voll.

21:18.390 --> 21:20.870
Da kann nicht genügend zwischengespeichert werden, es gibt irgendwo

21:20.870 --> 21:22.170
Verzögerungen in der Verarbeitung.

21:22.610 --> 21:24.650
Und dann geht ein Paket irgendwie verloren.

21:26.610 --> 21:28.550
Das heißt, es kommt ein Paket nicht an.

21:29.550 --> 21:32.170
Und wenn dann so ein Paket hier nicht ankommt, dann muss es nochmal

21:32.170 --> 21:32.830
geschickt werden.

21:32.830 --> 21:35.330
Und dann schickt man alles von dem Zeitpunkt an nochmal.

21:37.150 --> 21:39.570
Jetzt will ich natürlich dafür sorgen, dass möglichst wenig Fehler

21:39.570 --> 21:40.030
auftreten.

21:40.510 --> 21:44.290
Und deswegen ist das so, dass man diese Fenstergröße dynamisch

21:44.290 --> 21:47.530
aushandelt zwischen Sender und Empfänger.

21:48.410 --> 21:51.710
Und dann wird einfach geguckt, abhängig davon, wann Fehler auftreten,

21:52.310 --> 21:55.050
wird die Fenstergröße reduziert.

21:55.150 --> 21:58.430
Wenn keine Fehler auftreten, wird das Fenster immer größer gemacht.

21:58.670 --> 22:00.530
Wenn Fehler auftreten, wird es wieder verkleinert.

22:00.930 --> 22:03.990
Und so habe ich, wenn ich mir anschaue, wie so die

22:03.990 --> 22:07.730
Übertragungsbandbreite ist bei TCP, dann geht die mal hoch, und dann

22:07.730 --> 22:09.910
geht sie wieder runter, und dann geht sie wieder hoch, und dann geht

22:09.910 --> 22:12.150
sie wieder runter, und dann geht sie wieder hoch, geht sie wieder

22:12.150 --> 22:14.910
runter, geht sie schnell hoch und langsam hoch und so weiter.

22:14.990 --> 22:17.310
Sie haben immer solch ein Muster da drin.

22:17.770 --> 22:20.850
Schauen Sie sich mal auf Ihrem Rechner die, wenn Sie den Taskmanager

22:20.850 --> 22:24.390
aufrufen und dort visualisieren, wie die Leistung aktuell ist, dann

22:24.390 --> 22:29.170
sehen Sie genau solche Kurven dort für die Übertragung von Daten auf

22:29.170 --> 22:30.270
dem Netz.

22:31.070 --> 22:37.430
Also, ich könnte Ihnen das einfach mal ganz kurz zeigen, indem ich den

22:37.430 --> 22:43.670
Taskmanager aufrufe, und dann werden Sie gleich sehen, dass hier, wo

22:43.670 --> 22:48.410
ich jetzt gar nicht so Plan gehabt habe, mal gucken, ob da gerade was

22:48.410 --> 22:49.650
läuft über das Netz.

22:49.650 --> 22:53.910
Dann habe ich hier die Leistung, und dort sehen Sie jetzt hier die

22:53.910 --> 23:00.030
Leistung, da sehen Sie zum Beispiel WiFi, da sehen Sie jetzt hier

23:00.030 --> 23:01.870
solche Bursts, da sieht man nicht sehr gut etwas.

23:02.170 --> 23:04.510
Also schauen Sie sich ein anderes Beispiel an, wenn Sie eine große

23:04.510 --> 23:09.530
Datei übertragen, also wenn ich meine Vorlesung, die Aufzeichnung

23:09.530 --> 23:13.850
übertrage auf einen anderen Rechner, dann habe ich genau dieses

23:13.850 --> 23:17.970
Muster, was ich gerade eben versucht habe, hier zu skizzieren, also so

23:17.970 --> 23:18.870
eine Kurvenverlaufung.

23:19.690 --> 23:24.410
Also, das Wesentliche ist die dynamische Aushandlung zunächst mal der

23:24.410 --> 23:29.510
Fenstergröße zwischen Sender und Empfänger, und dann wird das Ganze

23:29.510 --> 23:32.170
angepasst, je nach Leistungsfähigkeit des Netzes.

23:33.370 --> 23:34.210
So, das ist TCP.

23:36.950 --> 23:43.430
Da bestimme ich also die Größe, sodass ich gerade ohne Fehler noch

23:43.430 --> 23:44.630
vernünftig kommunizieren kann.

23:46.370 --> 23:49.150
Interessanter Algorithmus, vor allem das Ganze geschieht eben nicht

23:49.150 --> 23:50.210
zentral gesteuert.

23:50.510 --> 23:52.090
Nochmal zurück hier zu meinen Bildern.

23:52.530 --> 23:55.510
Der Verkehr im Netz wird nicht zentral gesteuert, sondern das

23:55.510 --> 23:58.270
geschieht ganz lokal durch die einzelnen Knoten.

23:58.610 --> 24:03.450
Der Sender, der etwas zu irgendwo hinschicken will, bekommt mit, ob

24:03.450 --> 24:05.810
Pakete nicht ankommen.

24:06.250 --> 24:09.510
Wenn Pakete nicht ankommen, wird einfach der Verkehr reduziert.

24:09.510 --> 24:12.030
Das machen alle Knoten lokal.

24:12.230 --> 24:15.490
Keine globale Steuerung, ein rein selbstorganisierendes Netz.

24:16.550 --> 24:20.570
Richtet sich natürlich nach ganz klaren Regeln, die für alle Knoten

24:20.570 --> 24:24.370
vorgegeben sind, aber es ist ein selbstorganisierendes System, das

24:24.370 --> 24:27.970
größte selbstorganisierende technische System, das es weltweit gibt.

24:28.510 --> 24:31.650
Das Internet funktioniert eigentlich schon recht verlässlich, es gibt

24:31.650 --> 24:32.970
keine zentrale Steuerung.

24:33.870 --> 24:37.950
Also, dazu kommt dann, wie läuft das eigentlich, wenn ich sagte, wir

24:37.950 --> 24:39.870
haben hier unseren Sender, da haben wir den Empfänger.

24:40.890 --> 24:43.970
Und hier unten ist es angedeutet, hier Sender und Empfänger.

24:44.890 --> 24:48.830
Und jetzt ist die Frage, wie logische Verbindung liegt irgendwo?

24:50.190 --> 24:52.590
Wie sieht die physikalische Verbindung aus?

24:52.670 --> 24:53.830
Wo läuft ein Paket tatsächlich?

24:53.830 --> 25:01.670
Das Internetprotokoll ist nun das Protokoll auf der Netzwerkschicht

25:01.670 --> 25:02.990
oder Vermittlungsschicht.

25:03.150 --> 25:08.110
Dieses Protokoll hat die Aufgabe, einen unzuverlässigen,

25:08.230 --> 25:11.030
verbindungslosen Versand von Datenpaketen zu gewährleisten.

25:11.730 --> 25:12.770
Warum unzuverlässig?

25:13.110 --> 25:15.970
Das heißt nicht, dass dieses Protokoll von vornherein unzuverlässig

25:15.970 --> 25:16.110
ist.

25:16.110 --> 25:20.490
Das Protokoll ist schon verlässlich, aber das Internetprotokoll

25:20.490 --> 25:26.250
überprüft nicht, ob Datenpakete, die hier irgendwo auf dem Weg

25:26.250 --> 25:30.610
angekommen sind, die hier also angekommen sind, die hier

25:30.610 --> 25:33.790
weitergeschickt werden, ob die tatsächlich irgendwann auch da

25:33.790 --> 25:34.470
ankommen.

25:34.490 --> 25:35.750
Das ist IP völlig egal.

25:36.290 --> 25:40.430
IP guckt nur, wie zum Beispiel hier bei einem solchen Knoten, es kommt

25:40.430 --> 25:45.130
hier irgendein Paket an, es soll dorthin, über welchen Weg schicke ich

25:45.130 --> 25:46.690
jetzt dieses Paket weiter?

25:47.150 --> 25:52.910
Was ist der sinnvollste nächste Hop auf diesem Weg zum Ziel?

25:53.610 --> 25:59.130
Und das ist die Aufgabe von IP, für jeden Hop festzustellen, was ist

25:59.130 --> 26:04.830
der bestmögliche nächste Punkt auf der Verbindung von dem Sender zu

26:04.830 --> 26:09.050
dem Empfänger, sodass das Ganze möglichst vernünftig läuft.

26:09.750 --> 26:15.970
Und dazu gibt es also Routing-Tabellen, wo angegeben wird, jeweils für

26:15.970 --> 26:17.870
jedes Ziel.

26:18.050 --> 26:21.030
Ich habe hier irgendwie ein Ziel Z oder Ziel E, hatte ich immer

26:21.030 --> 26:21.410
gesagt.

26:21.730 --> 26:27.650
Da steht dann für diesen Knoten, was ist der nächste Link, der nächste

26:27.650 --> 26:32.630
Hop, der nächste Knoten, wenn ich zum Knoten E will, irgendwo weiter

26:32.630 --> 26:36.290
hinten, welcher Knoten, nächster Nachbarknoten liegt auf dem kürzesten

26:36.290 --> 26:40.390
Pfad von diesem Knoten hier zu dem Knoten E?

26:40.970 --> 26:43.350
Das kann eben der sein, kann der sein, kann der sein.

26:43.970 --> 26:46.930
Und das Wort kürzeste kann unterschiedliche Bedeutungen haben.

26:47.470 --> 26:50.590
Das kann sein, der kürzeste Pfad kann sich beziehen auf die Zeit, kann

26:50.590 --> 26:57.910
sich beziehen auf die Datenrate, die Bandbreite des Ganzen, kann sich

26:57.910 --> 27:00.450
beziehen auf Zuverlässigkeit und ähnliche Dinge, unterschiedliche

27:00.450 --> 27:01.390
Dinge.

27:01.630 --> 27:07.590
Und was hier passiert ist, dass hier mit einem Verfahren, also wie

27:07.590 --> 27:12.690
gesagt, die Routing-Strategien festgelegt werden.

27:13.150 --> 27:17.270
Es gibt ja ein sogenanntes Open Shortest Path First, wo kürzeste Wege

27:17.270 --> 27:20.790
in einem sich ständig verändernden Netz bestimmt werden.

27:20.790 --> 27:25.670
Und da wird hier also ein Weg gesucht und es kann sein, dass das

27:25.670 --> 27:30.070
nächste Paket einen völlig anderen Weg wählt, aufgrund von dynamischen

27:30.070 --> 27:31.670
Veränderungen an dem Knoten.

27:31.810 --> 27:33.810
Und da kann es auch sein, dass sie dann noch, ups, da sollte

27:33.810 --> 27:36.870
eigentlich noch etwas auftauchen, da scheint nur die Wahl.

27:37.830 --> 27:41.550
Und da muss man auch aufpassen, dass man nicht irgendwo mal

27:41.550 --> 27:42.970
zwischendurch in der Schleife läuft.

27:43.470 --> 27:47.290
Auch dafür gibt es sehr viele Randbedingungen, die hier mit

27:47.290 --> 27:48.350
eingehalten werden müssen.

27:48.350 --> 27:53.170
Also IP sorgt dafür, dass die Entscheidung treffen kann, wohin muss

27:53.170 --> 27:56.830
ein Paket als nächstes weitergeschickt werden, auf dem Weg zum

27:56.830 --> 27:57.470
Empfänger.

27:58.090 --> 28:00.850
Und dann gibt es ja auch noch Fehlerprotokolle, die also feststellen,

28:00.970 --> 28:03.270
da ist ein Fehler aufgetreten, da werden Meldungen zurückgeschickt an

28:03.270 --> 28:04.850
den Sender eines Pakets.

28:05.270 --> 28:07.610
Das geht aber deutlich über das hinaus, was ich hier erzählen kann.

28:08.090 --> 28:10.850
Nähere Einzelheiten dazu hören Sie in meiner Vorlesung über

28:10.850 --> 28:14.330
Algorithmen in Internetanwendung.

28:14.910 --> 28:19.690
Dann gibt es noch ein Protokoll, also parallel zu TCP, haben wir UDP,

28:20.030 --> 28:24.330
das ist also auf der gleichen Schicht wie TCP, das ist also alternativ

28:24.330 --> 28:28.710
zu TCP das UDP, das User Datagram Protokoll.

28:29.190 --> 28:34.430
Und das ist dafür da, also hier unten drunter ist IP und dann habe ich

28:34.430 --> 28:37.630
hier das UDP und das sorgt dafür, dass im Prinzip die gleichen

28:37.630 --> 28:40.750
Eigenschaften, die ich in IP habe, durchgereicht werden bis zur

28:40.750 --> 28:41.230
Anwendung.

28:41.230 --> 28:44.990
Die gleichen Eigenschaften heißt, unzuverlässig, es wird nicht auf

28:44.990 --> 28:48.390
Verlässlichkeit geachtet, ich baue keine logische Verbindung auf,

28:48.930 --> 28:52.330
sondern ich schicke einfach ein Paket los und es wird am Empfänger,

28:52.430 --> 28:55.150
wenn es ankommt, richtig zugeordnet aufgrund der Informationen im

28:55.150 --> 28:56.570
Header dieses Datagrams.

28:57.490 --> 28:58.430
Warum macht man das?

28:59.110 --> 29:03.710
Weil man in einigen Anwendungen gerne folgenden Effekt vermeiden

29:03.710 --> 29:06.610
möchte, ich habe hier viele Datagramme losgeschickt und hier ist

29:06.610 --> 29:07.530
irgendwie eine Lücke.

29:08.290 --> 29:12.530
Dann muss bei TCP ab der Stelle, selbst wenn das hier alles angekommen

29:12.530 --> 29:15.510
ist, muss ab der Stelle nochmal neu verschickt werden.

29:16.090 --> 29:19.010
Das heißt, ich habe diese Schwankungen in der Bandbreite, in der

29:19.010 --> 29:24.330
Übertragungsbandbreite, wenn ich TCP-gesteuerte Datenübertragung habe.

29:25.250 --> 29:27.610
Wenn ich Multimedia-Anwendungen mache, möchte ich möglichst eine

29:27.610 --> 29:29.690
gleichmäßige Datenrate haben.

29:30.790 --> 29:33.210
Und ich kann bei Multimedia, also bei Audio-Anwendungen zum Beispiel,

29:33.570 --> 29:36.790
durchaus tolerieren, wenn dort mal ein Paket fehlt, das macht gar

29:36.790 --> 29:37.050
nichts.

29:37.410 --> 29:40.490
Dann habe ich einen kurzen Aussetzer in der Audio-Übertragung, aber

29:40.490 --> 29:44.690
wenn insgesamt die Übertragungsrate runtergeht, wie bei TCP das

29:44.690 --> 29:46.490
passieren kann, habe ich ein Problem.

29:47.050 --> 29:50.370
Und deswegen macht man gerade in solchen Multimedia-Anwendungen, setzt

29:50.370 --> 29:54.990
man UDP ein und muss dann die ganzen Aspekte der Verlässlichkeit in

29:54.990 --> 29:57.810
der Anwendungsschicht machen, also im Anwendungsprogramm.

29:57.810 --> 30:01.850
Dann ist das Anwendungsprogramm auf einmal verantwortlich für alle

30:01.850 --> 30:03.870
Aspekte von Verlässlichkeit.

30:04.310 --> 30:07.550
Das ist also das, was man dazu wissen muss.

30:07.590 --> 30:10.670
UDP ist also ganz wichtig, gerade für solche Multimedia-Anwendungen.

30:11.070 --> 30:14.210
Da gibt es auch noch weitere Varianten, die aber jetzt über das

30:14.210 --> 30:16.210
hinausgehen, was wir hier betrachten können.

30:16.730 --> 30:19.830
Dann gibt es zum World Wide Web noch ein paar Informationen.

30:20.070 --> 30:22.790
Sie wissen, World Wide Web ist ein Dienst im Internet.

30:22.790 --> 30:27.770
Das Internet ist wesentlich älter, von Anfang der 70er Jahre.

30:29.350 --> 30:32.610
Und das World Wide Web ist seit Anfang der 90er Jahre da.

30:32.730 --> 30:36.130
Da geht es halt eigentlich nur darum, dass man Dokumente in einer

30:36.130 --> 30:37.330
einheitlichen Form beschreibt.

30:37.430 --> 30:42.270
Sie wissen das, HTML, ich habe hier irgendwelche strukturierte

30:42.270 --> 30:42.970
Beschreibungen.

30:43.350 --> 30:46.650
Und ich kann in dieser strukturierten Beschreibung einen sogenannten

30:46.650 --> 30:50.330
Link angeben, der auf ein Dokument oder auf eine Stelle in einem

30:50.330 --> 30:51.650
anderen Dokument verweisen kann.

30:52.770 --> 30:56.090
Hypertext heißt das, ich habe diese Links auf andere Dokumente.

30:56.850 --> 31:00.130
Und ich habe eine Standardart, wie ich den Inhalt des Dokuments

31:00.130 --> 31:00.870
beschreibe.

31:01.310 --> 31:07.710
Und gebe außerdem an, etwas darüber, wie das Ganze dargestellt werden

31:07.710 --> 31:07.990
soll.

31:08.730 --> 31:14.650
Und ich habe also einerseits, wie gesagt, diese

31:14.650 --> 31:15.850
Dokumentenbeschreibung.

31:17.870 --> 31:20.510
Und jetzt kann ich auf beliebige andere Dokumente zugreifen.

31:20.710 --> 31:23.150
Ich kann sie auch in einer standardisierten Form darstellen.

31:23.890 --> 31:27.230
Dadurch, dass ich den HTML-Code geeignet interpretiere.

31:28.110 --> 31:31.590
Ich habe eindeutige Adressen, die sogenannten Uniform Resource

31:31.590 --> 31:32.290
Locators.

31:33.090 --> 31:35.650
Da will ich jetzt nicht drauf gehen, weil mir die Zeit jetzt im

31:35.650 --> 31:36.170
Augenblick fehlt.

31:36.170 --> 31:41.190
Und wenn ich sowas aufrufe, klicke ich hier auf diesen Link oder tippe

31:41.190 --> 31:46.810
sowas ein in die Adresszeile in meinem Browser.

31:47.330 --> 31:51.490
Dann rufe ich das Hypertext Transfer Protokoll auf, das das Protokoll

31:51.490 --> 31:56.210
ist, um einen Zugriff auf HTML-Seiten zu gewährleisten.

31:56.450 --> 32:00.610
Wird also diese Adresse hier entsprechend aufgelöst.

32:00.610 --> 32:03.870
Das ist also die Adresse des Rechners.

32:04.250 --> 32:07.350
Und dann im Rechner Verzeichnis und Dokument, das ich mir anschauen

32:07.350 --> 32:07.610
will.

32:08.510 --> 32:11.690
Und mit diesem HTTP-Protokoll hat man also eine standardisierte

32:11.690 --> 32:12.490
Übertragung.

32:12.890 --> 32:16.050
Oberhalb von TCP, also unterhalb von HTTP ist TCP.

32:17.030 --> 32:20.530
Und wie gesagt, der Browser dient dazu, dass ich die Dokumente

32:20.530 --> 32:22.890
darstellen kann in einer angenehmen Form.

32:24.490 --> 32:27.910
Und damit habe ich diese Standardisierung in dem Zugriff auf

32:27.910 --> 32:28.230
Information.

32:29.370 --> 32:35.090
Das Ziel von Tim Berners-Lee war damals, dass die Physiker, die

32:35.090 --> 32:38.470
Kernphysiker, die dort gearbeitet haben am CERN, die wollten ihre

32:38.470 --> 32:41.630
Dokumente vernetzen, schnellen Zugriff haben, die brauchten das für

32:41.630 --> 32:42.250
ihre Arbeit.

32:42.750 --> 32:44.990
Und daraus ist das Ganze World Wide Web entstanden.

32:45.650 --> 32:49.250
Also reine akademische Erfindung, das Kommunikationsbedürfnis von

32:49.250 --> 32:50.430
Wissenschaftlern lag dahinter.

32:50.430 --> 32:55.470
Die Industrie ist irgendwann dann auch darauf gesprungen, hat das

32:55.470 --> 32:58.190
irgendwann erkannt, dass das kommerziell auch eine Bedeutung hat.

32:59.030 --> 33:03.450
Gut, das dazu, Standardisierung im World Wide Web, passiert natürlich

33:03.450 --> 33:06.350
auch über das World Wide Web Konsortium.

33:06.450 --> 33:11.190
Wenn Sie auf diese Adresse gehen hier, b3.org, da finden Sie alle

33:11.190 --> 33:12.710
Protokolle des World Wide Web.

33:13.170 --> 33:17.070
Die sind auch spezifiziert, die finden dort Tutorien zu den ganzen

33:17.070 --> 33:19.170
Protokollen, eine sehr hilfreiche Seite.

33:19.170 --> 33:20.970
Da finden Sie ganz viele Informationen.

33:21.990 --> 33:25.110
Eine wichtige weitere Entwicklung ist das sogenannte Semantic Web.

33:25.990 --> 33:27.090
Was ist der Unterschied?

33:27.330 --> 33:30.970
Offensichtlich, wenn es ein Semantic Web gibt, ist das normale World

33:30.970 --> 33:32.570
Wide Web ein syntaktisches.

33:33.210 --> 33:38.790
Das ist auch so, wenn ich also suche im World Wide Web nach

33:38.790 --> 33:41.310
irgendwelchen Dokumenten, suche ich nach dem Auftauchen von

33:41.310 --> 33:43.190
irgendwelchen Wörtern in Dokumenten.

33:44.610 --> 33:46.850
Und welche Bedeutung diese Wörter haben, ist mir eigentlich ziemlich

33:46.850 --> 33:47.230
egal.

33:47.230 --> 33:54.630
Und im Semantic Web will man gerne etwas mehr Bedeutung hinterlegen.

33:54.730 --> 34:00.030
Ich möchte also nicht nur einfach alle Dokumente haben, wo irgendein

34:00.030 --> 34:04.510
Wissenschaftler genannt ist, sondern ich möchte gerne wissen, wie

34:04.510 --> 34:10.610
viele Wissenschaftler haben in Zeitraum von dann bis dann Beiträge

34:10.610 --> 34:12.430
geliefert zu der und der Konferenz.

34:13.570 --> 34:16.450
Eine solche Suchanfrage kann Ihnen Google nicht beantworten.

34:16.450 --> 34:20.350
Wenn Sie die Suchanfrage reinschreiben, kriegen Sie irgendwelchen

34:20.350 --> 34:25.110
Schrott raus mit zig Treffern, aber Sie kriegen nicht die relevante

34:25.110 --> 34:27.190
Information, Sie kriegen nicht eine Antwort auf diese Frage.

34:27.970 --> 34:32.650
Und Sie können also, wenn Sie etwas sinnvoller fragen wollen, dann

34:32.650 --> 34:35.010
brauchen Sie sowas wie das Semantic Web.

34:35.590 --> 34:39.150
Das braucht dann auch ganz andere Arten, die Anfragen zu bearbeiten

34:39.150 --> 34:40.310
und Ergebnisse zu liefern.

34:40.830 --> 34:45.190
Das sind Dinge, die haben dann mit künstlicher Intelligenz zu tun.

34:45.190 --> 34:48.650
Da gibt es eine Gruppe bei uns am AIFB, die Gruppe von Herrn Studer,

34:48.750 --> 34:52.110
die dort weltweit führend ist und sehr viel dort initiiert hat.

34:53.850 --> 34:56.430
Also nur, wenn Sie dazu mehr hören wollen, gehen Sie zu den

34:56.430 --> 34:58.350
Vorlesungen von Herrn Studer und seinen Leuten.

34:59.650 --> 35:04.610
Dann ist es so, dass das Netz, zunächst mal das Internet dazu da ist,

35:04.670 --> 35:06.190
Daten zu übertragen zwischen Rechnern.

35:08.090 --> 35:10.790
Zukünftig ist es so, oder auch jetzt eigentlich schon immer mehr, ist

35:10.790 --> 35:12.670
es so, dass wir Dienste bereitstellen.

35:12.670 --> 35:16.570
Wir reden von Web-Services oder eben auch davon, dass wir irgendetwas

35:16.570 --> 35:18.330
aus der Cloud holen.

35:18.490 --> 35:19.790
Ich versuche es besser zu schreiben.

35:19.990 --> 35:20.830
Hier, es soll Cloud heißen.

35:22.290 --> 35:26.870
Und also Dienste, die irgendwo auf einem Rechner laufen, hole ich mir

35:26.870 --> 35:27.870
einfach aus dem Netz.

35:28.750 --> 35:32.230
Und wenn Sie darüber mehr hören wollen, gehen Sie in eine unserer

35:32.230 --> 35:32.810
weiteren Vorlesungen.

35:34.370 --> 35:36.990
Wir sind ja aufgeführt, also auch intelligente Systeme weltweit.

35:37.070 --> 35:40.170
Die Vorlesung von Herrn Studer oder Service Computing, Vorlesung von

35:40.170 --> 35:40.530
Herrn Tai.

35:41.350 --> 35:46.970
Das also dazu, ganz wichtige Themen für die Entwicklung unserer

35:46.970 --> 35:48.950
Wirtschaft und Gesellschaft.

35:49.510 --> 35:55.290
Das Ganze ist in Deutschland relativ spät erkannt worden.

35:56.010 --> 35:59.090
Hatte ich schon mal darauf hingewiesen, erst seit Ende der 90er Jahre

35:59.090 --> 36:01.770
hat man da intensiv das auch in der Politik erkannt.

36:01.770 --> 36:07.210
Davor waren die Datenautobahnen etwas für den Verkehrsausschuss und

36:07.210 --> 36:11.270
hatten nichts mit Informationsverarbeitung zu tun.

36:11.490 --> 36:14.650
Das ist leider auf höchster politischer Ebene nicht erkannt worden.

36:15.050 --> 36:18.430
Danach hat sich das fundamental geändert und mittlerweile sind wir

36:18.430 --> 36:20.930
eigentlich schon da sehr gut aufgestellt.

36:21.770 --> 36:26.530
Es gibt hier wahnsinnig viele Chancen für Innovationen, für neue

36:26.530 --> 36:28.230
Produkte, für neue Dienstleistungen.

36:28.230 --> 36:34.290
Also Sie haben beste Chancen da über gute Ideen sich wirtschaftlich

36:34.290 --> 36:40.150
sehr gut aufzustellen und neue Firmen zu gründen, neue Produkte

36:40.150 --> 36:40.970
anzubieten und ähnlich.

36:41.470 --> 36:45.250
Man muss Ihnen über eines im Klaren sein, das geht nur, wenn man auch

36:45.250 --> 36:48.190
weiß, welches Potenzial diese Technologien haben.

36:49.050 --> 36:51.770
Das heißt, wenn Sie sagen, diese Vorlesung Grundlageninformatik,

36:51.830 --> 36:53.930
überhaupt Informatik, ist doch nichts für Vivis.

36:54.870 --> 37:00.030
Also die Zeit, wo es egal war, was für Chips man verkauft, ob das

37:00.030 --> 37:04.630
Kartoffelchips sind oder Mikrochips, die sind eigentlich vorbei.

37:06.230 --> 37:09.470
Und es gibt immer noch Leute, die meinen, es reicht allein

37:09.470 --> 37:11.170
wirtschaftswissenschaftliche Kenntnisse zu haben.

37:11.690 --> 37:15.370
Wer wirklich in der Lage sein will, ein Unternehmen so zu führen, dass

37:15.370 --> 37:18.790
man sich auch auf den Märkten richtig positioniert, der muss wissen,

37:19.270 --> 37:23.830
welche Chancen und Potenziale hier die Informationstechnik überliefert

37:23.830 --> 37:24.990
und auch welche Grenzen sie hat.

37:26.110 --> 37:28.670
In Grundlageninformatik 2 kann ich Ihnen nur einen kleinen Ausschnitt

37:28.670 --> 37:30.190
dessen zeigen.

37:30.330 --> 37:32.630
Ich kann Sie auf ein paar Dinge hinweisen, aber so ein paar

37:32.630 --> 37:36.410
prinzipielle Dinge habe ich Ihnen schon hier vermittelt oder zumindest

37:36.410 --> 37:37.750
versucht Ihnen das zu vermitteln.

37:38.570 --> 37:43.350
Ganz kurz noch ein wichtiger weiterer Punkt, der unsere Welt sehr

37:43.350 --> 37:45.970
stark verändert, sind die drahtlosen Kommunikationssysteme.

37:47.190 --> 37:51.110
Die Fähigkeit einfach mit unseren Geräten, die wir an uns tragen,

37:51.190 --> 37:52.470
beliebig zu kommunizieren.

37:52.970 --> 37:56.870
Das ist halt irgendwann mal losgegangen mit relativ wenig Bandbreite,

37:56.950 --> 37:59.830
9,6 Kilobit pro Sekunde.

38:00.950 --> 38:05.390
Und ist heute, also geht das in Richtung 100 bis 300 Megabit pro

38:05.390 --> 38:10.350
Sekunde LTE, Long Term Evolution, ist der neueste Standard, der gerade

38:10.350 --> 38:11.190
eingeführt wird.

38:11.190 --> 38:14.830
Und wenn Sie sich anschauen, dieser Standard hier, 100 bis 300 Megabit

38:14.830 --> 38:18.470
pro Sekunde Übertragungsleistung über drahtlose Geräte, das ist

38:18.470 --> 38:22.110
genauso schnell wie eine Festnetzverbindung, also über so ein

38:22.110 --> 38:26.350
Ethernet, hier das Kabel, 100 Megabit Verbindung ist so Standard im

38:26.350 --> 38:27.170
Uninetz.

38:27.390 --> 38:29.970
Wenn Sie Glück haben, sind sie ein bisschen höher, aber hier geht es

38:29.970 --> 38:31.590
ja auch in Richtung 300 Megabit pro Sekunde.

38:32.410 --> 38:38.290
Das heißt auf einmal, also eine kleine Anwendung, Sie haben hier

38:38.290 --> 38:43.090
irgendein Auto und hier noch ein Auto.

38:46.110 --> 38:47.070
So, die beiden Autos.

38:48.090 --> 38:50.830
Das eine Auto weiß etwas, was das andere erfahren soll.

38:51.290 --> 38:53.570
Da hat man viel über K2K-Kommunikation nachgedacht.

38:54.230 --> 38:57.150
Es ist ganz wichtig, wenn die in der Nähe sind, können die ja auch

38:57.150 --> 38:58.030
schnell kommunizieren.

38:58.030 --> 39:01.090
Da macht man also, versucht man die irgendwie direkt zu verbinden,

39:01.190 --> 39:04.030
dass die miteinander reden können über ein Funknetz.

39:05.890 --> 39:07.850
Direkt, Ad-Hoc-Netze und ähnliches.

39:08.390 --> 39:15.230
Mit LTE ist es so, Sie können irgendwo auf den Server gehen, LTE-Zelle

39:15.230 --> 39:18.950
und rück jetzt von der Zelle zurück zu dem Auto.

39:19.610 --> 39:22.490
Das ist alles so schnell, dass das eigentlich eine Alternative ist

39:22.490 --> 39:26.490
dazu, direkt zu kommunizieren zwischen Fahrzeugen.

39:26.490 --> 39:29.590
Was ich damit andeuten will, ist auf einmal sind irgendwelche Ideen

39:29.590 --> 39:34.490
für neue Dienstleistungen, die man bringen möchte, völlig anders,

39:34.930 --> 39:37.210
dadurch, dass sich die Technologie weiterentwickelt hat.

39:37.510 --> 39:41.550
Von wenigen Kilobit pro Sekunde auf 100 bis 300 Megabit pro Sekunde,

39:41.990 --> 39:45.010
dann können auch viele Teilnehmer gleichzeitig relativ schnell

39:45.010 --> 39:45.730
kommunizieren.

39:46.290 --> 39:49.230
Und ich kann auch interessante Informationen schicken.

39:50.050 --> 39:52.750
Also ich gehe auf die Einzelheiten gar nicht so sehr ein.

39:53.210 --> 39:55.970
Vielleicht nur kurz nochmal, dieses Bluetooth ist wichtig.

39:56.490 --> 39:58.330
Ein Netz habe ich nicht aufgeführt.

39:58.430 --> 40:00.950
Ein Netz spielt auch eine wichtige Rolle im Augenblick.

40:01.090 --> 40:04.870
Das sogenannte ZigBee-Netz, auch eines dieser drahtlosen Netze.

40:04.990 --> 40:10.190
ZigBee wird häufig eingesetzt bei Anwendungen in der

40:10.190 --> 40:13.870
Ausautomatisierung.

40:22.580 --> 40:27.300
So, schön geschrieben.

40:28.640 --> 40:29.080
Ausautomatisierung.

40:29.260 --> 40:31.660
Also das ist wichtig, wenn Sie Komponenten im Haus haben, miteinander

40:31.660 --> 40:34.360
reden wollen, elektrische Geräte und ähnliches, die machen das

40:34.360 --> 40:35.960
heutzutage häufig über ZigBee.

40:36.100 --> 40:39.240
Habe ich hier nicht mit draufgekriegt auf die Tabelle, aber sollte ich

40:39.240 --> 40:41.860
vielleicht zukünftig damit aufnehmen, dann lieber etwas anderes hier

40:41.860 --> 40:42.420
noch rausstreichen.

40:42.420 --> 40:44.140
Also das nur kurz.

40:44.480 --> 40:48.380
Die Entwicklung der drahtlosen Standards beeinflusst halt auch ganz

40:48.380 --> 40:50.660
stark, was wir mit unseren mobilen Geräten machen können.

40:51.240 --> 40:54.700
Ein Effekt war, dass wir in diesem Semester jetzt ganz stark hier über

40:54.700 --> 40:58.920
Apps und Smartphones unsere Nukid-Services auf einmal nutzen konnten,

40:59.440 --> 41:01.960
was vor zwei Jahren noch nicht so war.

41:02.080 --> 41:07.120
Da hatte kaum einer wirklich die Netzverbindungen in seinem Telefon,

41:07.320 --> 41:08.320
die das ermöglicht haben.

41:08.320 --> 41:12.120
Also das ist eine ganz wichtige Entwicklung, die auch Auswirkungen hat

41:12.120 --> 41:16.220
darauf, was man an Dienstleistungen und Produkten entwickeln und

41:16.220 --> 41:16.780
anbieten kann.

41:17.820 --> 41:20.040
Also Konsequenzen drahtloser Technologien.

41:20.840 --> 41:24.360
Der Zugang zum Internet ist über mobile Geräte möglich.

41:24.540 --> 41:27.700
Wir können damit ubiquitäres Rechnen immer mehr möglich machen.

41:27.860 --> 41:31.760
Ubiquitäres Rechnen heißt, ganz viele Rechner sind verfügbar, die in

41:31.760 --> 41:35.100
unserer Umgebung verteilt Informationsdienstleistungen anbieten.

41:35.100 --> 41:39.140
Wir können selbstorganisierende Systeme anbieten, wir können Ad-Hoc

41:39.140 --> 41:42.720
-Netze bauen, wir können unterschiedliche Netz-Topologien hier

41:42.720 --> 41:43.460
aufbauen.

41:44.020 --> 41:46.780
Natürlich muss man sich anschauen, wie viel Energie brauche ich dafür

41:46.780 --> 41:47.220
eigentlich.

41:47.620 --> 41:53.200
Also der Energiebedarf ist hier durchaus wichtig.

41:53.420 --> 41:57.260
Deswegen redet man häufig auch davon, dass man sowas wie Green IT

41:57.260 --> 41:58.040
machen muss.

41:58.040 --> 42:04.540
Green IT bezieht sich darauf, den Aufwand für Kommunikation oder für

42:04.540 --> 42:06.340
Informationsverarbeitung möglichst zu reduzieren.

42:08.080 --> 42:12.840
Dazu gibt es zum Beispiel auch Technologien wie etwas, das nennt sich

42:12.840 --> 42:13.860
N -Ocean.

42:15.200 --> 42:18.720
Das ist der Energie-Ozean, bei dem Sie zum Beispiel Technologien haben

42:18.720 --> 42:23.180
wie irgendein Schalter, auf den Sie tippen können.

42:23.180 --> 42:26.160
Und wenn Sie auf den tippen, wird die mechanische Energie, die Sie

42:26.160 --> 42:29.460
dort anwenden, umgesetzt in elektrische Energie.

42:29.920 --> 42:33.160
Und es wird ein Funk-Telegramm losgeschickt zu einem Server, von

42:33.160 --> 42:34.620
diesem Schalter zu irgendeinem Server.

42:34.740 --> 42:37.880
Und die Energie, die Sie dafür brauchen, wird gewonnen aus der

42:37.880 --> 42:39.640
mechanischen Energie des Schaltens.

42:40.220 --> 42:42.660
Da ist keine Batterie drin und gar nichts, keine Stromversorgung, gar

42:42.660 --> 42:42.920
nichts.

42:43.420 --> 42:47.040
Da wird einfach die Umgebungsenergie verwendet, um die Information zur

42:47.040 --> 42:48.440
Lampe zu schicken, damit sie angeht.

42:48.440 --> 42:51.320
Das heißt, Sie brauchen keine Verbindung mehr zu einem Schalter, keine

42:51.320 --> 42:52.280
elektrische Verbindung.

42:52.760 --> 42:57.160
Das geschieht einfach dadurch, dass Sie beim Schalten mechanische

42:57.160 --> 43:01.420
Energie einfach anwenden und die wird umgesetzt entsprechend in

43:01.420 --> 43:02.160
elektrische Energie.

43:02.740 --> 43:04.580
Kann man alles machen, interessante Technologien.

43:04.980 --> 43:07.520
Und das ist etwas, was man zu einem Thema Green IT auf jeden Fall

43:07.520 --> 43:08.080
machen muss.

43:08.900 --> 43:12.320
Sogenannte Energy Harvesting, Energie aus der Umgebung zu bekommen,

43:12.320 --> 43:19.440
sodass man Informationsverarbeitung betreiben kann, ohne dass man eine

43:19.440 --> 43:23.320
ständige Verbindung hat zum Stromnetz.

43:24.980 --> 43:27.280
Wir machen daran natürlich sehr viel am KIT.

43:29.120 --> 43:33.960
Wenn Sie sich anschauen in der Industrie, in Gesellschaft, Wirtschaft,

43:34.740 --> 43:37.300
haben wir immer mehr solche miteinander vernetzten Systeme.

43:37.300 --> 43:39.760
Wir nennen die jetzt häufig auch cyberphysische Systeme.

43:39.900 --> 43:43.340
Das ist ein Modewort, das das charakterisiert, dass wir viele Geräte

43:43.340 --> 43:45.120
haben, die miteinander kommunizieren.

43:45.240 --> 43:47.160
Insbesondere im Bereich der Industrie, in der Produktion und

43:47.160 --> 43:48.160
Ähnlichem.

43:48.960 --> 43:52.400
Da gibt es technische Anwendungen, da habe ich mich irgendwie

43:52.400 --> 43:53.600
verschrieben hier bei dem Wort.

43:55.020 --> 43:58.000
Es sind vernetzte, intelligente, eingebettete Systeme.

43:58.100 --> 44:00.780
Das ist ein Thema, das wir bei uns im KIT Schwerpunkt Computation

44:00.780 --> 44:05.120
bearbeiten mit etwa 50 Lehrstühlen und so 650 Mitarbeitern.

44:06.000 --> 44:09.580
Wir haben das intensiv bearbeitet im Bereich Organic Computing.

44:09.920 --> 44:10.960
Das hatte ich koordiniert.

44:11.460 --> 44:13.660
Es ist also krass, wo sehr viel Kompetenz dabei vorhanden.

44:14.080 --> 44:16.840
Und immer stärker wird es angewandt eben im Bereich der

44:16.840 --> 44:19.500
Energiesysteme, aber auch im Bereich Gesundheit und Ähnlichem.

44:20.040 --> 44:24.840
Da ist ganz viel im Augenblick, was an offenen Fragestellen da ist,

44:24.980 --> 44:29.440
die wir anpacken müssen, um die geeigneten informationsverarbeitenden

44:29.440 --> 44:32.200
Systeme anzubieten.

44:32.200 --> 44:35.780
Damit wir zum Beispiel das Energienetz zukünftig steuern können.

44:35.940 --> 44:39.980
Also ohne Informatik, ohne Informationsdienstleistungen werden wir das

44:39.980 --> 44:43.260
zukünftige Netz nicht verlässlich betreiben können.

44:43.880 --> 44:47.420
Und die Konzepte dafür, die sind zum Teil noch in der Entstehung.

44:47.540 --> 44:51.860
Da ist für Sie sehr viel Möglichkeit, sich da auch irgendwann mal

44:51.860 --> 44:52.880
selbst mit einzubringen.

44:53.440 --> 44:54.900
Sehr viel Zukunftspotenzial.

44:54.900 --> 44:59.080
Das hier zeigt eben viele interessante Fragestellungen, viele Themen

44:59.080 --> 45:00.040
für Abschlussarbeiten.

45:00.660 --> 45:04.100
Dürfen Sie gerne wieder auf uns zurückkommen, da bieten wir also

45:04.100 --> 45:04.740
einiges an.

45:05.360 --> 45:08.980
So, das war der Abschnitt über Speicher.

45:09.520 --> 45:15.560
Und jetzt komme ich ganz schnell auf das nächste Kapitel, nämlich das

45:15.560 --> 45:16.600
Thema Programmierung.

45:17.900 --> 45:20.940
Ich will jetzt nicht etwas über Java erzählen, am Rande auch, aber nur

45:20.940 --> 45:22.420
ganz am Rande.

45:22.420 --> 45:26.980
Es geht darum, sich anzuschauen, wir haben uns jetzt die

45:26.980 --> 45:28.600
Rechnerarchitektur angeschaut.

45:28.720 --> 45:32.620
Wir haben vorher die Innereien angeschaut.

45:32.940 --> 45:37.220
Daten, wie kann ich Informationen darstellen im Rechner?

45:37.340 --> 45:39.240
Wie kann ich Operationen ausführen?

45:39.680 --> 45:41.620
Was passiert, wenn ein Programm ausgeführt wird?

45:41.720 --> 45:44.120
Und nun gucken wir uns an, welche Programme schreibe ich eigentlich?

45:44.640 --> 45:46.560
Wir wissen, dass Sie Java Programme schreiben können.

45:46.640 --> 45:49.920
Es gibt also hier eine ganze Reihe von Dingen, die man angucken muss.

45:49.920 --> 45:53.160
Also wie kann ich jetzt Rechner tatsächlich einsetzen für die

45:53.160 --> 45:55.080
Ausführung von Berechnungen?

45:55.180 --> 45:57.140
Wie kann ich die Berechnungen organisieren?

45:57.700 --> 45:58.760
Dazu brauche ich Sprachen.

45:59.700 --> 46:04.360
Die nackte Maschine selber ist zunächst mal so sehr unhandlich.

46:04.480 --> 46:08.880
Sie wollen möglichst wenig sich direkt an die Maschine setzen und dort

46:08.880 --> 46:12.080
etwas entsprechend Befehl für Befehl eingeben, sondern wollen das

46:12.080 --> 46:15.060
möglichst abstrakt machen, möglichst nah am Problem.

46:15.660 --> 46:18.840
Deswegen gibt es hier unterschiedliche Ebenen der Programmierung.

46:18.840 --> 46:21.840
Die unterschiedlich nah an Problemstellungen dran sind.

46:21.960 --> 46:24.500
Das will ich jetzt gleich ein bisschen deutlicher machen.

46:24.640 --> 46:29.020
Wir haben also über dem Rechner, der hier unten steht, für der

46:29.020 --> 46:29.440
Hardware.

46:29.700 --> 46:34.460
Also unser von Neumann Rechner.

46:40.540 --> 46:44.460
Wir haben hier unten unser von Neumann Rechner, der in der Lage ist,

46:44.500 --> 46:45.540
Befehle zu interpretieren.

46:45.540 --> 46:50.040
Und dann gibt es natürlich eine Sprache, die diese Maschine, die

46:50.040 --> 46:51.740
dieser Rechner gut versteht.

46:52.280 --> 46:55.900
Und die ist viel zu weit unten, viel zu technisch ausgerichtet.

46:56.560 --> 47:00.260
Wir würden viel lieber irgendwas in Java, Smalltalk, C++, Delphi,

47:00.360 --> 47:02.220
Modular 2, Lisp oder Ähnlichem machen.

47:03.340 --> 47:04.460
Oder aufschreiben.

47:04.960 --> 47:06.440
Aber da muss das Ganze übersetzt werden.

47:06.900 --> 47:08.780
In eine Sprache, die da unten drunter ist.

47:08.960 --> 47:12.300
Vielleicht C++ nach C oder Fortran oder Basic.

47:12.300 --> 47:15.180
Und dann wieder nach Assembler oder Maschinensprache.

47:15.740 --> 47:17.720
Die Frage ist, wie macht man das eigentlich sinnvoll?

47:18.140 --> 47:19.540
Welche Möglichkeiten habe ich hier oben?

47:19.620 --> 47:20.360
Welche habe ich da unten?

47:20.920 --> 47:22.640
Und wie ist das eigentlich alles aufgebaut?

47:24.060 --> 47:27.120
Und das wird also alles schön ineinander übersetzt.

47:28.120 --> 47:31.780
Da habe ich jetzt verschiedene Möglichkeiten, das zu tun.

47:31.880 --> 47:32.820
Ich habe hier mein Programm.

47:34.240 --> 47:36.000
Mein Quellprogramm, zum Beispiel in Java.

47:36.540 --> 47:41.640
Das Ganze wird übersetzt in ein Programm der nächsten Ebene.

47:41.760 --> 47:42.760
Das ist mein Zielprogramm.

47:42.920 --> 47:45.820
Ich habe dazwischen ein Stück Software, das dieses Programm

47:45.820 --> 47:47.180
tatsächlich übersetzt.

47:47.480 --> 47:48.800
Von einer Sprache in die andere.

47:50.200 --> 47:53.280
Es kann auch anders laufen, dass ich ein Programm schreibe.

47:54.120 --> 47:58.000
Das gibt es zum Beispiel bei Basic oder bei Lisp.

47:58.860 --> 47:59.840
Da schreiben Sie ein Programm.

48:00.720 --> 48:02.740
Und in dem Programm haben Sie irgendeine Anweisung.

48:02.820 --> 48:03.940
Und die wird sofort ausgeführt.

48:04.520 --> 48:06.980
Dann kommt die nächste Anweisung und die wird sofort ausgeführt.

48:07.040 --> 48:08.440
Die wird interpretiert und ausgeführt.

48:09.060 --> 48:10.520
Dann haben Sie hier irgendeine Schleife.

48:11.380 --> 48:15.200
Sie interpretieren die einzelnen Befehle und führen sie sofort aus.

48:15.780 --> 48:21.160
Und der Vorteil ist, dass Sie dann sofort sehen, was passiert, wenn

48:21.160 --> 48:23.640
Sie dieses Programm soweit ausführen.

48:23.700 --> 48:26.720
Sie sehen an den einzelnen Befehlen, was der Effekt ist.

48:27.320 --> 48:31.100
Wenn Sie ein Programm übersetzt haben in ein anderes Programm, Sie

48:31.100 --> 48:34.540
haben hier eine Reihe von Befehlen nacheinander, können die hier an

48:34.540 --> 48:36.000
ganz verschiedenen Stellen auftauchen.

48:36.160 --> 48:39.140
Da treten auch viele andere Befehle zwischendrin auf in einer anderen

48:39.140 --> 48:39.640
Sprache.

48:40.700 --> 48:44.220
Die Frage ist, wie kann ich eigentlich hier Rückmeldung geben, welchen

48:44.220 --> 48:48.540
Effekt irgendeine spezielle Anweisung gehabt hat, hier unten durch

48:48.540 --> 48:50.540
Ausführung eines übersetzten Programms.

48:50.860 --> 48:54.200
Das ist also nicht so ganz einfach, wie man das darstellen soll.

48:54.840 --> 48:55.980
Damit muss man sich halt beschäftigen.

48:56.040 --> 48:58.680
Wir haben also Interpretierung und Übersetzung als zwei verschiedene

48:58.680 --> 48:59.280
Möglichkeiten.

48:59.280 --> 49:03.180
Bei der Interpretierung führt man direkt aus.

49:03.320 --> 49:06.280
Bei der Übersetzung schreibe ich ein Programm, übersetzt es, lasse das

49:06.280 --> 49:09.080
übersetzte Programm laufen, schaue mir an das Ergebnis und kriege dann

49:09.080 --> 49:10.160
eine Rückmeldung.

49:10.300 --> 49:11.220
Andere Vorgehensweise.

49:12.260 --> 49:15.520
Und in unseren aktuellen Rechnern haben wir also so Standard-Ebenen.

49:15.860 --> 49:16.960
Vorher war das alles nur abstrakt.

49:17.580 --> 49:21.960
Jetzt haben wir hier die problemorientierten Sprachen, wie Java, C++

49:21.960 --> 49:23.640
oder C oder ähnliches.

49:23.940 --> 49:26.920
Wir haben eine Assembler-Sprache, heißt halt einfach so.

49:28.080 --> 49:30.240
Und dann haben wir die Maschinensprache.

49:30.640 --> 49:34.740
In der Regel ist das die Ebene, auf der Sie direkt programmieren

49:34.740 --> 49:35.080
können.

49:35.600 --> 49:39.620
Und unten drunter gibt es noch die Mikroprogrammierungsebene, die in

49:39.620 --> 49:42.820
der Lage ist, dann konkrete Befehle umzusetzen.

49:42.900 --> 49:45.860
Ich hatte Ihnen gesagt, es kann ein Befehl geben, Addition meinetwegen

49:45.860 --> 49:46.780
von Gleitpunktzahlen.

49:47.820 --> 49:49.060
Das ist ein Befehl einer Maschinensprache.

49:50.140 --> 49:53.260
Umgesetzt wird so ein Additionsbild.

49:54.380 --> 49:58.340
Und dann hier haben wir unsere reellen Zahlen R1 und R2.

49:59.740 --> 50:02.860
Gleitpunktzahlen, wissen Sie, da gibt es eine ganze Folge von

50:02.860 --> 50:05.720
Operationen, die ausgeführt werden müssen, mit Exponentenvergleich,

50:07.800 --> 50:08.900
Matissenverschiebung und so weiter.

50:09.020 --> 50:11.460
Und nachher wieder Normierung des Exponenten.

50:12.680 --> 50:16.100
Das heißt, da müssen mehrere Operationen nacheinander ausgeführt

50:16.100 --> 50:16.440
werden.

50:16.780 --> 50:19.760
Und das ist etwas, was dann konkret in der Mikroprogrammierung

50:19.760 --> 50:20.220
geschieht.

50:20.220 --> 50:24.900
Durch Übersetzung eines Maschinenbefehls in eine Folge von

50:24.900 --> 50:26.220
Elementaroperationen.

50:26.980 --> 50:30.360
Und damit wird eigentlich erst festgelegt, was auf der Hardware

50:30.360 --> 50:31.420
konkret ausgeführt wird.

50:31.960 --> 50:34.540
Es gibt Rechner, bei denen Sie auf die Art und Weise durch

50:34.540 --> 50:38.960
unterschiedliche Firmware, so nennt man das, hat nichts mit Firmen zu

50:38.960 --> 50:41.780
tun, sondern das ist etwas fest, aber nicht hart.

50:42.420 --> 50:44.620
Das ist so Firmware, aber auch nicht Software.

50:45.600 --> 50:47.120
Sie können also hier einiges noch verändern.

50:47.880 --> 50:52.080
Sie können dadurch zum Beispiel die Laufzeiten von Maschinenbefehlen

50:52.080 --> 50:56.120
verändern, je nachdem, wie Ihr Anwendungsprofil gerade ist.

50:56.220 --> 51:01.060
Wenn ein Programm ständig nur Multimedia-Anwendungen macht und ständig

51:01.060 --> 51:04.140
irgendwelche Befehle in irgendwelchen Multimedia-Objekten braucht,

51:04.440 --> 51:05.900
dann sollten die möglichst schnell sein.

51:06.660 --> 51:11.440
Dann gibt es Überlegungen oder Ideen, wie man einfach on the fly die

51:11.440 --> 51:14.640
Interpretation der Befehle verändert, sodass die schneller ausgeführt

51:14.640 --> 51:14.960
werden.

51:14.960 --> 51:19.340
Das ist etwas, was zum Beispiel in dem Crusoe-Rechner gemacht wurde.

51:20.200 --> 51:25.600
Das Konzept des Crusoe-Prozessors, ein spezieller Prozessor für mobile

51:25.600 --> 51:30.380
Anwendungen, ist übrigens von einem Absolventen hier aus Karlsruhe und

51:30.380 --> 51:32.540
von einem Wirtschaftsingenieur entwickelt worden, Marc Fleischmann,

51:33.120 --> 51:37.480
der ein Praktikum bei HP gemacht hatte und dann zusammen mit dem

51:37.480 --> 51:41.720
Erfinder von Linux sich also um die Entwicklung dieses Crusoe

51:41.720 --> 51:45.960
-Prozessor gekümmert hat und dort diese Ideen des Instruction Morphing

51:45.960 --> 51:47.520
im Wesentlichen umgesetzt hat.

51:48.240 --> 51:51.640
Also Wirtschaftsingenieure können sehr innovative Beiträge liefern,

51:51.980 --> 51:56.120
auch für die Konzeption von innovativen Prozessoren.

51:56.620 --> 51:59.200
Das machen nicht nur irgendwelche Elektrotechniker oder nur

51:59.200 --> 52:01.020
Informatiker, sondern auch Wirtschaftsingenieure.

52:01.180 --> 52:04.840
Sie können das auch, wenn sie sich entsprechend konzentrieren auf

52:04.840 --> 52:06.040
Themen in dem Zusammenhang.

52:07.640 --> 52:09.100
So, kurze Randbemerkung.

52:09.620 --> 52:11.800
Jetzt gehen wir in die einzelnen Bereiche rein.

52:11.920 --> 52:14.020
Wir haben also problematierte höhere Programmiersprachen.

52:14.320 --> 52:17.540
Da wollen wir möglichst nahe an einem Problem etwas formulieren, mal

52:17.540 --> 52:19.040
wegen Sortierprogramm oder ähnliches.

52:19.400 --> 52:22.380
Dann gibt es diese SEMDA-Sprache, die schon etwas näher dran ist am

52:22.380 --> 52:24.360
Rechner, aber die noch lesbar ist.

52:24.420 --> 52:25.500
Und dann gibt es die Maschinen-Sprache.

52:25.980 --> 52:27.700
Das sind direkt ausführbare Befehle.

52:27.920 --> 52:31.420
Das sind alles Befehle, die bestehen nur aus irgendwelchen Nullen und

52:31.420 --> 52:32.680
Einsen, binärer Code.

52:33.240 --> 52:35.840
Wenn Sie ein Maschinenprogramm sehen, können Sie damit zunächst mal

52:35.840 --> 52:36.600
gar nichts anfangen.

52:36.600 --> 52:41.700
Sie müssten das erstmal in eine lesbare Form umwandeln.

52:42.660 --> 52:44.780
Und da gucken wir uns gleich noch Beispiele an.

52:45.280 --> 52:48.040
Das ist, wie gesagt, normalerweise die Maschinen-Sprache, die unterste

52:48.040 --> 52:48.380
Ebene.

52:48.460 --> 52:49.700
Dann gibt es noch die Mikroprogrammierung.

52:50.120 --> 52:53.240
Und dazu will ich Ihnen ganz kurz was sagen, was diese

52:53.240 --> 52:54.820
Mikroprogrammierung eigentlich macht.

52:55.320 --> 53:01.360
Ich sagte, da wird ein Befehl, also ein Befehl hier, wird umgesetzt in

53:01.360 --> 53:02.480
ein Mikroprogramm.

53:03.460 --> 53:05.720
Das soll also übersetzt werden in ein Mikroprogramm.

53:05.720 --> 53:08.360
Und da habe ich eine Folge von Einzelbefehlen.

53:08.860 --> 53:12.600
Das heißt, ich muss jetzt diese einzelnen Elementar-Operationen

53:12.600 --> 53:14.860
zunächst mal wieder...

53:14.860 --> 53:18.980
Ach nee, Entschuldigung, das ist Aufgabe der Steuereinheit allgemein.

53:19.180 --> 53:22.340
Den Befehl zu holen, den Befehl zu entschlüsseln und auszuführen.

53:22.440 --> 53:25.080
Und dieses Ausführen hier, das sind Elementar-Operationen.

53:25.200 --> 53:28.100
Und das ist im Prinzip hier die Folge dieser Operationen, die ich

53:28.100 --> 53:30.640
jetzt durch ein Mikroprogramm mache.

53:31.340 --> 53:34.640
Das können also Steuersignale sein, die das feststeuern.

53:34.640 --> 53:36.980
Oder ich habe es eben, wie gesagt, mit so einem Mikroprogramm zu tun,

53:37.540 --> 53:39.860
das sich auch verändern kann.

53:40.240 --> 53:44.020
Das sind dann diese Elementar-Operationen, die irgendwelche Datenwege

53:44.020 --> 53:44.460
öffnen.

53:44.900 --> 53:48.620
Zum Beispiel so dafür sorgen, dass irgendein Register auf einen Bus

53:48.620 --> 53:49.520
gelegt werden kann.

53:49.620 --> 53:53.680
Dazu muss ich halt über ein Steuersignal diese Tür hier öffnen.

53:54.060 --> 53:58.340
Die Tür in dem Fall ist ein Und-Gatter, das halt die Information aus

53:58.340 --> 54:02.080
dem Register nur durchlässt, wenn ich hier das S auf 1 schalte,

54:02.180 --> 54:03.440
ansonsten kommen da nur Nullen raus.

54:04.020 --> 54:08.440
Also das ist so ein Steuersignal, das muss ich geeignet hier steuern

54:08.440 --> 54:08.780
können.

54:09.280 --> 54:11.940
Wenn dort eine 1 anliegt, wird er halt auf dem Bus gelegt.

54:12.480 --> 54:15.800
Und die Steuereinheit muss halt diese Steuersignale zum richtigen

54:15.800 --> 54:19.180
Zeitpunkt, der richtigen Reihenfolge, abhängig von dem zu bearbeiteten

54:19.180 --> 54:20.040
Befehl erzeugen.

54:20.700 --> 54:23.480
Und das Ganze kann ich halt durch Mikroprogrammierung machen oder

54:23.480 --> 54:25.560
durch die feste Verdrahtung der Steuerungslogik.

54:27.060 --> 54:29.980
Und die Mikroprogrammierung gibt mir halt ein bisschen mehr

54:29.980 --> 54:32.540
Flexibilität, um solche Befehle auszuüben.

54:32.540 --> 54:35.420
Jetzt kommen wir zu den Komponenten so einer Mikroprogramm-Einheit.

54:36.000 --> 54:38.200
Und die sehen ganz ähnlich aus, wie das, was wir in dem

54:38.200 --> 54:40.780
Maschinenbefehlszug gerade eben gesehen oder schon mal gesehen hatten.

54:41.380 --> 54:44.760
Ich habe hier eine Mikroprogramm-Einheit, die jetzt irgend so ein

54:44.760 --> 54:47.080
Mikroprogramm sinnvoll ausführen muss.

54:47.500 --> 54:52.460
Ich brauche also hier auch wieder einen Befehlszähler, das ist in

54:52.460 --> 54:57.180
diesem Fall ein Mikrobefehlszeiger, der also im Mikroprogrammspeicher

54:57.180 --> 55:00.180
auf den entsprechenden Befehl zeigt, der als nächstes ausgeführt

55:00.180 --> 55:00.780
werden soll.

55:00.780 --> 55:04.140
Dann wird der entsprechend hier in ein Mikroinstruktionsregister

55:04.140 --> 55:10.700
reingeladen, wird übersetzt in Steuersignale und dann steht hier,

55:11.420 --> 55:15.580
welche Adresse eigentlich oder welcher Befehl als nächster ausgeführt

55:15.580 --> 55:16.200
werden soll.

55:16.300 --> 55:18.320
Das ist also dann hier die Adresse des nächsten Befehls.

55:18.740 --> 55:22.440
Das wird dann entsprechend wieder hier weitergegeben, zurückgeführt

55:22.440 --> 55:24.540
und dann wird dann der nächste Befehl ausgeführt.

55:24.540 --> 55:32.340
Das ist also unsere Ablauf- oder Mikroprogramm-Einheit mit einer Reihe

55:32.340 --> 55:35.280
von Komponenten, die so ein bisschen ähnlich sind wie das, was wir im

55:35.280 --> 55:37.800
von Neumann-Rechner gesehen haben, aber das steckt eben in dem

55:37.800 --> 55:41.620
Rechenwerk im Prinzip drin, nochmal ein Mikroprogramm ein.

55:42.560 --> 55:46.200
Und das sind also hier die verschiedenen Dinge, die Mikrooperationen

55:46.200 --> 55:50.140
oder elementaren Operationen sind dann konkret die Operationen, die

55:50.140 --> 55:53.120
fest verdrahtet sind und die nur geeignet angestoßen.

55:55.320 --> 55:59.320
Hier ist eine Erläuterung dieser unterschiedlichen Komponenten.

56:00.020 --> 56:02.540
Mikroprogrammspeicher ist klar, da sind die Mikroprogramme drin für

56:02.540 --> 56:05.900
die verschiedenen Zwecke, die ich brauche.

56:06.300 --> 56:10.160
Der Mikrobefehlszeiger ist halt der Befehlszähler, der auf den

56:10.160 --> 56:13.760
entsprechenden Mikrobefehlszeiger ausgeführt werden soll.

56:14.240 --> 56:16.540
Ich habe das Mikroinstruktionsregister entsprechend dem

56:16.540 --> 56:18.040
Instruktionsregister im Steuerwerk.

56:18.040 --> 56:21.080
Ich habe die Ablauflogik, die den nächsten Wert des

56:21.080 --> 56:24.160
Mikrobefehlszählers bestimmt, entsprechend dem, was in dem

56:24.160 --> 56:29.080
vorhergehenden Befehl gerade gemacht wurde, oder welche Bits gerade in

56:29.080 --> 56:30.520
irgendwelchen Statusregistern drinstehen.

56:30.780 --> 56:37.980
Das ist also das, was wir hier drin haben in dem Mikroprogrammwerk.

56:38.820 --> 56:41.440
Und jetzt unterscheidet man doch eine sogenannte horizontale und

56:41.440 --> 56:42.960
vertikale Mikroprogrammierung.

56:42.960 --> 56:50.260
Das Horizontale sieht so aus, dass ich in meinem Befehl viele

56:50.260 --> 56:54.040
Steuersignale gleichzeitig erzeuge.

56:54.640 --> 57:00.340
Alles, was getan werden soll, ist hier durch ein Mikrobefehl

57:00.340 --> 57:01.280
angegeben.

57:01.380 --> 57:03.720
Das können mehrere Operationen gleichzeitig sein.

57:04.380 --> 57:07.980
Das nennt man auch ein Very Long Instruction Work.

57:08.920 --> 57:11.360
Das heißt, hier sind die Steuersignale durch einzelne Bits codiert.

57:11.360 --> 57:14.800
Dazu brauche ich eine große Wortbreite, insbesondere, wenn ich

57:14.800 --> 57:16.020
komplexe Befehle habe.

57:16.540 --> 57:20.000
Und Vertikal ist so, da habe ich eine sequenzielle Ausführung von

57:20.000 --> 57:20.820
Mikrooperationen.

57:20.880 --> 57:25.700
Das heißt, mein Befehl ist etwas kürzer und da stehen irgendwelche

57:25.700 --> 57:29.260
Codes drin, noch wieder irgendein Opcode und das wird übersetzt,

57:29.380 --> 57:32.860
nochmal wieder in eine kleine Folge von Einzeloperationen.

57:32.980 --> 57:35.580
Da werden also nacheinander Steuersignale erzeugt.

57:35.580 --> 57:37.220
Hier gibt es eine kurze Frage.

57:38.440 --> 57:39.220
Wann kann man ca.

57:39.280 --> 57:43.740
mit den Ergebnissen der Bonusklausur rechnen?

57:44.160 --> 57:45.280
Okay, kurze Pause.

57:45.720 --> 57:47.740
Sagen Sie dazu kurz etwas.

57:50.460 --> 57:51.060
Bald.

57:55.100 --> 57:57.340
Also es ist alles korrigiert.

57:58.200 --> 58:04.940
Können Sie was sagen zu der Größenordnung der Bestehensquote?

58:07.820 --> 58:10.360
Also um die 25-30%.

58:10.360 --> 58:12.500
Nicht sehr viel, ich hätte mir mehr gewünscht.

58:13.820 --> 58:18.600
Aber auch aus den Ergebnissen der Evaluation, die ja vor der

58:18.600 --> 58:22.860
Bonusklausur stattgefunden hat, und auch aus den Kommentaren, die da

58:22.860 --> 58:26.500
drin standen, hatte ich den Eindruck, dass es eine Reihe Leute gegeben

58:26.500 --> 58:29.540
hat, die einfach nur mal hingegangen sind und die Bonusklausur

58:29.540 --> 58:29.980
geschaffen haben.

58:30.920 --> 58:33.840
Und das verfälscht natürlich den Erfolg.

58:34.000 --> 58:37.700
Ich denke, die Leute, die aktiv an den Übungen teilgenommen haben und

58:37.700 --> 58:40.800
da sich engagiert haben, die dürften in der Regel auch gut

58:40.800 --> 58:42.940
abgeschnitten haben und dürften den Bonus bekommen haben.

58:44.060 --> 58:47.160
Es ist immer die Frage, welchen Effekt hat es, dass ich hier eine

58:47.160 --> 58:50.560
Vorlesung aufzeichne und die Anwesenheit im Hörsaal dadurch

58:50.560 --> 58:51.220
runtergeht.

58:52.720 --> 58:57.320
Wer die Disziplin aufbringt und regelmäßig sich das auch anhört, der

58:57.320 --> 58:59.280
wird dadurch keinen Nachteil haben, sondern eher einen Vorteil

58:59.280 --> 58:59.700
vielleicht.

58:59.880 --> 59:02.620
Aber es gibt halt auch viele, die sich das irgendwann mal anschauen

59:03.000 --> 59:05.220
und nicht kontinuierlich an den Übungen teilnehmen.

59:05.220 --> 59:11.520
Wir haben keine kontinuierliche Rückmeldung über Aufgaben, die von

59:11.520 --> 59:13.120
Woche zu Woche bearbeitet werden müssen.

59:13.760 --> 59:17.480
Dinge, die im amerikanischen System unvorstellbar sind.

59:17.920 --> 59:23.600
Da muss man ständig zeigen, dass man kontinuierlich mitarbeitet.

59:23.780 --> 59:26.700
Hier gehen wir vom mündigen Studenten aus, der weiß, was er wann tut.

59:27.180 --> 59:28.180
Was wann erforderlich ist.

59:28.180 --> 59:31.420
Dann kann es eben sein, dass man bei einer eigentlich gar nicht so

59:31.420 --> 59:36.060
schwierigen Klausur dann auf einmal keinen Bonus bekommt.

59:36.620 --> 59:40.040
Also, das war ganz kurz zu den Mikrobefehlen.

59:40.120 --> 59:43.280
Ich muss das hier sehr schnell machen, tut mir leid.

59:44.580 --> 59:48.540
Sie wissen, dass ich das gar nicht gerne mache, aber ich bin mit der

59:48.540 --> 59:49.620
Zeit etwas in Versuch.

59:51.960 --> 59:53.740
Das war Mikrobefehls-Ebene.

59:53.880 --> 59:56.420
Ich werde in der Klausur nicht erwarten, dass Sie in der Lage sind,

59:56.420 --> 59:57.480
ein Mikroprogramm zu schreiben.

59:58.860 --> 01:00:00.680
Die Informationen dazu habe ich Ihnen gar nicht gegeben.

01:00:01.200 --> 01:00:05.260
Aber Sie müssen natürlich wissen, dass es Mikroprogramm-Ebene gibt und

01:00:05.260 --> 01:00:06.180
wofür man die einsetzt.

01:00:07.100 --> 01:00:08.080
So etwas wollten Sie wissen.

01:00:08.760 --> 01:00:10.160
Dann gibt es die Maschinensprache.

01:00:10.440 --> 01:00:14.200
Das ist also die Standard-Schnittstelle zur Programmierung.

01:00:14.820 --> 01:00:17.540
Dann muss die Frage, was habe ich denn da für Befehle zur Verfügung?

01:00:18.220 --> 01:00:20.800
Das sind also, habe ich Ihnen schon mehrfach angedeutet, ich habe den

01:00:20.800 --> 01:00:23.640
Operationscode, ich habe die Operantenadressen, in denen die Adressen

01:00:23.640 --> 01:00:24.140
drinstehen.

01:00:24.140 --> 01:00:27.000
Und jetzt habe ich hier meine Befehlsformate.

01:00:27.080 --> 01:00:30.800
Ich habe entweder ein Adressbefehl, vorne den Opcode, dahinter eine

01:00:30.800 --> 01:00:31.240
Adresse.

01:00:32.880 --> 01:00:34.680
Wenn ich addiere, was mache ich denn dann?

01:00:35.460 --> 01:00:36.140
Ich will addieren.

01:00:36.900 --> 01:00:37.920
Da habe ich einen Trick.

01:00:38.520 --> 01:00:42.500
Wenn das hier mein Speicher ist, dann gibt es eine Speicherzelle, die

01:00:42.500 --> 01:00:45.940
ist im Rechenwerk drin, ein Register.

01:00:46.460 --> 01:00:51.200
Das ist mein Akkumulator, so nennt man den, etwas vereinfacht.

01:00:51.200 --> 01:00:55.780
Ein spezielles Register, ausgezeichnetes Register im Rechenwerk.

01:00:56.360 --> 01:00:59.500
Und wenn ich sage, ich möchte addieren, schreibe hier add, also eine

01:00:59.500 --> 01:01:03.760
Operation rein, Addition zum Beispiel, und hier eine Adresse eines

01:01:03.760 --> 01:01:09.480
Operanten, dann wird der Wert dieses Operanten addiert zum Inhalt im

01:01:09.480 --> 01:01:10.160
Akkumulator.

01:01:10.780 --> 01:01:13.600
Und das Ergebnis steht anschließend im Akkumulator, in diesem

01:01:13.600 --> 01:01:14.620
ausgezeichneten Register.

01:01:15.160 --> 01:01:18.200
Deswegen reicht es, eine Adresse anzugeben im Befehl.

01:01:18.200 --> 01:01:21.740
Die andere Adresse ist immer, wenn ich zweistellige Operationen habe,

01:01:21.940 --> 01:01:26.520
immer der Inhalt meines ausgezeichneten Registers im Rechenwerk.

01:01:27.120 --> 01:01:28.820
Dann gibt es zwei Adressbefehle.

01:01:29.280 --> 01:01:33.040
Damit kann ich zum Beispiel spezifizieren, zwei explizite Operanten,

01:01:33.240 --> 01:01:34.660
die miteinander verknüpft werden sollen.

01:01:35.220 --> 01:01:38.020
Und das Ergebnis steht dann zum Beispiel im zweiten Operanten.

01:01:38.680 --> 01:01:43.260
Das ist Sache der konkreten Maschinensprache, wie das vorgesehen ist.

01:01:43.260 --> 01:01:46.740
Und ich kann auch ein Drei-Adress-Befehl machen, bei dem ich jetzt

01:01:46.740 --> 01:01:51.520
zwei Operantenadressen und eine Ergebnisadresse habe.

01:01:51.900 --> 01:01:54.740
Das heißt, dann ist es klar, wo das Ergebnis hingeschrieben wird.

01:01:54.820 --> 01:01:56.720
Es wird nicht ein Operant überschrieben dabei.

01:01:57.520 --> 01:02:00.280
Und natürlich ist der Aufwand, solche Befehle auszuführen,

01:02:00.360 --> 01:02:01.000
entsprechend höher.

01:02:01.680 --> 01:02:06.640
Während ich hier nur einmal auf den Speicher zugreifen muss, um daraus

01:02:06.640 --> 01:02:10.340
einen Wert zu holen, der dann hier unten irgendwo addiert werden soll,

01:02:10.340 --> 01:02:14.300
habe ich hier dann schon eventuell bis zu drei Zugriffe auf den

01:02:14.300 --> 01:02:17.760
Speicher, um auf die Operanten zuzugreifen und das Ergebnis nachher

01:02:17.760 --> 01:02:19.520
wieder in den Speicher zurückzuschreiben.

01:02:20.140 --> 01:02:24.340
Also das ist ein deutlich höherer Aufwand.

01:02:24.540 --> 01:02:26.680
Entsprechend verlängert sich dann die Ausführungszeit eines solchen

01:02:26.680 --> 01:02:27.180
Befehls.

01:02:27.540 --> 01:02:29.220
Ich brauche eine längere Pipeline und so weiter.

01:02:30.740 --> 01:02:33.700
Es gibt jetzt Rechner, die haben eben nur Ein-Adress-Befehle oder nur

01:02:33.700 --> 01:02:35.940
Zwei -Adress-Befehle oder nur Drei-Adress-Befehle.

01:02:37.040 --> 01:02:40.160
Entsprechend habe ich komplexere Rechner.

01:02:42.360 --> 01:02:47.200
Und es ist klar, dass ich dann natürlich auch Sprungbefehle habe, bei

01:02:47.200 --> 01:02:49.680
denen ich eine Adresse nur angeben muss, nämlich das Sprungziel.

01:02:50.440 --> 01:02:52.740
Aber es kann sein, dass ich beim bedingten Sprungbefehl noch

01:02:52.740 --> 01:02:55.300
irgendwelche Adressen habe, von Werten, die verglichen werden müssen

01:02:55.300 --> 01:02:56.820
auf Null oder ähnliches.

01:02:57.400 --> 01:02:59.800
Es gibt diese unterschiedlichen Befehlsarten.

01:03:00.680 --> 01:03:05.440
Ich möchte etwas aus meinem Register rüberschieben, irgendwo in den

01:03:05.440 --> 01:03:05.900
Speicher.

01:03:06.340 --> 01:03:08.920
Das wäre eine Sache, dass ich etwas in den Speicher reinschreiben will

01:03:08.920 --> 01:03:12.540
oder aus dem Speicher in irgendein Register, hin und her zwischen

01:03:12.540 --> 01:03:14.740
Rechenwerk und Speicher.

01:03:15.200 --> 01:03:17.120
Dann habe ich die arithmetisch-logischen Befehle.

01:03:17.200 --> 01:03:18.560
Ich möchte Operationen ausführen.

01:03:19.020 --> 01:03:23.140
Ich habe Ablaufsteuerungsbefehle, also bedingte und unbedingte

01:03:23.140 --> 01:03:29.240
Sprünge, die den Ablauf steuern, sodass ich dann eben in einem

01:03:29.240 --> 01:03:32.220
Programm irgendwo eine Schleife einbauen kann.

01:03:33.140 --> 01:03:36.860
Ich habe einen Ausgabebefehle und noch irgendwelche Sonderbefehle wie

01:03:36.860 --> 01:03:39.000
Anhalten oder Zurücksetzen.

01:03:39.400 --> 01:03:41.900
Es gibt verschiedene Dinge, die man sich vorstellen kann.

01:03:43.740 --> 01:03:46.740
Um Ihnen das deutlicher zu machen, will ich Ihnen eine einfache

01:03:46.740 --> 01:03:47.780
Sprache vorstellen.

01:03:48.300 --> 01:03:51.560
Hier gehe ich mal davon aus, dass wir 16 Bit haben für unsere Befehle.

01:03:52.160 --> 01:03:55.840
16 Bit, dafür brauchen wir ein paar Bits für den Operationscode.

01:03:55.960 --> 01:04:01.040
Das sind 4 Bit, 12 Bit für die Speicheradresse, ein Adressformat.

01:04:01.580 --> 01:04:04.740
Und ich habe ein ausgezeichnetes Register, den Akkumulator, den ich

01:04:04.740 --> 01:04:05.760
jetzt einfach A nenne.

01:04:06.720 --> 01:04:09.340
Und wenn ich das Ganze jetzt lesen möchte, schreibe ich nicht den

01:04:09.340 --> 01:04:12.300
Maschinenbefehl hin, sondern ich schreibe Ihnen das lesbar hin.

01:04:12.960 --> 01:04:16.040
Ich habe einfach ein geeignetes Wortsymbol dorthin, um das Ganze zu

01:04:16.040 --> 01:04:16.600
verdeutlichen.

01:04:16.680 --> 01:04:18.860
Das sehen Sie jetzt hier angedeutet.

01:04:18.860 --> 01:04:24.100
Hier wäre also der Opcode 0001 zum Beispiel.

01:04:24.260 --> 01:04:26.260
Soll angeben ein Befehl LOAD.

01:04:27.020 --> 01:04:31.280
LOAD heißt, ich möchte gerne aus der Adresse...

01:04:31.280 --> 01:04:34.480
Also ich habe ja eine Adresse in dem Befehl angegeben.

01:04:34.560 --> 01:04:37.940
Wie gesagt, mein Befehl sieht ja so aus, dass ich hier meinen Opcode

01:04:37.940 --> 01:04:38.440
habe.

01:04:38.900 --> 01:04:40.900
Und dann hier die Adresse M.

01:04:46.080 --> 01:04:50.480
LOAD heißt, aus dem Speicher möchte ich etwas in den Akkumulator

01:04:50.480 --> 01:04:50.900
laden.

01:04:51.300 --> 01:04:53.320
Vom Speicher in das Rechenwerk.

01:04:53.760 --> 01:04:55.020
STORE ist das Gegenteil.

01:04:55.580 --> 01:04:58.640
Aus dem Akkumulator etwas an eine bestimmte Adresse hinschreiben.

01:04:58.900 --> 01:05:02.100
Wenn ich hier das M in spitzen Klammern schreibe, soll das bedeuten,

01:05:02.260 --> 01:05:06.120
dass der Inhalt der Registerzelle mit Adresse M...

01:05:06.920 --> 01:05:10.640
Also, das ist meine Registerzelle M.

01:05:11.120 --> 01:05:13.700
Die zeigt auf irgendeine Speicherzelle.

01:05:14.240 --> 01:05:18.220
Und der Inhalt dieses Speichers, der soll jetzt der neue Inhalt des

01:05:18.220 --> 01:05:19.100
Akkumulators sein.

01:05:19.540 --> 01:05:25.020
Und wenn ich STORE sage, soll der Inhalt des Akkumulators in die

01:05:25.020 --> 01:05:28.020
Registerzelle geschickt werden, die die Adresse M hat.

01:05:28.620 --> 01:05:33.040
Und entsprechend, ein Addir-Befehl, hatte ich schon gesagt,

01:05:33.180 --> 01:05:38.980
Akkumulator plus Register oder plus Operand wird der neue Wert des

01:05:38.980 --> 01:05:39.880
Akkumulators.

01:05:40.440 --> 01:05:43.340
Entsprechend habe ich hier Subtraktion, Multiplikation, Division,

01:05:43.680 --> 01:05:48.060
wobei bei Division hier nur DIV steht, also nur ganzzahlige Division.

01:05:48.840 --> 01:05:51.340
Es wird immer alles nach dem Komma abgeschnitten.

01:05:52.200 --> 01:05:58.900
Also, wenn ich hier rechne, also im Prinzip nur A durch B und davon

01:05:58.900 --> 01:06:00.360
eine kleinere Zahl.

01:06:01.500 --> 01:06:03.360
Das heißt, das ist das DIV.

01:06:04.480 --> 01:06:09.540
Und in dem Fall wäre es also Akkumulator DIV M, wäre dann der neue

01:06:09.540 --> 01:06:10.560
Wert dieses Akkumulators.

01:06:11.180 --> 01:06:13.360
Dann habe ich einen Sprungbefehl, ich habe einen bedingten Sprung.

01:06:13.720 --> 01:06:17.840
Und der bedingte Sprung wird ausgeführt, sofern der Inhalt des

01:06:17.840 --> 01:06:19.140
Akkumulators Null ist.

01:06:19.840 --> 01:06:22.540
Also, ich kann nur auf gleich Null testen.

01:06:22.980 --> 01:06:25.820
Und dann kommt noch irgendwann hier ein Pseudobefehl oder

01:06:25.820 --> 01:06:27.680
Sonderbefehl, Programmausführung beenden.

01:06:27.860 --> 01:06:29.300
Das ist meine ganze Sprache.

01:06:30.040 --> 01:06:32.680
Ich habe hier nur vier Bits zur Verfügung für die einzelnen Befehle,

01:06:32.720 --> 01:06:33.340
also sehr klein.

01:06:33.640 --> 01:06:34.420
Was kann ich damit machen?

01:06:34.680 --> 01:06:38.900
Übrigens kann man einen universellen Rechner beschreiben, der hat

01:06:38.900 --> 01:06:40.260
gerade mal drei verschiedene Befehle.

01:06:40.560 --> 01:06:41.120
Das geht auch.

01:06:42.200 --> 01:06:44.820
Sie brauchen nur sehr wenige Befehle, aber dann dauert das Ganze sehr

01:06:44.820 --> 01:06:47.020
lange, wenn Sie ein Programm ausführen, weil Sie dann sehr, sehr viele

01:06:47.020 --> 01:06:49.920
Einzelbefehle brauchen, um ein Programm auszuführen.

01:06:50.060 --> 01:06:51.680
Das ist hier so ein kleiner Kompromiss.

01:06:52.300 --> 01:06:56.000
Und ich will Ihnen einfach jetzt angeben, was Sie mit so einem

01:06:56.000 --> 01:06:57.160
Programm machen können.

01:06:57.240 --> 01:06:58.320
Ein kleines Beispiel angeben.

01:06:59.680 --> 01:07:02.040
Zur Beachtung nochmal, wir reden über Maschinensprache.

01:07:02.580 --> 01:07:06.620
In der Maschinensprache hat diese symbolische Notation, die ich hier

01:07:06.620 --> 01:07:08.320
mache, load, store, add usw.

01:07:08.740 --> 01:07:09.480
keine Bedeutung.

01:07:09.600 --> 01:07:11.680
Das ist nur etwas, was ich als Kommentar irgendwie daneben schreiben

01:07:11.680 --> 01:07:12.000
kann.

01:07:12.000 --> 01:07:15.280
Der Maschinenbefehl ist eine reine Folge von 001.

01:07:15.720 --> 01:07:20.940
Also opcode, der hier angegeben ist, dahinter die binäre Form der

01:07:20.940 --> 01:07:21.320
Adresse.

01:07:22.020 --> 01:07:22.420
Das ist alles.

01:07:24.100 --> 01:07:28.460
Jetzt wollen wir das Programm angucken, das die Funktion y gleich x

01:07:28.460 --> 01:07:29.240
Fakultät berechnet.

01:07:29.480 --> 01:07:30.440
Ganz einfaches Programm.

01:07:30.600 --> 01:07:32.640
Sie müssen alle Zahlen von 1 bis x multiplizieren.

01:07:33.680 --> 01:07:34.840
Und was brauchen Sie dazu?

01:07:35.380 --> 01:07:40.080
Wir brauchen irgendwo einen Bereich im Speicher, wo das Programm

01:07:40.080 --> 01:07:40.560
steht.

01:07:40.560 --> 01:07:43.300
Da haben wir hier also die erste Adresse.

01:07:43.860 --> 01:07:45.820
Sagen wir hier das Adresse 946.

01:07:46.840 --> 01:07:53.560
Der x-Wert vor der Ausführung liege gerade in der Speicherzelle 957.

01:07:53.700 --> 01:07:56.220
Irgendwo hier liegt also jetzt dieser Wert.

01:07:56.900 --> 01:07:59.560
Nehme ich an, wie er da hingekommen ist, lasse ich jetzt mal völlig

01:07:59.560 --> 01:08:00.060
außen vor.

01:08:00.440 --> 01:08:02.680
Muss man erst da hingeschrieben haben, aus irgendeiner Form.

01:08:04.080 --> 01:08:08.900
Anschließend soll in der darauf liegenden Speicherzelle der Wert

01:08:08.900 --> 01:08:10.660
stehen von x Fakultät.

01:08:11.920 --> 01:08:13.260
Und das hier ist mein Programm.

01:08:15.220 --> 01:08:18.220
Wieso macht das Programm genau das, was ich gerade gesagt habe?

01:08:18.520 --> 01:08:20.220
y gleich x Fakultät, was steht denn hier?

01:08:21.060 --> 01:08:21.820
Das ist mein Programm.

01:08:21.960 --> 01:08:22.740
Das hier ist mein Programm.

01:08:23.020 --> 01:08:23.640
Da haben wir es.

01:08:24.780 --> 01:08:26.040
Ja, das ist das Maschinenprogramm.

01:08:26.680 --> 01:08:29.680
Damit Sie wissen, was dort steht, müssen wir hier den ersten Teil...

01:08:29.680 --> 01:08:30.780
Das ist unser Opcode.

01:08:32.320 --> 01:08:32.880
Interpretation.

01:08:33.460 --> 01:08:34.660
Opcode interpretieren.

01:08:35.420 --> 01:08:36.640
Da weiß ich, das erste ist ein Load.

01:08:36.860 --> 01:08:38.840
Und dahinter steht 959.

01:08:39.460 --> 01:08:43.440
Dann wird entsprechend hier also der Wert des Akkumulators auf 1

01:08:43.440 --> 01:08:43.840
gesetzt.

01:08:44.340 --> 01:08:49.120
Dann wird der Wert aus 958...

01:08:49.120 --> 01:08:54.080
Da hatte ich gesagt, das steht also anschließend...

01:08:54.080 --> 01:08:56.000
Wieso wird hier der Akkumulator auf 1 gesetzt?

01:08:56.400 --> 01:08:57.840
Habe ich gar nicht richtig gesagt.

01:08:57.840 --> 01:09:01.640
958, Load 959, da unten, da steht eine 1 drin.

01:09:02.220 --> 01:09:03.380
Wie immer die da hingekommen ist.

01:09:04.880 --> 01:09:07.960
Sie können sich mal überlegen, wie kann ich dafür sorgen, dass ich mit

01:09:07.960 --> 01:09:11.540
dem Befehlssatz, den ich habe, eine 1 irgendwo hinschreibe.

01:09:13.460 --> 01:09:14.720
Das kann man sich einfach überlegen.

01:09:14.780 --> 01:09:15.760
Gehe ich hier nochmal kurz drauf ein.

01:09:16.500 --> 01:09:19.000
Also, ich möchte eine 1 zunächst mal haben.

01:09:19.100 --> 01:09:20.560
Schreibe ich zunächst mal einen Akkumulator.

01:09:21.260 --> 01:09:26.140
Und anschließend schreibe ich diese 1 in meinen Register rein.

01:09:26.140 --> 01:09:30.720
In dem anschließend der Wert von X-Fakultät stehen soll.

01:09:31.980 --> 01:09:37.720
So, dann lade ich den Wert aus 957, da steht das X, in den

01:09:37.720 --> 01:09:38.320
Akkumulator.

01:09:40.220 --> 01:09:42.960
Und habe dann diesen Wert dort drin.

01:09:43.380 --> 01:09:49.100
Und wenn dieser Wert 0 ist, dann gehe ich nach 956 und da steht

01:09:49.100 --> 01:09:49.820
einfach nur HALT.

01:09:50.120 --> 01:09:50.640
Bin ich fertig.

01:09:52.020 --> 01:09:54.760
Wenn also der Wert X 0 ist, bin ich fertig.

01:09:54.760 --> 01:09:55.600
Warum?

01:09:56.080 --> 01:10:04.740
Weil in der Speicherzelle 958 hier jetzt bereits die 1 steht.

01:10:05.280 --> 01:10:08.120
Die habe ich ja reingeschrieben dadurch, dass ich den Inhalt des

01:10:08.120 --> 01:10:13.220
Akkumulators erst auf 1 gesetzt habe und die 1 dann dort

01:10:13.220 --> 01:10:14.020
hingeschrieben habe.

01:10:14.620 --> 01:10:15.680
Da steht jetzt schon die 1 drin.

01:10:15.740 --> 01:10:16.720
0 Fakultät ist 1.

01:10:16.720 --> 01:10:22.640
Und jetzt, wenn das nicht 0 ist, dann mache ich weiter mit dem

01:10:22.640 --> 01:10:23.380
nächsten Befehl.

01:10:23.740 --> 01:10:28.360
Da modifiziere ich den Inhalt des Akkumulators mit dem Wert, der in

01:10:28.360 --> 01:10:30.860
dem Register 958 steht.

01:10:30.940 --> 01:10:32.120
Das Zwischenergebnis.

01:10:32.680 --> 01:10:37.500
Also, Akkumulator hat den Wert X.

01:10:38.060 --> 01:10:42.700
X mal 1 ist der neue Wert des Akkumulators.

01:10:43.620 --> 01:10:44.540
Also auch wieder X.

01:10:46.000 --> 01:10:49.700
Dann schreibe ich diesen Wert nach Y rein.

01:10:49.860 --> 01:10:51.840
Dann steht jetzt hier als nächstes X.

01:10:52.920 --> 01:10:54.240
Nicht mehr 1, sondern X.

01:10:57.680 --> 01:10:59.540
Und das passiert hier.

01:10:59.660 --> 01:11:00.520
Ich schreibe das da rein.

01:11:01.180 --> 01:11:05.040
Und dann lade ich 957 in den Akkumulator.

01:11:05.500 --> 01:11:08.820
Das war wieder hier mein X.

01:11:09.660 --> 01:11:11.640
Also jetzt steht im Akkumulator wieder das X drin.

01:11:12.780 --> 01:11:16.300
Dann ziehe ich den Wert von 959 ab.

01:11:16.840 --> 01:11:17.660
Das ist 1.

01:11:18.540 --> 01:11:24.140
Das heißt, jetzt steht hier im Akkumulator X-1 und den Wert schreibe

01:11:24.140 --> 01:11:24.700
ich hier rein.

01:11:25.120 --> 01:11:26.680
Das heißt, jetzt steht hier X-1.

01:11:28.100 --> 01:11:35.240
Und dann bringe ich auf 949, das ist dieser Befehl, wenn das X jetzt

01:11:35.240 --> 01:11:37.280
den Wert 0 hat, bin ich fertig.

01:11:38.600 --> 01:11:43.020
Wenn da eine 1 stand, steht hier jetzt eine 0 bei 957.

01:11:43.860 --> 01:11:46.740
Und in 958 steht X.

01:11:47.360 --> 01:11:48.380
Das war eine 1.

01:11:49.060 --> 01:11:50.260
Ja, 1 faktorisiert ist 1.

01:11:50.460 --> 01:11:50.820
Stimmt auch.

01:11:51.500 --> 01:11:53.080
Und entsprechend geht das jetzt immer so weiter.

01:11:53.760 --> 01:11:57.980
Wenn es nicht 0 ist, dann werde ich jetzt also den Wert hier wieder

01:11:57.980 --> 01:11:58.480
rüberholen.

01:11:58.560 --> 01:12:02.120
Dann kommt hier rein X mal X-1.

01:12:02.920 --> 01:12:06.060
Und so weiter mal X-2 und so weiter.

01:12:06.060 --> 01:12:09.020
Und sukzessive wird das hier immer weiter reduziert.

01:12:09.080 --> 01:12:15.480
Da steht hier X-1, X-2, X-3 und so weiter.

01:12:15.840 --> 01:12:17.100
Bis ich irgendwann auf 0 bin.

01:12:17.780 --> 01:12:21.900
Und im Verlauf dieses Schleifen habe ich dann hier in meinem Register

01:12:21.900 --> 01:12:26.460
958 das Produkt aller Zahlen von X bis 1 berechnet.

01:12:27.880 --> 01:12:29.520
Also ganz einfaches Programm.

01:12:29.760 --> 01:12:32.220
Ich hoffe, Sie haben das hier mit dieser Interpretation verstehen

01:12:32.220 --> 01:12:32.580
können.

01:12:33.260 --> 01:12:35.500
Die Frage war, wie kann ich die 1 erzeugen?

01:12:35.520 --> 01:12:36.180
Hat einer eine Idee?

01:12:37.540 --> 01:12:41.220
Ich habe keine Möglichkeit zu sagen, ich möchte jetzt die 1

01:12:41.220 --> 01:12:42.440
reinschreiben in ein Register.

01:12:43.300 --> 01:12:46.280
Ich kann nur ein Registeradresse angeben.

01:12:47.740 --> 01:12:48.700
Wie könnte ich sowas machen?

01:12:48.900 --> 01:12:53.480
Hat einer eine Idee, wie ich eine 1 erzeugen kann in einem Register?

01:12:59.220 --> 01:13:02.520
Sie haben Multiplikationsbefehle, Sie haben Ladebefehle, Sie haben

01:13:02.520 --> 01:13:06.860
irgendwelche Befehle, wenn Sie laden können, vielleicht etwas

01:13:06.860 --> 01:13:07.860
wegspeichern können.

01:13:08.020 --> 01:13:11.460
Sie haben Addition, Multiplikation, Division und ähnliches.

01:13:11.720 --> 01:13:12.920
Wie können Sie eine 1 erzeugen?

01:13:14.480 --> 01:13:15.060
Das ist nicht so.

01:13:15.500 --> 01:13:16.320
Ich gebe Ihnen einen Tipp.

01:13:17.040 --> 01:13:19.480
Wenn Sie eine Zahl durch sich selbst dividieren, kommt eine 1 raus.

01:13:20.840 --> 01:13:23.520
Sie holen sich einen Wert aus irgendeinem Wert ins Speicher,

01:13:24.080 --> 01:13:27.220
dividieren den durch sich selbst, haben die 1 und schreiben das

01:13:27.220 --> 01:13:27.960
Ergebnis da rein.

01:13:28.640 --> 01:13:29.540
Das ist ganz einfach.

01:13:30.380 --> 01:13:30.780
Okay.

01:13:32.200 --> 01:13:35.860
Dann gibt es natürlich, das war jetzt eine einfache Maschinensprache.

01:13:36.940 --> 01:13:38.960
Jetzt wissen Sie, wie Maschinensprachen aussehen.

01:13:39.700 --> 01:13:41.880
Und Sie könnten ein kleines Programm in eine Maschinensprache

01:13:41.880 --> 01:13:42.240
schreiben.

01:13:43.480 --> 01:13:45.300
Haben wir noch nicht in Übung gemacht, das werden Sie nicht mehr

01:13:45.300 --> 01:13:45.500
schaffen.

01:13:46.340 --> 01:13:50.880
Aber Sie wissen, was das Wesentliche bei einer Maschinensprache ist.

01:13:52.480 --> 01:13:55.300
Und jetzt geht es so, dass man da noch ein bisschen mehr machen will

01:13:55.300 --> 01:13:55.640
manchmal.

01:13:55.640 --> 01:14:00.920
Es gibt dann Rechner, die haben sehr komplexe Instruktionen.

01:14:00.980 --> 01:14:04.020
Es gibt andere, die haben einen reduzierten Instruktionssatz.

01:14:04.720 --> 01:14:09.040
Die reduzierten Instruktionssätze waren dann sehr viel schneller, weil

01:14:09.040 --> 01:14:12.400
sie kleinere Befehle hatten, konnten einfacher ausgeführt werden.

01:14:13.120 --> 01:14:19.100
Und wenn ich weiß, dass die meisten Befehle in Programmen nur aus

01:14:19.100 --> 01:14:22.360
einer sehr kleinen Teilmenge des Befehlssatzes kommen, dann kann ich

01:14:22.360 --> 01:14:24.860
die auch möglichst gut implementieren.

01:14:24.980 --> 01:14:27.540
Das ist die Idee hinter den Reduced Instruction Set Computers oder

01:14:27.540 --> 01:14:28.980
auch RISC Rechner.

01:14:29.860 --> 01:14:32.480
Das waren also die leistungsfähigsten Rechner in den 90er Jahren.

01:14:33.820 --> 01:14:36.160
Also, wie gesagt, in den letzten 30 Jahren waren also die

01:14:36.160 --> 01:14:37.940
leistungsfähigsten Rechner alle vom RISC-Typ.

01:14:38.160 --> 01:14:41.440
Inzwischen hat man so viel Platz auf dem Chip, dass man die auch

01:14:41.440 --> 01:14:43.120
wieder etwas komplexer macht.

01:14:43.720 --> 01:14:47.540
Aber das ist also auch eine wichtige Geschichte gewesen.

01:14:47.540 --> 01:14:50.780
Die Erfindung der RISC Rechner, bei denen die Philosophie war.

01:14:51.800 --> 01:14:57.320
Ich beschränke mich auf einen kleinen Befehlssatz und komplexere

01:14:57.320 --> 01:15:00.760
Befehle muss ich dann halt über eine Folge von einfachen Befehlen

01:15:00.760 --> 01:15:01.220
ausführen.

01:15:01.320 --> 01:15:06.000
Aber wenn die nur selten aufgerufen werden, dann ist diese Zeit dafür

01:15:06.000 --> 01:15:07.000
überkraftend.

01:15:08.700 --> 01:15:11.740
Jetzt war eine wichtige Frage, wie kann ich eigentlich etwas

01:15:11.740 --> 01:15:12.460
adressieren?

01:15:13.380 --> 01:15:18.660
Also ich habe gesagt, ich habe hier meinen Op-Code und hier habe ich

01:15:18.660 --> 01:15:19.240
jetzt eine Adresse.

01:15:19.460 --> 01:15:23.120
A1, A2, irgendwelche Adressen, freier Adressbefehl.

01:15:23.720 --> 01:15:27.760
Und da ist es so, dass ich unterschiedliche Arten habe, auf Operanten

01:15:27.760 --> 01:15:28.440
zuzugreifen.

01:15:28.560 --> 01:15:34.500
Ich kann etwas unmittelbar machen, absolut, indirekt oder indiziert

01:15:34.500 --> 01:15:36.220
oder relativ oder implizit.

01:15:36.800 --> 01:15:38.860
Und das will ich Ihnen jetzt kurz darstellen, was das ist.

01:15:38.860 --> 01:15:43.620
Das erste, das unmittelbare oder auch immediate, heißt, ich nehme

01:15:43.620 --> 01:15:50.780
genau den Wert, der im Befehl steht, als der Wert des Operanten.

01:15:52.120 --> 01:15:57.440
Das heißt, in meinem Befehl steht der Operant oder der Wert 3 und der

01:15:57.440 --> 01:16:02.120
Wert soll jetzt genau in dieses Register reingeschrieben werden.

01:16:02.120 --> 01:16:09.360
Also ein Ladebefehl mit diesem Wert 3 wäre unmittelbar.

01:16:09.420 --> 01:16:11.200
Ich brauche nicht mehr auf den Speicher zuzugreifen.

01:16:11.540 --> 01:16:15.020
Der Wert wird direkt übertragen, direkt dort reingeschrieben.

01:16:15.420 --> 01:16:17.720
Das nächste wäre die absolute Adressierung.

01:16:17.800 --> 01:16:19.200
Das ist die Standardadressierung.

01:16:19.640 --> 01:16:25.080
Sie geben eine Adresse an, eine Speicherzelle.

01:16:25.080 --> 01:16:31.520
In der Speicherzelle steht ein Wert und Sie wollen irgendein Register

01:16:31.520 --> 01:16:36.640
laden mit dem Wert, der in der Speicherzelle mit Adresse 3 steht.

01:16:36.860 --> 01:16:37.900
Das wäre in dem Fall die 17.

01:16:38.500 --> 01:16:41.280
Da ist also die 3 eine Adresse.

01:16:42.440 --> 01:16:44.200
Dann gibt es die indirekte Adressierung.

01:16:45.020 --> 01:16:48.660
Das heißt, Sie wissen gar nicht genau, wo der Wert steht, den Sie

01:16:48.660 --> 01:16:49.420
laden wollen.

01:16:49.420 --> 01:16:53.700
Sie wissen aber, dass der Wert in einer Speicherzelle drin steht und

01:16:53.700 --> 01:16:55.160
diese Speicherzelle hat die Adresse 3.

01:16:55.800 --> 01:17:00.340
Dann greifen Sie auf den Wert zu, lesen erstmal die 7, greifen dann

01:17:00.340 --> 01:17:02.620
auf die Speicherzelle mit Adresse 7 zu.

01:17:02.780 --> 01:17:05.280
Dort steht die 17 und die kommt ins Register rein.

01:17:05.820 --> 01:17:08.820
Das heißt, Sie können auf die Art und Weise dynamisch festlegen, an

01:17:08.820 --> 01:17:12.340
welcher Stelle irgendwelche Werte im Speicher liegen sollen.

01:17:12.400 --> 01:17:15.480
Sie müssen das nicht zu Zeitpunkt wissen, wenn Sie das Programm

01:17:15.480 --> 01:17:15.900
schreiben.

01:17:15.900 --> 01:17:20.360
Wenn Sie nur direkte und unmittelbare Adressierung haben, könnten Sie

01:17:20.360 --> 01:17:22.660
so etwas dynamisch gar nicht machen.

01:17:23.920 --> 01:17:26.500
Und dann hat man noch die indizierte Adressierung.

01:17:27.360 --> 01:17:28.740
Die macht jetzt folgendes.

01:17:29.640 --> 01:17:32.700
Ich weiß gar nicht genau, worauf ich zugreifen will.

01:17:32.700 --> 01:17:37.840
Ich bin jetzt indiziert mit 3 laden.

01:17:38.520 --> 01:17:40.720
Da beziehe ich mich auf ein Indexregister.

01:17:41.800 --> 01:17:48.380
Und da ist die Idee dahinter, dass ich zugreifen möchte auf irgendeine

01:17:48.380 --> 01:17:48.980
Tabelle.

01:17:49.640 --> 01:17:52.860
Und ich weiß, ich habe hier Anfangsadresse ist meinetwegen 2.

01:17:54.180 --> 01:17:55.220
Der Wert steht da drin.

01:17:55.420 --> 01:17:56.220
Das ist die Anfangsadresse.

01:17:56.360 --> 01:18:02.460
Und ich möchte jetzt auf das Element 3, das dritte dahinter zugreifen.

01:18:02.460 --> 01:18:03.900
Deswegen plus 3.

01:18:04.340 --> 01:18:08.160
Ich greife auf die Adresse 5 zu, bzw.

01:18:08.280 --> 01:18:09.620
Speicherzelle mit Adresse 5.

01:18:10.080 --> 01:18:11.240
Und der Wert kommt hier rein.

01:18:11.900 --> 01:18:16.960
Das heißt, wenn ich ab einer bestimmten Stelle in meinem Speicher

01:18:16.960 --> 01:18:19.920
etwas adressieren möchte, kann ich das indiziert machen.

01:18:20.260 --> 01:18:24.500
Ich habe einen Basiswert, auf den ich den Wert draufaddiere, der in

01:18:24.500 --> 01:18:25.180
meinem Befehl steht.

01:18:26.500 --> 01:18:29.320
Ich kann also auch mehrere Indexregister geben, je nachdem, wie

01:18:29.320 --> 01:18:30.440
komplex Ihr Rechner ist.

01:18:30.440 --> 01:18:33.340
Da muss ich das Indexregister spezifizieren im Befehl.

01:18:35.040 --> 01:18:38.640
Typische Anwendung, wie gesagt, Komponenten größerer Datenstrukturen

01:18:38.640 --> 01:18:41.120
zugreifen, bei denen ich eine Anfangsadresse habe.

01:18:41.260 --> 01:18:43.960
Dann haben wir noch die relative Adressierung, die ist auch ganz

01:18:43.960 --> 01:18:44.400
wichtig.

01:18:45.460 --> 01:18:49.480
Die wird überwiegend dazu eingesetzt, dass Sie ein Programm irgendwann

01:18:49.480 --> 01:18:50.200
mal schreiben.

01:18:50.740 --> 01:18:53.020
Und wenn Sie das Programm schreiben, wissen Sie, ich habe hier Adresse

01:18:53.020 --> 01:18:55.400
0 bis irgendwie Adresse N.

01:18:56.600 --> 01:19:01.180
Und jetzt muss ich natürlich dafür sorgen, dass in dem Augenblick, wo

01:19:01.180 --> 01:19:06.400
dieses Programm irgendwo in meinen Hauptspeicher reingeladen wird, ich

01:19:06.400 --> 01:19:08.740
hier auch auf die richtige Adresse zugreifen kann.

01:19:09.040 --> 01:19:11.840
Das ist hier eine rein symbolische Adresse, eine logische Adresse.

01:19:12.540 --> 01:19:14.380
Hier muss ich die physikalische Adresse haben.

01:19:15.360 --> 01:19:17.380
Und das kann man jetzt so machen, dass man sagt, ich habe hier ein

01:19:17.380 --> 01:19:21.320
Basisregister, das mir die Startadresse meines Programms angibt.

01:19:21.320 --> 01:19:27.120
Und dann kann ich relativ dazu alle Adressen interpretieren, die in

01:19:27.120 --> 01:19:31.240
meinem Programm auftauchen, muss aber immer alles addieren zu diesem

01:19:31.240 --> 01:19:32.440
Wert des Basisregisters.

01:19:33.120 --> 01:19:35.640
Und dann komme ich erst auf die richtige Stelle, wo da mein Wert

01:19:35.640 --> 01:19:35.900
steht.

01:19:36.760 --> 01:19:40.340
Also hier sind indizierte und relative Adressierung sehr ähnlich.

01:19:40.880 --> 01:19:43.800
Aber die relative Adressierung bezieht sich immer auf den Fall, dass

01:19:43.800 --> 01:19:47.280
ich innerhalb eines Programms relativ zum Programmanfang adressiere.

01:19:47.280 --> 01:19:50.580
Und ich weiß, später wird das entsprechend transformiert, je nachdem,

01:19:51.100 --> 01:19:55.280
wo das Programm tatsächlich im Speicher irgendwann landet.

01:19:56.940 --> 01:19:58.940
Also das ist hier das Wesentliche.

01:19:59.180 --> 01:20:02.780
Hier will ich also einfach den Befehlszähler richtig initialisieren.

01:20:04.140 --> 01:20:06.360
So, dann gibt es noch eine implizite Adressierung.

01:20:07.960 --> 01:20:11.300
Sprungbefehle, da wird der Befehlszähler im Prinzip adressiert.

01:20:11.960 --> 01:20:13.940
Da will ich jetzt nicht weiter darauf eingehen.

01:20:13.940 --> 01:20:18.940
Üblicherweise haben Sie einen Teil dieser Adressierungsarten in einer

01:20:18.940 --> 01:20:20.120
konkreten Programmiersprache.

01:20:20.660 --> 01:20:23.480
Häufig haben Sie die auch noch geschickt kombiniert.

01:20:23.840 --> 01:20:28.040
Also schauen Sie sich eine komplexe Programmiersprache an oder eine

01:20:28.040 --> 01:20:29.920
realistische Programmiersprache an.

01:20:29.960 --> 01:20:32.800
Da werden Sie einige solcher verschiedenen Adressierungsarten.

01:20:34.460 --> 01:20:36.460
So, jetzt kommen wir zu Assembler-Sprachen.

01:20:37.440 --> 01:20:42.860
Dazu muss ich Ihnen kurz etwas erzählen.

01:20:42.860 --> 01:20:44.880
Die Assembler-Sprachen sind über die Maschinen-Sprachen.

01:20:45.300 --> 01:20:48.560
Und hier möchte ich also nicht Befehle in der binären Form anschauen,

01:20:48.640 --> 01:20:50.600
sondern in einer symbolischen Form.

01:20:51.020 --> 01:20:53.260
Das heißt, ich möchte jetzt das hinschreiben, was ich vorher als

01:20:53.260 --> 01:20:54.720
Kommentar daneben geschrieben habe.

01:20:55.980 --> 01:20:59.880
Und der Unterschied ist, dass ich jetzt also Namen für Befehle habe.

01:21:00.020 --> 01:21:04.300
Ich habe außerdem Adressen oder symbolische Adressen für meine

01:21:04.300 --> 01:21:04.880
Befehle.

01:21:05.160 --> 01:21:06.400
Ich kann Marken angeben.

01:21:06.400 --> 01:21:10.140
Und ich habe außerdem Pseudo-Befehle, die noch ein bisschen mehr

01:21:10.140 --> 01:21:11.540
Informationen geben.

01:21:12.980 --> 01:21:16.000
Das gebe ich Ihnen hier gleich zum Beispiel.

01:21:16.780 --> 01:21:19.020
Ich habe ein Markenfeld, kann die Marke angeben.

01:21:19.100 --> 01:21:20.140
Ich habe einen Operationscode.

01:21:20.580 --> 01:21:22.020
Ich habe meine Operandenadressen.

01:21:22.540 --> 01:21:26.800
Ich kann einen Kommentar angeben und kann damit ein Programm

01:21:26.800 --> 01:21:27.860
tatsächlich lesen.

01:21:29.600 --> 01:21:34.260
Ich habe in der Regel keine Datenstrukturierung da drin, keine

01:21:34.260 --> 01:21:35.940
weiteren Programmablaufsteuerungen.

01:21:36.380 --> 01:21:38.740
Im Prinzip ist das nur eine symbolische Notation der Maschinen

01:21:38.740 --> 01:21:39.120
-Sprache.

01:21:39.800 --> 01:21:42.500
Und wenn wir jetzt das Programm, das wir gerade hatten, als Assembler

01:21:42.500 --> 01:21:45.380
-Programm aufschreiben, dann gibt es hier zunächst mal eine Reihe

01:21:45.380 --> 01:21:46.320
Pseudo -Befehle.

01:21:47.020 --> 01:21:49.860
Die sind farbig anders markiert, mit schönen Kommentaren daneben.

01:21:50.420 --> 01:21:54.420
Hier habe ich jetzt die Möglichkeit, Variablen, symbolischen Namen,

01:21:55.660 --> 01:21:57.360
Werte zuzuordnen.

01:21:57.360 --> 01:22:02.340
Ich sage, wenn ich X schreibe in meinem Programm, dann meine ich die

01:22:02.340 --> 01:22:03.980
Adresse 957.

01:22:05.040 --> 01:22:07.700
Und das heißt, ich habe jetzt in meinem Programm die Möglichkeit,

01:22:07.940 --> 01:22:11.040
etwas zu formulieren, unabhängig von der konkreten Belegung der

01:22:11.040 --> 01:22:15.140
Variablen X und Y und HILF und ORG.

01:22:16.400 --> 01:22:21.400
Also ich habe hier symbolische Namen für konkrete Adressen im Programm

01:22:21.400 --> 01:22:24.580
und kann mein Programm also deutlich allgemeiner hinschreiben.

01:22:24.580 --> 01:22:27.780
Das ist genau das Programm, was ich Ihnen vorher erläutert habe.

01:22:28.140 --> 01:22:29.800
Jetzt aber als Assembler-Programm geschrieben.

01:22:30.340 --> 01:22:33.060
Ich habe hier eine Marke angegeben.

01:22:33.660 --> 01:22:35.940
Auf diese Marke wird an dieser Stelle gesprungen.

01:22:37.200 --> 01:22:39.200
Und ich habe noch eine Marke.

01:22:39.280 --> 01:22:40.620
Hier steht Jump Zero fertig.

01:22:40.800 --> 01:22:43.400
Fertig ist auch eine Marke.

01:22:44.240 --> 01:22:45.340
Und da unten.

01:22:47.580 --> 01:22:53.000
Und ich kann also an dieser Stelle hier von dort aus dorthin springen.

01:22:53.000 --> 01:22:54.300
Das ist ein Assembler-Programm.

01:22:54.400 --> 01:22:56.860
Deutlich einfacher zu lesen als ein Maschinen-Programm.

01:22:57.740 --> 01:23:01.540
Dann gibt es die problemorientierten Programmiersprachen, bei denen

01:23:01.540 --> 01:23:04.420
ich McKinsey, Java und ähnliche Dinge.

01:23:04.720 --> 01:23:10.720
Da kann ich unabhängig von der Hardware hier einiges, also meine

01:23:10.720 --> 01:23:11.520
Programme schreiben.

01:23:12.180 --> 01:23:17.680
Ich habe hier deutlich andere Möglichkeiten als in der Assembler

01:23:17.680 --> 01:23:19.800
-Sprache, meine Programme zu formulieren.

01:23:20.400 --> 01:23:24.040
Ich muss das Ganze dann übersetzen in eine ausführbare Maschinen

01:23:24.040 --> 01:23:25.720
-Sprache, das hatte ich Ihnen schon angedeutet.

01:23:26.320 --> 01:23:28.740
Das ist also relativ klar.

01:23:28.900 --> 01:23:31.400
Ich muss dann übersetzen in eine Maschinen-Sprache oder Assembler

01:23:31.400 --> 01:23:31.840
-Sprache.

01:23:32.440 --> 01:23:35.080
Die Assembler-Sprache ja auch überführen in eine Maschinen-Sprache.

01:23:35.900 --> 01:23:37.580
Und wenn ich mir anschaue, die problemorientierten

01:23:37.580 --> 01:23:40.880
Programmiersprachen, gibt es dort eine ganze Bandbreite verschiedener

01:23:40.880 --> 01:23:41.780
Sprachtypen.

01:23:43.020 --> 01:23:46.460
Imperative, Funktionale, Applikative, Prädikative, Objektorientierte.

01:23:46.460 --> 01:23:49.760
Das hier wäre Java.

01:23:50.660 --> 01:23:52.400
Das hier wäre sowas wie C.

01:23:52.940 --> 01:23:54.300
Und dazwischen gibt es noch ein paar andere.

01:23:55.980 --> 01:23:58.800
Also C ist eine imperative Sprache.

01:23:58.880 --> 01:24:01.620
Ich befehle genau, ich sage genau, wie der Ablauf sein soll.

01:24:02.280 --> 01:24:06.640
Es wird der Ablauf des Programms genau festgelegt.

01:24:07.220 --> 01:24:10.920
Da habe ich also diesen von Neumann in meinem Kopf und sage, das ist

01:24:10.920 --> 01:24:12.160
der Ablauf meines Programms.

01:24:12.160 --> 01:24:16.340
Und hier gibt es viele, viele, viele Programmiersprachen für viele,

01:24:16.460 --> 01:24:17.280
viele verschiedene Zwecke.

01:24:17.860 --> 01:24:20.880
Die haben alle ihre Bedeutung, unterschiedliche Anwendungsbereiche.

01:24:21.680 --> 01:24:26.260
Also zum Beispiel Algol, Algorithmic Language aus dem Jahr 60, aus dem

01:24:26.260 --> 01:24:27.920
Jahr 68, deutlich komplexer.

01:24:28.460 --> 01:24:31.580
Basic, C, COBOL, Common Business Oriented Language.

01:24:32.560 --> 01:24:37.760
Elan, Fortran, Formal Translator, Modular, Pascal, PL1, Simular.

01:24:37.760 --> 01:24:39.860
Eine der ersten objektorientierten Sprachen.

01:24:40.000 --> 01:24:43.920
Snowball, für Textverarbeitung besonders gut geeignet.

01:24:44.440 --> 01:24:45.340
Viele, viele Sprachen.

01:24:45.840 --> 01:24:46.440
Wahnsinnig viele.

01:24:47.100 --> 01:24:49.660
Dann gibt es funktionale Sprachen und applikative Sprachen.

01:24:50.240 --> 01:24:56.540
Sprachen, bei denen ich auf einer funktionalen Ebene etwas

01:24:56.540 --> 01:24:57.080
aufschreibe.

01:24:57.160 --> 01:25:00.840
Ich gebe den Ablauf nicht genau an, sondern ich sage nur im Prinzip,

01:25:01.060 --> 01:25:02.540
was getan werden soll.

01:25:02.540 --> 01:25:06.760
Also hier ist ein kleines Beispiel für das Programm Merge Sort in

01:25:06.760 --> 01:25:08.040
einer funktionalen Sprache.

01:25:08.540 --> 01:25:13.320
Da spezifiziere ich einfach rekursiv, dass Merge Sort von einer leeren

01:25:13.320 --> 01:25:14.640
Liste eine leere Liste ist.

01:25:15.100 --> 01:25:18.000
Merge Sort von einer einelementigen Liste diese einelementige Liste.

01:25:18.900 --> 01:25:24.920
Und wenn ich eine andere Liste habe, dann mische ich einfach zwei

01:25:24.920 --> 01:25:28.020
Teillisten, M-Sort L und M-Sort R.

01:25:28.020 --> 01:25:34.180
Hier rufe ich also M-Sort rekursiv auf, auf etwas was L heißt, etwas

01:25:34.180 --> 01:25:35.140
was R heißt.

01:25:35.620 --> 01:25:47.120
Wobei L hier gerade der linke Teil ist, wenn das hier meine Liste ist,

01:25:47.820 --> 01:25:50.820
ist L gerade der linke Teil, R der rechte Teil.

01:25:50.820 --> 01:26:02.160
Ich nehme den linken Teil Ndiv2, die halbe Liste, erste Hälfte von S

01:26:02.160 --> 01:26:03.960
und R ist der Rest.

01:26:04.200 --> 01:26:07.300
Drop Ndiv2 von S, wieder einfach eine Ausführung von irgendwelchen

01:26:07.300 --> 01:26:08.280
Funktionen.

01:26:08.400 --> 01:26:11.940
Und N in dem Fall ist die Länge von S, das was hier drin vorkam.

01:26:12.280 --> 01:26:14.580
Auf die Art und Weise kann ich also Merge Sort beschreiben.

01:26:14.580 --> 01:26:18.040
Ich muss natürlich dazu noch sagen, wie diese Funktion Mische

01:26:18.040 --> 01:26:19.140
ausgeführt wird.

01:26:19.260 --> 01:26:21.580
Das ist eine weitere Definition einer Funktion.

01:26:22.420 --> 01:26:25.700
Das ist also auf einer abstrakten Ebene mathematisch formuliert, die

01:26:25.700 --> 01:26:27.460
Ausführung eines Programms.

01:26:28.340 --> 01:26:33.580
Und Sie können für solche Programme ziemlich gut Korrektheitsbeweise

01:26:33.580 --> 01:26:36.680
machen und ähnliches, weil das sehr nah ist an mathematischen

01:26:36.680 --> 01:26:37.580
Spezifikationen.

01:26:38.580 --> 01:26:42.420
Und hat also Vorteile hinsichtlich der Verständlichkeit und

01:26:42.420 --> 01:26:44.580
Verlässlichkeit von Programmen.

01:26:45.420 --> 01:26:50.240
Also ich kann in der logischen Struktur des zu lösenden Problems

01:26:50.240 --> 01:26:50.860
arbeiten.

01:26:51.220 --> 01:26:54.500
Der Nachteil ist, dass ich hier weniger auf effiziente Ausführbarkeit

01:26:54.500 --> 01:26:55.920
achten kann.

01:26:56.340 --> 01:27:05.320
Und das heißt, ich muss hier das dann dem Ausführungssystem

01:27:05.320 --> 01:27:05.900
überlassen.

01:27:06.760 --> 01:27:09.140
Dann sind wir leider am Ende der heutigen Vorlesung.

01:27:09.600 --> 01:27:12.620
Und wir werden also nächstes Mal diesen Abschnitt über Programmierung

01:27:12.620 --> 01:27:13.240
fertig machen.

01:27:13.360 --> 01:27:14.980
Ich werde Ihnen noch ein bisschen was erzählen können über

01:27:14.980 --> 01:27:15.840
Betriebssysteme.

01:27:17.080 --> 01:27:18.920
Ich hätte eine weitere Vorlesung gebraucht.

01:27:19.000 --> 01:27:21.860
Dann hätte ich das Kapitel Betriebssysteme richtig abschließen können.

01:27:22.660 --> 01:27:24.280
Und in zwei Wochen ist schon die Klausur.

01:27:24.740 --> 01:27:25.700
Irgendwie fehlt mir eine Woche.

01:27:26.180 --> 01:27:26.720
Tut mir leid.

01:27:27.340 --> 01:27:28.620
Für heute war das genug, denke ich.

01:27:28.640 --> 01:27:29.280
War sehr viel Stoff.

01:27:29.360 --> 01:27:30.580
Ich danke Ihnen für die Aufmerksamkeit.

01:27:30.660 --> 01:27:31.420
Wünsche Ihnen eine schöne Woche.

01:27:31.920 --> 01:27:33.580
Wir sehen uns in einer Woche wieder.

01:27:33.580 --> 01:27:33.700
Bis dann.

