Ich schätze, diese Frage richtet sich an Linux/Unix-Systemprogrammierungsexperten (leider gehöre ich noch nicht zu dieser Sorte ;)).
Ich baue ein System auf, das auf einem Linux/Unix-Multicore-Rechner läuft, in dem Prozesse über gemeinsamen Speicher miteinander kommunizieren (Geschwindigkeit ist wichtig - möglichst wenige Aufrufe in den Kernel). Shared-Memory-"Kanäle" für die Kommunikation werden dynamisch erstellt, wenn ein Prozess die Kommunikation mit einem anderen anfordert - jeder Prozess hat einen Listening-Thread, der diese Anforderungen empfängt und "annimmt" und dann Shared-Memory-Kanäle erstellt/initialisiert. Für Prozesse a y b werden zwei Kanäle (gemeinsame Speicherbereiche) erstellt - ein Kanal wird als "Ausgang" von a und "Eingabe" an b und das andere umgekehrt.
Bei der Erstellung der Kommunikationskanäle ist es zwingend erforderlich, daß Prozeß a auf seinen entsprechenden "Ausgangs"-Kanal R/W-Zugriff und auf seinen entsprechenden "Eingangs"-Kanal nur R-Zugriff hat. Andere Prozesse dürfen keinen W-Zugriff auf die von anderen Prozesspaaren gemeinsam genutzten Kanäle erhalten können (vorzugsweise sollten sie nicht einmal R-Zugriff haben).
Welche Lösung können Sie vorschlagen?
Ich habe darüber nachgedacht:
- meine eigenen Systemaufrufe zu definieren (im Moment nicht wünschenswert)
- Verwendung von Dateiberechtigungen, die dem Dateisystem eigen sind, um diese Zugriffsrechte zu erteilen
Bei der zweiten Lösung besteht die Idee darin, Prozesse unter verschiedenen Benutzerkennungen laufen zu lassen und für jedes Prozesspaar dynamisch Gruppen zu erstellen und jedem gemeinsam genutzten Speicherdeskriptor eine entsprechende Dateiberechtigung zuzuweisen (R für die Gruppe, R/W für den schreibenden Prozess, - für den Rest).
Ist die 2. Lösung machbar? Gibt es bessere Lösungen (z.B. mit Systemaufrufen, die mir nicht bekannt sind)?
Vielen Dank für Ihre Zeit und Ihre Hilfe.