Frage

Auf meinem OS X-box, der kernel ist ein 32-bit-Binär-und doch kann es eine 64-bit-Binär.Wie funktioniert das?

cristi:~ diciu$ file ./a.out
./a.out: Mach-O 64-bit executable x86_64
cristi:~ diciu$ file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386):   Mach-O executable i386
/mach_kernel (for architecture ppc):    Mach-O executable ppc
cristi:~ diciu$ ./a.out
cristi:~ diciu$ echo $?
1
War es hilfreich?

Lösung

Die CPU kann umgeschaltet werden von 64-bit-Ausführung-Modus auf 32-bit -, wenn Sie fallen in kernel-Kontext, und einem 32-bit-kernel noch gebaut werden, um zu verstehen, die Strukturen übergeben von 64-bit-user-space-apps.

MacOS X-kernel nicht direkt dereferenzieren von Zeigern aus der Benutzer-app sowieso, wie es sich befindet, seinen eigenen Adressraum.Ein user-space-Zeiger in einem ioctl-Aufruf, zum Beispiel, muss zuerst gelöst werden, um Ihre Adresse und dann eine neue virtuelle Adresse erstellt, die in den kernel-Adressraum.Ist es nicht eigentlich egal, ob dieser Zeiger in der ioctl-64 bit oder 32 bit der kernel nicht dereferenzieren es direkt in entweder Fall.

So mischen Sie eine 32-bit-kernel und 64-bit-Binärdateien arbeiten können, und Umgekehrt.Die Sache, die Sie nicht tun können, ist mix 32-bit-Bibliotheken mit einem 64-bit-Anwendung, die als Zeiger übergeben, das zwischen Ihnen abgeschnitten werden.MacOS X liefert mehr Ihrer frameworks in 32-und 64-bit-Versionen, die in jeder Version.

Andere Tipps

Es ist nicht der kernel läuft, dass die binäre.Es ist der Prozessor.

Die binäre nennt Bibliothek Funktionen, und diese müssen zu 64-bit.Und wenn Sie benötigen, um ein system nennen, es ist Ihre Verantwortung zu bewältigen mit der Tatsache, dass Sie selbst sind, 64bit, aber der kernel ist nur 32.

Aber das ist nicht etwas, das Sie würde haben zu sorgen über.

Beachten Sie, dass nicht alle 32-bit-kernels in der Lage sind, das ausführen von 64-bit-Prozesse.Windows-sicherlich nicht diese Eigenschaft haben, und ich habe nie gesehen, es geschehen auf Linux.

Die 32-bit-kernel, der ist in der Lage laden und ausführen von 64-bit-Binärdateien verfügt über einige 64-bit-code verarbeiten Speicher-mapping-Programm laden und ein paar andere 64-bit-Fragen.

Doch die Planer und viele weitere OS-Operationen sind nicht erforderlich, um die Arbeit in der 64-bit-Modus, um sich mit anderen Themen - es schaltet den Prozessor in 32-bit-Modus und zurück als benötigt, um zu behandeln-Treiber, Aufgaben, die Speicherzuordnung und die Zuordnung der interrupts, etc.

In der Tat, die meisten der Dinge, die das OS funktioniert, würde nicht unbedingt durchführen, die alle schneller laufen auf 64 - bit- OS ist nicht eine schwere Daten, Prozessor, und diejenigen Anteile, werden (streams, disk I/O, usw.) sind wahrscheinlich Umgerechnet auf 64 bit plugins in das OS sowieso).

Aber die nackten kernel selbst wird wahrscheinlich nicht Aufgabe wechseln schneller, etc, wenn Sie wurden in 64 bit.

Dies ist insbesondere dann der Fall, wenn die meisten Menschen noch mit 32-bit-apps, so die Modus-Umschaltung ist nicht immer erforderlich, auch wenn das eine niedrige overhead-Betrieb es dauert einige Zeit.

-Adam

Ein ELF32-Datei enthalten kann, die 64-bit-Anweisungen und die Ausführung im 64-bit-Modus.Nur was es ist, die Organisation von header und-Symbole in 32-bit-format.Symbole Tabelle offsets von 32 bits.Symbol Tabelle Einträge sind 32 bit breit etc.Eine Datei enthalten, die beide 64-bit und 32-bit-code bereitstellen kann sich als 32-bit-ELF-Datei wheres es verwendet 64-bit-registors für seine internen Berechnungen.mach_kernel ist eine solche ausführbare Datei.Vorteil Sie erhalten, ist, dass 32-bit Treiber-Elfen können mit diesem verknüpft.Wenn Sie nehmen Pflege der übergabe von Zeigern, die sich unten 4GBs zu anderen verlinkten ELF-Binärdateien es funktioniert gut.

Für den kernel nur 64-bit-würde nur bringen die effektive Vorteil, dass kernel-Erweiterungen (D. H., in der Regel Treiber) könnte 64-bit.In der Tat, würde Sie entweder alle 64-bit-kernel-Erweiterungen, oder (wie es jetzt der Fall) alle 32-bit ones;Sie müssen die native Architektur des Laufenden Kernels.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top