' schrieb:Ok, dann wird der Fehler wohl bei mir liegen. Ich dachte das die Option PHYSICAL ADDRESS die Richtige wäre. Es gab aber noch 3 andere Möglichkeiten. Diese habe ich aber nicht im Kopf und muss sie nachlesen. Auf jeden Fall gab es eine HOST_ADDRESS. Allerdings ist mir der Begriff HOST in diesem Zusammenhang nicht ganz klar. Leider kann ich erst am Montag die genaue PArameterbeschreibung einsehen. Aber wenn du sagst das es PHYSICAL ADDRESS schonmal nicht sein kann wird es so sein
Kannst du mir evt. erklären wie das Aufgebaut ist? Du sagtest ja etwas von Ring3 Eben. Oder hast du einen guten Link? Mich interessiert diese ganze Geschichte mit Speicherallozierung usw.
Also x86 Prozessoren haben sogenannte Rings. Alles was hier folgt ist aus meiner Erinnerung und schon einige Zeit alt und könnte deswegen in Details nicht ganz richtig sein, aber im Grossen und Ganzen sollte es die Wirklichkeit beschreiben.
Die x86 CPU hat 4 Ringe wenn ich mich nicht irre. Ein Betriebssystem kann nun bestimmte Operationen, Speicherzugriffe etc. an verschiedene Rings zuweisen. Ring 1 ist der meist privilegierte und Ring 4 der am Geringsten. Windows verwendet nur Ring 1 für den Kernel und Ring 3 für den User Space.
Speicher wird durch eine Speicherverwaltungseinheit verwaltet. Das ist ein Hardwareteil dass für jeden Prozess einen virtuellen (in Windows 32Bit auch linearen) Speicherbereich bereitstellt und diese an verschiedenen Orten im physikalischen Speicher mappt. Auch verwaltet sie das Paging des Speichers. Das heisst länger nicht gebrauchte physikalische Speicherbereiche werden mittels Interrupt zum OS ausgelagert um Platz zu machen für andere Applikationen. Wenn jetzt eine Applikation auf eine lineare Adresse zugreifen will die ausgelagert wurde merkt das die Speicherverwaltungseinheit und macht einen Interrupt zum OS um den entsprechenden Bereich wieder in den physikalischen Speicher zu laden. Obwhol ein Prozess einen linearen Speicherbereich sieht kann der entsprechenden Bereich im physikalischen Speicher wild durcheinander liegen da das OS mit sogenannten Pages arbeitet (ich glaube 4K gross unter Windows aber kann auch grösser sein) die immer als Ganzes verwaltet werden.
Zugriff auf die entsprechenden Selector Register um die lineare Adresse innerhalb eines Prozesses auf die physikalische Adresse zu übersetzen ist auch nur im Kernel möglich, wie auch die Ausführung bestimmter Opcodes, so auch beispielsweise inp und outp um auf IO Port Adressen zuzugreifen (ausser man verändert die IO Permission Map so dass inp und outp auf die entsprechenden Adressen keine Exception erzeugen wenn innerhalb des User Spaces ausgeführt). Dies nur mal eine Information am Rande ^_^
Ob PHYSICAL_ADDRESS in Deinem API wirklich phyikalische Speicheradressen bedeutet, kann ich Dir nicht sagen, Es kann sein dass der Programmierer da irgendwie etwas anderes meinte. An sich macht es nicht so viel Sinn um auf einem User Space API die Möglichkeit zu bieten eine wirkliche physikalische Adresse anzugeben.
Informationen zur Speicherverwaltung mit x86 CPUs findest Du in den entsprechenden Hardwarereferenzmanuals dieser Prozessoren Achtung das ist schwere Materie sowohl physikalisch schwer (die entsprechenden Manuals können Dein Büchergestell ziemlich belasten) als auch theoretisch.
Rolf Kalbermatter