Wieso nur 3,5 GB Arbeitsspeicher erkannt von winXP

Habe gestern 4 GB DDR2 Arbeitspeicher in meinen PC (vorher 1 GB Arbeitsspeicher)eingesteckt, da ich ein Programm haben, das wegen eines speziellen Algorithmus sehr viel Speicher erfordert.

Das Problem ist, ich sehe unter WinXP nur 3,5 GB angezeigt, obwohl im BIOS steht, dass 4 GB installiert worden sind.

nach heutigen Recherchen habe ich einige Hinweise bekommen. Und zwar dieses hat nichts zu tun mit Hardwarefehler oder ähnliches, was ich befürchtete. Die fehlenden 500 MB werden für sogenannte PCI-Express und andere Hardwarekomponente reserviert. Was ich nicht verstehe ist, wieso gabe es keine Speicherreservierung, als der PC nur 1 GB Speicher hatte Da sah ich das ganze gezeigt unter WinXP.

Vielen Dank für eure Antworten!

Moien

Die fehlenden 500 MB werden
für sogenannte PCI-Express

PCI, nicht PCIe. PCI war zuerst da und hat den Speicherbereich vorgegeben, PCIe ist da eher zufällig reingeruscht.

und andere Hardwarekomponente
reserviert.

Die machen aber wenig aus, nur einige KB für ISA, ein bisschen was für DMA, lpt und RS232, Keyboard,… insgesamt nicht so wild.

Was ich nicht verstehe ist, wieso gabe es keine
Speicherreservierung, als der PC nur 1 GB Speicher hatte Da
sah ich das ganze gezeigt unter WinXP.

(Grob, ohne den Kleinkram von ISA & Co auf basis der Pentium-CPUs): Der Speicher ist durchnummeriert, von 0 bis 2^32. Die meisten Addressen zeigen auf den normalen RAM. Bestimmte Adressen haben aber eine andere Bedeutung. So liegen z.B. zwischen 3 und 3.5 GB alle möglichen PCI-Geräte. D.h. ein Zugriff auf den Speicher an der Stelle 3.2 GB geht gar nicht an den Speicherkontroller, sondern direkt zum PCI-Bus.

Das ist der Nach und Vorteil vom x86-Systemen: man braucht nur eine Methode/Instruction um auf Speicher und alle angeschlossenen Geräte zuzugreifen. Dafür opfert man Bereiche aus den RAM-adressen. Windows zählt beim Start durch, zieht dann die Adressen mit vorbestimmter Bedeutung ab.

Wenn die CPU und das Motherboard gut sind wird der RAM umnummeriert. D.h. die Adressen auf die die CPU gar nicht zugreifen kann werden verlegt. Das erzeugt aber ein neues Problem: CPUs der 32Bit-Generation können nicht oder nur sehr schwer mehr als 4GB ansprechen.

Lösungen sind das umsteigen auf 64Bit oder das benutzen der Intel-erweiterungen für Xenons. Damit kann windows aber nicht so gut umgehen …

Bleib bei 3GB. Das 4’te GB ist nur halb benutzbar.

cu

Was ich nicht verstehe ist, wieso gabe es keine
Speicherreservierung, als der PC nur 1 GB Speicher hatte Da
sah ich das ganze gezeigt unter WinXP.

(Grob, ohne den Kleinkram von ISA & Co auf basis der
Pentium-CPUs): Der Speicher ist durchnummeriert, von 0 bis
2^32. Die meisten Addressen zeigen auf den normalen RAM.
Bestimmte Adressen haben aber eine andere Bedeutung. So liegen
z.B. zwischen 3 und 3.5 GB alle möglichen PCI-Geräte. D.h. ein
Zugriff auf den Speicher an der Stelle 3.2 GB geht gar nicht
an den Speicherkontroller, sondern direkt zum PCI-Bus.

Wenn ich aber nur 1 GB Arbeitsspeicher habe, ist der Adressbereich zwische 3 buns 3.5 GB gar nicht verfügbar.
Oder?

Moien

Wenn ich aber nur 1 GB Arbeitsspeicher habe, ist der
Adressbereich zwische 3 buns 3.5 GB gar nicht verfügbar.
Oder?

Doch. Der PCI-Bus übernimmt in dem Bereich die Rolle des Speicher. Der Bus braucht keinen realen RAM bei 3-3.5GB um zu funktionieren.

Um’s klarzustellen: wir reden über den HW-Adressbereich, also den Bereich den die CPU und die interna von windows benutzen können.

Es gibt auch noch den Adressbereich der Programme. Er wird von windows simuliert um mehrere Programme gleichzeitig laufen lassen zu können. Er ist unabhängig vom realen Adressbereich. Der enthält auch kein Loch bei 3-3.5GB (Je nach windows geht er von 0 bis 2GB oder von 0 bis 64GB).

cu

Moien

Wenn ich aber nur 1 GB Arbeitsspeicher habe, ist der
Adressbereich zwische 3 buns 3.5 GB gar nicht verfügbar.
Oder?

Doch. Der PCI-Bus übernimmt in dem Bereich die Rolle des
Speicher. Der Bus braucht keinen realen RAM bei 3-3.5GB um zu
funktionieren.

Um’s klarzustellen: wir reden über den HW-Adressbereich, also
den Bereich den die CPU und die interna von windows benutzen
können.

habe versucht mit meinen all Kenntnissen dies mir vorzustellen. Kam zu diesem Verständnis:
Die 32-Bit CPU kann 2^32 externe Adressen verwalten: also von Adresse 00000000 bis FFFFFFFF.
Mit den Adressen 00000000 bis DFFFFFFF (dieses entspricht 3,5GB, wenn ich nict vertan habe) kann sie die physikalischen Speicher (RAM) ansprechen, wenn es so viel gibt.
Mit Adressen E0000000 bis FFFFFFFF (das sind 512 MB) spricht die CPU dann die von dir genannten PCI-Geräte u. s. w. an.
Wenn eine CPU-Instruction sich auf eine Adresse zwischen
E0000000 bis FFFFFFFF bezieht, wird sich dann beispielsweise ein PCI-Gerät darauf reagieren. Sonst wenn eine Instruction mit Adresse in 00000000 bis DFFFFFFF zu tun hat, wird eine physikalische Speicherzelle angesprochen.

Moien

habe versucht mit meinen all Kenntnissen dies mir
vorzustellen. Kam zu diesem Verständnis:
Die 32-Bit CPU kann 2^32 externe Adressen verwalten: also von
Adresse 00000000 bis FFFFFFFF.

jupp.

Mit den Adressen 00000000 bis DFFFFFFF (dieses entspricht
3,5GB, wenn ich nict vertan habe) kann sie die physikalischen
Speicher (RAM) ansprechen, wenn es so viel gibt.

Nein, nicht ganz. Die CPU sieht den RAM von 0B bis 3GB und von 3.5 GB bis 4GB. Das ist ein Loch in der Mitte. (Von 640KB bis 1MB liegt auch noch Zeug … )

Mit Adressen E0000000 bis FFFFFFFF (das sind 512 MB) spricht
die CPU dann die von dir genannten PCI-Geräte u. s. w. an.

jupp.

Wenn eine CPU-Instruction sich auf eine Adresse zwischen
E0000000 bis FFFFFFFF bezieht, wird sich dann beispielsweise
ein PCI-Gerät darauf reagieren.

Falls vorhanden. Der Befehl geht zumindest an den PCI-Bus.

Sonst wenn eine Instruction
mit Adresse in 00000000 bis DFFFFFFF zu tun hat, wird eine
physikalische Speicherzelle angesprochen.

jupp.

Siehst du, war doch gar nicht so schwer.

cu