Zitat von: erik
Dann mach doch über 2 oder 3 weitere Syscalls klassisches SharedMem. Warum versuchst Du in die IPC-Syscalls so viele verschiedene Funktionalitäten rein zu packen?Die eigentliche Idee dahinter war, das ich nicht (am Bsp. SharedMem versenden) so wenig wie möglich Syscalls machen will (nicht die die vorhanden sind, sondern die die gemacht werden müssen damit etwas bestimmt erledigt werden kann).
Im Normalfall wird SharedMem benötigt um Daten per IPC zu versenden. Deswegen wollte/will ich es da gleich mit drin haben und dann wollte ich noch die Anzahl der Syscalls beschränken. Denn den SharedMem musst du so oder so versenden damit dann ein anderer Prozess Zugriff drauf hat. Also kann ich mir einen Syscall um SharedMem zu erstellen auf jeden Fall sparen. Nur einen um SharedMem wieder zu unmappen wäre vllt angebracht.
Zitat von: erik
Im Endeffekt wird es darauf hinauslaufen das Du dann in der OS-Library versuchst für jeden üblichen Verwendungszweck ein eigenes kleines API zu bauen wo die Funktionen dann nichts weiter machen als die richtigen Flags für ihre spezielle Verwendung der Alles-in-Eins Syscalls anzuhängen.Diese API wäre ja nur damit der Programmierer ein einfacheres Leben hat. Problem ist es halt eine gewisse Balance zu finden, auf der einen Seite will ich das so wenig wie nötig in den Kernel gewechselt werden muss und auf der anderen Seite will ich die Anzahl der Syscalls begrenzen (warum weiß ich gerade auch nicht
).Zitat von: erik
In Deiner Idee müsste der VFS-Service eine Page allozieren und diese in der RPC-Antwort dem fstat-Stub übermitteln welcher dann die Infos dort raus kopiert und die Page wieder frei gibt, das sind 2 zusätzliche Syscalls (für allozieren und freigeben der Page) und einmal Kopieren als zusätzlicher Aufwand ohne das Du da etwas gewinnst (die eigentliche Nutzarbeit des Service, das befüllen der Struktur, ist dagegen kaum relevant). Genau deswegen bin ich der Meinung das mein IPC-Konzept um viele Größenordnungen schneller ist.Also erstmal werde ich an dein IPC System eh nicht rankommen können, weil du ja Segmente nutzt. Das nächste ist, dass du die Richtung verwechselt hast
Der Client schickt eine Page mit und der Service kopiert dort die Daten rein. Für solche Sachen kann man auch einfach pro Thread provisorisch schonmal einfach eine Page vorallokieren und die dann immer für sowas nutzen.Ich habe einfach das Problem das ich mit den dynamic-Size Nachrichten nicht richtig umzugehen wüsste. Kopieren wird in den meisten Fällen dort nicht ausbleiben (erste und letzte Page) und sind die Daten kleiner als eine Page muss ohnehin kopiert werden und dann bekomme ich da ein Problem das ich diese Sachen (Daten < eine Page) ja im Kernel Zwischenspeichern muss und da müsste ich auch erstmal nen Allocator für schreiben und der müsste dann auch noch sehr gut mit parallelen Zugriffen klarkommen. Von daher halte ich meine Idee für effizienter in der Geschwindigkeit, aber dafür ineffizienter was den Speicherverbrauch betrifft.
Ich habe mir nochmal Gedanken wegen synchron und asynchron und sowas gemacht. Also ich will auf jeden Fall Popup-Threads für synchrone=RPC Sachen nehmen und da hat man dann die Wahl wieviele Threads man gleichzeitig zulässt. Sicher bin ich mir jetzt nicht ob ich die Queuetiefe auch noch beschränken sollte (das ist bei meinem momentanen Code noch möglich). Was meinst du dazu?
Was die asynchronen Sachen betrifft, will ich dort die Möglichkeit des aktiven Abholens behalten. Es programmiert sich einfach am einfachsten und wenn man (besser ich
) besser mit den Popup-Threads umgehen kann, finde ich ja vllt einen Weg wie ich das dann auch noch damit hinbekomme. Aber ich denke halt immernoch an GUI-Programmierung und ich sag mal bei einem einfachen Programm würde das mit den Popup-Threads wahrscheinlich noch einfach umzusetzen sein. Wenn ich dann aber mal wieder an ein Spiel denke stelle ich es mir blöd vor alles erstmal nochmal in eine Queue zu packen nur damit es dann ein anderer Thread da wieder rausholen kann, wenn er denn soweit ist (obwohl das vllt auch gar nicht so verkehrt wäre, weil der dann nicht in den Kernel müsste?).Auch ein Media-Player (besonders Video) wäre vllt auch ganz günstig wenn der Dekoder in einem extra Thread läuft und die GUI in einem anderen.
Es zeigt sich halt das man schlecht Sachen designen kann mit denen man noch keine Erfahrung hat.

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert
