Autor Thema: IPC  (Gelesen 5618 mal)

sp

  • Gast
Gespeichert
« am: 17. January 2005, 15:09 »
IPC
Hallo

ich taste mich gerade ein bisschen an MT ran und wollte mal wissen wie eigentlich IPC funktioniert.


sp

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 18. January 2005, 18:39 »
IPC
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
A man, a legend!

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 19. January 2005, 14:41 »
IPC
mal ne frage nebenbei, was is IPC ?
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #3 am: 19. January 2005, 15:31 »
IPC
Inter Process Communication

Das heisst das austauschen von Daten unter verschiedenen Prozessen (tasks)
----------------------
Redakteur bei LowLevel

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 am: 19. January 2005, 15:57 »
IPC
Bei mir funktioniert das alles über eine zentrale Stelle, beim Programmstart (oder auch später), muss jedes Programm die ID's von den Programmen anfragen mit denen es reden will. Dazu stellt es eine Anfrage in einem bestimmten Format (4Byte Befehlscode, 4 Byte Pointer auf Programmnamen, der einzigartig sein muss, also mehrere Instanzen müssen etwas komplizierter in einem 2. Layer verwaltet werden) in die ProcessWorkQue(PWQ), die bei jedem Taskwechsel abgearbeitet wird, und die Ergebnisse dann in den speziellen "Antwortbereich" jedes Tasks stellt. So hat es dann, wenn alles gut geht, die ID's der Programme, um dann mit einem Programm zu reden, benutzt es diese ID um über die PWQ wieder eine Nachricht an das Programm zu senden, wieder über den Antwortbereich, diesmal des anderen Programmes.
Auch wenn ein Programm ne Datei haben will: Befehlscode-"Datei lesen"+Dateiname etc in die PWQ, beim abarbeiten dann geht diese Message an das VFS Modul,  welches dann weiter zuständig ist, bis die Datei dann letztlich beim Programm landet.
Sämtliche Kommunikation also muss über die PWQ erfolgen.
Vorteil: Zentrale Kontrolle
Nachteil: nicht die schnellste Variante, und muss sehr sicher programmiert sein
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen