mikrocontroller.net

Forum: PC Hard- und Software 4GB und 32 Bit.


Autor: Jerry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann mir jemand erklären, ob und wie es möglich ist, auf gängigen 32 Bit 
Windows-Betriebs-Systemen volle 4 GB RAM zu nutzen?

Ich finde dazu widersprüchliche Angaben im Netz, einige sagen es geht, 
andere sagen es geht nicht, dann wiederum soll es gehen, wenn man VRAM 
abzieht(ist damit jetzt einen TurboCache-GraKa gemeint, oder betrifft 
das auch GraKas mit dediziertem Speicher?).

Anwendungen sollen angeblich nur 2 GB vertragen...dann wird von 
MemoryMapping, PAE und ähnlichem geredet, das einem schwindelig wird.

Kann hier jemand mal einfach und verständlich erklären, wie das mit den 
4GB und den 32 Bit unter WinXP Home, WinVista und Win7 funktioniert?

Vielen Dank,

Jerry

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit 32 Bit kannst du 4 GB adressieren.

Diese 4 GB sind jetzt allerdings nicht zum beliebigen Verpulvern,
sondern je nach Betriebssystem, HW etc. gehen noch ein paar Bereiche ab.

Das ist Code von Bibliotheken, Code des eigenene Programms,
Code des OS, eingeblendeter Grafikspeicher, IO-Adressen usw..

Wenn ein OS jetzt einfach mal dreist 2 GB für so etwas
reserviert (auch wenn es nur Fragmente davon wirklich nutzt),
kommst du für den restlichen Prozess halt nur noch auf
die verbliebenen 2 GB.

Etwas schlauer ist es, wenn sich das OS mit 1 GB begnügt, dann
bleiben dir 3.

Volle 4 GB wirst du aber nie haben.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: wozu brauchst du soviel Speicher?

Autor: Jens PICler (picler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jerry schrieb:
> Kann hier jemand mal einfach und verständlich erklären, wie das mit den
> 4GB und den 32 Bit unter WinXP Home, WinVista und Win7 funktioniert?

Gar nicht. Mit 32bit kann mann max. 4GB adressieren. Da aber sämtliche 
Hardware noch einen Anteil an dem Adressbereich haben will, allen voran 
die Grafikkarte, sind es nur ca. 3.75 GB oder so. Es soll zwar Lösungen 
geben, die auf die vollen 4GB zugreifen, bloss funktinieren habe ich 
sowas noch nicht sehen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 32-Bit-Versionen von Windows mit Ausnahme des "Advanced Server", den 
es zu Windows 2000-Zeiten gab, sind allesamt nicht in der Lage, PAE zu 
nutzen. Das ist eine Technik, mit der ein 32-Bit-Betriebssystem mehr als 
4 GiB Adressraum nutzen kann (sofern es die verwendete Hardware 
unterstützt, aber das tut sie schon ziemlich lange).

Wenn kein PAE verwendet wird, ist der Adressraum auf 4 GiB beschränkt - 
und die PC-Hardware-Architektur üblicher Motherboards zwickt von diesem 
Adressraum zwischen 0.5 und 1 GiB ab für PCI-/PCIe-Devices.

Andere Betriebssyteme wie Linux oder auch Mac OS X nutzen PAE und können 
so problemlos mit erheblich mehr als 4 GiB Speicher umgehen, ohne einen 
64-Bit-Kernel zu erzwingen, der wieder mit neuen Devicetreibern etc. 
einherginge. Zumindest unter OS X wird das Spiel so weit getrieben, daß 
trotz des 32-Bit-Kernels auch 64-Bit-Prozesse möglich sind (wenn auch 
mit aufgrund der komplexeren Speicherverwaltung geringfügig reduzierter 
Performance).

Autor: Mario K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jerry schrieb:
> auf gängigen 32 Bit
>
> Windows-Betriebs-Systemen volle 4 GB RAM zu nutzen

Ja mit den Servervarianten sind bei 32Bit bis zu 64GB RAM Möglich.

Quelle:
http://www.microsoft.com/germany/windowsserver2003...

Bei den nicht Server Varianten (XP, ...) hast du bei 32Bit nur eine 
Chance den vollen RAM zu benutzen, du richtest dir ein Gavotte Ramdrive 
ein, dies kann den vollen RAM ansprechen. Du kannst dann die Win 
Auslagerungsdatei dortin legen.
Der Speicher ist dann allerdings von Anwendungen heraus nicht direkt 
ansprechbar sondern verwaltet über Windows per Swapfile.

eine der Anleitungen:
http://dlh-clan.eu/board/viewtopic.php?f=19&t=23

viele Grüße
Mario

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jerry schrieb:
> Anwendungen sollen angeblich nur 2 GB vertragen...

Das ist richtig.
Man muß hier unterscheiden zwischen dem realen Speicher, den das 
Betriebssystem ansprechen kann und dem virtuellen Adressraum, den ein 
Programm zur Verfügung hat.
Bei Systemen, die PAE nicht können, ist der vom Betriebssystem 
addressierbare Bereich wie schon gesagt wurde auf 4 GB beschränkt.
Dann gibt es da aber noch den virtuellen Adressraum, den jeder Prozess 
hat.  Dieser ist bei den gängigen 32-Bit-Systemen auf 4 GB beschränkt 
(auch wenn technisch mehr ginge). Und hier wird dann auch ein Teil des 
Adressraums für Memory-Mapping reserviert. Bei Windows sind das 2 GB, 
und so bleiben für das Programm selbst auch nur noch 2 GB übrig.

Autor: Stuntman Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sollte Microsoft ein Interesse daran haben, die Hardware voll 
auszureizen? Das übernimmt dann die nachfolgende Version. (Bei Vista 
konnte man es gut sehen.)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber man sieht ja: Microsoft polarisiert und die Gerüchte halten sich 
hartnäckig.

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Microsoft beschränkt für 32 Bit Prozesse den virtuellen Adressraum auf 2 
GB. Dieses Verhalten kann mit setzen eines Flags im PE Header 
ausgeschaltet werden, so dass man auch als 32 Bit Prozess einen vollen 
virtuellen Adressraum von 4 GB bekommt. (0x20 in den PE Flags).

Warum 2 GB? Weil die meiste Pointer Arithmetik die so in den Programmen 
und Sprachen betrieben wird, nicht immer sicher mit den Typen umgeht. 
Sprich: es gibt genug Code der dummerweise einfach mal auf einen int 
castet um damit irgendwelche Adressen auszurechnen. Dadurch werden die 
Zahlen bei Adressen über dem 2 GB Raum negativ und die 
Pointer/Adressarithmetik im Programm geht in eine Richtung, die so nicht 
beabsichtigt war. Von daher diese Einschränkung auf 2^31 (ohne MSB, 
sprich Vorzeichen) anstatt 2^32.

Aber wie gesagt: mit Flag im PE Header kann man sich dem OS gegenüber 
ausweisen, dass man um diesen Fakt weiss und seine Adressberechnungen 
alle samt unsigned sind.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, Windows ist da ja auch nicht gerade ein Vorbild drin. Allein in 
den Argumenten der Fenstercallbacks ('WndProc') wird ja alles, was sich 
nicht wehrt, auf long gecastet :->

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das irrwitzige ist ja, dass Windows XP PAE aktiviert, es aber nur für 
das NX-Bit nutzt. -> Mehr als 4Gig Ram nur für 64Bit. Was soll das? Ich 
schätze mal das hat mehr strategische als technische Gründe.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja.

Du siehst ja, wenn du dir eine der Serverversionen zulegst, so traut man 
dir automatisch zu, beurteilen zu können, ob die Adreßarithmetik 
stimmt...

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Du siehst ja, wenn du dir eine der Serverversionen zulegst, so traut man
> dir automatisch zu, beurteilen zu können, ob die Adreßarithmetik
> stimmt...

Äpfel != Birnen

Auf den Server Betriebssystemvarianten bekommen 32 Bit Anwendungen auch 
nur einen virtuellen Adressraum von 2 GB zugesprochen. Mehr geht 
grundsätzlich bei einem 32 Bit PE nur, wenn das entsprechende Flag 
gesetzt ist.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas K. schrieb:

> ausgeschaltet werden, so dass man auch als 32 Bit Prozess einen vollen
> virtuellen Adressraum von 4 GB bekommt. (0x20 in den PE Flags).

Sind das nicht eher 3GB? Die ausserdem erfordern, dass das Windows im 
entsprechenden Modus gestartet wird (/3GB Switch in BOOT.INI)?

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3.2 GB, da die 800 MB für das Memory Mapping des PCI Busses ausgespart 
werden. Aber ja, der switch muss bei einem 32 Bit OS mit gesetzt sein, 
bei einem 64 Bit OS geht dies natürlich ohne.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas K. schrieb:

> 3.2 GB, da die 800 MB für das Memory Mapping des PCI Busses ausgespart
> werden.

Da verwechselst du nun physikalischen mit virtuellem Adressraum. Die 
/3GB Sache läuft im virtuellen Adressraum und kann bereits bei mehr als 
1GB physikalischen Speichers sinnvoll sein (O-Ton Microsoft, s.u.). Mit 
Grösse und Adressierbarkeit des physikalischen Speichers hat das nichts 
zu tun.

Zu /3GB und dem Adressraum: 
http://www.microsoft.com/whdc/system/platform/serv...

Zu /3GB und Exchange-Server: 
http://support.microsoft.com/kb/823440/en-us

Autor: Thomas K. (muetze1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Da verwechselst du nun physikalischen mit virtuellem Adressraum. Die
> /3GB Sache läuft im virtuellen Adressraum und kann bereits bei mehr als
> 1GB physikalischen Speichers sinnvoll sein (O-Ton Microsoft, s.u.). Mit
> Grösse und Adressierbarkeit des physikalischen Speichers hat das nichts
> zu tun.

Der physikalische Speicher wird eingeschränkt um das MMIO zu 
gewährleisten. Diese muss innerhalb des 32 Bit Adressraumes liegen (u.a. 
wegen PCI Registern & DMA Controller, etc) - also innerhalb der 4 GB. 
Dieser Speicherraum (der bis zu 800 MB betragen kann) ist "verloren" und 
der dahinter liegende Hardwarespeicher kann auch durch Virtualisierung 
der Adressräume nicht angesprochen werden. Von daher kommt diese 
Beschränkung auf die maximalen 3,2 GB im virtuellen Adreßraum der 32 Bit 
Prozesse.

Es basiert zwar auf Einschränkungen des physikalischen Adressraumes, 
schlägt sich aber in Folge durch bis in den virtuellen Adressraum 
(zumindest in einem 32 Bit Windows Host OS).

http://support.microsoft.com/kb/929605/en-us

http://blogs.msdn.com/b/hiltonl/archive/2007/04/13...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas K. schrieb:

> Der physikalische Speicher wird eingeschränkt um das MMIO zu
> gewährleisten. Diese muss innerhalb des 32 Bit Adressraumes liegen (u.a.
> wegen PCI Registern & DMA Controller, etc) - also innerhalb der 4 GB.

Yep. Hat aber mit der beschriebenen Thematik nichts zu tun.

> Dieser Speicherraum (der bis zu 800 MB betragen kann) ist "verloren" und
> der dahinter liegende Hardwarespeicher kann auch durch Virtualisierung
> der Adressräume nicht angesprochen werden.

Systeme mit mehr als 3GB RAM können ohne PAE nur 3GB RAM verwalten 
(PSE36 mal aussen vor gelassen), weil der Rest entweder nicht sichtbar 
und damit verloren ist, oder vom Memory Controller jenseits der 4GB 
Grenze gemappt wird. In letzterem Fall kann es prinzipiell von einem PAE 
Kernel gesehen und genutzt werden. Wobei nicht jeder PAE-Kernel dies 
auch tut, aber das ist dann eher Politik als Technik.

> Von daher kommt diese
> Beschränkung auf die maximalen 3,2 GB im virtuellen Adreßraum der 32 Bit
> Prozesse.

Nein. Die Aufteilung des virtuellen Adressraum in 2GB/3GB (3,0GiB, nicht 
3,2) Prozessadressraum und 2GB/1GB Kerneladressraum ist ausschliesslich 
eine strategische Entscheidung der Betriebssystementwickler und hat 
überhaupt nichts mit dem physikalischen Adressraum zu tun. Der virtuelle 
Adressraum eines Prozesses ist in keinster Weise von den Eigenschaften 
der physikalischen Adressierung betroffen.

Es wäre prinzipiell auch möglich, diese Adressräume zu trennen, so dass 
dem Prozess volle 4GB Adressraum (nicht RAM!) zur Verfügung stehen, nur 
wird dann der Umgang mit den Adressen umständlicher (so geschehen 
naheliegenderweise in den ursprünglichen Unixen auf 16-Bit PDP-11). Dies 
hat Microsoft jedoch in Windows nicht gemacht, sondern den 
Kerneladressraum in jeden Prozess eingeblendet. Ist einfacher.

NB: In einem der verlinkten Artikel steht, dass der 3GB-Switch nur bis 
16GB RAM funktioniert, weil darüber 1GB für den Kerneladressraum zu 
klein sind.

Diese 2/2 oder 3/1 Adressaufteilung ist auch unabhängig davon, ob das 
Windows mit den alten 32-Bit Descriptoren arbeitet, oder mit den neuen 
64-Bit Descriptoren die unter dem Kürzel PAE laufen. Mit PAE lassen sich 
technisch mehr als 4GB physikalischen Adressraums verwalten. Wieviel 
MS davon dem Anwender zugesteht ist mittlerweile nur noch eine 
Lizenzfrage.

Aktuelle Windows-Kernels (alle ab XP mit der "data execution 
prevention") arbeiten durchweg mit PAE, auch dann wenn der Anwender per 
Lizenz meist auf ca. 3GB RAM beschränkt wird. Davor konnte man auch in 
XP in BOOT.INI mit /PAE einen PAE-Kernel an Stelle des üblichen 
nonPAE-Kernels laden, offiziell unsupported. Mehr nutzbares RAM ergab 
das nicht (Lizenzpolitik).

Der /3GB-Switch setzt daher auch nicht voraus, dass soviel RAM in der 
Kiste steckt, der kann bereits bei 1,5GB RAM sinnvoll sein.

Andererseits lässt sich mit dem 32-Bit Kernel durch PAE auch mehr als 
3-4GB Speicher verwalten, ohne dass dies irgendwas an der 2/2 oder 3/1 
Adressraumteilung ändert. Kein 32-Bit Prozess kann mehr als 3GB 
Adressraum erhalten, aber in Summe können z.B. 10GB RAM verwendet 
werden, wenn genug Prozesse zusammen kommen und die verwendete 
Windows-Lizenz dies zulässt.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jerry schrieb:

> kann mir jemand erklären, ob und wie es möglich ist, auf gängigen 32 Bit
> Windows-Betriebs-Systemen volle 4 GB RAM zu nutzen?

Nein. Je nach Alter und verwendeter Hardware ist irgendwo zwischen 
3,0GiB und 3,75GiB Schluss. Neue Systeme neigen dazu, jedes RAM oberhalb 
von 3,0GiB jenseits der 4,0GiB-Grenze zu mappen, wo es zwar schön 
aussieht und im BIOS auch brav mitzählt, aber für 32-Bit 
Client-Betriebssysteme faktisch nicht verwendbar ist. Alte Systeme in 
Zeiten sparsamerer Grafikkarten waren mitunter freundlicher und haben 
bis zu 3,75GiB sichtbar gemacht, womit aber der Rest zwischen den 
3,75GiB und der 4GiB-Grenze endgültig verloren war. Der Umfang an 
nutzbarem RAM ist also mit der Zeit gesunken!

Unabhängig davon kannst du innerhalb eines normalen Prozesses nicht mehr 
als 2GB nutzen (3GB mit dem erwähnten /3GB-Switch). In der Praxis 
bedeutet es aufgrund von ineffizienter Adressverwaltung und diversen 
Löchern und Lücken im virtuellen Adressraum, dass ein Prozess oft nicht 
einmal mehr als gut 1GB RAM wirklich selbst nutzen kann. Der Rest steht 
dann nur anderen Prozessen und dem Disk-Cache zur Verfügung.

Wer also einen 32-Bit Windows-Client mit mehr als 3GB RAM ausstattet, 
der wettet entweder auf die Zukunft mit einem 64-Bit OS, oder hat Geld 
verschwendet.

Autor: oink (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Wer also einen 32-Bit Windows-Client mit mehr als 3GB RAM ausstattet,
> der wettet entweder auf die Zukunft mit einem 64-Bit OS, oder hat Geld
> verschwendet.

Die meisten Chipsätze ziehen durchaus Nutzen aus 2 vorhanden
RAM-Bänken. Und mit Remapping gehen auch nur 0.25 GB ins Nirwana.

Wo ist da die Verschwendung?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oink schrieb:

> Die meisten Chipsätze ziehen durchaus Nutzen aus 2 vorhanden
> RAM-Bänken. Und mit Remapping gehen auch nur 0.25 GB ins Nirwana.

Kenne ich anders. Intel Core2 und Core i5: 4GB drin, 4GB hochgezählt, 
3GB verwendet. Windows XP 32-Bit, wie auch Linux 32-Bit mit 
nonPAE-Kernel.

Die 0,25GB kenne ich nur aus alten Zeiten mit PCI-Grafikkarten. Später 
wurde der von PCI/AGP/PCI-Express plus GART/IOMMU beanspruchte 
Adressraum wesentlich grösser. Allein eine 0,5GB Grafikkarte frisst ja 
schon mindestens ebendiese 0,5GB weg.

> Wo ist da die Verschwendung?

Das restliche RAM landet jenseits der 4GB Grenze und wird von 32-Bit 
Windows Clients nicht verwendet. Es soll wohl irgendwelche RAM-Disk 
Software geben, die damit was anfangen kann.

Anders sieht es bei 64-Bit Windows aus. Aber darum geht es hier nicht.

Autor: abc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber darum geht es hier nicht.

Wäre dennoch interessant mal zu erfahren: Kann im 64-Bit Win XP, Vista 
bzw. aktueller "7" der komplette RAM von Anwendungen (abzüglich wirklich 
für's System verwendeten Speicher) genutzt werden oder nicht?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.