Tag
Also ich arbeite jetzt zur Zeit mal wieder an meinem Kernel.
Multitasking ist nun soweit drinnen, nur müssen die Tasks sich im Moment noch einen Adressraum teilen. Das wird sich jedoch ändern, sobald ich einen Task (im Kernel-Adressbereich) habe, der das Mapping verwalten kann. Das an sich ist eigentlich kein Problem. Schwieriger wird die Kommunikation zwischen den Tasks/Prozessen.
Dafür muss ich mir noch was schlaues überlegen, denn davon hängt im Endeffekt ab, wie schnell/sicher/stabil das komplette System laufen kann.
Im Moment stelle ich mir ein nachrichtenbasiertes System vor. Wie genau ich das umsetzen soll weiß ich aber noch nicht. Im Moment bekommt jeder Adressraum (und damit jeder Task) einen eigenen "Kernelbereich", in den er über Funktionen schreiben kann (Nachrichten in den Postausgang legen sozusagen)
Problem an der Sache ist: Wie gebe ich dem Empfänger möglichst schnell Bescheid, dass es eine Nachricht für ihn gibt?
Da die Hauptkommunikation sich auf Systemprozesse beschränken wird (zumindest die, die über das System laufen soll, Interprozesskommunikation ist wieder ein anderer Schuh) dachte ich auch schon daran jedem Task den gleichen Kernelbereich "einzumappen", auf den er dann wiederrum Nachrichten schreiben kann.
Vorteil: Es gibt nur einen Bereich im Speicher, an dem sich Nachrichten befinden können, somit ist die Suche nach Nachrichten deutlich einfacher und schneller.
Problem: Was tun, wenn der Speicher voll ist?
Ihr seht, darüber bin ich mir mit mir selbst noch nicht ganz einig. Über Anregungen würde ich mich also sehr freuen
Achja: Die Aufteilung im Speicher schreitet voran.
Es gibt eine Section .boot, in der sind die Dinge, die sich unbedingt ganz vorne im Speicher befinden müssen (sonst lädt GRUB den Kernel nicht).
Dann die Section .setup, in der Funktionen etc sind, die nur zum Starten gebraucht werden (Die Funktion um die GDT einzurichten wird z.B. nur einmal gebraucht). Wenn der Startzustand mal überwunden wurde, dann wird diese Section aus dem Speicher getilgt, so dass mehr Platz für wirklich wichtigen Code da ist

Und natürlich die .klinked Section, in der der wichtige Kernelcode drinnen ist, auf den jeder Task zugreifen können muss.
Soweit so gut
