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
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.
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.
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).
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/editionen/default.mspx 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
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.
Warum sollte Microsoft ein Interesse daran haben, die Hardware voll auszureizen? Das übernimmt dann die nachfolgende Version. (Bei Vista konnte man es gut sehen.)
Aber man sieht ja: Microsoft polarisiert und die Gerüchte halten sich hartnäckig.
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.
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 :->
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.
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...
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.
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)?
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.
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/server/pae/paemem.mspx Zu /3GB und Exchange-Server: http://support.microsoft.com/kb/823440/en-us
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/the-3gb-not-4gb-ram-problem.aspx
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.
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.
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?
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.
> 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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.