Autor Thema: Kommunikation in der GUI  (Gelesen 19009 mal)

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« am: 25. August 2005, 10:43 »
Wie würdet ihr die Kommunikation in der GUI realisieren?

Also wenn man sich das so ansieht hat man folgende Programme:
    :arrow: Grafikserver
    :arrow: WindowServer
    :arrow: Applikation[/list:u]

    Wenn wir dies uns mal in einem Beispiel ansehen sieht das so aus:
    Wenn ein Mouseklick passiert bekommt der Grafikserver dies als Input - danach muß er es an den WindowManager weitergeben und dieser hat es zum weitergeben an die Applikation die den betreffenden Frame besitzt.

    Also meine Frage daher ist wie würdet ihr diese Kommunikation machen?

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #1 am: 25. August 2005, 11:23 »
Tjaaaa, jetzt gibt es schon viele Möglichkeiten.
Aber erstmal vorweg gefällt mir der Begriff Window Manager nicht, da es sowas unter X11 schon gibt, und ich so gar nicht erst anfängen würde! ;)
Wenn dann schon mindestens etwas was strukturell alle Aufgaben die z.B. KDE erfüllen tut kann.

Gucken wir doch mal an was es bislang gibt:

X11 - Benutzt für so ziemlich alles TCP/IP oder auch Unix Sockets(?).
Vorteil: Funktioniert auch übers Netzwerk.

Windows - Benutzt Message Queues für Events.
Vorteil: Könnte ein Stückchen effizienter sein.
Nachteil: Geht natürlich nicht so einfach übers Netzwerk.

Ich würde meine GUI sowieso in ein Komponentensystem einbauen, und dann Dinge wie Fenster usw. und deren Events darüber abwickeln. Hat man schön eine Sache mit der man alles effizient erschlagen kann.
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #2 am: 25. August 2005, 11:29 »
Was verstehst du unter Komponentensystem? Wie willst du dies realisieren?

Denke auch das die Netzwerkidee extremst gut ist - da es sehr genial im Einsatz von Remotedingen ist. somit könnte man das selbe wie den Xmanager für sein eigenes System implementieren um auf anderen System verwendung zu finden.

Aber villeicht könntest du mal kurz genauer erklären wie du dies in der REgel lösen würdest?

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #3 am: 25. August 2005, 11:34 »
Corba, DCOM, und noch die Dinger von KDE und Gnome (Dcop und Dbus hiessen die?) hauen wohl alle in die selbe Kerbe. Durchaus auch noch Java's RMI.

Sie probieren Objekte, die von deinem Prozess getrennt sind (z.B. in einem anderem Prozess oder aber übers Netzwerk) für dich so zu präsentieren, als wären es Objekte in deinem Prozess. In Realität wird dann natürlich jeder Methodenaufruf erstmal übers Netzwerk (oder auf anderen Wegen) transportiert.

Dann würde es bei mir nen Objekt geben an dem ich mir Events für meine Anwendung abholen kann. Ob das nun über TCP/IP geht, oder über etwas für den lokalen Einsatz optimiertem, kann meiner Anwendung dann erstmal völlig egal sein, darum kümmert sich das System.
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #4 am: 25. August 2005, 11:40 »
Zitat von: Legend
Corba, DCOM, und noch die Dinger von KDE und Gnome (Dcop und Dbus hiessen die?) hauen wohl alle in die selbe Kerbe. Durchaus auch noch Java's RMI.

Sie probieren Objekte, die von deinem Prozess getrennt sind (z.B. in einem anderem Prozess oder aber übers Netzwerk) für dich so zu präsentieren, als wären es Objekte in deinem Prozess. In Realität wird dann natürlich jeder Methodenaufruf erstmal übers Netzwerk (oder auf anderen Wegen) transportiert.

Dann würde es bei mir nen Objekt geben an dem ich mir Events für meine Anwendung abholen kann. Ob das nun über TCP/IP geht, oder über etwas für den lokalen Einsatz optimiertem, kann meiner Anwendung dann erstmal völlig egal sein, darum kümmert sich das System.


Also um ehrlich zu sein finde ich die TCPIP Lösung am schönsten... ...die Frage ist wie und was alles muß ich in meinem Kernel implementieren um auf das Netzwerk loszugehen?

Gibts da Tutorials oder Threads die sich mit dem beschäftigen?

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #5 am: 25. August 2005, 12:39 »
Na wenn du meinst ein weiteres Netzwerkprotokoll sei eine tolle Sache, dann viel Spass damit!

Was Netzwerk angeht, erstmal brauchst du eigentlich nur ein loopback device, also 127.0.0.1. Wenn du das dann richtig übers Netzwerk testen willst, solltest du erstmal deine Netzwerkkarte programmieren damit du an das Ethernet kannst! ;)
Dann wäre noch ein Studium der RFCs von ARP, IP, TCP, und evtl. noch ICMP und UDP sinnvoll.

Bei Tutorials wird es wahrscheinlich schon schlechter aussehen! ;)
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #6 am: 25. August 2005, 13:10 »
Zitat von: Legend
Na wenn du meinst ein weiteres Netzwerkprotokoll sei eine tolle Sache, dann viel Spass damit!

Was Netzwerk angeht, erstmal brauchst du eigentlich nur ein loopback device, also 127.0.0.1. Wenn du das dann richtig übers Netzwerk testen willst, solltest du erstmal deine Netzwerkkarte programmieren damit du an das Ethernet kannst! ;)
Dann wäre noch ein Studium der RFCs von ARP, IP, TCP, und evtl. noch ICMP und UDP sinnvoll.

Bei Tutorials wird es wahrscheinlich schon schlechter aussehen! ;)


Nun ich würde es mal nicht mit einem eigenen Protokoll versehen - dies könnte man schon über TCP lösen.

okay - werde mich mal in richtung netzwerkkarten programmierung begeben!!

Studium  :lol:  der war gut - nein ich habe mir eh von Tannenbaum das Netzwerkbuch besorgt... mal schauen was sich da so machen lässt...

Aber im Endeffekt braucht ein gutes OS sowieso Netzwerkunterstützung...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #7 am: 25. August 2005, 13:53 »
Mit Protokoll meine ich nicht etwas wie TCP in diesem Falle. Ich würde dir empfehlen dir mal das OSI Schicht Modell anzusehen. Die unteren Schichten kann man ganz leicht wieder erkennen.
Ich meine ein Protokoll auf einem Level wie z.B. HTTP oder FTP, welche ja auch TCP benutzen.

Und ja, ein gutes OS braucht Netzwerkunterstützung. Und ja, ab dort hört es mit dem sinnvollem Selbermachen meistens auch auf, weil man ja wohl kaum glauben wird das jemand nur komplett deine Lösung benutzen würde. Im Extremfall kann ich mich an sogar an ner Linux-Kiste per Active Directory authentifizieren, um so eine zentrale Userauthentifizierung zu erhalten! Vorraussetzung ist nur das man gewillt ist, ne Userauthentifizierung per LDAP zu implementieren und da nicht nur was eigenes zu kochen. ;)
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #8 am: 25. August 2005, 13:59 »
Zitat von: Legend
Mit Protokoll meine ich nicht etwas wie TCP in diesem Falle. Ich würde dir empfehlen dir mal das OSI Schicht Modell anzusehen. Die unteren Schichten kann man ganz leicht wieder erkennen.
Ich meine ein Protokoll auf einem Level wie z.B. HTTP oder FTP, welche ja auch TCP benutzen.

Und ja, ein gutes OS braucht Netzwerkunterstützung. Und ja, ab dort hört es mit dem sinnvollem Selbermachen meistens auch auf, weil man ja wohl kaum glauben wird das jemand nur komplett deine Lösung benutzen würde. Im Extremfall kann ich mich an sogar an ner Linux-Kiste per Active Directory authentifizieren, um so eine zentrale Userauthentifizierung zu erhalten! Vorraussetzung ist nur das man gewillt ist, ne Userauthentifizierung per LDAP zu implementieren und da nicht nur was eigenes zu kochen. ;)


Aha okay - verstanden - werd ich mir mal reinziehen...

Ich rede ja nicht von allen Netzwerkmöglichkeiten! Aber mal meine Netzwerkkarte und dann bis hin mal TCP sollte möglich sein - Details wie ActiveDirectory sind in meinen Augen spätere Dinge...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #9 am: 25. August 2005, 14:27 »
Hehe, natürlich ist so eine Anbindung ans Active Directory was für später ... immerhin brauchste vorher mindestens TCP/IP ins Netzwerk wo der ADS Server steht rein! ;)
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #10 am: 25. August 2005, 15:14 »
Zitat von: Legend
Hehe, natürlich ist so eine Anbindung ans Active Directory was für später ... immerhin brauchste vorher mindestens TCP/IP ins Netzwerk wo der ADS Server steht rein! ;)


Ja und um MS Kompatibilität mach ich mir mal keine Gedanken - jetzt zumindest noch nicht...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #11 am: 25. August 2005, 16:54 »
War ja auch nur ein Beispiel! ;)
Kannste auch LDAP für einsetzen, wenn dir ADS zu MS spezifisch ist - wobei du dann eh eigentlich schon 85% von ner Anbindung an ADS fertiggestellt hättest, wenn du auf nen OpenLDAP Verzeichnis zugreifen könntest.
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #12 am: 25. August 2005, 17:48 »
Zitat von: Legend
War ja auch nur ein Beispiel! ;)
Kannste auch LDAP für einsetzen, wenn dir ADS zu MS spezifisch ist - wobei du dann eh eigentlich schon 85% von ner Anbindung an ADS fertiggestellt hättest, wenn du auf nen OpenLDAP Verzeichnis zugreifen könntest.


 :x  Stimmt - naja mal sehen das ich TCPIP implementiere und dann sehe ich weiter!

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 26. August 2005, 13:35 »
Und was is wenn du keine netzkarte hast? Also wenn... ich weiss nämlich ned obs die dafür bruacht, sonst würde ich ja ned fragen ;)

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #14 am: 26. August 2005, 13:41 »
Nun ja, dann kannste ne Socket API mit Loopback programmieren - und alles natürlich nur lokal an deinem PC testen! ;)
*post*

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #15 am: 26. August 2005, 19:00 »
ich weiss ihr seid jetzt abgeschweift von der einfachen kommunikation zwischen applikation und "server", aber ich fuer meinen teil finde die loesung, wie sie bei c# und .net verwendet wird, einfach nur genial .. und sollte ich mal soweit sein eine gui programmieren zu koennen, dann werd ich das auf jeden fall so implementieren!

das grundprinzip ist ja ganz einfach, naemlich event-abhaengige programmierung, d.h. soviel wie, dass fuer jedes event, dass du abfangen moechtest eine methode in deinem code vorhanden ist, die das event dann behandelt..also im grunde wie virtuelle interrupts. ist viel effizienter als eine schleife, die immer durchlaufen wird und somit zeit und ressourcen frisst.

lg, alex
\\o
o//
\o/

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #16 am: 27. August 2005, 00:50 »
Na ja, bei C# wird intern irgendwo die Schleife durchlaufen! :)
Natürlich ist es auf jeden Fall trotzdem noch viel übersichtlicher zu programmieren, und wenn man es richtig umsetzen würde, könnte es auch tatsächlich ein bisschen effizienter sein.

Aber dazu musst du erstmal dafür sorgen das deine GUI solche Events erstmal der Anwendung verständlich machen kann.
*post*

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #17 am: 27. August 2005, 13:39 »
Zitat von: Legend
Na ja, bei C# wird intern irgendwo die Schleife durchlaufen! :)
Natürlich ist es auf jeden Fall trotzdem noch viel übersichtlicher zu programmieren, und wenn man es richtig umsetzen würde, könnte es auch tatsächlich ein bisschen effizienter sein.

Aber dazu musst du erstmal dafür sorgen das deine GUI solche Events erstmal der Anwendung verständlich machen kann.


wie gesagt, die anwendung muss natuerlich methoden/funktionen/prozeduren bereithalten, die die events behandeln .. eine kleine liste von handlern muss auch irgendwo vorhanden sein, die muss dann nur in der gui eingetragen werden und schon koennen die dinge ereignis-basierund ablaufen. (kann eine anwendung eigentlich auch software-interrupts eintragen? waere dann naemlich noch einfacher)
\\o
o//
\o/

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 27. August 2005, 14:08 »
Nein, durch einen Interrupt würde die Anwendung in Ring0 ausgeführt werden.

Man kann aber einen Thread aus einem anderen aufrufen lassen, indem man
1. Die Rücksprungaddresse auf die Addresse der Funktion ändert
2. Die Parameter auf den Stack der Anwendung pushed
3. Die alte Rücksprungaddresse auf den Stack der Anwendung pushed
4. Addressspaces wechselt
5. Stacks wechselt
6. IRET ausführt

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #19 am: 28. August 2005, 20:32 »
Nun ja, theoretisch könnte man ja die Anwendung ein Task Gate eintragen lassen, das Ziel könnte auch im Ring 3 liegen. Das setzt natürlich zwingend die Verwendung von Hardware Taskswitching vorraus, bei Software Taskswitching gehts dann im Prinzip so wie SSJ7Gohan es gesagt hat.
*post*

 

Einloggen