Lowlevel
OffZone => Offtopic => Thema gestartet von: YoshiX650 am 12. May 2014, 13:33
-
Hallo,
ich möchte den RAM auslesen, aber max. nur 4GB.
Wie macht man das am besten? Bei Google finde ich nur sowas mit der WinAPI
LG
-
Warum die Einschränkung auf 4 GB? Was hast du vor?
-
Weil 32-Bit doch nur bis 4GB RAM unterstützt und erst ab 64-Bit mehr als 4GB möglich sind...
-
Um die Frage direkt zu beantworten: In C könnte man den gesamten Adressraum wie folgt auslesen:
unsigned char *p = (unsigned char *)0; // Bei Adresse 0 anfangen.
do {
unsigned char b = *p; // Byte Auslesen
// Hier byte verarbeiten
p++; // Zur nächsten Adresse gehen
} while (p != 0); // Wenn wir wieder am Anfang sind, sind wir fertig.
Falls dir diese Antwort komisch vorkommt, liegt das daran, dass ich immer noch nicht weiß, was du vorhast.
-
Ich möchte mit der Speicherverwaltung anfangen und müsste deshalb wissen wie viel RAM am start ist.
-
Das wirst du auf (modernen x86-Systemen) durch einfaches Auslesen (Probing) des physischen Adressraums nicht herausbekommen. Da befindet sich nämlich nicht nur der RAM, sondern auch andere Hardwaregeräte sind direkt darüber ansprechbar. Außerdem hat der Speicher Lücken. Im besten Fall kriegst durch so eine Methode falsche Angaben, im schlimmsten Fall verstellst du etwas an der Grafikkarte.
Die Informationen über den Arbeitsspeicher stellt das BIOS bereit. Wenn du Multiboot nutzt, bekommst du diese Information ganz einfach heraus. Dazu steht auch einiges in unserem Wiki: http://www.lowlevel.eu/wiki/Teil_7_-_Physische_Speicherverwaltung
-
Weil 32-Bit doch nur bis 4GB RAM unterstützt und erst ab 64-Bit mehr als 4GB möglich sind...
PAE ermöglicht es auch auf 32-Bit-Prozessoren, mehr als 4 GB RAM zu benutzen. Die Multiboot-Informationen (oder das BIOS) können daher auch mehr als 4 GB RAM mitteilen. Ein 32-Bit-Windows mit Standardeinstellungen benutzt PAE allerdings nicht.