...
Als semesterbegleitende Leistung implementieren Sie ein kleines dezentrales Programm. Die Arbeit daran beginnt in der 1. Übung. Das Programm unterstützt Sie beim Lernen der Konzepte und zeigt umgekehrt, ob Sie sich mit den Themen während des Semesters beschäftigten. Am Ende des Semester sind Sie in der Lage, ein Programm zu schreiben, dass eine TCP-Verbindung zu einem anderen Prozess herstellt und mit diesem wohl definierte PDUs austauscht. Das wird am Ende der Vorlesungszeit in einem kleinen Programmiertest geprüft. Diesen Test müssen Sie bestehen. Erst dann gibt es Punkte. Es gibt keine Punkte für eine nicht fertige Lösung. Bestehen Sie den Test nicht, sind Sie auch nicht zur Klausur zugelassen. Der Test wird aus zwei Teilen bestehen. Der erste findet im ersten dritten des Semester statt (zählt 1/3), der letzte Test am Ende der Vorlesungszeit (2/3)
Wir sind eine Hochschule für angewandte (!) Wissenschaften. Sie müssen grundlegende Dinge praktisch umsetzen können. Das ist auch gar kein Problem, wenn Sie sich aktiv an den Übungen beteiligen. Wirklich gar kein Problem. Es kann ein ernsthaftes Problem werden, wenn Sie die Übungen ignorieren.
...
# | Lehreinheit | Inhalt | Kapitel zum Selbststudium | Übung | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Betriebssysteme - Einstieg | Betriebssysteme - wozu dient alle das und wer hats erfunden. Wir beginnen mit der Keilschrift und hören bei UNIX auf. | [2] 1.1 - 1.4 | Wir fangen an mit dem Bau einer verteilten Anwendung. Ein Spiel, ein Chat, mal schauen. Das wird das semesterbegleitende Projekt. Sie müssen immer mit machen, dann lernen Sie sicherlich eine Menge. | |||||||
2 | Von Programmcode zum laufenden Prozess | Ein Programm ist laufender Maschinecode. Den können wir im Prinzip direkt implementieren. Das ist nur enorm zeitaufwendig. Wir können mit Assembler anfangen. Liest sich besser, löst kein Problem. Wir können mit einer Hochsprache wie C anfangen. Gute Idee. Wie aber wird aus dem C-Code Maschinencode? Was ist ein Compiler und ein Compiler-Compiler? Was ist eine Shell, wie passt die Java Virtuelle Maschine (JVM) in all das ... und die Frage aller Fragen: was ist die Matrix? (Okay, die Matrix diskutieren wir leider nicht). Wir lernen aber bereits den Scheduler kennen, über den wir später noch einmal wieder treffen werden. | [2] 1.5.1, 2.1 Assember, Maschinencode, Java und JVM [11] start command [12] am Ende der Zeile "&" - launch background process | Wir implementieren ein Multithreaded Java-Programm.
| |||||||
3 | Threads + Race Conditions (Problembeschreibung) | Betriebssysteme sind schon sehr sehr lange in der Lage mehrere Prozesse (quasi-) parallel auszuführen. Anwendungsentwickler:innen kommen häufiger mit Threads in Kontakt, weshalb wir in den Übungen mit Threads arbeiten. Schnell aber kommt treten Race Conditions (Wettlaufbedingungen) auf. Die sind oft gar nicht so schnell zu erkennen. Es gibt einen Grund warum Multithreading schon eine Herausforderung ist. Wir beschäftigen uns mit Threads, wie wir die programmieren und welche Probleme dabei entstehen können, bis hin zum Deadlock. Wir erfahren was ein kritischer Abschnitt (critical section) ist. | Codebeispiel: Account Example (bad) Wir versuchen Threads zu synchronisieren.LN:Threads mit Java | ||||||||
4 | Synchronisation von Prozessen und Threads | Nachdem wir uns mit den Herausforderungen gleichzeitig laufender Kontrollflüsse beschäftigten, kommen wir zu Lösungen. Wir reden über Semaphoren, Signale (technisch Interrupts), Mutex. | [2] 2.3.1 - 2.3.9, 2.4 [2] 1.5.2, 3 Codebeispiel: SynchronisationWir diskutieren das Lese-Schreibe-Problem und den schlafenden Friseur, siehe Moodle. | ||||||||
5 | Punkt-zu-Punkt Datenübertragung | Wir fangen mit den Netzwerken an. Und der Anfang ist prosaisch: Man nehme ein Kabel und verbinden zwei Parteien, die darüber nun Daten austauschen. Und damit fangen die interessanten Fragen bereits an. Wir nutzen physikalische Effekte, um Daten zu übertragen. Solche Effekte können gestört werden sodass die Signale nicht mehr in Informationen umgewandelt werden können. Wir stehen hier vor Raten von manchmal 50%. Wir diskutieren wie wir damit umgehen können. Das ist nichts, was Sie im täglichen Leben als Entwickler:in betreffen wird. Sollte man als Träger: in eines Bachelor of Science () trotzdem wissen. | [4] 1.4 + 2 | Sie finde das NWAppTemplate auf Github. Wir nehmen das als Basis, um in streambasierte Netzwerkprogrammierung einzusteigen. Sie bekommen in der Übung ein Skeleton das wir schrittweise bis zum Ende des Semesters erweitern. Wir beschäftigen uns mit Streams und DataStreams. | |||||||
6 | Layer 2 (Medienzugriff, Fehlererkennung / - korrektur) | ALOHA,CSMA / CD und CA. Hidden sender problem, Repeater. Wir beschäftigen uns mit vorrangig mit drahtgebundenen Protokollen. Die drahtlosen werden im aufbauenden Modul mobile Betriebssysteme und Netze sein. | [3]: 2.11 [4] 3, 4.2 | Wir beschäftigen uns mit Unit Tests, konkret JUnit. Der Einschub ist wichtig, weil unser Programm immer komplexer wird die Fehlersuche immer schwerer. Bei verteilten Systemen sowieso ein richtiges Problem. | |||||||
7 | Layer 2 (Ethernet) | Wir sprechen über Layer2 Topologien und die Infrastruktur von drahtbasierten Layer 2 Netzwerken (Ethernetframes, Bridges & Switches. Geht schnell. Wir sparen uns zu vielen Details. Wir reden über ARP (vielleicht auch DHCP) aber noch nicht IP. | [3]: 3.2 - 3.6, 3.8 [4] 4.3, 4.8 Mediathek:IEEE 802.3 / Ethernet
| ||||||||
8 | Layer 3 (Internet Protocol) | Internet Protocol (IP) Ab dieser Einheit sagen Sie nie wieder Internetseite (das ist das falscheste Wort das mir derzeit bekannt ist.) Bitte. Nie nie wieder.. Adressschema, Subnetze, adressbasiertes Routing. Vielleicht brauchen wir auch zwei Einheiten dafür. Lässt sich super programmieren - UDP-Socket. Wir müssen hier ein wenig über Geschichte reden.. Lesen Sie unbedingt einmal in [6] einfach die ersten vier Sätze auf Seite 15. Das war die Motivation für das Internet. Glasklar. | [3] 3.1.1, [4] 5.6, [13] Ich hörte einmal folgenden weisen Hinweis: Vor Erfolgen, die "über Nacht" entstehen liegen Jahre der Vorbereitung. Sie lesen daher in tiefer Andacht [5] und [6]. | ||||||||
9 | Layer 4 (TCP) | Wir beschäftigen uns ausschließlich mit TCP. Die übergroße Mehrheit aller Dienste, die aktuell via Internet laufen nutzen TCP. Dieses Protokoll ist tatsächlich die wahre Basis programmiertechnische Basis von all den Diensten die wir im Netz heute kennen. Das lässt sich hervorragend programmieren und zwar mit dem Streamkonzept das wir bereits von dem Betriebssystemen kennen. | [4] 6.4 (UDP) 6.5. (TCP) [7] | ||||||||
10 | Scheduling / Deadlocks | Scheduler. Vielleicht kommen wir soweit und Sie wissen, was sich hinter dem Kommando shell Kommando nice auf verbirgt. Wir reden über verhungernde Philosophen etc. | [1] S.151, 158ff + S. 192ff, 214, 239, 242ff [2] S.93-99, 150-166 + S.181, 186ff | ||||||||
611 | Verzeichnisdienste DNS, LDAP, X.500 | Wir diskutieren den Domain Name Service .(DNS) | [4] S. 690ff https://www.icann.org/ | 7 | 8 | ||||||
12 | E-Mail | Wir schauen uns SMTP und ein wenig POP und IMAP an. Wir werfen aber vor allem auch einen Blick in das Format einer Mail; in dem Kontext entstand nämlich MIME was man dann auch in HTTP nutzte. | [8] 2.2 (POP und IMAP) [4] S.708ff https://www.rfc-editor.org/rfc/rfc5322 | ||||||||
Einige Protokolle und Formate | HTTP, MQTT. | ||||||||||
139 | Speichermanagement | Wir sprechen über Daten, der Speicherung und Verwaltung in einem laufenden Programm. Und endlich wissen wir was dieser legendäre Stackoverflow ist. Und wir werden sehen, dass wir es mit einer Stackmaschine zu tun haben. Und dann verstehen wir auch, warum wir ITler:innen als ersten Index immer die 0 nehmen und nicht die 1 wie diese eigenartigen anderen Menschen... | LN:Funktionsstack , LN:Rekursion / Stack und Heap, LN:eindimensionale Arrays, LN:mehrdimensionale Arrays, | Wir machen einmal Pause von unserem Projekt und implementieren ein simples rekursives Java-Programm das ein mehrdimensionales Array füllt und schauen uns Stack und Speicherstruktur einmal genauer an. | |||||||
11 | Inter Process Communications (IPC): Shared Memory (optional) | Man muss Dinge opfern, wenn man Betriebssysteme UND Netzwerke in einem Modul bearbeitet. Ich ernenne IPC konkret Shared Memory und Pipes zum optionalen Thema. Wir werden aber aber mit TCP-Stream arbeiten und programmieren, was in der Praxis auch deutlich häufiger vorkommt. Sie verstehen also wie man mit Pipes programmiert und arbeitet, müssten sich bei Bedarf aber selber in die konkreten OS-Calls reinlesen. | [2] 2.3 | ||||||||
12.1 | 12.2 | Dateinsysteme, Speicherverwaltung / Paging / Caching | spannend, aber optional | [2] 6 | |||||||
Virtualisierung | optional | 13 | E-Mail | Wir schauen uns SMTP und ein wenig POP und IMAP an. Wir werfen aber vor allem auch einen Blick in das Format einer Mail; in dem Kontext entstand nämlich MIME was man dann auch in HTTP nutzte. | [8] 2.2 (POP und IMAP) [4] S.708ff https://www.rfc-editor.org/rfc/rfc5322 | ||||||
Einige Protokolle und Formate | HTTP, MQTT. | Architekturen | monolithisch, zentralisiert, verteilt, wenigstens 3 Arten von P2P, Agenten. Wir müssen einmal über DDoS Attacken reden. | [2]: 1.7 [9]: 2.3 (Agenten) 13 | |||||||
Grundlagen der Verschlüsselung (Bereits im Kurs davor..) | TODO: Wir sollten die Verschlüsselung einmal praktisch üben.... Wir sprechen über symmetrische, asymmetrische Verschlüsselung. Wir gehen nicht auf die mathematischen Grundlagen ein (oder vielleicht doch, wenn Sie unbedingt wollen). Asymmetrische Schlüssel sind die Basis von Public Key Infrastrukturen (PKI) und damit Zertifikaten. Das wird uns beschäftigen. | [2] 9.2 | |||||||||
Virtuelle (private) Netze, TOR | optional |
...