Skip to content
Snippets Groups Projects
Commit f8bc6512 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Abschluß Sommersemester 2021

parent 17f03e5e
No related branches found
No related tags found
No related merge requests found
No preview for this file type
......@@ -669,7 +669,7 @@
\end{frame}
\setlength{\pdfpageheight}{40.5cm}
\setlength{\pdfpageheight}{50.5cm}
\begin{frame}[fragile]
......
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment