Da hier hinter meinem Rücken weitergeschossen wird, möchte ich mich doch noch einmal zu Wort melden.
Hier wird ja von manchen Leuten behauptet, ich würde Falschaussagen machen und Märchen verbreiten. Leider halten sich diese Leute nicht für nötig, sich näher mit dem Thema zu beschäftigen, um meine Aussagen mit Fakten zu widerlegen. Sie investieren ihre Zeit lieber darin, mich zu diffamieren.
Da ich mit diesem Post wieder zur Zielscheibe von konzertierten Trollaktionen werden dürfte werde ich mich an der folgenden "Diskussion" nicht beteiligen und bin wieder weg.
Zum Thema.
64bit beim PPC
Die IBM-Dokumente ignoriere ich nicht. (Als ich mich weigerte einen Link zum 3D-Forum zu klicken, konnte ich ja nicht wissen, dass dort - nach Monaten Diskussion - endlich mal eine IBM-Dokumentation konsultiert wurde. Die hatte ich allerdings schon vor Jahren überflogen.) Die IBM-Dokumente werden von den 3D-Forums-Leuten so interpretiert, dass sie daraus lesen können: "._ut redet gerade Müll".
In den IBM-Dokumenten steht, dass es einen 32bit-Modus gibt.
Jetzt gibt es mehrere mögliche Interpretationen, wie Mac OS X die Modi behandelt.
Interpretation der 3D-Foren-Leute:
Der Kernel muss 64bit sein. Denn sonst kann der 64bit-Modus nicht eingeschaltet werden (diese Leute kennen nur x86/x64, da ist das so.)
Dem widersprechen aber verschiedene Dinge.
Zum einen sind die Treiber 32bit. In der Doku spricht IBM davon, dass das zwischen den Modi auf Per-Prozess-Basis gewechselt werden kann. Kernel und die Treiber sind bei Mac OS X aber ein einziger Prozess. Wenn also di Treiber 32bit sind, kann der Kernel nicht 64bit sein.
Das bestätigt sich auch, wenn man sich den Kernel anschaut, der ist keine ppc/ppc64-Universal-Binary (bzw. Fat-Binary), sondern eine flat-PPC-Binary. Auch die Apple-Dokumente sprechen davon, dass der Kernel nicht 64bit sein müsse. (Diese Dokumente werden von den 3D-Foren-Typen als Propaganda abgetan.)
Aus der Interpretation der 3D-Foren-Leute würde sich zwangsläufig ergeben, dass 32- und 64bit-Code innerhalb eines Prozesses gemischt werden kann. (Diese Leuten, die nur x86/x64 kennen, müssten hier eigentlich wieder schreien: Das ist nicht möglich.)
Möglich wäre das nur, wenn im 64bit-Modus auch 32bit-Code läuft (der 32bit-Modus also gar nicht verwendet wird). Das geht nicht, wenn die Modi umgeschaltet werden *müssen*.
Wie man sieht ist diese Interpretation voller Widersprüche. (Was aber nicht stört, denn sie bestätigt ja das wichtigste und umumstößliche Faktum: "._ut redet Müll"
Meine Interpretation der Sache sieht folgendermaßen aus:
Der 32bit-Modus wird von Mac OS X überhaupt nicht benutzt. Da sich beim PowerPC der Befehlssatz und das Erscheinungsbild des Prozessors bei 32bit-Implementationen und 64bit-Implementationen nicht unterscheidet (mit Ausnahme der größeren Breite der Register und zwei Befehlen, mit denen Daten in bzw. aus den oberen 32bit der Register bewegt werden können) wäre das auch möglich. Das würde auch zu der Aussage in den IBM-Dokus passen, dass jeder Kontextwechsel und jeder Interrupt den Prozessor sofort in den 64bit-Modus versetzt.
Außerdem passt das auch zu der Tatsache, dass der PowerPC schon von Anfang an als 64bit-Prozessor mit einer möglichen 32bit-Implementation geplant war, es also klar war, dass irgendwann einmal 32bit-Code existieren würde, der ohne Probleme auf einem 64bit-PPC laufen können sollte.
Also Mac OS X hat einen 32bit-Kernel, läuft aber trotzdem dauernd im 64bit-Modus. (Das scheint mir an plausibelsten, ich kann mich natürlich irren, ich lasse mich gerne mittels *Fakten* widerlegen.)
P.S.
Dazu noch ein Zitat aus der IBM-Dokumentation:
"The user-level instructions specific to the 64-bit PowerPC processors can be executed in both 32-bit and in 64-bit computation mode. The user-level instructions implemented by the 32-bit PowerPC processor can also be executed in either computation mode."
Es ist also egal, ob der Prozessor gerade im 32- oder 64bit-Modus läuft, es können immer alle 32- und 64-bit-Befehle ausgeführt werden.
"The kernel can be either 32- or 64-bit oriented."
Dabei ist es auch egal, ob der Kernel 32- oder 64bittig ist.
Das würde meine zuletzt geäußerte Vermutung bestätigen.
64bit beim x86/x64
Man kann von der 64bit-Implementierung bei x86/x64 nicht auf die 64bit-Implementierung des PPC schließen. Die beiden Unterscheiden sich grundsätzlich. Alles ist ausnahmslos unterschiedlich gelöst.
Im Gegensatz zum PowerPC unterscheidet sich beim x86/x86 (AMD64 bzw. Intel mit EMT64) im 64bit-Modus der Befehlssatz, der Prozessor ist ein anderer mit mehr Registern, anderen Addressmodi etc. Hier kann der kann den 64bit-Modus nur aktiviert werden, wenn der Kernel und alle Treiber 64bit sind, denn in Ring0 (in dem Kernel und Treiber laufen) kann nicht in den 32bit-Kompatibilität-Modus umgeschaltet werden.(Diese Leute nennen es beschönigend eine "Vorgabe von AMD". Dabei ist es schlicht eine Notwendigkeit. Aber das macht eh keinen Unterschied.) Ohne einen 64bit-Kernel läuft der Prozessor im 32bit i386-Modus.
Ergebnis: Ohne ein komplettes 64bit-System mit 64bit-Kernel und 64bit-Treibern kann kein 64bit-Code laufen.
Und wenn der 64bit-Kernel läuft, läuft kein einziger 32bit-Treiber mehr.
Für Mac OS X bedeutet das, dass die neuen Pro-Macs nur dann mehr, als 4GB RAM incl. Grafik-Speicher verwenden können soll bzw. einzelne Prozesse mehr als 4GB virtuellen Adressraum verwenden können, muss der Kernel und die Treiber 64bit sein. Die vorhandenen 32bit-Treiber von Fremdherstellern funktionieren erst mal nicht mehr, bis eine 64bit-Version herausgegeben wird.
P.S.
Intel schreibt dazu:
"Note that a new 64-bit operating system and device drivers will be needed to access the 64-bit capabilities of the enhanced Xeon processors. 32-bit applications will need to be recertified for the 64-bit operating environment even if the software remains 32-bit."
Wenn die Pro Macs jetzt (also noch mit Tiger) kommen und 64bit können sollten, dann wäre eigentlich folgendes Scenario realistisch: Der Kernel und die Treiber von Apple sind 64bit, damit der Prozessor im 64bit-Modus läuft, die GUI bleibt aber 32bit, damit die i386-Programme laufen können. Dazu gibt es (wie beim Tiger für den G5) die libSystem in x64 für Background-Prozesse, die mehr, als 4GB Adressraum benötigen.
P.S.
Nachdem der MacPro jetzt erschienen ist, stellt es sich anders dar. Die vorhandenen Treiber scheinen zu funktionieren (jedenfalls habe ich nichts gegenteiliges gehört), es können aber offensichtlich trotzdem x86_64-Background-Prozesse (bisher nur Benchmarks) über die libSystem ausgeführt werden.
Wie das allerdings möglich ist, konnte ich noch nicht herausfinden. Laut Intel wäre das jedenfalls nicht möglich (siehe oben) und bei Apple beziehen sich Dokumentationen zum Thema 64bit immer noch nur auf den G5.
Alternativ könnte noch auf PAE gesetzt werden und eine Technik, die mehr, als 4GB virtuellen Adressraum ermöglicht. Damit würden dann dazu, dass die möglichen Leistungsverbesserungen durch x64 verschenkt werden, noch die Leistungseinbussen durch PAE. Wenn man dazu dann noch die Langsamkeit von Mac OS X bedenkt dürfte der Pro Mac dann unter Tiger etwa halb so schnell sein, wie unter Windows oder Linux (bzw. ein Drittel der Geschwindigkeit bei den einschlägigen Benchmarks).
P.S.
Bei Intel wird x86_64 bzw. IA-32e anders implementiert, als bei AMD. Es ist bei Intel eigentlich nur eine Erweiterung zum PAE. Zum Aktivieren des 64bit-Modus muss eine 5-Stufige Initialisierungs-Sequenz abgefahren werden. In dieser muss zuerst PAE aktiviert werden. Die verwendete Paging-Tabelle muss in den untersten 4GB liegen.
P.P.S.
Apple schreibt zu Leopard:
"Leopard erreicht die nächste Stufe bei 64-Bit-Computing und bietet dabei volle Leistung und Kompatibilität für vorhandene 32-Bit-Programme und -Treiber."
Beim PowerPC ist das selbstverständlich kein Problem (siehe oben).
Beim Intel-Mac würde das der Intel-Dokumentation widersprechen (siehe oben). Falls bei Leopard tatsächlich 32bit-Treiber in einem 64bit-Kernel laufen, müsste das laut Intel-Doku eigentlich zu einem "general protection fault" führen. Man wird sehen, ob und wie das möglich ist.
EFI
EFI ist kein BIOS-Nachfolger, sondern eine Interface für eine Firmware. Beim Intel heißt diese Firmware BIOS (auch wenn bestimmten Leuten das Wort BIOS nicht zu gefallen scheint).
In den Intel-Dokumenten wird das Wort BIOS verwendet. Dort gibt es zwei Arten von BIOS. Zum einen die BIOS-Firmware, die die Hardware so initialisiert, dass EFI lauffähig ist. Zum anderen das Legacy-BIOS. Das Legacy-BIOS ist eine EFI-Software, die das bekannte BIOS-Interface emuliert (das interne Interface für das Betriebssystem, nicht das User-Interface).
P.S.
Mittlerweile ist klar, dass jeder aktuelle Intel-Chipsatz ein EFI enthält. Dieses ist auch aktiviert, kann jedoch normalerweise nur über das Legacy-BIOS-Interface angesprochen werden.
Targed-Mode etc.
Dazu habe ich mich schon früher geäußert. Das hatte ich falsch eingeschätzt. Ich damals übersehen hatte, dass der EFI nicht nur als Bootloader fungieren kann, sondern auch als komplett eigenständiges Betiebssystem mit eigenen Hardware-Treibern und ausführbaren Programmen laufen kann. Damit sind dann auch so etwas, wie der Targed-Mode, der Boot-Manager und der Hardware-Check möglich. (Allerdings auf einer anderen Ebene, als beim PPC mit OpenFirmware. Das tut aber nichts zur Sache.)