nur hat der kernel auch immer alle speicherseiten der user tasks mit eingeblendet?
Bei einem x64 Kernel würde ich den ganzen physikalischen RAM mappen, dann kannst du locker mal ein bisschen in den PageDirs/Tables rumstochern ohne gleich den Cache zu trashen.
Bei x86 macht es wahrscheinlich Sinn das PageDir/Table kurz zu mappen, bisschen die Pages mappen und das PageDir/table wieder rauszunehmen. Da sollte man dann imho mit einem kleinen Invalidieren auskommen.
Nach meiner Methode hast du natürlich den Overhead des (De)Allozierens speziellen Speichers (für größere Datenmengen, wobei bei mir 16 die Größe der normalen Message war, alles darüber hinaus geht bei mir über 'shm' und verändern von PageTables/Dirs).
edit: Ich glaub ich habe hier zwei verschiedene Probleme durcheinandergebracht: Zum einen den L1-L3 Cache, der mit unnötigen Daten gefüllt wird (Da ja nur kopiert wird, d.h. zwei mal das gleiche im Cache) und zum anderen den TLB, der ja nur zum Speichern des Mappings benutzt wird (und der Adressraumwechsel invalidiert wird).
Aber falls ich da falsch liege bitte sagt was, Cache & TLB sind nicht gerade meine starke Seite...
Und von was für systemen reden wir? 80486 oder aktuelle PC Systeme?
wie gross ist der Speicherdurchsatz so eines systems, (10MB/s oder 3GB/s) und wie gross ist die Datenmenge die ich kopieren will.
( 1kb 100kb oder 10MB ) und was sind hinterher ein paar µs?
Ich würde das ehrlich gesagt unabhängig davon sehen, da Speicher bei jedem Desktop-PC der Flaschenhals ist, afaik.
kleinfieh macht auch mist sicher. nur ist es hinterher würlich spürbar?
Bei einem Microkernel sicherlich. Sind ja nicht nur ein oder zwei Programme, die alle Äonen mal IPC verwenden, sondern alle Treiber/Programme für sogut wie alles.