PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie eine Resource mehreren Programmen verfügbar machen?



Lin728
13-01-2004, 19:21
Ich beschäftige mich gerade mit der Möglichkeit eine gemeinsame Resource mehreren Programmen zugänglich zu machen, wie z.B. das der X-Server tut.

Ich habe da einen Ansätze gefunden, aber eigentlich gefällt mir diese Möglichkeit nicht, wie die vielen Programme mit der einen "Resource" kommunizieren, weil soviel Overhead entsteht.

Man führt Operationen auf diese Resource durch einen Codierer am einen Ende (die Anwendung) und einen Decodierer am anderen Ende (wenns unidirektional ist halt auf beiden Seiten) aus, wobei es einen Decodierer (in diesem Fall der X-Server) gibt, der praktisch alleine wirklich mit der HW komuniziert.
Die Befehl an sich kann man über viele Weg übermitteln, wie z.B. Shared Memory, Sockets, Pipes, ...
Gefällt mir eigentlich überhaupt nicht, weils so langsam ist.

Gibt es keine Möglichkeit, dass alle di<ese vielen Programme irgendwie über den Programmcode selbst (also ohne Umweg über eine Abtraktionsschicht) auf die HW zugreifen, ohne über einen Codierer/Decodierer laufen zu müssen?
OpenGL kann dies z.B. soweit ich weiß...
Wäre sowas auch im Userspace möglich?

Wie macht dies eigentlich der Kernel. Und wie werden dann Daten zwischen dem Kernel und der User-Schicht transportiert, das kann doch noch alles über syscalls laufen?? (Ist ein syscall auch eine abstraktion im sinne der oben genannten cod./decod.?)

panzi
13-01-2004, 22:47
Probier doch dcop (http://devel-home.kde.org/~danimo/apidocs/dcop/html/index.html) oder besser d-bus (http://freedesktop.org/Software/dbus).
Das sind kommunikationsprotokolle, mit denen programme komunizieren können. Also sowas wie IPC. Wobei dcop is von KDE (braucht X11 und Qt) und d-bus (von freedesktop.org) is ne art von Weiterentwicklung, die desktop unabhängig ist (KEINE Abhängigkeiten, hat aber Glib und Qt APIS, wenn man die will).

Lin728
14-01-2004, 07:30
.................

anda_skoa
14-01-2004, 15:13
Original geschrieben von ceisserer
Ich habe da einen Ansätze gefunden, aber eigentlich gefällt mir diese Möglichkeit nicht, wie die vielen Programme mit der einen "Resource" kommunizieren, weil soviel Overhead entsteht.


Man hat praktisch überall im Leben einen Kompromiss zwischen Overhead und Teilen.
Eine Demokratie hat gegenüber eine Dikatur auch enormen Overhead, trotzdem fahren wir ganz gut damit.
Das Prinzip eines Mulitprozess OS ist ja auch Overhead, würde nur ein Task laufen, müsste man nicht Kontextswitchen, Register sichern, etc.



Gefällt mir eigentlich überhaupt nicht, weils so langsam ist.

Langsam ist relativ :)
Die meisten lokalen IPC Mechanismen sind für ihre jeweiligen Anwendungen schnell genug.



Gibt es keine Möglichkeit, dass alle di<ese vielen Programme irgendwie über den Programmcode selbst (also ohne Umweg über eine Abtraktionsschicht) auf die HW zugreifen, ohne über einen Codierer/Decodierer laufen zu müssen?

Du könntest zB pro Befehl einen Kaommunikationskanal benutzen, dann ist am anderen Ende klar, welcher Befehl ausgeführt werden muss.
zB je ein Sharedmemory Segment, dann sind nur mehr die Daten da und die müssen ja nicht umkodiert werden.

Im Normallfall ist dieser Resourcenoverhead nicht sinnvoll, selbst die Prozessoren benutzen kodierte Befehle.



Wie macht dies eigentlich der Kernel. Und wie werden dann Daten zwischen dem Kernel und der User-Schicht transportiert, das kann doch noch alles über syscalls laufen??

Der Syscall triggert einen Funktionsaufruf um Kernel, der ja Zugriff auf den User Adressraum hat und sich dort die Daten holen kann.

Ciao,
_