diff --git a/20210625/bs-20210625.pdf b/20210625/bs-20210625.pdf index be8b653380582c395fd0e4e41e8063084452df0f..0fe477fbd343c6ae3c99907c00f3f875ae734299 100644 Binary files a/20210625/bs-20210625.pdf and b/20210625/bs-20210625.pdf differ diff --git a/20210625/bs-20210625.tex b/20210625/bs-20210625.tex index 060f9646dc4e5c98f4c834299ba723aa5a1f4b26..16870ce4950e9d5bf3dcb55b115e7daaccb80ffc 100644 --- a/20210625/bs-20210625.tex +++ b/20210625/bs-20210625.tex @@ -669,7 +669,7 @@ \end{frame} -\setlength{\pdfpageheight}{40.5cm} +\setlength{\pdfpageheight}{50.5cm} \begin{frame}[fragile] diff --git a/20210702/bs-20210702.txt b/20210702/bs-20210702.txt new file mode 100644 index 0000000000000000000000000000000000000000..fd6949f826daba63232dc2decd38fb5f01b597ea --- /dev/null +++ b/20210702/bs-20210702.txt @@ -0,0 +1,116 @@ +Scheduler des Linux-0.01-Kernels, 02.07.2021, 11:39:30 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Aufgabe: Welcher Task kommt als nächster an die Reihe? + +Tabelle von Structs: task_struct +Datenfelder: + - state: Will dieser Task überhaupt Rechenzeit haben? + - counter: aktuelle (dynamische) Priorität des Tasks + - priority: Priorität des Tasks + +p ist ein Zeiger auf Zeiger von task_structs, + also ein Array von Zeigern auf task_structs. + +Task Nr. 0 ist der "idle task". + +p wird so initialisiert, daß er auf dem ersten Eintrag des + task-Arrays zeigt, der nicht mehr(!) zum Array gehört. +In der Schleife wird dann als erstes --i und --p ausgeführt. + +Das innere "if" wird nur ausgeführt, wenn der Zeiger(!) "*p" +kein NULL-Zeiger ist. + + int counter[n] = { ... }; + int c = -1; + for (int i = 0; i < n; i++) + if (counter[i] > c) + c = counter[i]; + +--> c hat den Wert des Maximums aller counter[i]. + +Was bewirkt das Komma in der Zeile "c = (*p)->counter, next = i;"? +--> Komma-Operator: "a,b" bedeutet: "berechne a, vergiß es wieder, + und berechne stattdessen b." + Nur sinnvoll in Kombination mit Seiteneffekten! + "c = (*p)->counter" ist ein Ausdruck mit dem Wert "(*p)->counter" + und dem Seiteneffekt, daß dieser Wert der Variablen c zugewiesen wird. + +Andere Schreibweise für die innere Schleife: + + while (i >= 1) + { + i--; + p--; + if (*p) + if ((*p)->state == TASK_RUNNING && (*p)->counter > c) + { + c = (*p)->counter; + next = i; + } + } + +Nach der inneren while-Schleife enthält +next die Nummer des Tasks mit der höchsten Priorität (counter) +und c den counter dieses Tasks (also die höchste Priorität selbst) + +Sobald alle counter abgelaufen sind, bekommen sie +in der for-Schleife neue Werte zugewiesen +gemäß der jeweiligen Priorität der Tasks. +Tasks, die nicht TASK_RUNNING sind, können noch counter > 0 haben +und bekommen die Priorität zusätzlich darauf addiert. +--> Der Counter kann über alle Maßen wachsen. (Oder????;-) +Nein, denn der "angesparte" Counter wird vorher halbiert (">> 1"). +--> Der Counter kann bis zu einem gewissen Maximum wachsen + (dem Doppelten der Priorität des Tasks). +--> Durch Abwarten kann ein Task Rechenzeit ansparen. + Wenn er dann doch läuft, hat er direkt hohe Priorität. +--> Sinnvoll für interaktive Programme (z.B. Editor). + +--> Dynamische Prioritätenvergabe (nicht echtzeitfähig) + +Signal, 02.07.2021, 13:35:22 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Messenger mit Ende-zu-Ende-Verschlüsselung + +Freie Software (Client und Server) +zentrale Infrastruktur +Signal Foundation betreibt zentrale Server + +Auch die Meta-Daten werden verschlüsselt. +Der Empfänger einer Nachricht ist dem Server bekannt, +aber der Absender nur dem Empfänger. + +Die Server werden in Clouds betrieben bei Amazon, Microsoft usw. + +Es gibt Vertraulichkeit, Integrität und plausible deniability + +Man kann über Signal auch "telefonieren". + +Wer teilnimmt, hat einen privaten Schlüssel. +Um eine Nachricht zu versenden, benötigt man +eine ID des Empfängers (Telefonnummer). +Darüber holt man sich den Public Key. +Schlüsselabgleich erfolgt über den Abgleich einer Sicherheitsnummer, +die aus beiden Public Keys gemeinsam gebildet wird. + +Zur Registrierung benötigt man eine Telefonnummer, +über die man SMS oder Sprachanrufe empfangen kann. +Darüber erfährt man einen Verifizierungs-Code, den man +währnd der Installation der Client-Software eingeben muß. +Man kann seinen Signal-Account zusätzlich durch eine PIN schützen. + +Versenden einer verschlüsselten Nachricht: + - Austausch eines Sitzungsschlüssels per Diffie-Hellman + - Vermutung: Die asymmetrischen Schlüssel dienen dazu, + Man-in-the-Middle-Angriffe zu verhindern. + +Projekt: Signal-Bot +Raspberry Pi mit Signal-CLI +Dieser soll Nachrichten versenden, die von anderen Programmen stammen +und empfangene Nachrichten an Programme weiterleiten. +Wichtig: dedizierte Telefonnummer + + +Verbesserungsmöglichkeiten für BBB, 02.07.2021, 14:07:31 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In Kombination mit Mumble: anzeigen, wer gerade spricht diff --git a/20210709/bs-20210709.txt b/20210709/bs-20210709.txt new file mode 100644 index 0000000000000000000000000000000000000000..85a6382c0df759984d80f337a82aae9c94728275 --- /dev/null +++ b/20210709/bs-20210709.txt @@ -0,0 +1,173 @@ +Echtzeit-Erweiterungen für Linux, 09.07.2021, 11:42:17 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + - früher: RTAI (Real Time Application Interface) + + Der RTAI-Kernel läuft als "Sub-Kernel" direkt auf der Hardware. + Der Linux-Kernel läuft als "Applikation" im RTAI-Kernel. + Kommunikation zwischen Echtzeit-Tasks und Linux-Prozessen + erfolgt mittels Semaphoeren. + + - früher: RT-Linux + + - aktuell: Xenomai + +do-while(0)-Schleife, 09.07.2021, 12:05:38 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Definition: + + #define spin_lock_mutex(lock, flags) \ + do \ + { \ + spin_lock (lock); \ + (void) (flags); \ + } \ + while (0) + +Benutzung: + + if (whatever) + spin_lock_mutex (lock, flags); // Semikolon! + else + whatever (); + +Wird zu: + + if (whatever) + do + { + spin_lock (lock); + (void) (flags); + } + while (0); // Semikolon! + else + whatever (); + +Definition: + + #define spin_lock_mutex(lock, flags) \ + { \ + spin_lock (lock); \ + (void) (flags); \ + } + +Benutzung: + + if (whatever) + spin_lock_mutex (lock, flags); // Semikolon! + else + whatever (); + +Wird zu: + + if (whatever) + { + spin_lock (lock); + (void) (flags); + }; // Semikolon! --> Fehler + else + whatever (); + +Definition: + + #define spin_lock_mutex(lock, flags) \ + spin_lock (lock); \ + (void) (flags) + +Benutzung: + + if (whatever) + spin_lock_mutex (lock, flags); // Semikolon! + else + whatever (); + +Wird zu: + + if (whatever) + spin_lock (lock); + (void) (flags); // Semikolon! --> Fehler + else + whatever (); + +Fazit: do ... while(0) ist ein Trick, um ein Präprozessor-Macro +so definieren zu können, daß es in allen Situationen wie eine +Funktion verwendet werden kann. + +F. Aust, P. Maas: Signal-Bot, 09.07.2021, 13:35:29 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +https://gitlab.cvh-server.de/faust/signalbot + +Der Bot protokolliert und interpretiert alle Nachrichten, die er bekommt. +Nachrichten, die mit einem Punkt beginnen, sind Befehle. + +Beipiel: + .help + .foo --> bar + .ping --> pong + +Herausforderung: über die Kommandozeile laufen lassen +python-Skript benutzt signal-CLI. Die benutzt Java. Langsam: 90s +Jetzt: läuft per systemd im Hintergrund --> Java läuft durch. --> schnell + +Funktionen: + + - .yn --> zufällige GIF-Datei von yes-no-wtf + + - Zitate in Datenbank speichern + + - Der Bot informiert den Kanal automatisch aktuell kostenlose Computerspiele. + + - Projekt: .gn: Der Bot prüft den Chat auf Gender-Neutralität, weist auf + nicht-neutrale Wörter hin und schlägt gener-neutrale Synoyme vor - unter + Verwendung von geschicktgendern.de. + + - Projekt: Signal selbst unterstürzt bereits Polls, sog. Reactions. + zusätzlich: cvhbot-Polls durch den Bot + + - Projekt: MQTT-To-Signal-Adapter (separates Programm, sagt dem Bot bescheid) + +Es ist möglich, mehrere Bots auf demselben Server laufen zu lassen, +sofern jeder Bot eine eigene Telefonnummer hat. +Alternative: Die Reaktion des Bots hängt vom Ursprung +des Befehls ab (Benutzer, Gruppe). + +Der Bot kommt bei den Benutzern gut an. + +Nachteile von Signal: + - zentraler Server + - App im Ruhemodus erfährt nicht von neuen Nachrichten + (Konfiguration der Stromsparmaßnahmen unter Android hilft nicht.) + +Projektideen: + - Signal beibringen, auch im Hintergrund Nachrichten zu empfangen + - Signal mit Mumble-Chat koppeln + - Signal mit BBB-Chat koppeln + - Matrix als "Sammelstelle" + +S. Simanek: Forums-Projekt, 09.07.2021, 14:25:09 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Forum für Studierende, aber auch Lehrende, für den Austausch über +Studieninhalte, für Austausch mit der Fachschaftsvertretung, aber +auch für Off-Topic-Gespräche (als Alternative to Discord usw.) + +Situation: Auf dem CVH-Server gibt es bereits eine +Discourse-Installation. Die müßte man wieder in Betrieb nehmen. + +Abgrenzung zu Signal: + - Signal ist ein Messenger-Dienst - Echtzeit-Kommunikation - + wie SMS mit Gruppen - nach Personen(gruppen) sortiert. + Signal ist nicht anonym. + - Forum: offline-Kommunikation + Ein Forum ist nach Themen sortiert. + Ein Forum kann pseudonym sein. + +Vorschläge für die Struktur des Forums: + - Start-Subforum mit FAQs und Übersicht + - fachspezifische Subforen + - organisatorische Subforen: Ankündigungen der Fachschaftsvertretung usw. + - Off-Topic-Subforen + +Sonstiges: + - Fachschaftsvertretung mit einbinden! + - Maßnahmen gegen Trolle und Spammer! --> Moderation erforderlich + - Gelder für Moderatoren beantragen: diversitätssensible Studieneigangsphase + - Wichtig für nachhatltige IT: Lizenzen, Datenschutz