locked
32 Bit/64 Bit WoW64 32 Bit Emulation RRS feed

  • Frage

  • Hallo an Alle,

    mit der Frage, ob man ein 64 Bit Betriebssystem oder ein 32 Bit Betriebssystem wählt, beschäftigen sich viele Artikel, ganze Zeitschriften und Workshops. Alle diese Artikel haben gemein, dass sie betonen, dass 64 Bit Betriebssysteme mehr Speicher nutzen können als 32 Bitter. Dazu kommt, dass Windows 7 64 Bit keine 16 Bit-Applikationen mehr aus 3.11 Zeiten unterstützt. Microsoft scheint also immer nur zwei Architekturen auf einmal zu unterstützen, was ich grundsätzlich gut finde.

    Was mir allerdings abgeht ist eine entscheidende Frage nach 32 Bit Applikationen. Dass 64 Bit OS unterstützt mehr als 3,5 GB RAM, das ist klar. Aber doch nur mit 64 Bit Applikationen, oder? Und hier stellt sich mir die Frage, die ich bisher noch nicht beantwortet bekommen habe. Wie arbeitet hier das Speichermanagement von Windows 7? Ich mache das mal plakativer, damit klar wird, was ich meine. Gehen wir davon aus, ich habe ein 64 Bit Windows 7 auf einer Maschine mit 32 GB Hauptspeicher. Ich starte nun drei voneinander unabhängige 32 Bit Programme, die jeweils 2 GB Speicher brauchen.

    Wie verhält sich WIndows 7 nun?

    1. Genauso wie ein 32 Bit Windows. DIe 6 GB Speicher werden auf die unteren 3,5 GB aufgeteilt, der Rest landet im virtuellen Speicher.
    2. wie a) nur ist der Start des dritten Programmes nicht möglich, weil der Speicher voll ist-das 32 Bit Gesamtsystem sieht nur 3,5 GB.
    3. der interne Scheduler kann 32 Bit Programme frei im Speicher verschieben, so dass ein 32 Bit Programm auch oberhalb der 4 GB Grenze lauffähig ist, obwohl die Software selbst nur 3,5 GB davon sieht. Die drei Programme können also gleichzeitig im Speicher laufen.

    Das eine 32 Bit Software nur 3,5 GB sieht ist mir klar und dass sie auch nur 4 GB verwalten kann, ist mir auch klar. Aber ob wie genannt drei Programme die insgesamt mehr als 4 GB verbrauchen gleichzeitig im Speicher liegen können ist mir unklar. Ich frage, weil wir nur 32 Bit Applikationen haben und ich mich frage, ob der Einsatz eines 64 Bit Windows überhaupt einen Effekt hat oder ob sich unser Management da etwas vormacht.

    Vielen Dank,

    MSalk

    Dienstag, 21. Juni 2011 09:56

Antworten

  • >    3. der interne Scheduler kann 32 Bit Programme frei im Speicher
    >       verschieben, so dass ein 32 Bit Programm auch oberhalb der 4 GB
     
    Nicht ganz, aber beinah. Jede 32 Bit Anwendung sieht ihren eigenen 4 GB
    großen Adressraum, der "irgendwo" gemappt wird.
     
     
    mfg Martin
     

    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    • Als Antwort markiert MSalk Freitag, 24. Juni 2011 08:13
    Dienstag, 21. Juni 2011 10:32
  • Du musst dich hier mit dem Thema "Virtueller Speicher" und "Physischer Speicher" auseinandersetzen. Beide haben direkt nichts miteinander zu tun. Anwendungen die du startest benutzen nur Virtuellen Speicher und wissen nichts von deinen RAM. Die Aufgabe tasächlichen Physischen Speicher zuzuteilen wird dem Memory Manager von Windows übertragen und dieser kann im Falle von 32bit Windows ohne PAE bis zu 4GB physischen Speicher benutzen und mit PAE (bei bisherigen Implementationen) bis zu 64GB physischen Speicher. Dies hat aber nichts damit zu tun wieviel Speicher eine Anwendung benutzen kann. Da diese immer nur mit virtuellem Speicher arbeiten, und du diesen wirklich komplett unabhängig von physischem betrachten musst, gelten hier andere Regeln.

    In der 32bit Welt können maximal 2 hoch 32 verschiedene Zustände dargestellt werden. Das sind 4294967296 verschiedene Möglichkeiten. Übertragen auf Speicheradressen ergibt das 4GB Speicher. Somit kann eine Anwendung maximal 4GB Speicher adressieren (nochmals zur Erinnerung: ich rede hier von virtuellem Speicher, nicht von physischem). Von diesem 4GB großen Adressbereich wird in 32bit Windows eine Aufteilung für User-Mode und Kernel-Mode getroffen. Diese ist normalerwase 2GB/2GB. Das bedeutet dass eine 32bit Anwendung immer 2GB User-Mode-Speicher zur verfügung hat, egal wieviel RAM du hast.

    Jetzt kommen wir zum Thema 64bit Windows. Hier ist der Adressbereich 2 hoch 64. Dies sind 18446744073709551616 verschiedene Adressen oder 16EB an Speicher. Mit diesem riesigen Adressbereich ist es möglich dass Anwendungen so viel virtuellen Speicher erhalten wie sie benötigen. Es wird noch lange dauern bis wir diesen Adressbereich erschöpft haben. Bedenke vor allem dass jede Anwendung diesen Adressbereich erhält. Eine 64bit Anwendung, und natürlich auch das Betriebssystem selbst kann mit diesem Adressbereich umgehen und diesen auch nutzen.

    Wie sieht es nun mit 32bit Anwendungen auf einem 64bit Betriebssystem aus? Nun ja, da die Anwendung nach wie vor selbst nur mit 32bit Adressen arbeiten kann hat sie nach wie vor das 4GB Limit. Allerdings muss sich das Betriebssystem nun nichts mehr davon abzweigen (2GB/2GB) sondern kann der Anwendung die vollen 4GB zur verfügung stellen. Da viele Anwendungen aus der 32bit Welt aber mit dem glauben entwickelt wurden nur 2GB nutzen zu können kann dies Probleme verursachen. Aus diesem Grund bekommt auch eine 32bit Anwendung auf einem 64bit Windows nur 2GB an User-Mode Speicher zur verfügung gestellt. Es gibt allerdings die Möglichkeit dass eine EXE-Datei mit dem Attribut LARGE_ADDRESS_AWARE versehen wird (dies macht normalerweise der Hersteller des Programms, könnte aber auch von dir selbst vorgenommen werden). Wenn dies der Fall ist sagt dies Windows dass die Anwendung auch mit mehr als 2GB umgehen kann und gibt ihm die vollen 4GB. Mehr geht aber auf keinen Fall da die 32bit Anwendung eben nur mit 2 hoch 32 Adressen arbeiten kann.

    Auf deine Frage wie sich das auswirkt wenn man meherere Anwendungen verwendet: Das braucht dich eigentlich gar nicht zu kümmern, denn dafür ist der Memory Manager zuständig. Jede Anwendung die du parallel laufen hast erhält den vollen 2GB, 4GB oder größeren Adressbereich, abhängig davon ob es 32bit, 32bit LAE oder 64bit ist. Welche Daten dann die Anwendung wirklich in den Speicher lädt, und welche davon dann wirklich auch in den RAM geladen werden ist ein sehr komplexes Thema. Wenn du dazu mehr lernen willst empfehle ich dir folgende Videos:

    http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WCL405

    http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WCL406

    Im Endeffekt ist für dich folgendes wichtig: Windows 64bit kann 32bit Programme ohne Nachteile ausführen. Sie erhalten mindestens denselben Speicher wie in auf einem 32bit Windows, und im besten Fall mehr. Die Speicherverwaltung von Windows ist mittlerweile sehr ausgefeilt und extrem gut und solange du nicht mit irgendwelchen blöden Tuning-Tools oder Registry-Tweaks versuchst diese zu verdrehen funktioniert sie tadellos und holt normalerweise das beste aus deinem System raus. Der Grund-Speicherverbrauch von Windows selbst ist bei 64bit etwas höher da die 64bit Komponenten ein wenig mehr Speicher brauchen. Aber der tatsächliche RAM-Mehrverbrauch von Windows selbst spielt sich im Bereich von ein paar MB ab. Zwei frisch installierte virtuelle Maschinen mit Windows 7 32bit und Windows 7 64bit haben hier im Test einen unterschied von 90MB RAM. Das sollte verschmerzbar sein. ;)


    Anm.: Stell dir mal selbst die Frage umgekehrt: Warum solltest du kein 64bit Betriebssystem einsetzen wenn du eine 64bit CPU hast? Der einzige mir bekannte Grund dafür wäre wenn du einen Kernel-Mode Treiber unbedingt benötigst der in 64bit nicht verfügbar ist. Alles was sich im User-Mode abspielt funktioniert auf 64bit genauso oder sogar besser und deine CPU wird endlich voll ausgenutzt. Wenn du eine 64bit CPU im 32bit Modus benutzt liegt einiges an Power brach. Im 32bit Modus hat deine CPU 8 General Purpose Register und 8 XMM Register. Im 64bit Modus hat sie doppelt so viele Register und jede der Register ist noch dazu doppelt so groß. Also quäl deine arme x64 CPU nicht länger und lass sie frei arbeiten! ;)
    • Als Antwort markiert MSalk Freitag, 24. Juni 2011 08:12
    Donnerstag, 23. Juni 2011 20:09

Alle Antworten

  • >    3. der interne Scheduler kann 32 Bit Programme frei im Speicher
    >       verschieben, so dass ein 32 Bit Programm auch oberhalb der 4 GB
     
    Nicht ganz, aber beinah. Jede 32 Bit Anwendung sieht ihren eigenen 4 GB
    großen Adressraum, der "irgendwo" gemappt wird.
     
     
    mfg Martin
     

    Kein MVP, kein MCSE. Nur ein wenig Erfahrung.
    • Als Antwort markiert MSalk Freitag, 24. Juni 2011 08:13
    Dienstag, 21. Juni 2011 10:32
  • MSalk:

    Das eine 32 Bit Software nur 3,5 GB sieht ist mir klar und dass sie auch nur 4 GB verwalten kann, ist mir auch klar.

    dann muss ich dir leider sagen, dass dir etwas Falsches klar ist. In meinem Rechner (Win 7 32 Ultimate) sind
    4 GB RAM verbaut und Win 7 nutzt nicht nur 3,5 GB, sondern die vollen 4 GB. Es würde auch 64 GB nutzen, wenn
    ich sie denn einbauen würde.
    Siehe hier ein Screenshot: http://www.bilder-hochladen.net/files/6x4i-l.jpg
    Und zu den technischen Hintergründen:
    http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm

    Dienstag, 21. Juni 2011 15:26
  • Hallo,

    haben die Tipps weitergeholfen?

    Gruss,
    Raul

    Donnerstag, 23. Juni 2011 14:39
  • Du musst dich hier mit dem Thema "Virtueller Speicher" und "Physischer Speicher" auseinandersetzen. Beide haben direkt nichts miteinander zu tun. Anwendungen die du startest benutzen nur Virtuellen Speicher und wissen nichts von deinen RAM. Die Aufgabe tasächlichen Physischen Speicher zuzuteilen wird dem Memory Manager von Windows übertragen und dieser kann im Falle von 32bit Windows ohne PAE bis zu 4GB physischen Speicher benutzen und mit PAE (bei bisherigen Implementationen) bis zu 64GB physischen Speicher. Dies hat aber nichts damit zu tun wieviel Speicher eine Anwendung benutzen kann. Da diese immer nur mit virtuellem Speicher arbeiten, und du diesen wirklich komplett unabhängig von physischem betrachten musst, gelten hier andere Regeln.

    In der 32bit Welt können maximal 2 hoch 32 verschiedene Zustände dargestellt werden. Das sind 4294967296 verschiedene Möglichkeiten. Übertragen auf Speicheradressen ergibt das 4GB Speicher. Somit kann eine Anwendung maximal 4GB Speicher adressieren (nochmals zur Erinnerung: ich rede hier von virtuellem Speicher, nicht von physischem). Von diesem 4GB großen Adressbereich wird in 32bit Windows eine Aufteilung für User-Mode und Kernel-Mode getroffen. Diese ist normalerwase 2GB/2GB. Das bedeutet dass eine 32bit Anwendung immer 2GB User-Mode-Speicher zur verfügung hat, egal wieviel RAM du hast.

    Jetzt kommen wir zum Thema 64bit Windows. Hier ist der Adressbereich 2 hoch 64. Dies sind 18446744073709551616 verschiedene Adressen oder 16EB an Speicher. Mit diesem riesigen Adressbereich ist es möglich dass Anwendungen so viel virtuellen Speicher erhalten wie sie benötigen. Es wird noch lange dauern bis wir diesen Adressbereich erschöpft haben. Bedenke vor allem dass jede Anwendung diesen Adressbereich erhält. Eine 64bit Anwendung, und natürlich auch das Betriebssystem selbst kann mit diesem Adressbereich umgehen und diesen auch nutzen.

    Wie sieht es nun mit 32bit Anwendungen auf einem 64bit Betriebssystem aus? Nun ja, da die Anwendung nach wie vor selbst nur mit 32bit Adressen arbeiten kann hat sie nach wie vor das 4GB Limit. Allerdings muss sich das Betriebssystem nun nichts mehr davon abzweigen (2GB/2GB) sondern kann der Anwendung die vollen 4GB zur verfügung stellen. Da viele Anwendungen aus der 32bit Welt aber mit dem glauben entwickelt wurden nur 2GB nutzen zu können kann dies Probleme verursachen. Aus diesem Grund bekommt auch eine 32bit Anwendung auf einem 64bit Windows nur 2GB an User-Mode Speicher zur verfügung gestellt. Es gibt allerdings die Möglichkeit dass eine EXE-Datei mit dem Attribut LARGE_ADDRESS_AWARE versehen wird (dies macht normalerweise der Hersteller des Programms, könnte aber auch von dir selbst vorgenommen werden). Wenn dies der Fall ist sagt dies Windows dass die Anwendung auch mit mehr als 2GB umgehen kann und gibt ihm die vollen 4GB. Mehr geht aber auf keinen Fall da die 32bit Anwendung eben nur mit 2 hoch 32 Adressen arbeiten kann.

    Auf deine Frage wie sich das auswirkt wenn man meherere Anwendungen verwendet: Das braucht dich eigentlich gar nicht zu kümmern, denn dafür ist der Memory Manager zuständig. Jede Anwendung die du parallel laufen hast erhält den vollen 2GB, 4GB oder größeren Adressbereich, abhängig davon ob es 32bit, 32bit LAE oder 64bit ist. Welche Daten dann die Anwendung wirklich in den Speicher lädt, und welche davon dann wirklich auch in den RAM geladen werden ist ein sehr komplexes Thema. Wenn du dazu mehr lernen willst empfehle ich dir folgende Videos:

    http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WCL405

    http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WCL406

    Im Endeffekt ist für dich folgendes wichtig: Windows 64bit kann 32bit Programme ohne Nachteile ausführen. Sie erhalten mindestens denselben Speicher wie in auf einem 32bit Windows, und im besten Fall mehr. Die Speicherverwaltung von Windows ist mittlerweile sehr ausgefeilt und extrem gut und solange du nicht mit irgendwelchen blöden Tuning-Tools oder Registry-Tweaks versuchst diese zu verdrehen funktioniert sie tadellos und holt normalerweise das beste aus deinem System raus. Der Grund-Speicherverbrauch von Windows selbst ist bei 64bit etwas höher da die 64bit Komponenten ein wenig mehr Speicher brauchen. Aber der tatsächliche RAM-Mehrverbrauch von Windows selbst spielt sich im Bereich von ein paar MB ab. Zwei frisch installierte virtuelle Maschinen mit Windows 7 32bit und Windows 7 64bit haben hier im Test einen unterschied von 90MB RAM. Das sollte verschmerzbar sein. ;)


    Anm.: Stell dir mal selbst die Frage umgekehrt: Warum solltest du kein 64bit Betriebssystem einsetzen wenn du eine 64bit CPU hast? Der einzige mir bekannte Grund dafür wäre wenn du einen Kernel-Mode Treiber unbedingt benötigst der in 64bit nicht verfügbar ist. Alles was sich im User-Mode abspielt funktioniert auf 64bit genauso oder sogar besser und deine CPU wird endlich voll ausgenutzt. Wenn du eine 64bit CPU im 32bit Modus benutzt liegt einiges an Power brach. Im 32bit Modus hat deine CPU 8 General Purpose Register und 8 XMM Register. Im 64bit Modus hat sie doppelt so viele Register und jede der Register ist noch dazu doppelt so groß. Also quäl deine arme x64 CPU nicht länger und lass sie frei arbeiten! ;)
    • Als Antwort markiert MSalk Freitag, 24. Juni 2011 08:12
    Donnerstag, 23. Juni 2011 20:09
  • Vielen viel

    en Dank für die super ausführliche Antwort. Die Antwort von Martin hatte mir eigentlich fast schon gereicht.

    Wer in Zeiten von Amiga und Atari programmiert hat und danach als "Anwender" in die EDV gegangen ist, tut sich mit solchen Themen wie Taskschedulern und Memory Management etwas schwer. Ich weiß nun, dass wir uns nichts vormachen und 64 Bit Betriebssysteme wirklich etwas bringen können.

    Warum ich überhaupt so gefragt habe? Ich bin hier ein einem Krankenhaus und natürlich sollte bei Windows 7 Einführung immer auf 64 Bit zurückgegriffen werden. Die Rechner -bis auf ein paar alte Gurken- können das, allerdings sind hier viele viele der medizinischen Anwendungen -wie formuliere ich das am besten- äähhh so programmiert, das schon Windows XP eine große Herausforderung ist.

    Wenn wir also auf 64 Bit gehen wollen, werden wir zwangsweise viel Virtualisierung nutzen müssen (da gibt es Mitbewerber, die das ganz gut können). Ich wollte nur sicher gehen, dass wir uns die Arbeit unnötig machen, wenn nämlich alle 32 Bit Anwendungen zusammengenommen nur maximal 4 GB hätten nutzen können und der Rest nicht genutzt werden kann, wäre das vergebliche Liebesmühe gewesen.


    Zu Hans-Peter:

    Ich kenne die Extended und Enterprise-Versionen, die auch früher schon als 32 Bit OS mehr Speicher nutzen konnten. Den PAE-Kernel gibt es z.B. bei Linux nutzbar. Aber das nützt alles nichts, wenn MS dies nicht lizenziert. Wir haben ja schon keinen Support mehr, weil wir vmware nutzen, da kommt die Nutzung des PAE-Kernels sicherlich einem Weltuntergang gleich. Danke aber für den Hinweis, es bestärkt mich darin, privat andere Betriebssysteme zu nutzen...

    Freitag, 24. Juni 2011 08:12
  • MSalk:

    Zu Hans-Peter:
    Ich kenne die Extended und Enterprise-Versionen, die auch früher schon als 32 Bit OS mehr Speicher nutzen konnten. Den PAE-Kernel gibt es z.B. bei Linux nutzbar. Aber das nützt alles nichts, wenn MS dies nicht lizenziert.

    PAE ist aber keine Lizenzfrage. PAE ist in Win 7 grundsätzlich aktiviert wegen DEP, siehe
    http://msdn.microsoft.com/en-us/library/aa366796%28v=vs.85%29.aspx
    Sofern DEP aktiv ist, kann PAE auch gar nicht deaktiviert werden.
    Wenn jemand z.B. 8 GB RAM für Win 7 32 installiert hat, können die gesamten 8 GB benutzt werden,
    z.B. mit Anwendungen wie RAM Disk Plus.

    Freitag, 24. Juni 2011 11:21
  • David Retzer:

    Warum solltest du kein 64bit Betriebssystem einsetzen wenn du eine 64bit CPU hast?

    Nun ja, dazu ließe sich schon etwas sagen.
    Die installierten Benutzerprogramme/Bibliotheken liegen alle doppelt vor.
    Bei gleichzeitiger Nutzung von 32bittigen und 64bittigen Programmen sind die Systembibliotheken doppelt
    geladen. Durch die doppelte, teilweise gespiegelte Registry sowie Umlenkungen dort und im Dateisystem wird die
    Komplexität unnötigerweise erhöht.
    - Registry- und Filesystem-Reflection/Redirection,
    - automatische Spiegelung in der Registry,
    - doppelte Registrierung aller [D]COM-Objekte, Codecs etc.

    Ich würde mir schon ganz genau überlegen, ob ich Win 64 derzeit wirklich bräuchte.

    Freitag, 24. Juni 2011 12:14