Hallo,
Wieviel Arbeit es wird, sieht man meistens erst, wenn man merkt, was doch nicht so einfach funktioniert, wie man sich das gedacht hat.
Ahja, natürlich.
Das war das mit dem "Popupthreadpool", wenn ich das mal so nennen darf, oder?
Das darfst Du gerne so nennen. Ich hab zu diesem Konzept in einem Buch mal was gefunden, ich glaub das war sogar jenes von Tannenbaum, aber das war nur ein kleiner Abschnitt mit ein paar wenigen grundlegenden Betrachtungen dieses Konzepts.
Das mit dem Pool ist kein muss sondern eher ein Feature das der Performance dient, es geht auch ohne aber dann natürlich deutlich langsamer.
Kernelseitig sollten Threads theoretisch funktionieren, sind aber nicht gut getestet. Userspaceseitig wäre da wohl noch ein bisschen was zu machen, insbesondere in Sachen Locking.
Also für mein Konzept muss der Kernel mindestens folgendes bieten:
- allozieren von physischen Speicher (muss nicht zusammenhängend sein) um ihn zu einen späteren Zeitpunkt schnell in den virtuellen Adressraum eines Prozesses einfügen zu können (dann natürlich am Stück)
- Shared-Memory, also virtuellen Speicher eines Prozesses in den virtuellen Speicher eines anderen Prozesses einzublenden (eventuell mit geänderten Attributen wie Read-Only), es ist dann auch wichtig wenn der "erbende" Prozess diesen Speicher seinerseits an andere Prozesse weiter "vererben" kann
- Threads, die aus User-Mode-Prozessen benutzt werden können, der IPC-Mechanismus wird aber einige Kernel-Interne Funktionen (Thread erstellen, zerstören u.ä.m.) direkt aufrufen
- vernünftige Verwaltung mehrerer Stacks in einem Prozess (ist für Multi-Threading auch eigentlich unerlässlich)
(das alles natürlich für ein Flat-Memory-OS)
Die meisten meiner SYSCALLs haben sehr viele Parameter (und oft auch mehrere Rückgabewerte), hier müsste man sich für x86 was passendes überlegen.
Falls es auch Kernel-Threads geben soll, in was für einem Kontext die dann laufen sollen verstehe ich dabei allerdings (noch) nicht, dann bedeutet dass das an etlichen Stellen im IPC-Code passend unterschieden werden muss. Ich persönlich finde das ungeschickt.
TLS brauchst du nicht, oder?
Nein, TLS brauch ich dafür nicht.
Dann werde ich mir bei Gelegenheit dein Konzept doch nochmal genauer anschauen (und FreakyPenguin dazu überreden, das auch zu tun).
Ja, bitte tut das.
Grüße
Erik