Ich sag einfach mal paar Sachen, womit ich mich in letzter Zeit beschäftigt habe.
KernelTyp:
MicroKernel mit MemoryManager, ProzessManager, UserManager, Abstraktionsschicht, evtl. Treiber für Laufwerke.
Der Rest kommt in einzelne Module.
Treiber:
So wie joachim_neu
Speicherverwaltung:
Der Kernel sollte im logischen Speicher, nen Addressraum für nen Heap haben, z.B. von 0xD0000000 bis 0xE0000000.
Den MemoryManager würde ich so machen, er besteht aus Knoten, der erste ist z.B. bei 0xD0000000 und geht am Anfang bis 0xE0000000, der Speicher muss ja nur im Page Dir reserviert sein. Bei Zugriff mit malloc wird nen Freier Block gesucht, über nen Avl-Baum, falls der Block zu groß ist, wird er gesplittet. Vielleicht bisschen kurz die Erklärung, hab das bis jetzt aber nur mit C++ implementiert, funktioniert auch einwandfrei, habe da noch paar weitere Sachen drinne für kleine Blöcke und so.
Für Usermode-Programme sollte das so ablaufen, das es sone Art VirtualAlloc gibt, und der Speicher dann bei Bedarf alloziert wird. Außerdem malloc/free/realloc in ne Dll rein und ähnlich implementieren, wie für den Kernel.
Prozessverwaltung:
Da wäre ich z.B. dafür, dass man zwischen mehreren Scheduler-Typen wählen kann, außerdem Multithreading.
Jeder Prozess hätte dann mindestens einen Thread.
Die Threads sollten auf TSS-Basis sein, im TSS könnte man auch floating-point Unit speichern und weitere Informationen.
IPC:
ReadProcessMemory, WriteProcessMemory mit entsprechender Rechtevergabe, gemeinsame Speicherbereiche, Messaging, Events, Mutexes, Semaphores, halt alles was dazu gehört.
Den Kernel würde ich möglichst pre-emptiv halten.
Allgemein:
Also ich würde nach außen hin, alle Möglichkeiten, die ein Unix oder Winprogramm braucht diesem auch native zur Verfügung stellen.
Man muss nur gut Abstrahieren.
evtl. kommt noch was.
MfG
DDR-RAM