Also, zunaechst mal, moechte ich darauf hinweisen, dass es vier arten gibt, ein betriebssystem vom code her zu lernen.
1.) Der typische unterricht des Betriebssystems, lautet
    Speicherverwaltung, Prozessverwaltung, besonders Speicherverwaltung
    Dabei ist das Betriebssystem die Verwaltung von Ressourcen. Dazu gehoert auch die Hardware. Nicht die Hardware, sondern die Geraete
    Zunaechst moechte ich darauf hinweisen, dass die Freispeicherliste, von Minix
            Interressant
            Einfach
            aber tricky ist
    das war das erste, was ich anschaute
    Aber sie ist einfach
    Ich moechte aber darauf hinweisen, wenn man den Leuten erklaert, die Speicherverwaltung ist alles. Aber angenommen, sie haben einen Quelltext, der besteht aus
        1.000.000 Zeilen Code
        davon sind 10% Speicherverwalter und Prozessverwalter
        und 90% Hardware, aber Geraete
    und gehen wir davon aus, dass die Geraete Lernarbeit sind, wir muessen extrem viel lernen, wie in der geographie oder Lateinvokabeln, der Zusammenhang aber extrem einfach ist
    Stellt sich die Frage, wir gehen an das Betriebssystem heran und indem wir sagen
        STOP, bevor ich den Speicherverwalter habe, mache ich nicht weiter. wenn ich den habe, habe ich 100.000 zeilen code im Kopf
        oder ich sage, ich lerne die restlichen 900.000 Zeilen
    Dann sage ich mir - gut, dann lerne ich die 900.000 Zeilen, die 100.000 fehlen mir  noch, aber ich habe 90%
2.) ich bin von der Ueberzeugung dass man in der Chemie die Bausteine sehr genau kennen muss, man sollte wissen, was eine Niels Alder Reaktion ist. Trotzdem steht man doof da. Die Chemie Industrie, liefert produkte auf hoechsten Niveau. Ehrlich gesagt, wenn ich nicht weiss, was ich kaufe, wozu ist Chemie gut
Umgekehrt, wenn ich die Bausteine, dazu gehoeren die simpelsten Reaktionen nicht kenne, ich habe auch ein Problem
Ich lerne die untersten Bausteine, und weiss nicht wie ich damit oben anfange. Aber ich habe beides im Kopf. Am Ende verbindet es sich.
Natuerlich sollte ich den x86 gut kennen. ich sollte Befehle wie
ADD, SUB, MUL, DIV, AND, OR, XOR, NOT, JMP, CMP, JE, JNE, JG, JNG, JGE, JNGE, JL, JNL, JLE, JNLE, JA, JNA, ...
dazu noch Register AX, BX, CX, DX, SP, BP, SI, DI, ...
gut kennen
umgekehrt, wenn ich ein Betriebssystem lerne, ich sage mal so, wenn ich keine Ahnung habe, was ein Betriebssystem macht, dann habe ich schwierigkeiten zu lernen was es tut. damit meine ich nicht, dass ich sage: oh schoen. Ich mein etwas anderes. Ich meine auch nicht, es sind Toene zu hoeren, wenn ich Musik hoere
ich meine, ich wuerde sagen - Sound bedeutet - PulseAudio-Enable-Autospawn und ALSA und, ich gehe noch einen Schritt weiter. ich lerne die Namen und spaeter sehe ich, es ist einfach zu bedienen
und diesem Konzept bediene ich mich, wenn ich mich, wenn ich den Quelltext eines Betriebssystems lerne. weil, es gibt Funktionen
Ich habe Computersysteme I/II geschrieben und bestanden, das ist so. Ich weiss, sehr gut, wie der MIPS 32 funktioniert und Schaltwerke. Gut, das ist so und ich denke, die Vorraussetzung
Ich habe mir bei dem Kurs eines angewoehnt. Ich bin ein sehr schlechter Schachspieler und ich weiss warum. Der klassische Anfaenger, wird ein sehr grosses Verlangen haben, moeglichst kompliziert zu kombinieren. Dabei muessen sie mir glaube, heutzutage gibt es fuer alles ein Buch. Es gibt sehr komplizierte Schachkombinationen, schon hier unterscheidet man zwischen Worten wie Kombination und so weiter. Letzten Endes gibt es aber, ich bin kein Schachspieler, aber es gibt Stellungen, die kann man systematisch aufzaehlen, und man kann sie sich ausdenken, indem man einfach pragmatisch daher kommt. Und dann sollte man sie, wenn man keine Lust hat sie selber alle zu kathegorisieren aus dem Buch lernen
Und mit Computerystemen I/II habe ich gelernt, das nicht zu tun, was manchmal anfaenger machen. Ein jeder Systematischer Lehrtext hat ein Inhaltsverzeichnis, was gerne uebersehen wird. es gibt immer dieses klassische kombinieren wie beim Schachspiel. Und ich wuerde sagen, es ist ja umsonst der Fall, dass ein Buch ein Inhaltsverzeichnis hat
Und es ist nicht umsonst der Fall, dass sie das Betriebssystem Minix, nicht in einer einzigen Datei finden. Und wenn schon, gibt es lauter Funktionen. Und die betreffen halt ein Thema
Es gibt zwei Methoden funktionen zu lernen. Entweder ich lerne alle Methoden geschickten Kombinierens, oder ich lerne was es gibt
Fazit, so mache ich das. Und dann sieht man, der Kernel ist zunaechst, etwas was man auch mal sagen muss
ich wuerde jetzt so weit raten, was bei Linux LKM sind, loadable kernel modules, das sind unter Windows sagt man treiber.
Und trotzdem gibt es sagen wir, die hardware die absolut vorrausgesetzt wird
Ich denke Minix bedient im Gegensatz zu Linux nichts anderes. Dazu gehoert
halt TTY, Floppy Disk, Clock und so weiter
Gut, damit hat man einen grossteil des Betriebssystems
Und ich wuerde mir die Muehe machen, jede Funktion einzeln zu lernen
Es gibt im Kernel
kernel/floppy.c
kernel/tty.c
kernel/clock.c
...
Und daneben gibt es
kernel/mpx88.s
kernel/klib88.s
zunaechst wuerde ich die Namen. Wie die Treiber zusammen haengen, kann man sehr einfach lernen.
Natuerlich es geht nicht ohne das "Kombinieren". nur - das wuerde ich einfach lernen. ich wuerde einfach lernen, wie die ueber systemcalls und so weiter zusammenhaengen
Jetzt kommt als Beispiel, die serielle Schnittstelle
Ich wuerde sagen, jetzt wird es Zeit alte Bildungsluecken aus zu gleichen.
Zunaechst ist ja haeufig das Problem, auch bei Top-Down  im allgemeinen, uebrig bleibt oben die Moral
Da man in der modernen Informatik nichts mehr wissen  muss, weil das Rad bereits erfunden wurde, was bleibt oben, als oberste Funktion, da unten drunten egal ist, bleibt oben ein stueck Moral uebrig, das ist was wir weltweit erleben, womit am Ende auch jeder Teil dieser Informationstechnik ist. Weil die funktionen drunter die interessieren alle nicht
somit wird man sich sagen, wir wissen, was ein ASCII Code ist. Ja, gut, allerdings es ist nur ein bisschen Muehe zu lernen, dass es
SOT, Start of Transmission, STX Start of Text, ETX end of text, ETB, End of Transmission Block und so weiter gibt. Und ich glaube, das braucht man jetzt.
Weil man muss verstehen, dass es ein
X-ON/X-OFF-Protokoll
gibt. und ich glaube, jetzt muss man einfach zur Sache schreiten. Weil, man muss einfach verstehen, wie RS-232 funktioniert. Was nicht so tragisch ist.
Und dann muss man folgendes wissen, dass sind Dinge die habe ich mir eingepraegt
Wo wir bei Niels Alder oder James Alder sind, sie sehen ich kann noch keine Chemie, aber - ich kann 4 bausteine aufzaehlen
8251
8253
8255
8259
und wahrscheinlich 8257
Gut ich weiss
Intel 8259A
ist ein PIC Programmable Interrupt controller
Ich weiss, Intel 8253 ist ein Timer
Und ich weiss, weil ich es lernte, 8251A ist ein USART
und jetzt kommt es drauf, wie gewillt bin, Ziffern zu lernen
Kennen sie ihre IBAN?
Vielleicht nein. Kennen sie ihre Telefonnummer? Wahrscheinlich.
Gut, dann muesste man ja gewillt sein, namen wie
AT90S4433
zu lernen. das muesste gehen und man muesste lernen
HD44780 und warum soll das nicht gehen. nur weil es nummern sind
und jetzt passiert folgender. Der AVR Controller hat ein UART
genau wie der IBM PC, bei dem heisst es - 8251, aber der UART im AVR ist integriert und der hat register
Wenn wir X-ON/X-OFF lernen
lernen wir erst Mal was eine Baud-Rate ist
das ist sehr simpel. Weil das kommt von Baudot, heisst, der glaube ich geschrieben, der sagt, die Zeichen die pro Sekunde uebertragen. Das ist wortwoertlich vom Zeichensatz abhaengig
Es gibt Zeichensaetze die bestehen aus einem Bit
Also, ich sage, ja oder nein. Mehr nicht. eine null und eine eins, uebertragen in  einer Sekunden uebertragen, ist dann ein Baud
Oder ich nehme einen Zeichensatz mit 256 Zeichen, 8 Bit. Dann muss ich 8 Bit / s uebertragen fuer ein Baud. 2 Zeichen sind zwei Baud
Also habe ich die Baudrate
Dann muss ich wissen, RS-232 hat mehrere Baudraten, z.B. 4800 Bd
Gut, das muss ich einstellen
Ich weiss jedes Geraet, hat Register.
und jetzt gucke ich das UART vom AVR an. atmega8 oder AT90S4433
und ich weiss AT90S4433 ist klein. Hat also nur immer 1 Register, 1 Byte
Stack: SP
und Atmega8: SPH und SPL
jetzt lerne ich - dass die Register des UART beim atmega8 sehr seltsame Namen haben
UBRR
UBRR, UBRRH, UBRRL
UDR
UCSRA, UCSRB, UCSRC
Was kann das sein? ich lerne und sage hoppla
U steht fuer UART
R steht fuer register
also steht da
UxR
UART x Register
Und dann steht da
UBRR
Das steht fuer UART Baud Rate Register
UDR UART Data Register
UCSRA UART Control Register
Gut, ich muss die Baudrate einstellen. Ich ziehe vom 8251A zu rate. Da steht
CLK must be greater than 30 times ...
Das gilt beim AVR auch, die Baudrate ist im Verhaeltnis zum Systemtakt zu sehen
gut, denkt man sich, wenn der AVR Register hat, die hier relativ eindeutig sind, wie war das mit Speicherbereich. Der 8251A muss auch einen Speicherbereich haben und man kennt, die Addresse
PORT 03F8-03FF
das sind die Ports des 8251A beim PC. das erste was mir auffaellt, ist, dass man immer die erste Addresse anguckt, 0x03F8 aber dass man mehrere sind oder was das ist, das realisiert  man nicht.
Aber sie muessen unterscheiden, der Atmega8 hat die Ports PORTA, PORTB, PORTC, ...
Das sind nicht viele und fest. Der x86 hat Memory Mapped IO. Nach aussen gibt einen Addressbus und einen Datenbus. Das gilt fuer beide, Devices und RAM
Ob ich den RAM anspreche oder die Geraete unterscheidet sich durch die Befehle
MOV, laden, speichern
IN, OUT, fuer Ports
fuer den Systembus, am 8086er werden bits aktiviert, indem fall sind das drei. Die muessen durch einen Baustein unterschieden werden.
So, aber Memory mapped IO, bedeutet, es werden fuer die Ports, also die Hardware, ebenso der Datenbus und Addressen verwendet, auf denselben bussen, wie - fuer den RAM
Und - deswegen haben die Ports addressen. Beim Atmega8, sind das die Ports PORTA, ... die an festen bits aussen liegen. Aber - der RAM beim Atmega8 liegt im Baustein. Das heisst ich brauche diesen und Addressbus nicht
Und - muss allerdings auch UBRR sind letzten endes Ports. Das ist auch ein Port. Allerdings liegt der UART im baustein. Und - beim x86er wiederum muss ich die ports des 8251 ansprechen
gut, dann schreibe ich an
PORT 03F8-03FF
Gut, das ist aber ein Addressbereich. Was verbirgt sich dahinter. Oft denkt man na ja, da schreibt man die zu schreibenden Daten, also die Nutzdaten rein
Falsch, man schreibt genauso wie in
UBRR, des Atmega8, zum Beispiel die Baudrate rein
Und das muss man auswendig lernen, was das ist, zum Beispiel
03F8  -W  serial port, transmitter holding register
03F8  R-  receiver buffer register (RBR)
03FA  R-  interrupt identification register
...
gut, das muss man halt lernen. Was macht jetzt minix. einfach auswendig lernen, wuerde ich sagen
Fuer viele klingt der Motor des Diskettenlaufwerks hart. Weil sie hoeren immer, bei der falschen Motorsteuerung geht die Diskette kaputt. Ganz so tragisch ist es nicht
Und bei Minix kann man lernen. In
kernel/floppy.c
motor_start
motor_stop
ebenso findet man in glaube ich
kernel/const.h
viele Parameter, fuer das Diskettenlaufwerk. Das haengt nicht vom Betriebssystem
Dasselbe begegnet uns bei Festplatten. Und ich kann ziemlich gut mit dem
HD44780
umgehen. dem LCD Controller fuer Text. das ist standard bei Hardware, wie bei Festplatten, das macht eben IDE aus, typische Befehle an die Hardware, lesen und schreiben zum Beispiel
Und ja, das muss einach lernen
Der Teil vom Minix betriebssystm
mm
memory manager ist von Funktionen auch einfach. Also, es gibt alloc_mem, free_mem, fork, exit
das kann man auch so einfach lernen, wie man PHP funktionen lernt
ja, das lerne ich jetzt weiter. Wenn man das Floppy disk kennt kann man in die Funktionen von Minix rein, zur Floppy Disk und - der Terminal bei Minix ist komplizierter als von den sagen wir Betriebssystem versuchen im Netz, denn er ist komfortabel, ich lerne jetzt weiter