Hiho,
IPC funktioniert am besten mit einem Messaging System, d.h. ein Prozess kann Daten empfangen und senden, genau wie z.B. sockets nur das ein Header mitgesendet wird, der Sender und Empänger angibt, einen MessageCode usw.
Wie du das realisierst, kommt auf deinen Kernel an. Ich mach es folgendermaßen:
1. Prozess ruft Systemcall zum erstellen einer Message mit bestimmter maximaler Datengröße auf
2. Der Kernel mappt physische Pages in den Addressraum des Prozesses, und gleichzeitig mappt er die Pages in seinen privaten Addressraum(bei mir 0-16mb).
3. Will ein Prozess nun eine Message empfangen oder senden, gibt er die Message an, die die Daten empfangen oder senden soll und ruft einen Syscall auf.
4 (Senden). Der Kernel kopiert die Message aus dem Addressraum des Prozesses in den MessageQueue des Empfängers. Klappt weil der Kernel noch im Context des Senders ist, und der Qeueue auch im Kernelspace liegt.
4 (Empfangen). Die erste Nachricht aus dem Queue wird einfach in Message kopiert.
Das System setzt aber voraus, das der Kernel in den Addressraum von jedem Prozess gemappt ist. Außerdem kann nur eine begrenzte Anzahl an Messages im ganzen System erstellt werden (So groß wie der Kernelspace ist...)
Alternativ kannst du auch einen globalen Messaging Addressram einrichten, der z.B. bei 0xF0000000 liegt, und ausgelagert werden kann, das würde alles schon um einiges dynamischer machen, ist aber viel aufwendiger...
Hoffe du verstehst was ich meine, isn bisschen scheiße erklärt
MfG GhostCoder