Minix

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