Hallo,
Zusätzlich bieten meine Segmente den Vorteil das ich das Lesen und Schreiben unabhängig von einander freischalten kann, so das ein Service auf die Request-Speicher-Bereiche nur Lesend und auf die Response-Speicher-Bereiche nur Schreibend zugreifen kann.
Der Client kann beim Service weder etwas verändern noch etwas lesen, er gibt ja seine Speicher-Bereiche für den Service frei und nicht umgekehrt. (Ich hoffe das war es was Du wissen wolltest, wenn nicht dann formuliere Deine Frage Bitte noch mal neu)
Ein Lesezugriff auf den Cache im VFS läuft immer auf einen Kopiervorgang hinaus (vom Cache in den Buffer der Applikation), weil der Service (in diesem Fall das VFS) ja keine Speicherbereiche an den Client geben kann (wäre auch irgendwie doof).
Grüße
Erik
Ich meine, das wenn wir einen OS-Kernel als potentiell fehlerhaft betrachten, so wie absolut jede Software, dann hat ein Micro-Kernel den Vorteil das er deutlich kleiner ist und damit (hoffentlich) weniger Fehler enthält. Ein gut desingter Micro-Kernel hat nicht mal ein tausendstel der Größe eine dicken Monolithen (z.B. Linux) und da viele Fehler erst durch Wechselwirkungen entstehen sollte er deutlich weniger als ein tausendstel der Fehler enthalten. Fehler in einem OS-Kernel sind besonders schlimm weil sie potentiell das gesamt System beeinflussen können, genau deshalb hat man sich ja das Konzept der Micro-Kernel erdacht. Viele der OS-Funktionalitäten liegen bei einem Micro-Kernel-OS in normalen User-Mode-Prozessen (der Personality) und enthaltene Fehler können sich damit nicht so auswirken wie bei einem monolithischen Kernel. Der VFS-Code in einem Monolithen kann prinzipiell eine komplette Applikation beeinflussen, bei einem Micro-Kernel mit meinem IPC-Konzept nur die Speicherbereiche die die Applikation explizit dem VFS zur Verfügung stellt. Bei meinem Konzept besteht noch das Risiko das in den Rand-Bereichen der Speicher-Bereiche Schaden angerichtet werden könnte, das ist eben der Preis wenn man auf das Kopieren komplett verzichten möchte. Ich habe mir daher noch mal meine Segment-Descriptoren angesehen und denke das ich das Alignment problemlos auf 16 Byte reduzieren kann. Ich denke in den übrigen maximal 15 Bytes dürfte das Schadenspotential extrem gering sein und auf einer richtigen 64Bit-RISC-CPU sind alle Datenstrukturen passend ausgerichtet so das diese Rand-Bytes mit hoher Wahrscheinlichkeit eh unbenutzt sind. Auch die Pointer die malloc liefert sind wohl immer mindestens auf 16 Bytes ausgerichtet. Wie seht ihr das Risiko mit diesen kleinen Rand-Bereichen?Zitat von: erikBei einem Monolithischen Kernel sieht der Kernel alles von der Applikation da ist mein Konzept schon mal ein echter Fortschritt.Ähm, der Kernel sieht immer alles von der Applikation. Was genau meinst du in dem Fall?
Zusätzlich bieten meine Segmente den Vorteil das ich das Lesen und Schreiben unabhängig von einander freischalten kann, so das ein Service auf die Request-Speicher-Bereiche nur Lesend und auf die Response-Speicher-Bereiche nur Schreibend zugreifen kann.
Was ist wenn der Empfänger jetzt in den Buffer schreiben will? Muss er dann kopieren oder darf er in das Segment schreiben?Dort wo der Service seine Antwort oder eingelesene Nutzdaten ablegen soll darf er natürlich Schreiben (aber nicht Lesen). In den Segmenten wo der Request oder die zu schreibenden Nutzdaten liegen darf der Service natürlich nur Lesen (aber nicht Schreiben). Kopiert werden muss erst mal gar nichts.
Damit (wenn er in das Segment schreiben darf) gibt es dann 2 Probleme, 1. kann er dann im ungünstigsten Fall Daten beim Empfänger ändern und der Sender kann mit den Daten in dem Segment praktisch nichts mehr anfangen, da sie ja nicht mehr dem entsprechen was er mal gesendet hat.Ich verstehe nicht was Du meinst! Du scheinst das Wort "er" in verschiedenen Bedeutungen zu nutzen.
Der Client kann beim Service weder etwas verändern noch etwas lesen, er gibt ja seine Speicher-Bereiche für den Service frei und nicht umgekehrt. (Ich hoffe das war es was Du wissen wolltest, wenn nicht dann formuliere Deine Frage Bitte noch mal neu)
Das letzte Problem ist besonders fürs VFS entscheidend. Denn du willst ja das Kopieren vermeiden, wenn der Empfänger aber die Daten ändern darf, dann kannst du sie nicht mehr einfach an jeden Clienten senden (der die Datei lesen möchte), da sie nicht unbedingt dem entsprechen muss was eigentlich in der Datei steht.Also hier verstehe ich gar nichts mehr. Sorry, aber Bitte formuliere Deine Frage noch mal neu.
Darf der Empfänger nicht in das Segment schreiben, musst du ja doch wieder kopieren, damit er das machen kann.
Also sparst du im Endeffekt 1 Kopiervorgang (aber auch das wären im "schlimmsten" Fall 50% Ersparnis).
Ein Lesezugriff auf den Cache im VFS läuft immer auf einen Kopiervorgang hinaus (vom Cache in den Buffer der Applikation), weil der Service (in diesem Fall das VFS) ja keine Speicherbereiche an den Client geben kann (wäre auch irgendwie doof).
Grüße
Erik

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert
Ich sag mal wenn du sowas zulässt, dann kannst du auch sagen, das du die Segmente gar nicht brauchst und kannst alles über Paging machen (weil da hast du ja auch nur "kleine" Randbereiche).

Da muss ich mir auch nochmal Gedanken machen, wie ich einem Prozess (Treiber) erlauben darf nen bestimmten physikalischen Speicherbereich in seinen Adressraum zu mappen.