Hiho,
also den Quellcode veröffentliche ich noch nicht (der kommt mir der ersten public version), weil viel von dem Messaging Code hängt auch mit dem Multitasking-, Scheduling- und anderen Code ab.
Hier aber erstmal wie es funzt:
// Returns the buffer that is shared by the kernel and the calling process
struct MESSAGE *GetMessageBuffer();
// Send a message to a process
int SendMessage(int iPid,UINT uiMessage);
// Sends the calling process to sleep until a message arrives
void WaitMessage();
// Copies the first message into the message buffer
int GetMessage();
Also, beim erstellen eines Prozesses wird ein sog. MessageBuffer erstellt, in dem immer eine Message gespeichert werden kann. Der MessageBuffer wird dann in den Kernel und Prozess Space gemappt, sodass beide darauf zugreifen können.
WaitMessage setzt den Prozess solange auf sleep (d.h. er wird nicht in scheduling einbezogen -> keine rechenzeit) bis eine Nachricht vorhanden ist.
Mit GetMessage wird die erste Message im MessageQueue(der Warteschlange) in den MessageBuffer kopiert, die Adresse kann sich der Prozess ja über GetMessageBuffer holen.
Und schlussendlich SendMessage, die, man glaub es kaum
, eine Nachricht an eine Prozess schickt.
Ich denke bald wird eine Message noch um einen SubCode sowie ein Data UINT erweitert. Darauf lassen sich dann alle "richtigen" Systemcalls ala GetPid(), CreateThread() und sowas (also eigentlich die komplette API) später aufbauen.
So, ich glaube schneller geht eine asyncrone microkernel prozess kommunikation wohl kaum
wenn doch lasst es mich wissen...
MfG GhostCoder