WEBVTT

00:00.830 --> 00:02.260
So, schönen guten Tag.

00:02.920 --> 00:06.160
Ich begrüße Sie zur Fortsetzung der Vorlesung Grundlageninformatik 2.

00:07.000 --> 00:07.860
Vorletzte Mal.

00:08.720 --> 00:13.980
Wir haben heute noch die Vorlesung, dann Mittwoch ist die Saalübung

00:15.380 --> 00:18.140
und dann ist nächsten Montag nochmal Vorlesung.

00:18.280 --> 00:21.680
Ich gehe davon aus, dass ich da schon in das Kapitel 11 hineinkomme

00:21.680 --> 00:24.620
und dass ich dann am nächsten Montag abschließen kann.

00:24.860 --> 00:28.660
Wenn sich das irgendwas verzögert, brauche ich noch den Mittwoch

00:28.660 --> 00:31.460
drauf, aber ich denke, dass ich ohne den auskommen kann.

00:32.540 --> 00:38.040
Gut, nochmal Erinnerung anmelden für die Klausur könnte sich bis

00:38.040 --> 00:39.020
heute...

00:39.840 --> 00:46.020
Also nochmal kurz hier Erinnerung...

00:52.080 --> 00:52.760
Bitte?

00:55.300 --> 00:59.680
Nein, nein, die Frage war gerade, ob Kapitel 11 klausurrelevant ist.

00:59.680 --> 01:04.060
So wie ich es immer schon gesagt habe, Kapitel 11 kommt so sehr am

01:04.060 --> 01:07.600
Ende und wird also nicht vollständig behandelt.

01:07.940 --> 01:11.960
In der Vorlesung ist für die Klausur am Ende des Wintersemesters nicht

01:11.960 --> 01:14.740
klausurrelevant, aber für die Klausur am Ende des Sommersemesters.

01:15.740 --> 01:35.560
Also Klausuranmeldung nur noch heute am 02.02.2015.

01:38.660 --> 01:40.780
Großes Ausrufezeichen.

01:41.280 --> 01:43.020
Ganz wichtig, dass Sie das rechtzeitig machen.

01:43.020 --> 01:49.580
Jetzt gehe ich aber gleich wieder raus, weil ich nicht im

01:49.580 --> 01:50.960
Präsentationsmodus sein möchte.

01:51.640 --> 01:52.580
Das behalten wir bei.

01:53.080 --> 01:56.600
So, wir hatten uns letztes Mal mit Betriebssystemen beschäftigt,

01:56.680 --> 02:00.780
hatten dort schon einiges angeschaut, worum es eigentlich geht bei

02:00.780 --> 02:04.520
Betriebssystemen, um die Verwaltung aller Geräte, aller Ressourcen im

02:04.520 --> 02:07.920
Rechner, sodass der Rechner bestmöglich ausgenutzt wird und

02:07.920 --> 02:12.840
gleichzeitig die Nutzung des Rechners bestmöglich erfolgt mit

02:12.840 --> 02:17.360
möglichst geringen Wartezeiten, mit möglichst geringen Antwortzeiten.

02:17.980 --> 02:20.240
Und ich habe dann kurze Übersicht gemacht über die verschiedenen

02:20.240 --> 02:24.300
Betriebssysteme, die es so gibt, von Microsoft, dann die anderen,

02:24.740 --> 02:30.080
Unix, Linux, Apple war auf der vorigen Folie.

02:30.780 --> 02:34.540
Und dann hatten wir gesehen, dass die Betriebssysteme immer in

02:34.540 --> 02:37.460
Schichten angeordnet sind, weil die Aufgaben besser so bearbeitet

02:37.460 --> 02:38.200
werden können.

02:38.200 --> 02:40.440
Ich habe Ihnen dann etwas erzählt über die Betriebsart einer

02:40.440 --> 02:43.600
Rechenanlage, von Stapelbetrieb bis zum kleinen Serverbetrieb.

02:44.540 --> 02:47.900
Stapelbetrieb, also das Bearbeiten von Aufträgen unabhängig von

02:47.900 --> 02:50.580
Interaktion mit dem Nutzer, beziehungsweise Interaktion ist dann gar

02:50.580 --> 02:55.020
nicht möglich, man möchte also mit möglichst hohem Durchsatz arbeiten.

02:56.540 --> 02:59.700
Multiprogrammbetrieb, man nutzt es aus, dass mehrere Prozesse

02:59.700 --> 03:04.020
gleichzeitig aktiv sind, um dadurch etwas besser die Ressourcen am

03:04.020 --> 03:08.340
Rechner ausnutzen zu können und nicht während der Eingabe oder

03:08.340 --> 03:13.460
Ausführung oder Ausgabe die anderen warten zu lassen, sondern die

03:13.460 --> 03:14.900
nebeneinander arbeiten zu lassen.

03:15.020 --> 03:17.800
Im Prinzip ist das so eine Art Pipeline, die man hier macht, dass man

03:17.800 --> 03:21.840
eben das einteilt in die Nutzung der verschiedenen Ressourcen und dann

03:21.840 --> 03:25.000
bereits die anderen Prozesse mit dort integriert.

03:25.780 --> 03:29.080
Wir hatten Dialogbetrieb angeschaut, Echtzeitbetrieb.

03:29.080 --> 03:31.300
Echtzeitbetrieb ist wichtig für alle möglichen technischen

03:31.300 --> 03:35.460
Anwendungen, gerade im Bereich Cyber-Physical-Systems ist das eine der

03:35.460 --> 03:39.360
wesentlichsten Randbedingungen, unter denen man arbeiten muss und

03:39.360 --> 03:42.800
deswegen muss man genau aufpassen, wie man es sich eigentlich leisten

03:42.800 --> 03:47.340
kann, aus dem eigenen Rechner, aus einem Rechner herauszugehen, in

03:47.340 --> 03:51.100
irgendwelche virtuellen Dienste, in der Regel wird man viele Dinge

03:51.100 --> 03:54.700
dann lokal machen und nur einige Dinge, die nicht zeitrelevant sind,

03:54.760 --> 03:59.460
die kann man dann auch über virtuelle Rechenressourcen bearbeiten.

03:59.780 --> 04:01.800
Client-Server-Betrieb, hatte ich Ihnen auch schon mal was darüber

04:01.800 --> 04:05.860
erzählt, wurde hier nochmal vertieft, dann mit den ganzen Aufgaben.

04:06.300 --> 04:09.360
Insbesondere, dass wir hier eben eine Middleware-Schicht haben, die

04:09.360 --> 04:13.920
dafür sorgt, dass die Kommunikation zwischen den verschiedenen Servern

04:13.920 --> 04:16.840
sinnvoll funktioniert, also Servern und Clients bzw.

04:17.280 --> 04:18.380
zwischen den einzelnen Peers.

04:19.760 --> 04:22.520
Kommunikationsschicht, Maklerschicht wird halt realisiert durch die

04:22.520 --> 04:28.100
Middleware und das ist also ein ganz wesentlicher Teil heutiger

04:28.100 --> 04:32.000
Rechner, dass die gut, effizient und effektiv kommunizieren können.

04:32.460 --> 04:35.020
Ich habe Ihnen kurz gesagt, was eine serviceorientierte Architektur

04:35.020 --> 04:38.280
ist, eben mit den verschiedenen Schichten, was man Basisdienste

04:38.280 --> 04:43.060
anbietet, die man konfiguriert zu Anwendungsdiensten und dann Services

04:43.060 --> 04:46.580
nach außen anbietet, wobei man hier diese Landkarte, da war ich

04:46.580 --> 04:50.080
letztes Mal nicht drauf eingegangen, die Landkarte dient dazu, dass

04:50.080 --> 04:57.840
man eine Übersicht hat über das, was also an Services gerade angeboten

04:57.840 --> 05:00.820
wird, wie die miteinander vernetzt sind, so dass man im Prinzip für

05:00.820 --> 05:07.560
ein Monitoring, für eine Wartung dieser Architektur bestmöglich

05:07.560 --> 05:08.740
Informationen bekommt.

05:09.560 --> 05:12.340
Dann hatte ich darauf hingewiesen, dass man die Betriebsarten

05:12.340 --> 05:13.060
kombiniert.

05:13.060 --> 05:16.100
Wir hatten uns dann Prozesse und Prozesszustände angeschaut.

05:16.380 --> 05:19.400
Da geht es also darum, wie kann ein Prozess tatsächlich ausgeführt

05:19.400 --> 05:19.800
werden.

05:20.220 --> 05:26.620
Dazu kommt er eben in eine Reihe von Zuständen, also hier auf dem

05:26.620 --> 05:28.640
nächsten Folio nochmal angedeutet, grafisch.

05:29.020 --> 05:32.460
Wenn er startet, ist er initiiert, danach kann er irgendwann bereit

05:32.460 --> 05:35.560
sein, wenn alle Ressourcen, die er braucht, zur Verfügung stehen.

05:36.700 --> 05:40.240
Wenn er bereit ist, wartet er darauf, ausgeführt zu werden, dann wird

05:40.240 --> 05:40.840
er aktiv.

05:41.060 --> 05:44.180
Wenn er dann eine Interaktion braucht oder eine Ressource braucht,

05:44.660 --> 05:45.540
wird er blockiert.

05:46.020 --> 05:48.980
Sobald die Ressource da ist, kann er wieder bereit werden und diese

05:48.980 --> 05:51.540
Schleife läuft so lange, bis er irgendwann terminieren kann.

05:51.960 --> 05:56.440
Das wurde dann hier noch genauer erläutert und dann war die Frage, wie

05:56.440 --> 05:59.220
kann ich eigentlich jetzt die Rechenzeit zuteilen, was für Kriterien

05:59.220 --> 05:59.820
gibt es dafür.

06:00.480 --> 06:06.360
Man nennt das auch Scheduling von Prozessen und da gibt es halt die

06:06.360 --> 06:09.080
einfache Art, das mit First Come, First Serve zu machen über eine

06:09.080 --> 06:14.380
einfache Warteschlange oder eben diese Warteschlange nicht nach dem

06:14.380 --> 06:18.300
Zeitpunkt des Eintretens zu priorisieren, sondern nach anderen

06:18.300 --> 06:24.360
Prioritäten wie zum Beispiel Bedeutung der Aufgabe, Betriebssystem

06:24.360 --> 06:28.250
oder auch Echtzeitprozesse, interaktive Prozesse,

06:29.480 --> 06:31.460
Übersetzungsprozesse, Editierprozesse, Batchprozesse.

06:31.520 --> 06:34.180
Die laufen natürlich dann ganz am Ende mit niedrigster Priorität.

06:34.180 --> 06:38.940
Wir haben ein System, das sich Joschka nennt, bei dem wir Prozesse im

06:38.940 --> 06:42.360
Hintergrund laufen lassen auf niedrigster Priorität und die nutzen

06:42.360 --> 06:45.020
also immer dann, wenn der Rechner nicht für andere Dinge gebraucht

06:45.020 --> 06:46.660
wird, die zur Verfügung stehen, die Rechenzeit.

06:47.120 --> 06:50.380
Damit können wir also hervorragend alle Rechner oder viele Rechner zum

06:50.380 --> 06:55.340
Beispiel im Uninetzchen nutzen, um sie für unsere Zwecke zu nutzen.

06:56.100 --> 06:59.560
Das ist also eine wichtige Sache, dass man dann aber eben nicht die

06:59.560 --> 07:06.220
anderen stört, die ja, wenn sie ihre Dinge machen wollen, eine höhere

07:06.220 --> 07:07.000
Priorität bekommen.

07:07.540 --> 07:10.060
Das war die Prioritätsgesteuerten Zuteilungsverfahren.

07:10.160 --> 07:13.880
Dann kam das Zeitscheibenverfahren, das Round Robbing, bei dem man

07:13.880 --> 07:18.640
jedem Prozess eine gewisse Zeit zuordnet oder zuteilt, aber eben nur

07:18.640 --> 07:21.380
bis zu einer maximalen Zeit.

07:21.640 --> 07:23.220
Und dann kommt der nächste Prozess dran.

07:23.380 --> 07:25.060
Dafür muss man die Prozesse unterbrechen.

07:25.060 --> 07:30.020
Deswegen heißt dieses Verfahren Preemptive Scheduling, während die

07:30.020 --> 07:33.100
anderen vorher, die ich gezeigt hatte, non-preemptive waren.

07:33.240 --> 07:35.080
Die haben einen Prozess vollständig ausgeführt.

07:35.600 --> 07:36.780
Und dann kam der nächste dran.

07:39.060 --> 07:42.440
Dann kam ich letztes Mal noch kurz zur Hauptspeicherverwaltung.

07:42.940 --> 07:44.980
Wir haben halt eine Speicherhierarchie.

07:45.140 --> 07:48.360
Wir wissen, dass die Zugriffszeiten auf die verschiedenen

07:48.360 --> 07:52.180
Speicherbereiche unterschiedlich sind, die ganzen Formate auch

07:52.180 --> 07:52.840
unterschiedlich sind.

07:52.840 --> 07:56.180
Da muss man sich darum kümmern, wie kann man den Speicher geeignet

07:56.180 --> 08:01.000
verwalten, sodass immer die Prozesse, die ihn brauchen, auch dort in

08:01.000 --> 08:03.480
dem Hauptspeicher resident sind, also vorhanden sind.

08:04.320 --> 08:08.800
Und dazu schaut man sich an den Adressraum eines einzelnen Programms.

08:08.980 --> 08:12.100
Man schaut sich an die Vereinigung aller Prozesse, die gerade aktiv

08:12.100 --> 08:12.720
sein wollen.

08:13.240 --> 08:16.960
Man muss natürlich dafür sorgen, dass die, die gerade aktiv sind, auch

08:16.960 --> 08:18.660
wirklich alle irgendwie im Speicher drin sind.

08:18.660 --> 08:22.460
Und wenn das nicht geht, muss man sehen, wie man damit umgehen kann.

08:23.540 --> 08:27.200
Und dazu schauen wir uns erst nochmal an die Struktur von Adressraum.

08:27.300 --> 08:28.020
Das war die letzte Folie.

08:28.100 --> 08:31.240
Letztes Mal gehe ich mal hier wieder auf den Präsentationsmodus.

08:32.260 --> 08:39.660
Das war also hier diese Darstellung unseres Speicherbereiches.

08:40.480 --> 08:44.500
Virtuell haben wir einen großen Speicherbereich, der definiert ist

08:44.500 --> 08:50.640
über den Adressraum, das heißt über die Möglichkeit, irgendwelche Orte

08:50.640 --> 08:54.260
in diesem Speicherbereich zu adressieren.

08:54.360 --> 08:55.780
Das ist also der Adressraum.

08:55.940 --> 09:00.080
Alles, was ich adressieren kann, alle Informationseinheiten gehören

09:00.080 --> 09:01.620
also zu dem Adressraum.

09:01.740 --> 09:05.200
Und dann haben wir den Speicherraum, das hatte ich schon gesagt, das

09:05.200 --> 09:08.100
ist ja der Speicherraum im Hauptspeicher.

09:08.100 --> 09:13.720
Und um jetzt einen sinnvollen Transfer von Informationen, die zunächst

09:13.720 --> 09:17.660
mal irgendwo ausgelagert sind, auf den nichtflüchtigen

09:17.660 --> 09:21.140
Hintergrundspeicher, um die sinnvoll in den Hauptspeicher hinein zu

09:21.140 --> 09:25.280
bekommen, ist eben eine Einteilung des Hintergrundspeichers und des

09:25.280 --> 09:31.340
Hauptspeichers in Blöcke, beziehungsweise Seiten in dem Adressraum,

09:31.400 --> 09:32.560
also im Hintergrundspeicher.

09:32.560 --> 09:37.360
Da haben wir Seiten, die sind durchnummeriert, sagen wir mal von 0 bis

09:37.360 --> 09:38.160
M -1.

09:38.280 --> 09:40.960
Wir gehen davon aus, wir haben N, Groß-N, solche Seiten.

09:41.540 --> 09:46.800
Wir haben Groß-M, viele Seitenrahmen im Hauptspeicher, in die wir eine

09:46.800 --> 09:48.380
Seite jeweils reinpacken können.

09:48.520 --> 09:52.960
Das sind also Rahmen, die mit Bildern, also eine Art Wechselrahmen und

09:52.960 --> 09:54.180
die Inhalte können sich ändern.

09:54.300 --> 09:56.800
Da kommen halt alle möglichen Seiten hin, wann immer sie gebraucht

09:56.800 --> 09:57.060
werden.

09:57.460 --> 10:00.820
Und wie man das macht, das schauen wir uns auf den nächsten Seiten an.

10:02.520 --> 10:09.280
Das ist also jetzt hier die Frage, wie können wir den Hauptspeicher,

10:10.120 --> 10:13.140
also nicht einen virtuellen Speicher an Prozesse zuweisen, sondern

10:13.140 --> 10:15.320
einen realen Speicher den Prozessen zuweisen.

10:16.000 --> 10:19.040
Die Frage ist halt, was geschieht, wenn die Prozesse nicht

10:19.040 --> 10:21.880
gleichzeitig im Hauptspeicher Platz finden, wenn also die Vereinigung

10:21.880 --> 10:28.120
der Adressräume der einzelnen Programme größer ist als die zur

10:28.120 --> 10:31.840
Verfügung stehende Kapazität in dem Speicherraum.

10:32.500 --> 10:35.600
Und dann macht man einen Seitenwechsel und die Frage ist, wie kann man

10:35.600 --> 10:36.300
das hinbekommen.

10:36.900 --> 10:44.820
Wir haben im Rechner eine Seitentabelle, das ist also hier so eine

10:44.820 --> 11:01.080
Tabelle und da steht für jede Seite in der Seitentabelle, steht für

11:01.080 --> 11:09.140
jedes Element im Seitenrahmen, steht dort drin, welche Seite dort drin

11:09.140 --> 11:09.460
ist.

11:10.140 --> 11:14.620
Also hier habe ich die Seitenrahmen, da habe ich also hier von 0

11:14.620 --> 11:15.460
bis...

11:22.260 --> 11:32.180
Also für jede Seite, diese Funktion f, von 0 bis n-1, habe ich hier

11:32.180 --> 11:36.380
also immer irgendwelche Werte stehen, f von 0 usw.

11:37.320 --> 11:40.720
Und das kann eben auch mal irgendein Wert n sein.

11:41.000 --> 11:45.840
Ein Wert n ist, oder das Symbol n sagt, diese Seite ist nicht im

11:45.840 --> 11:46.500
Hauptspeicher.

11:47.140 --> 11:52.160
Bei den anderen, wenn das also ein Wert ist zwischen 0 und n-1, dann

11:52.160 --> 11:53.760
ist diese Seite im Hauptspeicher.

11:55.720 --> 11:59.460
Und die Frage ist dann, wenn wir jetzt auf ein Element zugreifen, wir

11:59.460 --> 12:02.820
haben in unserem Programm, wie wir wissen, irgendwelche Operanten

12:02.820 --> 12:10.080
adressiert über die Operantenadressen und eine solche Adresse ist

12:10.080 --> 12:11.500
zunächst mal eine virtuelle Adresse.

12:11.620 --> 12:17.100
Eine virtuelle Adresse in dem Speicherraum oder in dem Adressraum des

12:17.100 --> 12:22.340
Programms besteht aus der Seitenadresse und der Adresse innerhalb der

12:22.340 --> 12:22.620
Seite.

12:22.620 --> 12:28.420
Also wir müssen wissen, wo ist hier in unserem, wenn wir hier diese

12:28.420 --> 12:34.500
ganzen Seiten hatten, in welcher Seite ist mein Datum und wo auf der

12:34.500 --> 12:34.840
Seite.

12:35.720 --> 12:38.460
Jetzt wird eine solche Seite in den Hauptspeicher geladen.

12:38.960 --> 12:42.480
Es ändert sich dadurch nicht die Anordnung des Elements innerhalb der

12:42.480 --> 12:42.820
Seite.

12:43.020 --> 12:46.860
Das heißt, das bleibt gleich, wenn man jetzt transformiert von der

12:46.860 --> 12:50.200
virtuellen Adresse in eine reale Adresse.

12:50.200 --> 12:55.120
Was sich ändert, ist hier vorne die Nummer des Seitenrahmens.

12:55.300 --> 12:58.440
Die Seitenadresse wird verändert in die Seitenrahmenadresse.

12:59.040 --> 13:03.580
Dann weiß ich, auf welche Adresse im Hauptspeicher mein Programm

13:03.580 --> 13:04.840
tatsächlich zuweisen muss.

13:05.440 --> 13:07.260
Also das ist diese Übertragung.

13:07.540 --> 13:11.480
Auf die Art und Weise kann ich von einem Zugriff im virtuellen

13:11.480 --> 13:15.480
Adressraum auf die tatsächliche reale Adresse abbilden.

13:15.560 --> 13:18.520
Ich muss die richtige Seitenrahmenadresse kennen.

13:18.520 --> 13:23.120
Wenn jetzt folgendes passiert, ich benötige einen Prozessor, benötige

13:23.120 --> 13:25.320
ein Speicherelement mit einer bestimmten Adresse.

13:26.020 --> 13:30.220
Der Befehl ist geladen worden, da steht zunächst mal dieses Sigma

13:30.220 --> 13:30.920
-Beta.

13:31.940 --> 13:35.920
Und jetzt muss man eben feststellen, wir haben diese Abbildung,

13:36.880 --> 13:38.480
Zugriff auf die Seitentabelle.

13:38.480 --> 13:46.280
Und der erste Fall ist, dass diese Seite in einem Seitenrahmen liegt,

13:46.340 --> 13:49.360
ist ungleich diesem Indikator N.

13:50.040 --> 13:55.260
Das heißt, die Seite befindet sich in einem Seitenrahmen F von Sigma.

13:55.640 --> 14:00.300
Und dann wird einfach die Adresse ersetzt durch diese reale Adresse

14:00.300 --> 14:04.440
mit dem Seitenrahmen und dem Beta, die Adresse innerhalb der Seite.

14:04.540 --> 14:05.260
Das ist dann einfach.

14:05.260 --> 14:09.440
Wenn wir also hier eine solche Adresse haben, wir wollen hier

14:09.440 --> 14:13.820
zugreifen auf die Seite in dem Beispiel 52.

14:14.980 --> 14:16.500
Das ist gerade 52.

14:17.580 --> 14:25.140
Und in der Seitentabelle steht jetzt gerade der Seitenrahmen 11, dann

14:25.140 --> 14:26.240
wird das entsprechend verändert.

14:26.760 --> 14:27.800
Hinten bleibt alles gleich.

14:28.100 --> 14:31.160
Also eine relativ kleine Seite mit drei Bits, das ist ja nur ein

14:31.160 --> 14:33.940
kleines Beispiel dafür.

14:35.720 --> 14:38.680
Der zweite Fall wäre, dass wir einen Seitenfehler haben.

14:38.780 --> 14:41.180
Sie erinnern sich, wir hatten sowas schonmal, als ich Ihnen Cache

14:41.180 --> 14:42.660
vorgestellt habe.

14:42.940 --> 14:46.020
Da hatten wir Cachefehler, weil ein Datum nicht im Cache lag.

14:47.360 --> 14:50.260
Und hier haben wir jetzt das Problem, eine Seite ist nicht im

14:50.260 --> 14:50.860
Hauptspeicher.

14:51.000 --> 14:54.240
Das heißt, das ist der Fall, dass auf einmal ein Prozess unterbrochen

14:54.240 --> 14:56.740
werden muss, weil die Seite nicht vorhanden ist.

14:56.820 --> 14:59.780
Wir müssen das Element erstmal in den Hauptspeicher laden.

14:59.780 --> 15:04.520
Und die Frage ist, wo lädt man denn dann diese Seite hin?

15:05.240 --> 15:09.880
Wenn es einen freien Seitenrahmen gibt, das ist natürlich der schöne

15:09.880 --> 15:13.560
Fall, der einfache Fall, dann brauche ich ja nur diese Seite in diesen

15:13.560 --> 15:15.460
freien Rahmen rein zu kopieren.

15:15.700 --> 15:16.440
Bin fertig.

15:16.840 --> 15:21.640
Dann kann ich die Seitentabelle entsprechend verändern und kann

15:21.640 --> 15:22.820
weiterarbeiten.

15:22.920 --> 15:27.640
Der Prozess wird wieder bereit, weil die Seite vorhanden ist.

15:28.260 --> 15:32.300
Wenn es keinen freien Seitenrahmen gibt, dann wird man das Programm

15:32.300 --> 15:35.180
nicht abbrechen und sagen, Pech gehabt, war kein Speicher da, kann

15:35.180 --> 15:38.600
nicht ausgeführt werden, sondern man blockiert diese Seite und wartet

15:38.600 --> 15:40.600
so lange, bis das geht.

15:40.720 --> 15:41.420
Und wann geht das?

15:41.680 --> 15:43.840
Wenn man etwas freigemacht hat.

15:44.780 --> 15:55.040
Man muss also irgendeinen Seitenrahmen in den Hintergrundspeicher

15:55.040 --> 15:56.080
zurückschreiben.

15:56.080 --> 15:58.200
Es wird eine Seite ausgelagert.

15:58.320 --> 15:59.720
Die Frage ist, welche nimmt man denn da?

16:00.720 --> 16:02.620
Da gibt es viele verschiedene Strategien für.

16:03.200 --> 16:06.900
Eine, die kennen Sie schon, die Strategie Least Recently Used.

16:08.020 --> 16:12.360
Wir hatten auch beim Cached solche Strategien.

16:12.440 --> 16:15.400
Hier gibt es verschiedene, Least Recently Used oder Least Frequently

16:15.400 --> 16:16.040
Used.

16:16.560 --> 16:20.760
Least Frequently kann ein gewisses Problem sein, also wie häufig

16:20.760 --> 16:21.520
benutzt worden.

16:21.520 --> 16:24.820
Wenn ich nur die Anzahl der Zugriffe anschaue, hätten alte Seiten, die

16:24.820 --> 16:27.200
lange drin liegen, einen Vorteil gegenüber Seiten, die nicht so lange

16:27.200 --> 16:27.740
drin liegen.

16:28.240 --> 16:30.720
Da muss man also was anderes machen.

16:31.240 --> 16:38.360
Least Recently Used heißt, am längsten her, dass auf diese Seite

16:38.360 --> 16:39.380
zugegriffen wurde.

16:40.900 --> 16:43.020
Das sieht alles vernünftig aus.

16:43.260 --> 16:45.300
Man kann verschiedene Heuristiken da anwenden.

16:45.300 --> 16:49.980
Und sucht sich also eine Seite aus, die ausgelagert werden kann, bei

16:49.980 --> 16:55.240
der die Wahrscheinlichkeit dafür, dass demnächst wieder ein Zugriff

16:55.240 --> 16:57.360
auf diese Seite erfolgt, möglichst klein ist.

16:57.440 --> 17:00.000
Deswegen also Least Recently Used oder Least Frequently Used.

17:00.300 --> 17:02.640
Man nimmt an, wenn eine Seite reingeladen wird, wird auch häufig

17:02.640 --> 17:03.300
darauf zugegriffen.

17:04.320 --> 17:09.780
Dann wird also die Seite Sigma, die wir jetzt vermisst haben im

17:09.780 --> 17:14.740
Speicher, die wird dann in den soeben freigemachten Seitenrahmen

17:14.740 --> 17:19.540
reingeladen und dann kann ich entsprechend, wie im Fall 1, die

17:19.540 --> 17:25.300
Adresse, auf die zugegriffen wurde, verändern und die Seitentabelle

17:25.300 --> 17:25.980
aktualisieren.

17:26.600 --> 17:29.720
Das ist also die naheliegende Art, so etwas zu machen.

17:29.880 --> 17:33.020
Ich habe also einen ständigen Wechsel während des Betriebs zwischen

17:33.020 --> 17:38.200
Hintergrundspeicher und Hauptspeicher, je nach Bedarf der Programme,

17:38.220 --> 17:39.280
die gerade ausgeführt werden.

17:40.160 --> 17:44.940
Und manchmal, da merken Sie auch, dass Ihr Rechner nicht mehr viel

17:44.940 --> 17:49.880
tut, dass Ihre Programme nicht richtig weiterlaufen, aber irgendwas

17:49.880 --> 17:50.680
macht der Rechner.

17:51.640 --> 17:57.820
Und dann kann sowas passieren, was man Page Thrashing nennt.

18:00.280 --> 18:07.200
Page Thrashing ist ein Effekt, bei dem ein Prozess versucht, Seiten

18:07.200 --> 18:11.260
reinzuladen in den Hauptspeicher, damit er ausgeführt werden kann.

18:12.540 --> 18:15.220
Dadurch müssen andere Seiten rausgelagert werden.

18:15.320 --> 18:18.280
Jetzt kann es sein, dass gerade bei denen, die mit solchen Heuristiken

18:18.280 --> 18:22.820
rausgelagert wurden, eigentlich auch gebraucht wurden und entsprechend

18:22.820 --> 18:26.880
können andere Prozesse nicht mehr arbeiten und die werfen wieder

18:26.880 --> 18:28.020
andere raus.

18:28.620 --> 18:30.980
Dann kann es passieren, dass ständig Seiten hin- und hergeschoben

18:30.980 --> 18:35.560
werden, weil irgendwelche Prozesse nicht weiterarbeiten können und

18:35.560 --> 18:38.000
Seitenplatz brauchen im Hauptspeicher.

18:38.620 --> 18:41.400
Und dann wandern ständig Seiten zwischen Hauptspeicher und

18:41.400 --> 18:45.000
Hintergrundspeicher hin und her, aber kein Programm kann weitermachen,

18:45.200 --> 18:48.240
weil Sie alle nicht alle Ressourcen zur Verfügung haben.

18:48.340 --> 18:51.480
Sie sind alle blockiert und der Rechner steht praktisch, aber ist

18:51.480 --> 18:52.440
wahnsinnig aktiv.

18:52.440 --> 18:58.360
Man nennt sowas auch einen sogenannten Live-Lock, bei dem ein System

18:58.360 --> 19:03.960
sehr viel tut, wahnsinnig aktiv ist, aber keinen Fortschritt hat bei

19:03.960 --> 19:06.040
der eigentlich zu erfüllenden Aufgabe.

19:06.400 --> 19:09.840
Das heißt, der Rechner blockiert sich selbst durch eine ganz starke

19:09.840 --> 19:12.360
Aktivität, kommt aber mit seiner Arbeit nicht voran.

19:12.900 --> 19:17.980
Das ist also etwas, was man natürlich vermeiden möchte und dafür gibt

19:17.980 --> 19:21.400
es entsprechende Strategien, um so etwas zu verhindern, dass also Page

19:21.400 --> 19:22.660
Thrashing nicht auftaucht.

19:24.180 --> 19:30.080
So, das war ganz kurz das Verfahren, um zwischen Hintergrundspeicher

19:30.080 --> 19:35.480
und Hauptspeicher Seiten hin und her zu schieben und damit können dann

19:35.480 --> 19:41.300
also die Prozesse arbeiten, können ihre Ressourcenbedarfe befriedigen.

19:41.860 --> 19:45.780
Das nächste ist die Aufgabe, Prozesse zu synchronisieren.

19:46.380 --> 19:50.480
Wenn wir mehrere Prozesse ausführen, gleichzeitig oder verschränkt

19:50.480 --> 19:54.460
ineinander, dann muss man, ich hatte Ihnen das gezeigt, wir haben auch

19:54.460 --> 19:58.460
Threads, die manchmal den gleichen Adressraum haben, dann muss man

19:58.460 --> 19:59.680
aufpassen, was passiert.

20:00.320 --> 20:03.800
Hier ist ein solches Beispiel, Sie haben hier ein sehr einfaches

20:03.800 --> 20:06.400
Beispiel zur Illustration, was passieren könnte.

20:07.000 --> 20:12.420
Wir haben zwei Prozesse, die nur eine Anweisung jeweils ausführen.

20:12.420 --> 20:15.000
Also das müssen Sie sich vorstellen, das ist eine Anweisung innerhalb

20:15.000 --> 20:18.760
irgendeines längeren Prozesses jeweils und die werden jetzt

20:18.760 --> 20:19.380
ausgeführt.

20:20.040 --> 20:28.260
Diese Variable X, die hier modifiziert wird, die sei zu Anfang 0 und

20:28.260 --> 20:32.020
jetzt sollen die beiden Prozesse P1 und P2 ausgeführt werden.

20:33.620 --> 20:39.060
Also wenn ich die beiden Prozesse ausführe und die Anweisung, die

20:39.060 --> 20:44.940
Ausführung dieses Befehls, X gleich X plus 1 und X gleich X plus 2,

20:45.080 --> 20:49.440
wenn das ununterbrechbare Operationen sind, dann ist klar, das

20:49.440 --> 20:52.320
Ergebnis ist, egal in welcher Reihenfolge ich die beiden Prozesse

20:52.320 --> 20:54.700
ausführe, immer X gleich 3.

20:55.500 --> 20:57.280
Der eine addiert 1, der andere addiert 2.

20:58.100 --> 21:03.300
Jetzt wissen wir aber, im Rechner ist eine solche Anweisung kein

21:03.300 --> 21:04.960
Befehl, der ausgeführt wird.

21:05.720 --> 21:07.880
Im Rechner wird etwas anderes ausgeführt.

21:08.460 --> 21:11.480
Das muss ja ganz runter auf Maschinenbefehlsebene runtergebrochen

21:11.480 --> 21:17.400
werden und in dem Maschinenprogramm heißt das, eine solche Anweisung,

21:17.540 --> 21:22.620
X gleich X plus A, wobei A also eine Konstante ist, ich muss zunächst

21:22.620 --> 21:34.540
mal den Wert der Variablen X in meinen Akkumulator laden, dann addiere

21:34.540 --> 21:40.020
ich den Wert A, also unmittelbare Adressierung, der Wert A wird direkt

21:40.020 --> 21:44.740
addiert auf den Wert, der im Akkumulator steht, und anschließend

21:44.740 --> 21:50.420
speichere ich den Wert, der im Akkumulator steht, in die

21:50.420 --> 21:53.520
Speicherzelle, die durch X adressiert wird.

21:54.620 --> 21:56.780
Das heißt, ich habe hier drei Befehle.

21:58.220 --> 22:01.920
Das Wesentliche hier ist, ich habe erst hier die Annahme gemacht, ich

22:01.920 --> 22:07.620
habe eine atomare, ununterbrechbare Operation, dann würde das hier

22:07.620 --> 22:10.240
insgesamt ausgeführt werden.

22:12.080 --> 22:19.120
Es kann aber auch sein, das entspricht ja dieser Anweisung, wir

22:19.120 --> 22:23.600
wissen, das sind drei Befehle nacheinander, es können im Prinzip,

22:23.840 --> 22:27.520
meinetwegen bei einer prioritätsgesteuerten Planung oder beim

22:27.520 --> 22:31.720
prioritätsgesteuerten Ablauf, kann es sein, dass ein Prozess durch

22:31.720 --> 22:35.360
einen anderen unterbrochen wird, aus welchem Grund auch immer, und

22:35.360 --> 22:38.200
dann kann es passieren, dass eine solche Operationsfolge eintritt.

22:39.060 --> 22:44.080
Also wenn ich die Reihenfolge nicht strickt habe, oder wenn ich nicht

22:44.080 --> 22:47.480
sage, das muss ununterbrechbar sein, dann kann es sein, dass der erste

22:47.480 --> 22:54.700
Prozess, also der blaue Prozess da oben, dass der lädt den Wert von X,

22:54.880 --> 23:00.060
der ist zu Anfang 0, dann ist im Akkumulator die 0 drin, dann addiert

23:00.060 --> 23:02.560
er eine 2, es steht im Akkumulator die 2, und jetzt wird er

23:02.560 --> 23:06.340
unterbrochen, und es kommt der Prozess P1 dran, aus welchem Grund auch

23:06.340 --> 23:06.560
immer.

23:08.200 --> 23:11.700
Und der lädt natürlich auch zunächst mal den Wert von X, der Wert von

23:11.700 --> 23:13.240
X ist aber immer noch 0.

23:16.140 --> 23:21.740
Dann wird er wieder unterbrochen, P2 ist wieder dran, darf seine

23:21.740 --> 23:26.380
letzte Anweisung ausführen, Store X, und er schreibt also jetzt den

23:26.380 --> 23:31.140
Wert des Akkumulators in die Variable X hinein, das ist aber

23:31.140 --> 23:32.580
mittlerweile nur noch der Wert 0.

23:33.480 --> 23:38.340
Anschließend wird der Rest von P1 ausgeführt, da wird eine 1 addiert

23:38.340 --> 23:42.320
und der Wert geschrieben, das heißt wir haben eine 1, als Ergebnis der

23:42.320 --> 23:43.840
Ausführung beider Programme.

23:44.700 --> 23:49.400
Symmetrisch dazu, wenn zuerst P1 dran ist und dann P2 kurzzeitig, und

23:49.400 --> 23:55.460
dann P1 fertig wird und P2 weitermachen kann, auch hier haben wir eine

23:55.460 --> 24:00.940
verlorene Aktualisierung, weil wir diese Aktualisierung durch den

24:00.940 --> 24:07.160
einen Prozess nicht erst abgespeichert haben, sondern der Wert ist

24:07.160 --> 24:11.620
halt in einer gemeinsamen Variablen, der Variablen X, auf die beide

24:11.620 --> 24:12.640
Prozesse zugreifen.

24:14.140 --> 24:18.960
Richtig wäre also nur eine solche Ausführung, diese oder andere

24:18.960 --> 24:22.520
Reihenfolge, erst P2 vollständig und dann P1 vollständig.

24:22.520 --> 24:25.000
Das ist völlig egal, welcher Reihenfolge man das macht.

24:25.360 --> 24:30.080
Wenn ich die aber beim Zugriff auf die gleichen Variablen miteinander

24:30.080 --> 24:33.760
irgendwie verschränke, ich hatte Ihnen erzählt, man könnte ja

24:33.760 --> 24:38.060
mehrfältige Programme so laufen lassen, dass ich einfach immer die

24:38.060 --> 24:43.680
Abwechseln ausführe und dann entsprechend dadurch die Abstände in der

24:43.680 --> 24:47.820
Pipeline etwas vergrößere und Abhängigkeiten zwischen

24:47.820 --> 24:51.300
aufeinanderfolgenden Befehlen dadurch vermindert werden, das würde

24:51.300 --> 24:52.300
hier zu Problemen führen.

24:53.220 --> 24:54.880
Also muss man sehen, was man damit macht.

24:55.320 --> 24:57.240
Das ist die einzige Art, das korrekt auszuführen.

24:57.300 --> 25:01.880
Ich muss also dafür sorgen, dass in solchen Fällen, die Ursache ist

25:01.880 --> 25:05.520
halt, dass ich einen kritischen Bereich habe, in meinem Programm oder

25:05.520 --> 25:09.360
in dem Prozess gibt es halt einen Bereich, der darf nicht unterbrochen

25:09.360 --> 25:09.700
werden.

25:09.800 --> 25:15.380
Er muss ausgeführt werden, weil ansonsten Probleme eintreten.

25:15.540 --> 25:18.540
Wir kennen solche Dinge durchaus, was kritische Bereiche sind.

25:18.540 --> 25:22.160
Also Folge von Operationen, in denen der Prozess nicht unterbrochen

25:22.160 --> 25:27.260
werden darf und das passiert immer dann, so etwas tritt auf, wenn

25:27.260 --> 25:31.360
mehrere Prozesse um dasselbe Betriebsmittel konkurrieren.

25:32.100 --> 25:36.420
Also es geht auch wirklich allgemeiner um das gleiche Betriebsmittel

25:36.420 --> 25:37.600
oder dasselbe Betriebsmittel.

25:38.140 --> 25:40.920
Das muss nicht notwendigerweise eine Variable sein, das kann auch ein

25:40.920 --> 25:41.540
Drucker sein.

25:41.540 --> 25:45.900
Stellen Sie sich vor, Sie haben zwei Prozesse, die etwas drucken

25:45.900 --> 25:49.400
wollen und die bekommen immer so abwechselnd den Drucker zugewiesen.

25:49.780 --> 25:52.640
Und dann dürfen Sie anschließend als Nutzer sehen, wie Sie die Seiten

25:52.640 --> 25:59.200
wieder auseinandersortieren, weil halt der Prozess oder das

25:59.200 --> 26:04.100
Scheduling, die nicht Ihre Aufgaben hat, vollständig erfüllen lassen.

26:05.060 --> 26:07.000
Das ist völlig klar, dass man das nicht machen kann.

26:07.000 --> 26:10.020
Oder stellen Sie sich vor, Sie haben auf Ihrem Flur in der

26:10.020 --> 26:11.740
Wohngemeinschaft nur eine Dusche.

26:14.260 --> 26:16.780
Der Duschvorgang ist ein kritischer Prozess, Sie wollen nicht

26:16.780 --> 26:19.660
zwischendurch unterbrochen werden und dann kommt dort jemand anders

26:19.660 --> 26:23.320
rein und duscht erstmal und dann muss der wieder raus und Sie dürfen

26:23.320 --> 26:23.960
fertig werden.

26:24.080 --> 26:25.760
Also das macht keinen Sinn.

26:25.960 --> 26:29.320
Ein typisches Beispiel für einen kritischen Bereich und da gibt es

26:29.320 --> 26:31.080
aber Methoden, wie man das hinbekommen kann.

26:31.080 --> 26:36.540
Also wenn Sie hier so jemanden in der Duschkabine haben und er möchte

26:36.540 --> 26:42.920
gerne hier drin fertig duschen, der zeigt das ja nach außen an, dass

26:42.920 --> 26:43.700
er gerade duscht.

26:44.640 --> 26:48.820
Und das heißt, ich muss irgendwie dafür sorgen, dass die

26:48.820 --> 26:50.400
synchronisiert werden.

26:57.980 --> 27:02.100
Also dieses Synchronisieren kennen Sie aus Java.

27:02.880 --> 27:06.460
Da gibt es die Möglichkeit, dass Sie sagen, ein Objekt ist

27:06.460 --> 27:11.220
synchronisiert und ein synchronisiertes Objekt, auf das kann nur ein

27:11.220 --> 27:17.620
Prozess oder ein Faden zugreifen, während ein Thread also auf ein

27:17.620 --> 27:21.920
solches synchronisiertes Objekt zugreift, darf kein anderer darauf.

27:22.000 --> 27:23.780
Das ist eine Art, wie man das in Java macht.

27:24.380 --> 27:30.180
Es gibt aber neben noch eine andere Möglichkeit und zwar sind zwei

27:30.180 --> 27:31.420
solche Möglichkeiten angegeben.

27:31.540 --> 27:33.280
Einerseits ist die Prozesskooperation.

27:34.560 --> 27:41.560
Man vereinbart einfach, dass man sich nicht stört gegenseitig.

27:41.560 --> 27:47.180
Es gibt schöne Beispiele dafür.

27:47.700 --> 27:49.520
Das andere ist der wechselseitige Ausschluss.

27:51.100 --> 27:56.360
Wenn ein Prozess zugreift auf ein gemeinsames Nutzungsbetriebsmittel,

27:56.780 --> 27:58.840
kann der andere das nicht mehr nutzen.

28:00.020 --> 28:05.080
Ich habe dafür einen Mechanismus und ein Werkzeug dafür ist ein

28:05.080 --> 28:05.960
Semaphore.

28:07.020 --> 28:09.880
Der Begriff Semaphore kommt aus dem Eisenbahnwesen.

28:10.320 --> 28:12.400
Sie kennen dort die schönen Signale.

28:13.000 --> 28:17.260
Da gibt es einmal ein Signal, das so aussieht und dann kann es sein,

28:17.420 --> 28:18.500
dass es so aussieht.

28:19.020 --> 28:21.440
Wenn es so aussieht, dann ist normalerweise noch ein grünes Licht

28:21.440 --> 28:24.140
dabei und wenn es so quer ist, dann ist normalerweise ein rotes Licht

28:24.140 --> 28:24.420
dabei.

28:24.820 --> 28:29.120
Das ist ein Semaphore, ein Signal, das also anzeigt, ob die Strecke

28:29.120 --> 28:30.180
frei ist oder nicht.

28:31.040 --> 28:33.940
Es gibt eine andere, auch aus dem Eisenbahnwesen, eine andere Art, so

28:33.940 --> 28:34.660
etwas zu machen.

28:34.660 --> 28:39.680
Stellen Sie sich vor, Sie haben hier eine Bahnstrecke, die eine Zeit

28:39.680 --> 28:43.160
lang zweigleisig ist und ein Stück dazwischen ist eingleisig.

28:43.860 --> 28:47.480
Jetzt steht hier, da steht irgendein Zug, der möchte in die Richtung

28:47.480 --> 28:50.460
fahren, hier steht ein Zug, der möchte in die Richtung fahren.

28:51.560 --> 28:52.800
Wie kann man das synchronisieren?

28:53.840 --> 28:56.640
Es gibt eine einfache Art, wie man das hinbekommen kann, die

28:56.640 --> 29:01.400
garantiert, dass nie zwei Züge hier gleichzeitig sind und das wäre

29:01.400 --> 29:04.920
fatal, wenn die hier zusammenkommen und gegeneinander fahren, dann

29:04.920 --> 29:05.700
haben wir halt einen Unfall.

29:06.500 --> 29:09.460
Wenn man das verhindern möchte, macht man es einfach so, eine ganz

29:09.460 --> 29:10.260
einfache Art.

29:11.020 --> 29:15.120
Dieser hier bekommt einen sogenannten Token, er reicht einen Stab oder

29:15.120 --> 29:19.660
irgendwas zu nehmen, einen Gegenstand und nur mit diesem Gegenstand

29:19.660 --> 29:20.940
dürfen Sie da reinfahren.

29:21.620 --> 29:23.660
Wenn Sie den nicht haben, können Sie nicht reinfahren.

29:23.840 --> 29:27.020
Nehmen wir mal an, der hier bekommt den, dann darf er hier durchfahren

29:27.020 --> 29:29.980
und muss hier diesen Token ablegen.

29:30.620 --> 29:36.820
Beziehungsweise dem anderen Eisenbahn-Lokomotivführer hier übergeben

29:36.820 --> 29:38.560
und dann darf der weiterfahren.

29:39.500 --> 29:41.480
Über so einen Token geht das ganz einfach.

29:41.720 --> 29:44.500
Token hatten wir schon mal bei der Buszuteilung kennengelernt, also

29:44.500 --> 29:45.480
Kommunikation bei Bussen.

29:46.320 --> 29:51.520
Also das ist eine ganz einfache mechanische Art, wie man so eine

29:51.520 --> 29:56.760
Synchronisation von Prozessen, in dem Fall Nutzung einer eingleisigen

29:56.760 --> 30:00.900
Strecke von Zügen, die in unterschiedliche Richtungen fahren, ganz

30:00.900 --> 30:02.020
einfach zu realisieren.

30:02.760 --> 30:04.700
Da brauche ich keine Elektronik für.

30:04.920 --> 30:06.160
Ich kann es aber auch elektronisch machen.

30:07.380 --> 30:13.180
Wie gesagt, SEMAVOR soll also ein Mechanismus sein, um anzudeuten,

30:13.600 --> 30:17.500
dass ein Betriebsmittel belegt ist oder frei ist.

30:17.500 --> 30:22.580
Es gibt für das SEMAVOR-Konzept viele verschiedene Varianten, auch

30:22.580 --> 30:23.840
ähnlich wie eine Verkehrsampel.

30:24.820 --> 30:29.020
Und wenn also dieses SEMAVOR rot ist, dann muss ein Prozess, der das

30:29.020 --> 30:30.980
Betriebsmittel zugreifen möchte, warten.

30:31.580 --> 30:37.460
Wenn SEMAVOR grün ist, dann darf der Prozess eintreten.

30:38.240 --> 30:42.400
Das SEMAVOR schaltet auf rot, kann man auch erst auf rot schalten und

30:42.400 --> 30:43.140
dann eintreten.

30:43.140 --> 30:49.820
Und wenn man den kritischen Bereich verlässt, dann muss man diesen

30:49.820 --> 30:52.480
SEMAVOR -Wert wieder auf grün setzen.

30:53.460 --> 30:54.900
Man kann es auch anders machen.

30:54.980 --> 31:03.060
Stellen Sie sich vor, Sie haben meintwegen mehrere Dinge zur

31:03.060 --> 31:09.240
Verfügung, Sie haben mehrere Betriebsmittel und dieses SEMAVOR hat

31:09.240 --> 31:12.180
Werte 0 und 1.

31:12.320 --> 31:15.220
1 für grün, 0 für rot.

31:16.160 --> 31:20.620
Das könnten Sie natürlich sagen, dieses Schalten auf rot heißt, ich

31:20.620 --> 31:21.960
ziehe 1 ab.

31:22.440 --> 31:25.800
Wenn ich aus dem kritischen Bereich reingehe, addiere ich 1.

31:25.800 --> 31:30.480
Und dann könnte es sein, dass Sie hier sogar mehrere Werte haben bis

31:30.480 --> 31:31.360
zu einem K.

31:31.980 --> 31:38.140
Und solange der Wert kleiner als K ist und Sie haben K-Ressourcen zur

31:38.140 --> 31:42.580
Verfügung, dann können Sie tatsächlich ein Betriebsmittel nutzen,

31:42.740 --> 31:45.960
sobald der Wert größer ist, ist kein Betriebsmittel mehr da.

31:46.760 --> 31:52.200
Also das ist eine Verallgemeinerung des Ressourcen-Schedulings, wenn

31:52.200 --> 31:53.620
Sie mehrere Ressourcen haben wollen.

31:53.620 --> 31:57.320
Wenn es um einen kritischen Bereich geht, dann habe ich nur eine

31:57.320 --> 31:58.040
Ressource da.

31:58.120 --> 32:03.460
Ich muss dafür sorgen, dass kein anderer Prozess diesen kritischen

32:03.460 --> 32:04.600
Bereich unterbrechen darf.

32:05.040 --> 32:07.120
Und das will man jetzt mit diesem SEMAVOR-Konzept machen.

32:08.560 --> 32:11.620
Realisierung geht also zum Beispiel so, wenn ich nur zwei verschiedene

32:11.620 --> 32:16.940
Werte habe, frei oder belegt, brauche ich ja nur eine binäre Variable.

32:17.380 --> 32:21.380
S für SEMAVOR wird zu Anfang auf TRUE gesetzt, das Betriebsmittel

32:21.380 --> 32:22.080
steht zur Verfügung.

32:23.480 --> 32:29.500
Und jetzt habe ich hier zwei Operationen, das eine ist P von S, ich

32:29.500 --> 32:36.660
prüfe deswegen P, ob S wahr ist.

32:37.300 --> 32:43.840
Wenn also S wahr ist, IF S, ist ein guter Wert, dann setze ich S auf

32:43.840 --> 32:45.600
FALSE, die Ampel geht auf ROT.

32:46.460 --> 32:51.300
Ich deblockiere A, ich darf also den Prozess A, der wartet, ausführen,

32:51.920 --> 32:53.440
der ist in seinem kritischen Bereich.

32:54.680 --> 32:59.900
Andernfalls, wenn das S FALSE ist, dann muss ich A blockieren.

33:00.560 --> 33:03.820
Und dann muss A immer wieder diesen Test P von S machen.

33:04.820 --> 33:12.000
Sobald P von S erfolgreich ausgeführt wurde, ist also dieser Prozess A

33:12.000 --> 33:19.520
deblockiert und kann tatsächlich seinen kritischen Bereich ausführen.

33:20.180 --> 33:23.160
Und dann gibt es eine zweite Operation, V von S.

33:23.160 --> 33:27.540
V steht für vermehren, ich vermehre die Ressourcen.

33:29.540 --> 33:37.580
Und das heißt, V von S setzt S auf TRUE, diese Operation wird

33:37.580 --> 33:42.600
ausgeführt, wenn ein Prozess einen kritischen Bereich verlässt, dann

33:42.600 --> 33:47.420
kann er sagen, jetzt darf ein anderer Prozess auf diese Ressource

33:47.420 --> 33:48.000
zugreifen.

33:48.000 --> 33:52.560
Es wird dann in dem Fall der erste Prozess in der Warteschlange

33:52.560 --> 33:56.320
deblockiert, weil der sein P von S ausführt.

33:57.520 --> 34:03.240
Also das ist eine ganz naheliegende Art, einen kritischen Bereich zu

34:03.240 --> 34:04.260
realisieren.

34:04.400 --> 34:08.400
Und dann kann ich die Prozesse P1 und P2, die den Zugriff hatten auf

34:08.400 --> 34:13.120
die gemeinsame Variable, auch so verändern, dass ich einfach sage, ich

34:13.120 --> 34:21.940
führe zunächst mal P von S aus und erst wenn das ausgeführt wurde,

34:23.160 --> 34:26.920
also das hier ist im Prinzip, das steht hier zwar nicht so, aber das P

34:26.920 --> 34:33.180
von S wird so lange ausgeführt, bis irgendwann der Prozess deblockiert

34:33.180 --> 34:33.840
werden kann.

34:33.840 --> 34:37.820
Dann kann diese Anweisung ausgeführt werden und danach wird die

34:37.820 --> 34:41.620
Semaphore wieder auf Null gesetzt.

34:41.840 --> 34:45.780
Das heißt, ich weiß, ich habe wieder ein weiteres Element zur

34:45.780 --> 34:46.280
Verfügung.

34:47.340 --> 34:50.860
Der nächste Prozessor darf zugreifen, darf deblockiert werden und

34:50.860 --> 34:56.920
genauso bei dem Prozess 2, P- und V-Operationen vor und hinter einem

34:56.920 --> 35:00.180
kritischen Bereich sorgen dafür, dass kein anderer zugreifen kann.

35:00.180 --> 35:03.780
In Java, hatte ich schon gesagt, da haben wir eben die Möglichkeit,

35:04.180 --> 35:11.620
dass wir über Synchronized Objects ähnliche Dinge tatsächlich

35:11.620 --> 35:12.140
ausführen.

35:13.880 --> 35:21.260
Das also zur Synchronisation von Prozessen und es ist klar, dass da

35:21.260 --> 35:27.180
einiges passieren kann, was vielleicht auch nicht gewünscht ist.

35:27.180 --> 35:31.900
Es kann sein, dass sich voneinander abhängige Prozesse gegenseitig

35:31.900 --> 35:32.620
blockieren.

35:33.800 --> 35:35.500
Das nennt man dann ein Deadlock.

35:38.180 --> 35:43.000
Das heißt, dann wären mehrere Prozesse, würden warten darauf, dass ein

35:43.000 --> 35:46.080
Betriebsmittel frei wird, aber sie sorgen selbst dafür, dass das

35:46.080 --> 35:47.680
Betriebsmittel nicht frei werden kann.

35:48.540 --> 35:51.040
Stellen Sie sich vor, Sie haben zwei Prozesse, Sie haben zwei

35:51.040 --> 35:51.740
Betriebsmittel.

35:51.740 --> 35:57.600
Beide Prozesse brauchen Betriebsmittel M1 und M2, um ausgeführt zu

35:57.600 --> 35:57.920
werden.

35:58.680 --> 36:04.620
Der erste Prozess hat M1 bereits belegt und wartet darauf, dass M2

36:04.620 --> 36:05.360
frei wird.

36:05.940 --> 36:10.120
Prozess 2 hat M2 belegt und wartet darauf, dass M1 frei wird.

36:11.160 --> 36:14.120
Und entsprechend sitzen die beiden da und können beide nicht

36:14.120 --> 36:14.720
weitermachen.

36:15.480 --> 36:16.900
Aber es wird auch kein Betriebsmittel frei.

36:17.900 --> 36:25.160
Eine ganz typische Situation, die in solchen Ressourcen-Scheduling

36:25.160 --> 36:26.020
auftreten kann.

36:27.140 --> 36:30.720
Und das heißt, da muss man dafür sorgen, dass so etwas nicht auftritt.

36:31.260 --> 36:37.120
Dafür gibt es extra Mechanismen im Betriebssystem zur Deadlock

36:37.120 --> 36:41.080
-Erkennung, aber auch zur Deadlock-Vorhersage und zur Deadlock

36:41.080 --> 36:41.780
-Vermeidung.

36:44.500 --> 36:53.640
Das eine ist die Vorhersage und die Vermeidung.

36:56.140 --> 36:59.000
Und das andere, das dritte wäre natürlich auch noch die Erkennung.

36:59.980 --> 37:02.680
Wenn also ein Deadlock eingetreten ist, muss ich erkennen, das ist

37:02.680 --> 37:05.380
eine Situation, in der beide nicht weitermachen können.

37:05.720 --> 37:09.640
Dann muss ich einfach einem Prozess ein Betriebsmittel entziehen, das

37:09.640 --> 37:12.520
er eigentlich bekommen hat, um dafür zu sorgen, dass der andere

37:12.520 --> 37:13.340
weitermachen kann.

37:14.120 --> 37:17.620
Also das sind ganz wesentliche Teile, die man im Betriebssystem zur

37:17.620 --> 37:18.480
Verfügung haben muss.

37:18.880 --> 37:22.540
Ansonsten steht der Rechner irgendwann und es geht nichts mehr weiter.

37:24.100 --> 37:30.840
Also das ist eine ganz elementare Aufgabe vom Betriebssystem, dafür zu

37:30.840 --> 37:33.140
sorgen, dass solche Deadlock-Situationen nicht eintreten.

37:34.100 --> 37:37.640
Livelock-Situation ist das ähnliche, Prozesse können nicht

37:37.640 --> 37:42.200
weitermachen, aber da wird sehr viel getan im Rechner.

37:42.940 --> 37:44.580
Der Effekt ist der gleiche.

37:45.620 --> 37:48.680
Hier steht es ja auch drunter, ich muss sehen, dass ich also Deadlock

37:48.680 --> 37:53.980
-Vermeidung, Erkennung und Auflösung umsetzen kann, aber auch

37:53.980 --> 37:58.060
Vorhersage, da kann ich rechtzeitig proaktiv dafür sorgen, dass eben

37:58.060 --> 38:02.260
nur einer der beiden Prozesse tatsächlich schon ein dieser

38:02.260 --> 38:05.660
Betriebsmittel bekommt, dass ich eben nicht schon ein Betriebsmittel

38:05.660 --> 38:09.140
zuteile, während das andere noch nicht zur Verfügung steht, sondern

38:09.140 --> 38:13.140
erst dann anfange, Ressourcen zuzuteilen, wenn sie beide, die benötigt

38:13.140 --> 38:14.580
werden, zur Verfügung stehen.

38:16.620 --> 38:19.520
Also zentrales Problem im Betriebssystem wird dort in der Regel auch

38:19.520 --> 38:20.600
vernünftig gelöst.

38:21.360 --> 38:25.000
Jetzt kommt ein anderes Beispiel, das auch mit Ressourcen zu tun hat,

38:25.000 --> 38:30.680
das auch eine Situation in solchen verteilten Systemen mit vielen

38:30.680 --> 38:35.220
Betriebsmitteln, vielen Prozessen darstellt und das ist abstrakt

38:35.220 --> 38:36.960
beschrieben als das Philosophenproblem.

38:37.740 --> 38:40.940
Will ich Ihnen auch ganz kurz erläutern, worum es dabei geht.

38:41.680 --> 38:46.840
Die Idee ist, ich habe also N-Philosophen, die um einen Tisch herum

38:46.840 --> 38:51.840
sitzen, die sitzen also hier und denken vor sich hin, reden

38:51.840 --> 38:56.160
miteinander und alles andere ist für die nicht wichtig.

38:56.860 --> 38:59.220
Sie wollen allerdings essen können, wenn sie Hunger haben, wollen sie

38:59.220 --> 38:59.860
essen können.

39:00.860 --> 39:04.100
Sie werden von Zeit zu Zeit hungrig und wollen essen.

39:05.500 --> 39:09.480
Und deswegen haben sie jeder vor sich einen Teller, auf den er sich

39:09.480 --> 39:12.760
hier, also hier aus dieser Spaghetti-Schüssel, kann er sich Spaghetti

39:12.760 --> 39:13.260
holen.

39:13.580 --> 39:16.040
Die armen Philosophen bekommen immer nur Spaghetti oder irgendwas

39:16.040 --> 39:16.460
anderes.

39:19.300 --> 39:24.760
Und jetzt ist es so, dass er dazu natürlich Geräte braucht, um damit

39:24.760 --> 39:25.180
zu essen.

39:25.300 --> 39:27.620
Und zwar braucht er, um zu essen, zwei Gabeln.

39:30.280 --> 39:35.280
Sie sehen, jeder Philosoph sieht neben seinem Teller zwei Gabeln.

39:36.380 --> 39:40.040
Das Problem ist nur, dass bei der Ressourcen-Zuteilung etwas sparsam

39:40.040 --> 39:40.860
gewesen ist.

39:40.860 --> 39:44.420
Und man hat nicht bei N-Philosophen zwei N-Gabeln, sondern nur N

39:44.420 --> 39:44.860
-Gabeln.

39:46.920 --> 39:50.080
Sonst müssten wir in der Gabel und Löffel, die Philosophen können das

39:50.080 --> 39:52.000
auch mit zwei Gabeln, das geht auch.

39:53.700 --> 39:58.140
Und es ist keineswegs so, dass die irgendeine Rangfolge haben.

39:58.220 --> 40:00.580
Die sind alle völlig gleichberechtigt, das ist die typische Situation

40:00.580 --> 40:01.860
in verteilten Systemen.

40:03.220 --> 40:06.380
Völlig gleichberechtigt, sie dürfen alle das gleiche tun.

40:06.380 --> 40:11.920
Und da die zum Auffüllen und zum Essen von Spaghetti zwei Gabeln

40:11.920 --> 40:16.620
brauchen, können natürlich maximal N-halber die Hälfte der Philosophen

40:16.620 --> 40:17.500
gleichzeitig essen.

40:18.000 --> 40:20.720
Denn wenn der hier die beiden Gabeln nimmt, können seine beiden

40:20.720 --> 40:22.140
Nachbarn nicht essen.

40:23.420 --> 40:24.940
So, was kann passieren?

40:26.140 --> 40:31.360
Es ist völlig klar, wenn jetzt der arme Kerl hier, der kann nicht

40:31.360 --> 40:36.600
essen, und es kann ja sein, dass der hier gegessen hat und in dem

40:36.600 --> 40:39.660
Augenblick, wo der isst, fängt der an und nimmt die beiden Gabeln und

40:39.660 --> 40:40.300
isst.

40:41.420 --> 40:44.540
Und wenn die immer abwechselnd essen, seine beiden Nachbarn, hat

40:44.540 --> 40:49.420
dieser arme Kerl hier nie Gelegenheit zu essen und irgendwann wird er

40:49.420 --> 40:50.600
leider vor Hunger sterben.

40:51.600 --> 40:55.620
Das ist also typisches Problem, Starvation, er verhungert.

40:57.540 --> 41:04.400
Das heißt, ein Prozess bekommt keine Ressourcen und wird deswegen

41:04.400 --> 41:06.900
irgendwann aus dem System rausgeworfen.

41:07.780 --> 41:09.240
Das muss man vermeiden.

41:09.980 --> 41:11.200
Das andere ist ein Deadlock.

41:11.960 --> 41:14.020
Nehmen wir mal an, sie arbeiten alle völlig gleichzeitig.

41:15.340 --> 41:20.800
Dann nimmt jeder Philosoph seine rechte Gabel, der nimmt seine rechte

41:20.800 --> 41:24.100
Gabel, dieser hier nimmt seine rechte Gabel, der nimmt seine rechte

41:24.100 --> 41:27.380
Gabel, der nimmt die rechte Gabel, der nimmt die rechte Gabel.

41:27.980 --> 41:30.260
Wenn sie das alle machen, dann haben wir genau die Situation, die ich

41:30.260 --> 41:32.820
auf der vorigen Folie dargestellt habe, für zwei Prozesse.

41:33.860 --> 41:42.760
Jeder hat eine Ressource in der einen Hand und in der anderen Hand hat

41:42.760 --> 41:47.140
er nichts, kann also nicht essen und wartet darauf, dass die andere

41:47.140 --> 41:48.020
Gabel frei wird.

41:49.680 --> 41:52.680
Da sie sich aber nicht abstimmen untereinander, sitzen alle da und

41:52.680 --> 41:54.880
warten und sie werden alle irgendwann verhungern.

41:55.520 --> 41:57.040
Das ist eine typische Deadlock-Situation.

41:58.340 --> 42:04.280
Und dann ist eben Fairness eine Anforderung, dass wir gewährleisten

42:04.280 --> 42:08.120
müssen, dass jeder, also auch dieser Arme, der hier in der Mitte

42:08.120 --> 42:12.140
sitzt, irgendwann Gelegenheit bekommt zu essen.

42:12.140 --> 42:16.660
Ich muss also ein Verfahren haben, mit dem ich dafür sorge, dass kein

42:16.660 --> 42:24.160
Prozess, in dem Fall Philosoph, verhungert, weil er nie Gelegenheit

42:24.160 --> 42:25.860
hatte, auf die Ressourcen zuzugreifen.

42:26.560 --> 42:31.700
Irgendwann muss jeder Prozess die Anforderung eines Betriebsmittels

42:31.700 --> 42:32.720
erfüllt bekommen.

42:33.280 --> 42:34.040
Das ist Fairness.

42:34.520 --> 42:39.140
Wobei es für diesen Fairness zig verschiedene Begriffe gibt, aber

42:39.140 --> 42:44.600
allgemein gesagt geht es immer darum, ein Bedarf, der angemeldet

42:44.600 --> 42:51.020
wurde, darf nicht auf ewig unerfüllt bleiben, sondern wenn mehrere

42:51.020 --> 42:56.240
Prozesse um ein Betriebsmittel konkurrieren, muss gewährleistet sein,

42:56.360 --> 43:01.040
dass jeder Prozess, der einen Bedarf äußert, auch den Bedarf

43:01.040 --> 43:02.280
irgendwann erfüllen kann.

43:02.980 --> 43:06.220
Dann kann man sich noch darüber unterhalten, wie lange das dauern darf

43:06.220 --> 43:06.760
und so weiter.

43:08.840 --> 43:12.440
Genaueres dazu gibt es in anderen Vorlesungen, kann ich hier jetzt

43:12.440 --> 43:14.620
nicht genauer machen.

43:15.500 --> 43:20.700
Und wir gehen weiter zum nächsten Thema in Betriebssystemen.

43:21.480 --> 43:26.320
Ein Thema, das große Bedeutung bekommen hat in der letzten Zeit, immer

43:26.320 --> 43:31.660
mehr, weil wir halt immer mehr von solchen informationsverarbeitenden

43:31.660 --> 43:32.860
Systemen umgeben sind.

43:33.120 --> 43:36.060
Wir müssen dafür sorgen, dass unsere Systeme sicher sind.

43:37.180 --> 43:38.500
Gewährleistung von Sicherheit.

43:39.320 --> 43:40.300
Was ist denn Sicherheit?

43:40.400 --> 43:41.780
Was verstehen wir eigentlich darunter?

43:42.540 --> 43:43.160
Und der Sicherheit.

43:44.340 --> 43:45.900
Das eine ist die Zuverlässigkeit.

43:47.500 --> 43:52.520
Das ist im Englischen, im Englischen gibt es zwei Begriffe.

43:52.520 --> 43:58.160
Das eine ist Security, das andere ist Safety.

43:59.980 --> 44:03.520
Beide Begriffe übersetzen wir im Deutschen mit Sicherheit.

44:05.360 --> 44:09.560
Security und Safety haben unterschiedliche Bedeutungen.

44:10.380 --> 44:12.520
Zuverlässigkeit hat was mit Safety zu tun.

44:13.960 --> 44:18.180
Es sollen alle Aufgaben des Betriebssystems korrekt, entsprechend den

44:18.180 --> 44:20.360
spezifizierten Anforderungen erfüllt werden.

44:20.360 --> 44:30.060
Also wenn ich eine Überweisung im Online-System anstoße oder ausfülle

44:30.060 --> 44:33.520
und abschicke, dann soll die Überweisung auch ausgeführt werden.

44:33.640 --> 44:36.960
Wenn ich eine E-Mail abschicke, soll diese E-Mail auch irgendwann

44:36.960 --> 44:37.560
ankommen.

44:38.680 --> 44:41.120
Zuverlässig muss diese Aufgabe erfüllt werden.

44:42.000 --> 44:44.520
Korrekt, entsprechend den spezifizierten Anforderungen.

44:46.020 --> 44:48.740
Und zwar trotz des Auftretens interner Fehler.

44:48.740 --> 44:49.940
Das ist noch ein weiterer Punkt.

44:50.060 --> 44:53.200
Es kann sein, dass mein System durchaus mal irgendwelche

44:53.200 --> 44:54.360
Fehlersituationen hat.

44:54.900 --> 44:59.420
Und es muss trotzdem gewährleistet sein, dass meine Aufgabe korrekt

44:59.420 --> 45:00.280
ausgeführt wird.

45:01.140 --> 45:03.900
Das nächste ist die Verfügbarkeit.

45:05.700 --> 45:11.620
Verfügbarkeit heißt, ich möchte meinen E-Mail-Dienst zur Verfügung

45:11.620 --> 45:12.920
haben, wenn ich ihn brauche.

45:15.800 --> 45:19.240
Verfügbarkeit heißt, ein Betriebsmittel steht tatsächlich bereit, wenn

45:19.240 --> 45:19.840
ich es brauche.

45:19.920 --> 45:23.660
Der Drucker soll verbunden sein, wenn ich einen Druckauftrag

45:23.660 --> 45:24.480
rausschicke.

45:24.960 --> 45:27.180
Was in der anderen Zeit passiert, interessiert mich nicht.

45:27.760 --> 45:32.040
Aber wann immer ich einen Betriebsmitteldrucker oder was immer ich

45:32.040 --> 45:37.000
habe an Ressourcen, wenn ich die brauche, dann muss der verfügbar

45:37.000 --> 45:37.300
sein.

45:38.760 --> 45:40.120
Noch ein V.

45:40.340 --> 45:41.300
Vertraulichkeit.

45:42.200 --> 45:44.220
Das geht jetzt Richtung Security.

45:45.440 --> 45:48.480
Also Zuverlässigkeit oder Verlässlichkeit und Verfügbarkeit sind beide

45:48.480 --> 45:49.500
Safety -Aspekte.

45:49.960 --> 45:52.560
Vertraulichkeit ist eine Security-Geschichte.

45:53.440 --> 45:58.820
Ich muss Dienste bereitstellen, die es ermöglichen, den Zugriff auf

45:58.820 --> 46:02.400
Informationen, auf spezifizierte Kommunikationspartner bzw.

46:02.620 --> 46:03.800
Benutzer einzuschränken.

46:04.540 --> 46:09.980
Also nur diejenigen, denen ich es explizit erlaube, dürfen auf meine

46:09.980 --> 46:13.500
Inhalte, die ich im Rechner speichere oder verarbeite, zugreifen.

46:14.780 --> 46:17.420
Das macht man über kryptographische Verfahren.

46:17.620 --> 46:21.200
Die hatte ich kurz angedeutet, dass man also kryptographische

46:21.200 --> 46:26.380
Verfahren zur Gewährleistung von Sicherheit oder von Vertraulichkeit

46:26.380 --> 46:27.240
einsetzen kann.

46:27.320 --> 46:30.180
Das haben wir nicht genauer behandelt, weil wir da nicht genügend Zeit

46:30.180 --> 46:30.600
zu haben.

46:30.600 --> 46:33.020
Das geht über diese Vorlesung hinaus.

46:33.180 --> 46:35.060
Aber der Begriff Vertraulichkeit ist halt wichtig.

46:35.340 --> 46:37.940
Kein anderer darf auf meine Dinge zugreifen.

46:38.340 --> 46:42.700
Sie wissen, dass gerade jetzt Facebook neue Nutzungsrichtlinien

46:42.700 --> 46:48.180
eingeführt hat, dass alle Inhalte, alles was ich tue im Rechner, darf

46:48.180 --> 46:51.660
auch von Firmen, die mit Facebook verbunden sind, genutzt werden.

46:52.280 --> 46:56.380
Firmen, die mit Facebook verbunden sind, sind Firmen wie irgendwelche

46:56.380 --> 47:00.720
Werbeanbieter und man möchte damit erreichen, Facebook möchte damit

47:00.720 --> 47:04.780
die Werbung auf den Facebook-Seiten deutlich stärker personalisieren.

47:06.540 --> 47:10.400
Da können aber auf einmal andere, denen ich nicht explizit die

47:10.400 --> 47:13.760
Erlaubnis gebe, von denen ich gar nicht weiß, wer das ist, zugreifen

47:13.760 --> 47:16.060
auf Informationen, die ich für vertraulich halte.

47:17.200 --> 47:19.660
Das wäre also etwas, was nicht gewünscht ist.

47:20.460 --> 47:23.860
Es haben schon einige durchaus sehr bekannte Leute daraufhin ihre

47:23.860 --> 47:25.400
Facebook -Accounts gekündigt.

47:25.400 --> 47:27.440
Und sie sagen, das darf ja nicht sein.

47:30.220 --> 47:33.180
Facebook ist nun das Gegenteil von Vertraulichkeit, das wissen wir

47:33.180 --> 47:33.560
sowieso.

47:34.180 --> 47:36.580
Da entblößt sich jeder, wer weiß wie.

47:37.160 --> 47:41.960
Aber trotzdem mag es ja sein, dass man klar definieren möchte, wem

47:41.960 --> 47:44.200
gegenüber man sich so offen darstellt.

47:44.480 --> 47:48.660
Und einer, der nicht zugreifen soll, soll das auch nicht können.

47:49.500 --> 47:51.900
Also das System muss dafür sorgen, dass die

47:51.900 --> 47:54.740
Vertraulichkeitsanforderungen der einzelnen Nutzer erfüllt werden.

47:55.360 --> 47:59.520
Ansonsten ist eine Kommunikation oder eine Verarbeitung von

47:59.520 --> 48:02.960
sicherheitsrelevanten oder vertraulichen Daten nicht möglich.

48:03.360 --> 48:08.360
Wenn Sie in einer Firma sind und irgendwelche geheimen Konstruktionen

48:08.360 --> 48:11.760
haben, Zeichnungen, die Sie ablegen, da darf kein anderer darauf

48:11.760 --> 48:12.300
zugreifen.

48:12.620 --> 48:15.820
Oder auch Lohn- und Gehaltssachen sind auch vertraulich.

48:15.920 --> 48:20.220
Alles, was mit persönlichen Dingen zu tun hat, muss vertraulich

48:20.220 --> 48:20.520
bleiben.

48:22.160 --> 48:24.500
Dazu passt der Zugriffsschutz.

48:25.420 --> 48:31.260
Nur wer explizit das Recht hat, zuzugreifen, darf das auch.

48:31.340 --> 48:34.700
Das heißt, das System muss gewährleisten, dass kein unberechtigter

48:34.700 --> 48:37.980
Zugriff auf Daten oder Dienste möglich ist.

48:39.280 --> 48:42.800
Das ist auch ein Security-Aspekt.

48:43.600 --> 48:46.580
Ich muss dafür sorgen, dass nur diejenigen, denen ich es explizit

48:46.580 --> 48:50.600
erlaube, Zugriffs erhalten zu meinem Rechner oder zu meinen

48:50.600 --> 48:53.840
Ressourcen, zu meinen Daten, zu meinen Programmen, zu den Diensten,

48:53.960 --> 48:54.880
die angeboten werden.

48:55.780 --> 49:01.900
Sie wissen, dass es einen Nutzer gibt im Rechner, der alle Rechte hat.

49:02.420 --> 49:06.100
In Unix-Systemen ist das der Nutzer, der sich als Root bezeichnet.

49:08.180 --> 49:12.700
Sie können sich auf Ihrem eigenen Laptop als Root einloggen, wenn Sie

49:12.700 --> 49:15.780
es schaffen, in die Kommunikation zwischen anderen Rechnern

49:15.780 --> 49:16.060
einzudringen.

49:16.540 --> 49:19.900
Was gar nicht so schwer ist, können Sie alles mitlesen, weil Sie Root

49:19.900 --> 49:20.100
sind.

49:20.180 --> 49:20.880
Sie haben alle Rechte.

49:22.340 --> 49:25.480
Wird ausgenutzt für Spionage-Software.

49:25.980 --> 49:31.160
Man geht einfach als Root in ein System rein und kann dann im Prinzip

49:31.160 --> 49:33.020
alles tun, was man möchte.

49:33.740 --> 49:35.160
Das muss man also vermeiden.

49:36.600 --> 49:41.140
Also Zugriffsschutz ist wichtig und wir gehen da gleich nochmal genau

49:41.140 --> 49:41.540
darauf ein.

49:41.620 --> 49:44.260
Übrigens, hier stand ja noch das Sandbox-Modell von Java.

49:44.260 --> 49:46.080
Das kennen Sie ja auch.

49:46.220 --> 49:46.800
Sandbox.

49:46.920 --> 49:52.000
Ich habe eine Sandkiste und da darf jeder drin spielen, solange er

49:52.000 --> 49:54.540
will, aber er richtet dabei keinen Schaden an.

49:55.400 --> 50:01.360
Kein Schaden heißt, alles was außerhalb der Sandkiste ist, ist nicht

50:01.360 --> 50:02.060
erreichbar.

50:03.980 --> 50:09.320
Sandbox -Modell heißt, wenn ich ein Java-Applet ausführe, also Code

50:09.320 --> 50:12.480
von einem fremden Rechner auf meinem Rechner ausführe, dann darf der

50:12.480 --> 50:16.080
auf keine relevanten Ressourcen in meinem Rechner zugreifen, sondern

50:16.080 --> 50:20.100
darf nur den Prozessor bekommen, um etwas auszuführen, darf aber nicht

50:20.100 --> 50:23.620
mit anderen Rechnern kommunizieren, darf nicht auf Präferit zugreifen

50:23.620 --> 50:24.040
usw.

50:25.620 --> 50:29.980
Dann haben wir noch den Begriff der Nachvollziehbarkeit.

50:30.620 --> 50:36.180
Wenn ich etwas tue auf meinem Rechner, dann muss nachvollziehbar sein,

50:36.420 --> 50:38.000
was dort geschehen ist.

50:38.000 --> 50:41.160
Dafür wird also ein System-Log gemacht.

50:41.700 --> 50:47.600
Ich muss also alles speichern, was irgendwer auf meinem Rechner wann

50:47.600 --> 50:49.400
gemacht hat.

50:50.520 --> 50:53.000
Und das sind sehr lange Protokolldateien.

50:54.540 --> 50:59.460
Da ist immer die Frage, was wird da eigentlich alles gespeichert.

50:59.580 --> 51:02.740
Sie können sich sofort vorstellen, dass natürlich dazu viele Daten

51:02.740 --> 51:07.620
gehören, die vielleicht Privatsphäre auch angehen, wenn solche Dinge

51:07.620 --> 51:08.740
darauf bearbeitet werden.

51:09.240 --> 51:12.880
Aber das Betriebssystem muss alles nachvollziehen können.

51:13.680 --> 51:16.260
Da muss man eben nur dafür sorgen, dass niemand, der nicht berechtigt

51:16.260 --> 51:18.800
ist, darauf zuzugreifen, anschließend darauf Zugriff erhält.

51:19.060 --> 51:21.480
Das wäre dann die Vertraulichkeit oder Zugriffsschutz.

51:21.620 --> 51:24.900
Aber es muss alles, was geschieht, nachvollziehbar sein, damit man

51:24.900 --> 51:26.720
Fehlerdiagnose machen kann.

51:27.060 --> 51:28.160
Ansonsten funktioniert das nicht.

51:33.380 --> 51:38.120
Das sind also die ganzen Aspekte von Sicherheit, also von Safety und

51:38.120 --> 51:38.680
Security.

51:40.120 --> 51:45.000
Und etwas, was man dafür braucht, ist eine Benutzerverwaltung.

51:45.780 --> 51:48.660
Ich muss also für jeden Benutzer festlegen, was der alles darf.

51:49.980 --> 51:53.440
Hier tritt nochmal Kim auf, weil wir in dem Kim-Projekt ein

51:53.440 --> 52:00.920
Identitätsmanagement für das KIT implementiert haben bzw.

52:01.240 --> 52:04.500
im SCC wurde das hier entwickelt und wird in die Prozesse hier mit

52:04.500 --> 52:05.220
eingebaut.

52:05.500 --> 52:11.060
Identity Management ist ein wichtiger Teil für ein Unternehmen, wenn

52:11.060 --> 52:20.160
sie dort das IT-System, also die Informationsverarbeitung gestalten

52:20.160 --> 52:20.480
müssen.

52:20.480 --> 52:25.400
Sie brauchen ein Identity Management, Sie müssen wissen, wer wann auf

52:25.400 --> 52:27.740
welche Rechner zugreifen darf oder welche Ressourcen.

52:28.440 --> 52:32.320
Dafür brauchen Sie eine Identifikation und eine Authentifizierung.

52:32.700 --> 52:35.540
Was ist daran so schwierig, ein Identity Management zu machen?

52:36.240 --> 52:39.660
Sie haben normalerweise unterschiedliche Bereiche, auf die ein Nutzer

52:39.660 --> 52:40.580
zugreifen darf.

52:41.400 --> 52:46.820
Meinetwegen haben Sie hier die Universitätsbibliothek oder Sie haben

52:46.820 --> 52:48.500
das SCC.

52:49.360 --> 52:54.340
Oder Sie haben die Fakultät Wirtschaftswissenschaften mit dem ZIP

52:54.340 --> 52:54.520
-Pool.

52:55.420 --> 52:56.420
Alle haben Nutzer.

52:57.380 --> 53:03.080
Die einzelnen Nutzer greifen jeweils in dem Kontext, in dem sie sich

53:03.080 --> 53:05.960
gerade befinden, auf unterschiedliche Ressourcen zu in

53:05.960 --> 53:07.020
unterschiedlichen Domänen.

53:08.920 --> 53:12.600
Und jemand, der den ZIP-Pool nutzen möchte, der muss vielleicht gar

53:12.600 --> 53:17.420
nicht alle Informationen, oder über den muss nicht alles bekannt sein,

53:17.940 --> 53:21.280
was die UB braucht, wenn es darum geht, Bücher auszuleihen.

53:21.340 --> 53:24.500
Die UB muss zum Beispiel genau wissen, wie die Privatadresse eines

53:24.500 --> 53:29.640
Studenten ist, weil im Fall der Nichtrückgabe eines Buches eine

53:29.640 --> 53:31.060
Mahnung verschickt werden muss.

53:31.340 --> 53:32.680
Per Post, das ist vorgeschrieben.

53:34.060 --> 53:36.340
Und dafür braucht man die Privatadresse.

53:37.220 --> 53:40.520
Die Adresse braucht man aber nicht, wenn jemand im ZIP-Pool eine

53:40.520 --> 53:44.060
Ressource nutzen will oder wenn jemand im STC einen Rechner-Account

53:44.060 --> 53:44.400
hat.

53:45.460 --> 53:47.860
Das heißt, da gibt es unterschiedliche Antworten, unterschiedliche

53:47.860 --> 53:51.040
Informationen, die man braucht, unterschiedliche Attribute.

53:52.020 --> 53:54.560
Jeder Nutzer hat also eine Reihe von Attributen, durch die er

53:54.560 --> 53:55.720
charakterisiert ist.

53:56.300 --> 53:59.640
Und sie brauchen in den verschiedenen Domänen nur Teile dieser

53:59.640 --> 54:01.020
Attribute.

54:01.720 --> 54:05.920
Die einfachste Art, so etwas zu realisieren ist, dass man jedem alles

54:05.920 --> 54:06.360
mitteilt.

54:06.440 --> 54:07.400
Aber das ist nicht adäquat.

54:08.240 --> 54:12.940
Bei Identity Management ist es auch so, dass man sich nur gegenüber

54:12.940 --> 54:20.000
einem authentifiziert und dann werden entsprechend die Informationen

54:20.000 --> 54:24.440
weitergegeben in anderen Bereichen, die für den relevant sind.

54:25.460 --> 54:30.500
Also das macht das Identitätsmanagement schwieriger, weil man eben

54:30.500 --> 54:34.440
dafür sorgen will, dass jede Domäne, in der man arbeitet, nur die

54:34.440 --> 54:38.460
Informationen bekommt, die erforderlich sind, um dort alle Funktionen

54:38.460 --> 54:40.320
zu nutzen, die man braucht.

54:41.460 --> 54:44.280
Also Identifikation, Benutzernahme und Kennwort, da kommt die

54:44.280 --> 54:48.520
Authentifizierung dazu, mit Sachen wie digitaler Signatur,

54:48.680 --> 54:52.360
Fingerabdruck, Sprache, Iris-Scan oder was immer Sie machen wollen.

54:53.180 --> 54:57.860
Also das ist noch eine weitere Überprüfung, ob tatsächlich

54:57.860 --> 55:04.000
Benutzernahme und Kennwort von der Person eingegeben wurden, die mit

55:04.000 --> 55:06.880
diesem Namen und dem Kennwort verbunden ist.

55:07.920 --> 55:09.040
Deswegen Authentifizierung.

55:10.980 --> 55:15.460
Also ich muss klären, wer darf auf Ressourcen zugreifen, welche

55:15.460 --> 55:17.760
Informationen brauche ich über den Nutzer, das hatte ich gerade eben

55:17.760 --> 55:22.340
angedeutet, welche Zugriffsrechte hat ein Benutzer, auch das ist

55:22.340 --> 55:22.820
wichtig.

55:23.440 --> 55:26.660
Ich lasse ihn rein in meinen Rechner, was darf der jetzt eigentlich

55:26.660 --> 55:27.100
alles?

55:28.100 --> 55:32.100
Der darf meinetwegen Dateien lesen, das ist das Einfachste.

55:33.260 --> 55:35.100
Darf er in Dateien schreiben?

55:36.680 --> 55:39.000
Nicht notwendigerweise erlaubt.

55:39.960 --> 55:43.740
Es gibt Dateien, die dürfen nicht verändert werden oder zumindest von

55:43.740 --> 55:45.260
gewissen Nutzern nicht verändert werden.

55:46.540 --> 55:50.580
Drucken von Dateien, wer darf etwas ausdrucken?

55:51.440 --> 55:54.640
Wer darf etwas anschauen oder kopieren?

55:55.440 --> 55:58.700
Sie haben eine Datei, schauen die auf dem Rechner an.

55:59.200 --> 56:04.500
Darf ich jetzt von dem Bild, was gerade auf meinem Bildschirm ist,

56:04.980 --> 56:07.580
darf ich davon ein Foto machen mit meinem Smartphone?

56:09.060 --> 56:13.880
Ein guter Zugriffsschutz würde dafür sorgen, dass mein Smartphone in

56:13.880 --> 56:17.320
dem Augenblick, wo ein solches Bild auf einem anderen Rechner ist, das

56:17.320 --> 56:22.980
nicht fotografiert werden darf, wird daran gehindert zu fotografieren.

56:24.660 --> 56:25.680
Das kann man machen.

56:25.780 --> 56:28.660
Sie können das, wenn Sie auf einen Drucker einen Geldschein legen und

56:28.660 --> 56:31.980
den kopieren wollen, beim Farbdrucker, der kopiert den Geldschein

56:31.980 --> 56:32.300
nicht.

56:32.560 --> 56:35.100
Der erkennt, das ist ein Geldschein, der darf nicht gedruckt werden.

56:36.480 --> 56:38.900
Das ist ganz einfach zu machen, ist auch in allen Druckern

56:38.900 --> 56:39.660
implementiert.

56:39.660 --> 56:43.520
Sie können Geldscheine nicht auf einem Farbdrucker kopieren, in einer

56:43.520 --> 56:46.520
Qualität, die eigentlich verfügbar wäre.

56:46.980 --> 56:48.300
Das wird automatisch verhindert.

56:48.400 --> 56:52.360
Genauso könnten Sie dafür sorgen, dass Aufnahmegeräte in der Umgebung

56:52.360 --> 56:55.620
eines Rechners daran gehindert werden, einen Bildschirminhalt

56:55.620 --> 56:58.100
tatsächlich aufzunehmen.

56:58.260 --> 57:02.120
Das geht noch darüber hinaus, dass der Rechner selber einen

57:02.120 --> 57:04.340
Bildschirmsnapshot nicht machen darf.

57:05.500 --> 57:09.340
Das sind Dinge, die haben was damit zu tun, wer darf etwas mit dem

57:09.340 --> 57:10.840
Inhalt von Dateien tun.

57:11.820 --> 57:17.740
Sie haben Ihr PDF-Dokument, Sie sichern das und können festlegen, darf

57:17.740 --> 57:22.780
dort gelesen werden, darf gedruckt werden, darf vielleicht mit einer

57:22.780 --> 57:24.500
geringeren Auflösung gedruckt werden.

57:25.120 --> 57:26.220
Auch solche Sachen kann man machen.

57:27.000 --> 57:29.400
Oder muss da im Hintergrund vielleicht bei einem Bild dann immer

57:29.400 --> 57:33.180
irgendetwas stehen, über den Ursprung dieser Dinge.

57:33.800 --> 57:34.940
Versenden von E-Mail.

57:35.000 --> 57:36.620
Wer darf eigentlich E-Mail versenden?

57:37.380 --> 57:39.780
Wer darf mit meinem Namen E-Mail versenden?

57:39.880 --> 57:43.600
Sie kennen alle die Effekte, dass auf einmal Sie eine E-Mail sehen, da

57:43.600 --> 57:47.780
stehen Sie als Absender, das ist aber eine eindeutige Spam-Mail, also

57:47.780 --> 57:55.100
irgendeine nicht erwünschte Werbung und da steht Ihr Name als

57:55.100 --> 57:55.540
Absender.

57:56.320 --> 58:02.600
Das passiert, ist auch am KIT vorgekommen, dass irgendwelche

58:02.600 --> 58:09.000
Drittparteien dafür sorgen, dass irgendwelche Accounts verwendet

58:09.000 --> 58:13.000
werden, um E-Mails zu verschicken, ohne dass der Inhaber des Accounts

58:13.000 --> 58:14.440
jemals damit etwas zu tun hatte.

58:14.940 --> 58:15.940
Das muss man vermeiden.

58:17.680 --> 58:19.000
Systemdienste in Anspruch nehmen.

58:19.040 --> 58:20.840
Ich hatte Ihnen das Sandbox-Modell erwähnt.

58:21.380 --> 58:24.020
Drucken darf ein Applet auf einem Rechner nicht.

58:25.640 --> 58:27.160
Ausführen von Programmen.

58:27.700 --> 58:30.180
Auch das ist wichtig, wenn Sie eine Datei laden.

58:31.020 --> 58:33.100
Das ist keine ausführbare Datei.

58:33.820 --> 58:38.400
Dann darf diese Datei nicht auf einmal, dadurch dass sie gelesen wird,

58:38.720 --> 58:41.080
anfangen etwas auszuführen.

58:42.480 --> 58:48.900
Sie wissen, dass es Möglichkeiten gibt, Dateien so zu verändern, durch

58:48.900 --> 58:51.940
Viren, dass sie auf einmal ausführbaren Code enthalten, der dann

58:51.940 --> 58:56.080
tatsächlich dazu führt, dass Dinge gemacht werden, die Sie eigentlich

58:56.080 --> 58:57.000
gar nicht haben wollen.

58:57.680 --> 59:01.220
Ausführen von Programmen natürlich nur dann, wenn Sie wissen, dass es

59:01.220 --> 59:03.660
ein gewünschtes Programm ist.

59:04.180 --> 59:06.340
Erzeugen, kopieren, löschen von Dateien.

59:07.320 --> 59:08.260
Auch eine wichtige Sache.

59:08.400 --> 59:10.940
Wie darf ich überhaupt eine neue Datei erzeugen?

59:12.460 --> 59:13.760
Darf ich die dort ablegen?

59:13.900 --> 59:16.940
Darf ich eine Datei, die ich bekomme, kopieren?

59:18.000 --> 59:19.460
Darf ich eine Datei löschen?

59:19.460 --> 59:23.980
Bei Shared Workspaces, also wenn Sie gemeinsame Arbeitsbereiche haben,

59:24.500 --> 59:27.680
Sharepoint oder ähnliches, darf da jeder einfach Dateien löschen?

59:28.240 --> 59:31.600
Oder darf das nur derjenige, der die Datei ursprünglich angelegt hat?

59:31.900 --> 59:36.580
Oder jemand, dem man explizit das Recht gegeben hat, diese Datei zu

59:36.580 --> 59:36.940
löschen?

59:38.740 --> 59:42.460
Und was ist, wenn jemand jetzt sagt, ich möchte eine Datei löschen,

59:43.020 --> 59:46.000
ich habe aber einem anderen die Möglichkeit gegeben, die Datei zu

59:46.000 --> 59:50.920
kopieren, ist dann der Löschauftrag automatisch auch für alle Kopien

59:50.920 --> 59:52.860
dieser Datei gültig?

59:52.960 --> 59:54.020
Oder wird er dort ausgeführt?

59:54.800 --> 59:59.420
Das kann man gewährleisten, ist aber eine aufwendige Methode, um so

59:59.420 --> 01:00:00.540
etwas durchzuführen.

01:00:01.360 --> 01:00:05.280
Also das Erzeugen, Kopieren und Löschen von Dateien, das sind wichtige

01:00:05.280 --> 01:00:07.120
Fragen, wie man das hinbekommen kann.

01:00:08.560 --> 01:00:11.720
Insbesondere unter dem Aspekt, wenn ich eine Datei löschen möchte,

01:00:11.720 --> 01:00:15.920
dass die Information, die da drin ist, sofern ich das möchte, auch

01:00:15.920 --> 01:00:20.980
wirklich aus dem System insgesamt verschwindet und nicht nur diese

01:00:20.980 --> 01:00:21.980
einzelne Kopie.

01:00:23.280 --> 01:00:27.160
Das hat was damit zu tun, inwieweit ich Zugriffsrechte verändern oder

01:00:27.160 --> 01:00:28.180
weitergeben darf.

01:00:28.360 --> 01:00:32.920
Ich darf meinetwegen eine Datei kopieren, löschen, alles mögliche, ich

01:00:32.920 --> 01:00:38.160
kopiere sie und gebe diese Datei weiter an jemanden, der diese Rechte

01:00:38.160 --> 01:00:38.920
nicht hat.

01:00:38.920 --> 01:00:40.760
Er bekommt sie jetzt von mir.

01:00:42.700 --> 01:00:44.720
Vielleicht darf ich sie nur unter Auflagen weitergeben.

01:00:45.680 --> 01:00:49.460
Das sind alles Dinge, mit denen hat man zu tun, wenn es um Identity

01:00:49.460 --> 01:00:50.260
Management geht.

01:00:50.720 --> 01:00:54.620
Welche Rechte hat eine Person in einem bestimmten Kontext, auf einer

01:00:54.620 --> 01:00:55.480
bestimmten Domäne?

01:00:57.260 --> 01:01:01.640
Also offensichtlich ein wesentlicher Bereich, insbesondere wenn man

01:01:01.640 --> 01:01:06.260
ein System sicher machen möchte, sicher gegen unerlaubte Eingriffe

01:01:06.260 --> 01:01:11.600
durch interne oder externe Akteure.

01:01:12.960 --> 01:01:17.780
Dann eine andere Sache ist, welche Arbeitsumgebung erwartet ein

01:01:17.780 --> 01:01:19.420
Benutzer nach seiner Anmeldung?

01:01:20.120 --> 01:01:21.000
Auch das ist wichtig.

01:01:22.380 --> 01:01:28.140
In modernen Systemen, einige Firmen bieten ja keine festen

01:01:28.140 --> 01:01:31.280
Arbeitsplätze mehr an, sondern sie können irgendwo sich hinsetzen,

01:01:31.420 --> 01:01:38.340
zugreifen auf die IT-Umgebung ihres Arbeitgebers und haben dann ihren

01:01:38.340 --> 01:01:41.500
virtuellen Arbeitsplatz zur Verfügung, egal wo sie sich anmelden.

01:01:42.120 --> 01:01:46.080
Die Arbeitsumgebung, die sie brauchen, können sie definieren und muss

01:01:46.080 --> 01:01:47.300
ihnen dann bereitgestellt werden.

01:01:47.440 --> 01:01:49.900
Genauso muss man sehen, was wird bei der Abmeldung eines Benutzers

01:01:49.900 --> 01:01:53.780
getan, was muss ich alles danach an irgendwelchen Diensten wieder

01:01:53.780 --> 01:01:57.520
abmelden, welche Speicherplätze muss ich freigeben und so weiter.

01:01:58.300 --> 01:02:00.680
All das hat mit der Benutzerverwaltung zu tun.

01:02:01.100 --> 01:02:02.060
Komplexe Aufgabe.

01:02:03.820 --> 01:02:07.360
Und jetzt symmetrisch dazu oder orthogonal dazu haben wir die

01:02:07.360 --> 01:02:08.280
Ressourcenverwaltung.

01:02:09.600 --> 01:02:15.640
Für jede Ressource muss ich festlegen, wer darf diese Ressource in

01:02:15.640 --> 01:02:16.260
Anspruch nehmen.

01:02:16.360 --> 01:02:18.680
Das ist ein bisschen, kann man sagen, alternativ.

01:02:19.500 --> 01:02:22.740
Wenn ich für die Ressourcen festlege, wer darauf zugreifen kann, muss

01:02:22.740 --> 01:02:25.220
ich ja nicht bei den einzelnen Personen festlegen, was sie alles tun

01:02:25.220 --> 01:02:25.520
dürfen.

01:02:25.520 --> 01:02:29.320
Das ist ja bei den Ressourcen, auf die sie zugreifen dürfen, abgelegt,

01:02:29.420 --> 01:02:30.460
ob sie es dürfen oder nicht.

01:02:32.120 --> 01:02:34.720
Welche anderen Ressourcen werden benötigt und so weiter.

01:02:34.980 --> 01:02:37.400
Das ist also alles Dinge, die dort eine Rolle spielen.

01:02:40.940 --> 01:02:44.220
Diese Informationen dort entsprechen natürlich den Informationen der

01:02:44.220 --> 01:02:44.920
Benutzerverwaltung.

01:02:45.020 --> 01:02:47.840
Sie können die aber durchaus sehr unterschiedlich gestalten.

01:02:49.860 --> 01:02:53.880
Diese ganzen Dinge gehören zum File-Management-System dazu.

01:02:54.060 --> 01:02:56.380
Also wenn sie irgendwelche Dateien haben auf ihrem Rechner, wie kann

01:02:56.380 --> 01:03:00.860
ich dafür sorgen, dass die vernünftig sicher gespeichert und betrieben

01:03:00.860 --> 01:03:01.180
werden.

01:03:04.040 --> 01:03:07.540
Und wie man Dateien organisiert, kommt dann noch im nächsten Kapitel.

01:03:07.680 --> 01:03:08.780
Das ist also noch ein bisschen hin.

01:03:11.080 --> 01:03:14.500
Und ich hatte schon mal darauf hingewiesen, als ich Ihnen kurz die

01:03:14.500 --> 01:03:19.620
Funktionsweise des Internets erklärt habe, also mit TCP, IP, UDP und

01:03:19.620 --> 01:03:24.860
so weiter, mit den Begriffen Internet, Intranet, Extranet, dass man

01:03:24.860 --> 01:03:26.400
die voneinander schützen möchte.

01:03:26.660 --> 01:03:30.100
Also wenn, da war dieses schöne Bild, Sie haben hier das Internet, da

01:03:30.100 --> 01:03:33.640
drin haben Sie irgendein Intranet und außen drum ein Extranet.

01:03:33.760 --> 01:03:38.220
Und Sie wollen dafür sorgen, dass von dem Internet aus niemand so

01:03:38.220 --> 01:03:41.680
richtig hier drauf zugreifen kann.

01:03:41.960 --> 01:03:44.220
Und dazu baut man halt Firewalls.

01:03:46.420 --> 01:03:52.040
Und also irgendwelche sicheren Maßnahmen, die dafür sorgen, dass nur

01:03:52.040 --> 01:03:56.860
bestimmte Dienste auf Rechnerressourcen im Intranet zum Beispiel

01:03:56.860 --> 01:03:58.280
zugreifen dürfen.

01:03:59.080 --> 01:04:02.660
Da wird der externe Zugriff auf Dienste des Rechners eingeschränkt.

01:04:03.360 --> 01:04:05.400
Das ist die Richtung von außen nach innen.

01:04:06.100 --> 01:04:10.040
Es kann aber sein, dass Sie auch einschränken die Möglichkeiten von

01:04:10.040 --> 01:04:12.280
innen nach außen irgendwo zuzugreifen.

01:04:12.900 --> 01:04:18.580
Auch das ist sehr weit verbreitet, dass Sie keineswegs alle Adressen

01:04:18.580 --> 01:04:23.920
außerhalb anwählen dürfen oder verwenden dürfen, sondern dass Sie nur

01:04:23.920 --> 01:04:26.580
in dem Intranet selbst bleiben dürfen.

01:04:28.660 --> 01:04:31.540
Man macht dazu, oder muss dazu natürlich die Kommunikation zwischen

01:04:31.540 --> 01:04:34.640
Diensten des Rechners und externen Partnern kontrollieren.

01:04:34.760 --> 01:04:36.460
Das dauert, das braucht Zeit.

01:04:36.460 --> 01:04:40.980
Das heißt, dadurch wird die Informationsverarbeitung, die

01:04:40.980 --> 01:04:42.620
Kommunikation verlangsamt.

01:04:42.880 --> 01:04:47.840
Man muss sehen, wie man vermeidet, dass dadurch der Betrieb

01:04:47.840 --> 01:04:50.120
beeinträchtigt wird.

01:04:51.060 --> 01:04:56.080
Also durch Firewalls grenzt man halt das Intranet gegen Extranet und

01:04:56.080 --> 01:04:57.700
das wiederum gegen das Internet ab.

01:04:58.220 --> 01:04:59.720
Das hatte ich Ihnen schon mal angedeutet.

01:05:00.240 --> 01:05:03.620
Für Firewalls gibt es viele verschiedene Technologien, die zum Teil

01:05:03.620 --> 01:05:07.780
direkt in Hardware implementiert sind, zum Teil in Software und

01:05:07.780 --> 01:05:11.760
unterschiedlich weit in die Kommunikationsschichten hineingehen

01:05:11.760 --> 01:05:14.760
beziehungsweise in die Struktur der Datenpakete, die verschickt

01:05:14.760 --> 01:05:15.100
werden.

01:05:17.380 --> 01:05:19.520
Okay, das also zur Ressourcenverwaltung.

01:05:20.400 --> 01:05:23.340
Und hier haben wir nochmal ein paar Beispiele, wenn Sie Unix oder

01:05:23.340 --> 01:05:24.520
Linux sich anschauen.

01:05:25.200 --> 01:05:30.580
Da ist ein Standard-Zugriffsschutzmechanismus vorgesehen.

01:05:30.580 --> 01:05:33.360
Da haben Sie eine dreistufige Hierarchie.

01:05:34.240 --> 01:05:36.760
Besitzer, Gruppe, Welt.

01:05:38.880 --> 01:05:42.280
Der Besitzer ist derjenige, der die Datei angelegt hat.

01:05:44.040 --> 01:05:49.500
Die Gruppe ist vielleicht irgendeine Gruppe, die Sie definiert haben.

01:05:49.900 --> 01:05:53.020
Alle Mitarbeiter in einem Institut oder in Ihrer Arbeitsgruppe, in

01:05:53.020 --> 01:05:55.340
Ihrer Firma oder in Ihrer Abteilung.

01:05:55.660 --> 01:05:56.560
Und Welt ist jeder.

01:05:57.460 --> 01:05:58.600
Nur diese drei Stufen.

01:05:58.600 --> 01:06:01.560
Sie können eine Gruppe festlegen.

01:06:03.620 --> 01:06:07.680
Es kann also eine Gruppe Zugriff bekommen.

01:06:08.580 --> 01:06:11.580
Und ansonsten können Sie sagen, was die Welt darf oder nicht darf.

01:06:12.620 --> 01:06:15.600
Und worum es dann geht, ist in der Regel hier Lesen, Schreiben,

01:06:16.100 --> 01:06:17.100
Ausführen, Suchen.

01:06:17.200 --> 01:06:18.940
Also Ausführen von irgendwelchen Programmen.

01:06:20.200 --> 01:06:23.120
Und ich sagte es schon, der Benutzer Root hat stets alle Rechte.

01:06:23.120 --> 01:06:27.600
Der darf, selbst wenn Sie geschrieben haben, nur der Besitzer darf

01:06:27.600 --> 01:06:29.080
zugreifen auf eine Datei.

01:06:29.580 --> 01:06:31.340
Root darf darauf zugreifen.

01:06:32.440 --> 01:06:33.020
Das ist so.

01:06:34.440 --> 01:06:38.300
Und das Ganze ist natürlich sehr eingeschränkt, wenn Sie nur diese

01:06:38.300 --> 01:06:39.280
drei Stufen haben.

01:06:39.780 --> 01:06:43.380
Da können Sie keine wirklich feingranulare Rechtezuweisung machen, wie

01:06:43.380 --> 01:06:47.240
ich das auf der vorigen Folie in der Erläuterung gerade gesagt habe.

01:06:48.980 --> 01:06:50.780
Damit kann man nicht sehr viel tun.

01:06:50.780 --> 01:06:55.960
Diese Systeme müssen weitere Mechanismen einbauen.

01:06:56.080 --> 01:06:58.760
Da müssen Sie dann explizit dafür sorgen, wenn Sie weitere

01:06:58.760 --> 01:07:01.440
Einschränkungen umsetzen wollen.

01:07:02.960 --> 01:07:10.260
Bei Windows 95, 98, um nochmal dran zu erinnern, das waren ja

01:07:10.260 --> 01:07:14.640
Betriebssysteme von Microsoft, die dann nach dem Beispiel anderer

01:07:14.640 --> 01:07:18.020
Betriebssysteme auch eine Benutzerverwaltung eingebaut haben.

01:07:18.020 --> 01:07:22.820
Wenn Sie sich da angemeldet haben, kam ein Fenster und da wurden Sie

01:07:22.820 --> 01:07:25.940
aufgefordert, Ihren Benutzernamen einzugeben und Ihr Passwort.

01:07:26.480 --> 01:07:29.080
Und da oben gab es ein Feld, das so aussieht.

01:07:29.620 --> 01:07:32.240
Wenn Sie darauf geklickt haben, dann durften Sie zugreifen.

01:07:33.620 --> 01:07:39.580
Das war nett gemeint, so man will darstellen, da soll eigentlich nur

01:07:39.580 --> 01:07:42.300
dieser Nutzer mit dem Passwort darauf zugreifen können.

01:07:42.760 --> 01:07:46.780
Aber es war keine wirkliche Schranke.

01:07:47.920 --> 01:07:50.680
Es gab keinen Zugriffsschutz, weil Sie einfach dieses Fenster

01:07:50.680 --> 01:07:53.180
wegklicken konnten und da konnten Sie auf alle Ressourcen zugreifen.

01:07:53.800 --> 01:07:58.980
Wenn Sie das nicht wollten, brauchten Sie sich nicht darum zu kümmern.

01:07:59.840 --> 01:08:05.080
Mittlerweile, also schon seit XP und auch darauf aufbauend, jetzt

01:08:05.080 --> 01:08:08.520
Windows 8 und so weiter ist es natürlich überall drin, hat man so

01:08:08.520 --> 01:08:13.460
etwas wie Active Directories, ein sehr ausgefuchstes System, ein sehr

01:08:13.460 --> 01:08:15.620
komplexes System der Benutzerverwaltung.

01:08:16.300 --> 01:08:22.860
Da können Sie Ihre ganze Unternehmensstruktur abbilden auf eine

01:08:22.860 --> 01:08:28.380
Zugriffsschutz - oder Zugriffsrechte-Struktur und können damit sehr

01:08:28.380 --> 01:08:32.020
feingranular festlegen, wer was damit darf.

01:08:32.160 --> 01:08:34.860
Entsprechend der Struktur Ihres Unternehmens.

01:08:36.140 --> 01:08:42.800
Das ist eine sehr sinnvolle Art, Sicherheitsmaßnahmen einzuführen

01:08:46.080 --> 01:08:50.460
und auch hier gibt es innerhalb noch wieder solche Sachen, wie lokal,

01:08:50.580 --> 01:08:54.200
global, universal, aber es gibt eben auch diese ganzen Dinge, die in

01:08:54.200 --> 01:08:55.560
Active Directories drinstehen.

01:08:56.080 --> 01:09:00.720
Also das ist eine sinnvolle Art, die Informationsverarbeitung in einem

01:09:00.720 --> 01:09:02.480
Unternehmen sicher zu gestalten.

01:09:03.080 --> 01:09:05.480
Zumindest eine Benutzer- und Ressourcenverwaltung zu machen.

01:09:06.780 --> 01:09:10.720
Also auch deutlich besser und feingranularer als das, was hier bei

01:09:10.720 --> 01:09:12.180
Unix und Linux gemacht wird.

01:09:14.300 --> 01:09:18.300
So, und damit sind wir schon am Ende dieses Kapitels.

01:09:18.800 --> 01:09:19.400
Betriebssysteme.

01:09:20.940 --> 01:09:27.920
Das war ein sehr schneller Durchgang durch diese ganzen Themen und ich

01:09:27.920 --> 01:09:30.700
weiß, dass man, um das wirklich zu verstehen, eigentlich mehr Zeit

01:09:30.700 --> 01:09:31.180
bräuchte.

01:09:31.280 --> 01:09:34.040
Das Dumme ist, dass Sie auch kaum noch Gelegenheit haben, das in

01:09:34.040 --> 01:09:38.580
Übungen tatsächlich dann intensiv anzuschauen, aber Sie haben ja den

01:09:38.580 --> 01:09:39.800
Aufgabenpool zur Verfügung.

01:09:40.600 --> 01:09:42.920
Und darüber können Sie sich dann auch mit dem Stoff noch genauer

01:09:42.920 --> 01:09:43.500
beschäftigen.

01:09:44.080 --> 01:09:48.180
Da haben Sie eine Reihe Aufgaben, die durchaus in der Art auch in

01:09:48.180 --> 01:09:49.640
Klausuren gestellt werden können.

01:09:51.440 --> 01:09:57.260
Also, das ist das Kapitel Betriebssysteme gewesen und damit können wir

01:09:57.260 --> 01:10:01.280
schon auf das nächste Kapitel kommen, das Kapitel 11.

01:10:02.880 --> 01:10:03.480
Dateiorganisation.

01:10:05.660 --> 01:10:08.460
Das sieht jetzt also so aus, dass wir tatsächlich das schaffen,

01:10:08.900 --> 01:10:11.960
nächste Woche damit fertig zu werden.

01:10:14.880 --> 01:10:17.200
Also, welches weitere Thema haben wir hier?

01:10:17.720 --> 01:10:18.320
Dateiverwaltung.

01:10:19.920 --> 01:10:21.400
Das fehlte jetzt noch.

01:10:22.360 --> 01:10:24.680
Also, wir haben uns mit allen möglichen Themen beschäftigt.

01:10:25.360 --> 01:10:29.800
Wie man Rechner baut, wie man die Hardware baut, wie man Informationen

01:10:29.800 --> 01:10:37.120
im Prinzip darstellt, wie man die Rechner strukturieren muss, wie die

01:10:37.120 --> 01:10:40.840
Architektur aussieht, damit Programme ausgeführt werden können.

01:10:41.200 --> 01:10:44.120
Wir haben uns damit beschäftigt, wie die Programmierschnittstellen

01:10:44.120 --> 01:10:46.060
aussehen auf den verschiedenen Ebenen.

01:10:46.520 --> 01:10:49.380
Haben jetzt Betriebssystemaspekte uns angeschaut.

01:10:50.100 --> 01:10:55.160
Und jetzt kommt noch ein weiteres Kapitel mit einer Reihe von

01:10:55.160 --> 01:10:57.720
Aspekten, die bei Rechnern eine Rolle spielen.

01:10:58.960 --> 01:11:02.980
Und zwar geht es darum, wie kann ich Dateien eigentlich sinnvoll

01:11:02.980 --> 01:11:05.960
zwischen verschiedenen Speichermedien hin- und herschieben.

01:11:06.460 --> 01:11:10.220
Was bedeutet das für die Darstellung, oder für die Organisation der

01:11:10.220 --> 01:11:11.120
einzelnen Dateien?

01:11:11.820 --> 01:11:13.920
Wie werden die überhaupt angeordnet?

01:11:14.680 --> 01:11:19.360
Ich habe ja in einer Datei normalerweise nicht nur Einzelzahlen oder

01:11:19.360 --> 01:11:21.740
Namen, sondern ich habe größere Objekte.

01:11:22.540 --> 01:11:25.200
Und darum muss man sich kümmern, wie man das sinnvoll macht.

01:11:25.200 --> 01:11:26.660
Also was sind so übliche Daten?

01:11:28.200 --> 01:11:35.040
Ich habe meinetwegen Daten über ein Unternehmen, oder ein

01:11:35.040 --> 01:11:39.440
Handelsunternehmen hat Datenbanken, hat einen Kundenkreis, hat

01:11:39.440 --> 01:11:41.120
Artikel, hat Lieferanten.

01:11:41.840 --> 01:11:44.760
Und die müssen alle sinnvoll dargestellt werden.

01:11:45.540 --> 01:11:48.740
Die werden dafür normalerweise irgendwelche Datenbanksysteme aufbauen.

01:11:48.820 --> 01:11:50.980
Ich werde Ihnen nichts erzählen hier über Datenbanken.

01:11:50.980 --> 01:11:54.500
Aber es geht darum, wie ich eine Datei strukturiere.

01:11:55.660 --> 01:11:58.640
Und wenn ich eine Bestellung habe von einem Kunden, ein Kunde möchte

01:11:58.640 --> 01:12:02.800
ein Produkt bestellen, ein Artikel bestellen, dann muss ich mich darum

01:12:02.800 --> 01:12:05.660
kümmern, wann wird das eigentlich geliefert, es muss eine Rechnung

01:12:05.660 --> 01:12:07.380
geschrieben werden, es gibt Zahlungseingänge.

01:12:07.920 --> 01:12:09.960
Diese Dinge sind alle vernünftig darzustellen.

01:12:11.900 --> 01:12:16.200
Und wenn ich Aufträge an Lieferanten habe, muss ich denen im Auftrag

01:12:16.200 --> 01:12:19.820
einen Wareneingang, eine Zahlungsanforderung, einen Zahlungsausgang

01:12:19.820 --> 01:12:21.400
ablegen können.

01:12:21.940 --> 01:12:23.000
All dies ist wichtig.

01:12:24.560 --> 01:12:28.680
Und wenn Sie sich anschauen, was passiert alles, bei einer

01:12:28.680 --> 01:12:32.420
telefonischen Bestellung, irgendetwas wird dort angegeben, irgendein

01:12:32.420 --> 01:12:37.660
Artikel, eine Menge, Zahlungsziel, was ist mit Rabatt, mit Skonto und

01:12:37.660 --> 01:12:41.460
Ähnlichem, welche Preise muss ich zahlen, wie wird geliefert.

01:12:42.340 --> 01:12:44.040
Das sind Informationen, die dort drinstehen.

01:12:46.640 --> 01:12:49.100
Und was muss man dann alles machen?

01:12:49.220 --> 01:12:52.220
Sie müssen nachschauen im Artikelbestand, ob noch genug vorhanden ist.

01:12:52.760 --> 01:12:59.140
Sie müssen im Kundenbestand nachschauen, ob die 60-Tage-Ziel bei dem

01:12:59.140 --> 01:13:00.560
Kunden erreichbar ist.

01:13:01.240 --> 01:13:05.640
Und beim Lieferantenbestand nachschauen, wie ist da die Telefonnummer

01:13:05.640 --> 01:13:07.820
für die Lieferung.

01:13:08.320 --> 01:13:13.040
Also das sind alles Dinge, die Sie anschauen müssen, wenn Sie also

01:13:13.040 --> 01:13:14.020
einen Artikel nicht haben.

01:13:14.020 --> 01:13:16.580
Wenn Sie einen Artikel nicht vorrätig haben, müssen Sie dem

01:13:16.580 --> 01:13:20.620
Lieferanten nachsehen, was müssen Sie machen, um weitere Artikel

01:13:20.620 --> 01:13:22.560
nachzuliefern.

01:13:22.580 --> 01:13:26.560
Nur zu den Informationen, die dort eine Rolle spielen.

01:13:27.380 --> 01:13:30.540
Es müssen also auf jeden Fall viele Informationen gespeichert werden.

01:13:30.820 --> 01:13:33.400
Sie werden irgendwelche Stammdaten haben.

01:13:33.920 --> 01:13:37.140
Sie haben Bewegungsdaten, also Stammdaten sind die, die sich nicht

01:13:37.140 --> 01:13:39.200
verändern oder selten ändern.

01:13:39.580 --> 01:13:42.940
Bewegungsdaten, die einzelnen Bestellungen eines Kunden werden sich

01:13:42.940 --> 01:13:43.760
ständig ändern.

01:13:44.360 --> 01:13:47.660
Die Stammdaten des Kunden in der Regel nicht, also wo er wohnt, seine

01:13:47.660 --> 01:13:50.220
Bankverbindung und ähnliches.

01:13:50.460 --> 01:13:55.920
Und die Operationen, die man hier ausführt, sind Operationen wie

01:13:55.920 --> 01:14:00.780
Aufnahme irgendeines neuen Objektes oder Datensatzes, Suche nach einem

01:14:00.780 --> 01:14:03.280
Datensatz, Entfernen eines Datensatzes.

01:14:04.220 --> 01:14:07.860
Diese drei Operationen nennt man auch Dictionary Operations.

01:14:08.200 --> 01:14:09.500
Das sind also Lexikon-Operationen.

01:14:10.600 --> 01:14:15.100
In einem Lexikon nehmen Sie Begriffe auf, Sie wollen danach suchen

01:14:15.100 --> 01:14:18.600
können und Sie wollen die durchaus auch verändern können.

01:14:19.820 --> 01:14:22.540
Und auch löschen können wieder irgendwann.

01:14:25.180 --> 01:14:29.420
Diese Dateien müssen irgendwo auf externen Speichermedien gespeichert

01:14:29.420 --> 01:14:32.200
sein, auf nicht-flüchtigen Speichern.

01:14:32.820 --> 01:14:35.640
Sie müssen die sicher ablegen können, das heißt, sie sollen nicht

01:14:35.640 --> 01:14:36.120
verschwinden.

01:14:36.580 --> 01:14:41.200
Sie müssen die so und so viele Jahre aufbewahren und sie müssen in der

01:14:41.200 --> 01:14:45.460
Lage sein, die auf andere Datenverarbeitungsanlagen zu übertragen und

01:14:45.460 --> 01:14:47.940
eben auch zwischen verschiedenen Speichermedien hin und her zu

01:14:47.940 --> 01:14:48.340
kopieren.

01:14:50.380 --> 01:14:54.440
Außerdem sollen die Daten, die dort gespeichert sind in den Dateien,

01:14:54.940 --> 01:14:58.600
schnell verfügbar sein, insbesondere wenn sie sehr große Datenmengen

01:14:58.600 --> 01:14:58.800
haben.

01:14:58.900 --> 01:15:02.180
Wir reden heutzutage oft von Big Data, da ist das ein ganz besonderes

01:15:02.180 --> 01:15:02.480
Problem.

01:15:02.480 --> 01:15:09.180
Wie kann ich dafür sorgen, dass riesige Datenmengen schnell verfügbar

01:15:09.180 --> 01:15:11.180
sind und verlässlich verfügbar sind?

01:15:11.960 --> 01:15:17.540
Ich muss Änderungen effizient ausführen können, das hinzufügen, etwas

01:15:17.540 --> 01:15:18.880
ändern, etwas löschen.

01:15:21.100 --> 01:15:27.260
Und ich muss Möglichkeiten haben, mehrere Daten, die zusammengehören,

01:15:27.320 --> 01:15:31.800
zu einem Objekt zusammenzubauen, zu einem Datensatz oder einem Objekt.

01:15:32.420 --> 01:15:36.300
Ich muss die Sicherheitsaspekte beachten, Schutz der Privatsphäre, ich

01:15:36.300 --> 01:15:39.840
muss Datei-Logbuch einrichten, dass ich weiß, wer wann auf diese Datei

01:15:39.840 --> 01:15:41.860
zugegriffen hat und ähnliches.

01:15:43.600 --> 01:15:46.940
Um das alles zu tun, will ich Ihnen nur einige wenige Dinge

01:15:46.940 --> 01:15:47.540
darstellen.

01:15:47.660 --> 01:15:50.480
Der Rest wird in Vorlesungen über Datenbanken gemacht, das ist nicht

01:15:50.480 --> 01:15:51.800
Aufgabe dieser Vorlesung.

01:15:52.160 --> 01:15:55.980
Ich möchte Ihnen aber ein paar Grundlagen darstellen, wie man eine

01:15:55.980 --> 01:16:01.040
Datei, die strukturierte Inhalte hat, sinnvoll darstellen kann.

01:16:01.120 --> 01:16:04.580
Da geht es jetzt nicht darum, das in XML zu machen, das ist eine Ebene

01:16:04.580 --> 01:16:05.000
drüber.

01:16:06.140 --> 01:16:09.940
Ja, mit XML können Sie auch sehr schön solche Dateien strukturieren.

01:16:10.500 --> 01:16:14.100
Es ist hier eine Ebene drunter, wo es darum geht, wie kann ich also

01:16:14.100 --> 01:16:17.480
eine Datei, die aus einer Reihe von logisch zusammenhängenden

01:16:17.480 --> 01:16:21.640
Elementen besteht, sinnvoll ablegen.

01:16:23.980 --> 01:16:27.020
Eines daraus ist zunächst mal der Begriff eines Satzes.

01:16:27.300 --> 01:16:28.380
Ich habe also eine Datei.

01:16:29.340 --> 01:16:32.680
Und in so einer Datei habe ich eine Reihe von Sätzen.

01:16:34.260 --> 01:16:38.920
Das heißt, das ist eine Zusammenfassung logisch zusammenhängender

01:16:38.920 --> 01:16:40.520
Bereiche.

01:16:40.640 --> 01:16:43.640
Die sind also alle hier ähnlich aufgebaut, haben hier irgendwelche

01:16:43.640 --> 01:16:44.240
Inhalte.

01:16:45.120 --> 01:16:49.520
Und das wäre hier mein Satz 1, Satz 2, Satz 3 und so weiter.

01:16:50.740 --> 01:16:54.360
Logisch zusammengehende Daten, die dasselbe Objekt oder denselben

01:16:54.360 --> 01:16:58.660
Sachverhalt betreffen, zu einer benannten logischen Einheit.

01:16:59.920 --> 01:17:01.200
In Java kennen wir das.

01:17:01.320 --> 01:17:04.060
Das ist ein Objekt, die Instanz irgendeiner Klasse.

01:17:05.320 --> 01:17:10.660
Und wenn ich hier einen Kundendatensatz habe, dann habe ich eben alle

01:17:10.660 --> 01:17:13.720
möglichen Aspekte, die diesen Kunden betreffen.

01:17:14.400 --> 01:17:17.580
Diese Aspekte sind in irgendwelchen Attributen gespeichert.

01:17:17.580 --> 01:17:21.860
Ich kann die Felder nennen oder Instanzvariablen oder was immer.

01:17:22.440 --> 01:17:23.140
Oder Attribute.

01:17:23.660 --> 01:17:27.160
Auf jeden Fall muss ich die Informationen über einen Kunden, seine

01:17:27.160 --> 01:17:33.400
Adresse und so weiter, die Produkte, die er bestellt hat, die muss ich

01:17:33.400 --> 01:17:35.180
halt irgendwie darstellen können.

01:17:37.020 --> 01:17:42.560
Und ich habe dann auch irgendwelche Elementarfelder, die Informationen

01:17:42.560 --> 01:17:44.940
enthalten, die ich nicht weiter aufspalten kann.

01:17:44.940 --> 01:17:47.160
Irgendeine Zahl oder ähnliches.

01:17:48.100 --> 01:17:51.200
Felder ohne weiter angegebene semantische Untergliederung.

01:17:51.360 --> 01:17:58.200
Das sind zum Beispiel irgendwelche Datentypen, Integer, Real, Car,

01:17:58.320 --> 01:18:01.800
also Car für Character oder was immer sie jetzt hier an Typen

01:18:01.800 --> 01:18:02.620
definiert haben.

01:18:04.060 --> 01:18:05.520
Aber eben nicht mehr strukturiert.

01:18:06.680 --> 01:18:10.840
Und außerdem sind dort noch Informationen drin über Zugriffsmethoden.

01:18:10.840 --> 01:18:17.200
Das machen wir, wenn wir über objektorientierte Strukturierung reden.

01:18:17.440 --> 01:18:20.200
Mit jedem Objekt habe ich Zugriffsmethoden definiert.

01:18:20.600 --> 01:18:22.520
Das wollen wir jetzt aber nicht weiter behandeln.

01:18:24.660 --> 01:18:30.960
Und dann gibt es einen Satz, ein Satz Typ und einen Satz.

01:18:31.540 --> 01:18:36.020
Ich definiere also, wie ein Satz aufgebaut werden soll, wieder zurück

01:18:36.020 --> 01:18:37.380
zu unserem Beispiel Kunde.

01:18:37.380 --> 01:18:43.300
Der Kunde hat also verschiedene oder hat eine Struktur.

01:18:44.300 --> 01:18:48.180
Da gibt es also irgendeinen Kopf für diesen Datensatz.

01:18:49.540 --> 01:18:53.300
Und dann gibt es eine Reihe von offenen Positionen, eine Reihe von

01:18:53.300 --> 01:18:55.040
offenen Aufträgen.

01:18:55.960 --> 01:19:01.200
Und in dem Kopf dieser Datei da stehen die Stammdaten im Prinzip drin.

01:19:01.700 --> 01:19:02.900
Das wäre also die Kundennummer.

01:19:02.900 --> 01:19:05.720
Der Name besteht aus Vorname und Nachname.

01:19:06.580 --> 01:19:08.360
Dann die Anschrift.

01:19:09.440 --> 01:19:09.880
Und so weiter.

01:19:10.660 --> 01:19:13.500
Und hier haben Sie bei den offenen Positionen irgendwelche

01:19:15.100 --> 01:19:16.580
Rechnungsnummern und Datum.

01:19:16.700 --> 01:19:19.860
Bei den offenen Aufträgen haben Sie Artikelnummer, Datum und Menge.

01:19:21.060 --> 01:19:23.180
Jetzt können Sie sich das beliebig noch komplizierter vorstellen.

01:19:23.780 --> 01:19:29.280
Das wäre also ein Schema, nach dem ein Satz strukturiert werden soll

01:19:29.280 --> 01:19:30.740
oder ein Satztyp.

01:19:31.640 --> 01:19:34.480
Und jeder Satz muss genau dieser Struktur entsprechen.

01:19:34.960 --> 01:19:38.420
Oder Sie haben eine Klasse definiert in Java und wenn Sie ein

01:19:38.420 --> 01:19:42.480
konkretes Objekt haben wollen, dann hat das genau die Struktur, die

01:19:42.480 --> 01:19:44.280
diese Klasse definiert hat.

01:19:44.640 --> 01:19:49.960
Und Sie füllen dieses Objekt mit den Werten, die für dieses Objekt

01:19:49.960 --> 01:19:50.740
relevant sind.

01:19:51.620 --> 01:19:54.420
Bei diesem Beispiel sind die Elementarfelder unterstrichen.

01:19:54.620 --> 01:19:58.320
Also hier die Rechnungsnummer oder Artikelnummer, Datum, Betrag, das

01:19:58.320 --> 01:19:59.260
sind Elementarfelder.

01:19:59.800 --> 01:20:05.800
Während aber eben dieser Name ist kein Elementarfeld, deswegen nicht

01:20:05.800 --> 01:20:07.680
von vornherein unterstrichen.

01:20:07.940 --> 01:20:10.420
Sondern Vorname, Nachname sind dann die Elementarfelder.

01:20:12.160 --> 01:20:17.180
Wir haben also viele solche Datensätze, die abgelegt werden können in

01:20:17.180 --> 01:20:19.220
unserer Datei.

01:20:22.160 --> 01:20:25.840
In einer Datei sind die ganzen Sätze zusammengefügt.

01:20:26.420 --> 01:20:27.760
Also alle möglichen Sätze.

01:20:30.380 --> 01:20:33.260
Das kann sein, dass Sie dann noch irgendwelche weiteren Regeln haben.

01:20:33.360 --> 01:20:37.780
Sie wollen dann auch noch angeben, wie auf eine solche Datei

01:20:37.780 --> 01:20:38.840
zugegriffen werden kann.

01:20:38.920 --> 01:20:40.720
Das gehört alles zu der Datei mit dazu.

01:20:41.600 --> 01:20:48.040
Sie fassen Sätze eines Satztyps zusammen und dann müssen Sie sehen,

01:20:48.120 --> 01:20:51.120
wie Sie vernünftig die jetzt so ablegen, dass Sie auf den

01:20:51.120 --> 01:20:53.260
Speichermedien abgelegt werden können.

01:20:54.120 --> 01:20:57.940
Jeder Satz der Datei muss natürlich eindeutig identifizierbar sein.

01:20:58.080 --> 01:21:05.200
Sie müssen ihn ansprechen können, auf den zugreifen können und Sie

01:21:05.200 --> 01:21:08.960
müssen die Informationen, die dort drin sind, wieder rausbekommen

01:21:08.960 --> 01:21:09.480
können.

01:21:10.180 --> 01:21:14.840
Das heißt, jeder einzelne Satz muss Informationen enthalten, die ihn

01:21:14.840 --> 01:21:17.440
von allen anderen Sätzen der Datei unterscheiden.

01:21:17.440 --> 01:21:21.280
Und wie man das hinbekommt, wie man das strukturiert, das machen wir

01:21:21.280 --> 01:21:22.660
in der nächsten Vorlesung.

01:21:23.260 --> 01:21:28.640
Nächsten Montag, wie gesagt, Mittwoch ist nochmal eine Saalübung und

01:21:28.640 --> 01:21:30.420
nächsten Montag nochmal eine Vorlesung.

01:21:31.140 --> 01:21:32.440
Vielen Dank für die Aufmerksamkeit.

01:21:32.580 --> 01:21:33.240
Das war es für heute.

