2009-10-01 11 views
6

Wie ist Linux gleichzeitig 32bit und 64bit? Oder ist das etwas in glibc gehandhabt?Wie ist Linux gleichzeitig 32bit und 64bit? Oder ist das etwas in glibc gehandhabt?

Ich laufe CentOS 5.3 und es ist eine "64 Bit" Version; obwohl ich Dinge für 64 Bit und 32 Bit baue. Von dem, was ich zu wissen glaube, hat Windows angeblich einen 32-Bit-Emulator. Tut Linux das Gleiche? Ist es in Userspace oder Kernelraum?

Wenn libc es behandelt, ist es wie ein Emulator, der sagt, ich werde mit 32-Bit-Anwendungen verknüpfen, aber sprechen 64 Bit zum Kernel?

Antwort

5

Die CPU kann sowohl 64- als auch 32-Bit-Befehle ausführen, und der Kernel kann zwischen den Modi wechseln. Die einzige Einschränkung besteht darin, dass Sie 32-Bit-Programme nicht mit 64-Bit-Bibliotheken verknüpfen können. Daher müssen Sie sowohl die 32-Bit- als auch die 64-Bit-Version von libc usw. installiert haben.

+4

Um die Frage direkter zu beantworten, "spricht" ein 64-Bit-Programm 64-Bit mit dem Kernel und ein 32-Bit-Programm "spricht" 32-Bit mit dem Kernel, und der Kernel versteht beides unter der Annahme, dass "CONFIG_IA32_EMULATION" war festgelegt, wenn der Kernel kompiliert wurde. Tatsächlich sind 64-Bit-Programme sogar erlaubt, 32-Bit-Syscalls zu machen, obwohl das ein bisschen pervers ist ... – ephemient

+0

@ephemient: Ihre Laien-Erklärung von dem, was vor sich geht, klärte es am besten für mich. Ich habe sofort verstanden. +1 – insaner

3

Nichts stoppt die CPU von 64bit zu 32bit zu wechseln. Es schaltet nur um.

Sie können einen 64-Bit-Kernel verwenden und 32-Bit-Anwendungen ausführen. Sie können sogar einen 32-Bit-Kernel haben und 64-Bit-Apps ausführen (Mac OS X).

Sie benötigen jedoch die Bibliotheken, die sie auch verwenden, um 32bit oder oder 64bit zu sein, weshalb Sie Dateien namens lib64 oder lib32 auf Linux für die 64-Bit- oder 32-Bit-Bibliotheken sehen können.

+0

Linux unterstützt das Ausführen von 64-Bit-Benutzerbereich auf einem 32-Bit-Kernel nicht. – ephemient

+0

Es ist jedoch möglich. xnu macht es. –

1

Da x86_64-Prozessoren über die x86-Technologie entwickelt wurden, können sie weiterhin 32-Bit-Programme ohne jegliche Hardwareemulation unterstützen, wie zum Ausführen von x86-Programmen in einer PowerPC- oder Sparc-Umgebung. In Linux müssen Sie lediglich die erforderlichen Softwarebibliotheken installieren, um die 32-Bit-Software ausführen zu können.