diff --git a/20210528/bs-20210528.txt b/20210528/bs-20210528.txt new file mode 100644 index 0000000000000000000000000000000000000000..77d27c416c291050c618df81f41e309c1518aaf6 --- /dev/null +++ b/20210528/bs-20210528.txt @@ -0,0 +1,230 @@ +Hauptspeicherverwaltung, 28.05.2021, 12:09:52 +============================================= + +Intel-16-Bit-Rechner ("Real Mode") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Segment- und Offset-Adresse + +B800:0010: 67 +`--' `--' + | | + | `---> 0010 Offset + `--------> B800 + 16 * Segment + ----- + B8010 = physikalische Adresse + +Grund: +Hierdurch möglich, Programme in 16-Byte-Schritten +an beliebige Stellen im Speicher zu verschieben +"Relokation" +Adressen, die das Programm verwendet, sind grundätzlich +nur Offset-Adressen. Das Betriebssystem vergibt die +Segment-Adressen. + +Segment-Register: + - CS: Codesegment + - DS: Datensegment + - ES: Extra-Segment + - SS: Stack-Segment +... jeweils bis zu 64 kiB + +--> Das Betriebssystem kann dem Programm bis zu 256 kiB zur Verfügung stellen. + Dies sollte für alle Zeiten reichen. ;-) + +--> Programme, die mehr als 256 kiB benötigen, + manipulieren die Segmentregister selbst. + Damit kann das Programm bis zu 1 MiB ansprechen. + Dies sollte für alle Zeiten reichen. ;-) + +Intel-32-Bit-Rechner ("Protected Mode") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Offset-Adressen: 32 Bit +Segment-Adresse: wird zu "Selektor" = Index für ein Array, + das sich intern im Prozessor befindet + und die eigentlichen Segmente beschreibt --> "Deskriptoren" + +Inhalt der Deskriptorentabelle: + - Lage des Segments im Speicher (als 32-Bit-Wert) + - Länge des Segments im Speicher (als 32-Bit-Wert) + (eigentlich immer 4 GiB; läßt sich auf diese Weise + mit Hardware-Untersützung begrenzen) + Bei Zugriff außerhalb des zugewiesenen Segments wird im + Prozessor eine "Exception" ausgelöst (ähnlich Interrupt). + - Präsenz-Bit: Segmente können entweder im physikalischen Speicher vorhanden sein + oder (z.B. auf Festplatte) ausgelagert sein. Bei Zugriff auf ein ausgelagertes + Segment wird eine Exception ausgelöst. + - Privilegierung: Wer darf dieses Segment nutzen? + Der Kernel hat mehr Rechte als die Anwenderprogramme. + - Segmenttyp: Ist dieses Segment lesbar/schreibbar/ausführbar? + +Vorteile: + - Maximale Speichergröße: 4 GiB statt 256 kiB. + Dies sollte für alle Zeiten reichen. ;-) + - Schutz des Kernels und der Anwendungsprogramme vor gegenseitiger Manipulation + - Auslagern von Speicher wird möglich. + +Was noch fehlt: + - Auslagern von Speicher nur segmentweise möglich. + --> Ein Programm kann immer nur als Ganzes ausgelagert werden. + +Memory Management Unit (MMU) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +https://de.wikipedia.org/wiki/Memory_Management_Unit: + + - Auslagern von z.Zt. nicht benötigtem Speicher + - Verzögertes Bereitstellen von angefordertem, aber noch nicht genutztem Speicher. + - Isolation von Prozessen untereinander und zwischen Prozess und Betriebssystem + - Sharing von einzelnen Seiten zwischen Prozessen (Shared Memory) + - Non-Sharing von Seiten zwischen Threads eines Prozesses (Thread-local storage) + - Einblenden von Dateien als Speicher (Memory-mapped files) + +Die MMU unterteilt das dem Programm zugeordnete Segment +und den physikalischen Speicher in "Seiten" (typischerweise 4 kiB) +und ordnet diese einander zu, nicht notwendigerweise linear. +Auch können Speicherseiten ausgelagert sein. (Damit wird die +bereits im Protected Mode realisierte Auslagerung von Segmenten +überflüssig.) + +Es können also z.B. zwei verschiedene Programme dieselbe Speicheradresse "sehen"; +dahinter verbergen sich jedoch zwei unterschiedliche Adressen im physikalischen +Speicher. + +Massenspeicherverwaltung, 28.05.2021, 13:49:15 +============================================== + +"Dateisystem" = Schema, wie man Daten auf dem Datenträger ablegt und wiederfindet + +Beispiel: test-tab.txt + + Datenträger: USB-Stick + Größe: 4 GB + Inhalt: + + Adresse Länge Datei + 0 14 test-1.txt + 14 28 test-2.txt + ... ... ... + +--> mit auf dem Datenträger speichern + +File Allocation Table (FAT) +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + - Unterteilung des Datenträgers in "Cluster" von fester Größe, + z.B. 1 kiB, 2 kiB, 4 kiB (bis hierhin: gut), ..., 64 kiB (schlecht) + + - File Allocation Table (FAT) = Tabelle aller Cluster + Die maximale Größe der Tabelle kann 2^12, 2^16 oder 2^32 betragen. + Jeder Eintrag ist 12 oder 16 oder 32 Bit groß und kann somit + als Index für die Tabelle genutzt werden. + + --> Maximale Größe des Datenträgers = Größe der FAT * Größe des Clusters + Beispiel: FAT16: 2^16 * 64 kiB = 4 GiB, + Problem mit Vorzeichen: nur 2 GiB + + Bei "vernünftiger" Cluster-Größe von 4 kiB: 2^16 * 4 kiB = 256 MiB, + mit Vorzeichenproblem sogar nur 2^15 * 4 kiB = 128 MiB + + - Bedeutung der Werte am Beispiel FAT16: + 0000: Cluster ist nicht von einer Datei (oder einem Verzeichnis) belegt + 0002 bis FFF6: Cluster ist Teil einer Cluster-Kette; Wert = nächster Cluster in Kette + FFF7: Cluster ist defekt + FFF8 bis FFFF: Cluster ist der letzte Cluster einer Cluster-Kette + + - Zugriff auf eine Datei über deren ersten Cluster, z.B. 0004, + an den sich eine verkettete Liste von Clustern anschließt. + Länge der Datei: 5 Cluster + + FAT + 0000 + 0000 + 0000 + 0000 + 0005 <-- Cluster Nr. 0004 = erster Cluster der Kette + 0006 <-- 2. Cluster der Kette + 0008 + FFF7 <-- defekten Cluster überspringen + 0009 + FFF8 <-- letzter Cluster der Kette + 0000 + 0000 + ... + + --> Eine Datei belegt immer mindestens 1 Cluster. + Daher sind große Cluster (z.B. 64 kiB) schlecht. + + - Zur Sicherheit befindet sich die FAT zweimal auf dem Datenträger. + Damit sind die Cluster 0 und 1 belegt. + Daher: 1. Cluster für Dateien = Nr. 0002 + + - Nach den FATs: Stamm- oder Wurzelverzeichnis (root directory) + + Tabelle fester Größe + Jeder Eintrag: + - Dateiname: 11 Bytes, 8 Zeichen für Dateinamen, 3 für "Erweiterung", z.B. "COMMAND.COM" + - Datei-Attribute: 1 Byte, z.B.: + - Lesen/Schreiben + - versteckte Dateien + - "System-Datei" + - "Archiv-Bit" (für Backup-Software) + - Datei ist Unterverzeichnis + - Datei ist Volume-Label (= Name des Datenträgers) + - Datum und Zeit der letzten Änderung + - Speicherung: 5 Bit für Stunde, 6 für MInute, 5 für Sekunde + --> Sekunden mit 2s Auflösung + - ... + - Start-Cluster der Datei + - Länge der Datei in Bytes + + - Problem: Fragmentierung + + Dateien sind als verkettete Listen gespeichert. + + Datei A speichern: + + A + A + A + A + + Datei B speichern: + + A + A + A + A + B + B + B + B + + Datei A löschen: + + - + - + - + - + B + B + B + B + + Datei C speichern: + + C + C + C + C + B + B + B + B + C + C + C + C + + --> Datei C ist fragmentiert. + + Nach längerer Benutzung sind FAT-Datenträger häufig komplett fragmentiert. + --> langsamer + --> Defragmentierung sinnvoll. diff --git a/20210528/fat-1.txt b/20210528/fat-1.txt new file mode 100644 index 0000000000000000000000000000000000000000..46926ac620314b6f1cff1c525ff9cc066ff01793 --- /dev/null +++ b/20210528/fat-1.txt @@ -0,0 +1,59 @@ +cassini/home/peter/bo/2021ss/bs/20210528> for x in $(seq 5); do touch test-$x.txt; sleep 1s; done +cassini/home/peter/bo/2021ss/bs/20210528> ls -lrt +insgesamt 72 +-rw-r--r-- 1 peter peter 51036 Mai 28 12:57 mmu.xcf.gz +-rw-r--r-- 1 peter peter 160 Mai 28 14:05 test-tab.txt +-rw-r--r-- 1 peter peter 6361 Mai 28 14:46 bs-20210528.txt +-rw-r--r-- 1 peter peter 14 Mai 28 14:47 test-1.txt +-rw-r--r-- 1 peter peter 19 Mai 28 14:47 test-2.txt +-rw-r--r-- 1 peter peter 0 Mai 28 14:47 test-3.txt +-rw-r--r-- 1 peter peter 0 Mai 28 14:47 test-4.txt +-rw-r--r-- 1 peter peter 0 Mai 28 14:47 test-5.txt +cassini/home/peter/bo/2021ss/bs/20210528> ls --full-time -lrt +insgesamt 72 +-rw-r--r-- 1 peter peter 51036 2021-05-28 12:57:49.619244900 +0200 mmu.xcf.gz +-rw-r--r-- 1 peter peter 160 2021-05-28 14:05:19.225937663 +0200 test-tab.txt +-rw-r--r-- 1 peter peter 6361 2021-05-28 14:46:19.903177871 +0200 bs-20210528.txt +-rw-r--r-- 1 peter peter 14 2021-05-28 14:47:17.859771765 +0200 test-1.txt +-rw-r--r-- 1 peter peter 19 2021-05-28 14:47:18.863782073 +0200 test-2.txt +-rw-r--r-- 1 peter peter 0 2021-05-28 14:47:19.867792382 +0200 test-3.txt +-rw-r--r-- 1 peter peter 0 2021-05-28 14:47:20.875802732 +0200 test-4.txt +-rw-r--r-- 1 peter peter 0 2021-05-28 14:47:21.883813083 +0200 test-5.txt +cassini/home/peter/bo/2021ss/bs/20210528> mount /media/usb1/ +mount: /media/usb1: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error. +cassini/home/peter/bo/2021ss/bs/20210528> echo sudo mkdosfs /dev/sdb1 +sudo mkdosfs /dev/sdb1 +cassini/home/peter/bo/2021ss/bs/20210528> sudo mkdosfs /dev/sdb1 +[sudo] Passwort für peter: +mkfs.fat 4.1 (2017-01-24) +cassini/home/peter/bo/2021ss/bs/20210528> mount /media/usb1/ +cassini/home/peter/bo/2021ss/bs/20210528> ls -l /media/usb1/ +insgesamt 0 +cassini/home/peter/bo/2021ss/bs/20210528> cp -pi test-*.txt /media/usb1/ +cassini/home/peter/bo/2021ss/bs/20210528> ls -lrt /media/usb1/ +insgesamt 12 +-rwxr-xr-x 1 peter peter 160 Mai 28 14:05 test-tab.txt +-rwxr-xr-x 1 peter peter 14 Mai 28 14:47 test-1.txt +-rwxr-xr-x 1 peter peter 19 Mai 28 14:47 test-2.txt +-rwxr-xr-x 1 peter peter 0 Mai 28 14:47 test-3.txt +-rwxr-xr-x 1 peter peter 0 Mai 28 14:47 test-4.txt +-rwxr-xr-x 1 peter peter 0 Mai 28 14:47 test-5.txt +cassini/home/peter/bo/2021ss/bs/20210528> ls -lrt --full-time /media/usb1/ +insgesamt 12 +-rwxr-xr-x 1 peter peter 160 2021-05-28 14:05:19.000000000 +0200 test-tab.txt +-rwxr-xr-x 1 peter peter 14 2021-05-28 14:47:17.000000000 +0200 test-1.txt +-rwxr-xr-x 1 peter peter 19 2021-05-28 14:47:18.000000000 +0200 test-2.txt +-rwxr-xr-x 1 peter peter 0 2021-05-28 14:47:19.000000000 +0200 test-3.txt +-rwxr-xr-x 1 peter peter 0 2021-05-28 14:47:20.000000000 +0200 test-4.txt +-rwxr-xr-x 1 peter peter 0 2021-05-28 14:47:21.000000000 +0200 test-5.txt +cassini/home/peter/bo/2021ss/bs/20210528> umount /media/usb1 +cassini/home/peter/bo/2021ss/bs/20210528> mount /media/usb1 +cassini/home/peter/bo/2021ss/bs/20210528> ls -lrt --full-time /media/usb1/ +insgesamt 12 +-rwxr-xr-x 1 peter peter 160 2021-05-28 14:05:18.000000000 +0200 test-tab.txt +-rwxr-xr-x 1 peter peter 14 2021-05-28 14:47:16.000000000 +0200 test-1.txt +-rwxr-xr-x 1 peter peter 0 2021-05-28 14:47:18.000000000 +0200 test-3.txt +-rwxr-xr-x 1 peter peter 19 2021-05-28 14:47:18.000000000 +0200 test-2.txt +-rwxr-xr-x 1 peter peter 0 2021-05-28 14:47:20.000000000 +0200 test-5.txt +-rwxr-xr-x 1 peter peter 0 2021-05-28 14:47:20.000000000 +0200 test-4.txt +cassini/home/peter/bo/2021ss/bs/20210528> diff --git a/20210528/mmu.png b/20210528/mmu.png new file mode 100644 index 0000000000000000000000000000000000000000..caa39cb2e987cff55d5fb25c61d075c745f6c630 Binary files /dev/null and b/20210528/mmu.png differ diff --git a/20210528/mmu.xcf.gz b/20210528/mmu.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..9c9f745196c8a87c30a207f39c8588b4dcec85fd Binary files /dev/null and b/20210528/mmu.xcf.gz differ diff --git a/20210528/test-1.txt b/20210528/test-1.txt new file mode 100644 index 0000000000000000000000000000000000000000..af5626b4a114abcb82d63db7c8082c3c4756e51b --- /dev/null +++ b/20210528/test-1.txt @@ -0,0 +1 @@ +Hello, world! diff --git a/20210528/test-2.txt b/20210528/test-2.txt new file mode 100644 index 0000000000000000000000000000000000000000..d7e5cff47f0303c2d892d3e790e00552759b639c --- /dev/null +++ b/20210528/test-2.txt @@ -0,0 +1 @@ +Dies ist ein Test. diff --git a/20210528/test-3.txt b/20210528/test-3.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/20210528/test-4.txt b/20210528/test-4.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/20210528/test-5.txt b/20210528/test-5.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/20210528/test-tab.txt b/20210528/test-tab.txt new file mode 100644 index 0000000000000000000000000000000000000000..e7f7da6021c9b3bc8cd82215516f4f374a25ca7a --- /dev/null +++ b/20210528/test-tab.txt @@ -0,0 +1,8 @@ +Datenträger: USB-Stick +Größe: 4 GB +Inhalt: + + Adresse Länge Datei + 0 14 test-1.txt + 14 28 test-2.txt + ... ... ... diff --git a/projekte.txt b/projekte.txt index c76d4d7f25a9bb9cdf940f725af420435e794229..f2c3f297a67f04e5286f9697be37a9688203e1b3 100644 --- a/projekte.txt +++ b/projekte.txt @@ -17,15 +17,22 @@ - yesVNC auch im Hintergrund laufen lassen - Scroll-Algorithmus für x11vnc oder TightVNC - Kombinierter Desktop-Client für VNC und Mumble - - Mumble-Desktop-Client: Konfiguration vereinfachen - - Mumble/VNC/CVH-Camera für weitere Plattformen nutzbar machen, z.B. iOS + * Mumble-Desktop-Client: Konfiguration vereinfachen +:o Mumble/VNC/CVH-Camera für weitere Plattformen nutzbar machen, z.B. iOS, MacOS X - Mumble-Client: Forward-Error-Correction aktivierbar machen - PULT auf übersichtlichere und effizientere Weise neu programmieren * Docker für PULT - - Komfortable Fernsteuerung von Rechnern von Teilnehmenden über VNC in PULT + * Komfortable Fernsteuerung von Rechnern von Teilnehmenden über VNC in PULT + Server: z.B. TightVNC; Client: z.B. noVNC - Komfortable Fernsteuerung von Rechnern von Teilnehmenden über VNC in BBB - Work Advanture für die Hochschule installieren Bsp-Instanz aus Bochum (von dem dortigen Hackspace): https://virtuallab.das-labor.org/ Doku dazu: https://howto.rc3.world/workadventure.en.html + * 3d-Scan aus einem Film heraus + - BBB: Standard-Umfrage: Ja/Nein/Enthaltung + - Mobil mit 10 Fingern bedienbare Tastatur + - Sinnvolle Anwendung für PineWatch + - Automatische Transkription in BBB und/oder PULT + (zum Vergleich https://github.com/jitsi/jigasi/pull/294) - Treiber für freies Smartphone - Echtzeit-Kommunikation mit freiem Smartphone