2009-10-01 13 views
6

In che modo Linux è simultaneamente a 32 bit ea 64 bit? O è qualcosa gestito da glibc?In che modo Linux è simultaneamente a 32 bit ea 64 bit? O è qualcosa gestito da glibc?

Eseguo CentOS 5.3 ed è una versione "64 bit"; anche se costruisco cose per 64 bit e 32 bit. Da quello che penso di sapere, Windows presumibilmente ha un emulatore a 32 bit. Linux fa la stessa cosa? È nello spazio utente o nello spazio del kernel?

Se la libc lo gestisce, è un po 'come un emulatore che dice: collegherò con le app a 32 bit, ma parlerò 64 bit al kernel?

risposta

5

La cpu può eseguire sia le istruzioni 64 che 32 bit e il kernel può passare da una modalità all'altra. L'unica limitazione è che non è possibile collegare programmi a 32 bit con librerie a 64 bit, quindi è necessario che siano installate sia le versioni a 32 e 64 bit di libc, ecc.

+4

Per rispondere alla domanda più direttamente, un programma a 64 bit "parla" a 64-bit al kernel e un programma a 32 bit "parla" a 32-bit al kernel, e il kernel capisce entrambi, presumendo che 'CONFIG_IA32_EMULATION' fosse impostato quando il kernel è stato compilato. In realtà, i programmi a 64 bit sono anche autorizzati a creare syscalls a 32 bit, anche se questo è un po 'perverso ... – ephemient

+0

@ephemient: la tua spiegazione personale di ciò che sta accadendo ha chiarito meglio per me. Ho capito immediatamente. +1 – insaner

3

Nulla impedisce alla CPU di passare da 64 bit a 32 bit. Cambia semplicemente.

È possibile avere un kernel a 64 bit ed eseguire applicazioni a 32 bit. Puoi persino avere un kernel a 32 bit ed eseguire applicazioni a 64 bit (Mac os x).

Tuttavia è necessario che le librerie utilizzate siano anche a 32 bit o 64 bit, motivo per cui è possibile visualizzare file chiamati lib64 o lib32 su linux per le librerie a 64 bit o 32 bit.

+0

Linux non supporta l'esecuzione di userspace a 64 bit su un kernel a 32 bit. – ephemient

+0

È possibile però. xnu lo fa. –

1

Poiché i processori x86_64 sono progettati su tecnologia x86, sono ancora in grado di supportare programmi a 32 bit senza emulazione hardware, come quello che sarebbe necessario eseguire programmi x86 in un ambiente PowerPC o Sparc. In Linux, tutto ciò che devi fare è installare le librerie software necessarie per eseguire il software a 32 bit.

Problemi correlati