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