Como é uma versão de 32 bits do kernel, pode executar uma versão de 64 bits binário?

StackOverflow https://stackoverflow.com/questions/49934

  •  09-06-2019
  •  | 
  •  

Pergunta

No meu OS X caixa, o kernel é uma versão de 32 bits binários e ainda pode executar uma versão de 64 bits binários.Como isso funciona?

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
Foi útil?

Solução

A CPU pode ser mudado a partir de 64 bits do modo de execução de 32 bits quando ele armadilhas no contexto do kernel, e uma versão de 32 bits do kernel, pode ainda ser construídos para entender as estruturas passado a partir de 64 bits de espaço de usuário de aplicativos.

O MacOS X kernel não diretamente anular a referência de ponteiros a partir do aplicativo de usuário de qualquer maneira, como reside o seu próprio espaço de endereço separado.Um espaço de usuário ponteiro em uma chamada ioctl, por exemplo, deve ser resolvido para o endereço físico e, em seguida, um novo endereço virtual criado no espaço de endereço do kernel.Isso realmente não importa se que o ponteiro do ioctl foi de 64 bits ou de 32 bits, o kernel não cancelam-lo diretamente em qualquer caso.

Assim, a mistura de uma versão de 32 bits do kernel e os binários de 64 bits pode trabalhar, e vice-versa.A única coisa que você não pode fazer é misturar bibliotecas de 32 bits com uma versão de 64 bits do aplicativo, como ponteiros passado entre eles seria truncado.Mac os X fornece mais de seus quadros em ambos os 32 e 64 bits em cada lançamento.

Outras dicas

Não é o kernel que executa o binário.É o processador.

O binário não chamar as funções da biblioteca e aqueles que precisam ser 64 bits.E se for necessário efectuar uma chamada de sistema, é da sua responsabilidade para lidar com o fato de que eles mesmos são de 64 bits, mas o kernel é somente 32.

Mas isso não é algo que você tem de se preocupar.

Note que não todos 32-bit kernels são capazes de executar os processos de 64 bits.O Windows certamente não tem essa propriedade, e eu nunca vi isso feito no Linux.

A versão de 32 bits do kernel que é capaz de carregar e executar binários de 64 bits tem de ter uma versão de 64 bits de código para lidar com o mapeamento de memória, o programa de carregamento e em alguns outros 64 bits problemas.

No entanto, o programador e muitos outros SO operações não são necessárias para trabalhar no modo de 64 bits, a fim de lidar com outros problemas - ele muda o processador de 32 bits do modo e conforme necessário para lidar com drivers, tarefas, alocação de memória e de mapeamento, interrupções, etc.

Na verdade, a maioria das coisas que o sistema operacional não, não seria necessariamente executar qualquer uma mais rápida execução em 64 bits - o sistema operacional não é uma pesada processador de dados, e essas partes que são (córregos, e/S de disco, etc) são provavelmente convertido para 64 bits (plugins para o sistema de qualquer maneira).

Mas a nua próprio kernel, provavelmente, não alternância de tarefas mais rapidamente, etc, se fosse de 64 bits.

Este é especialmente o caso quando a maioria das pessoas ainda estão a executar uma versão de 32 bits apps, para o modo de comutação não é sempre necessário, mesmo que seja um baixo overhead de operação, faz exame de algum tempo.

-Adam

Um ELF32 arquivo pode conter 64bit instruções e execute-o em modo de 64 bits.Única coisa que ele tem é a de que a organização do cabeçalho e símbolos são em formato de 32 bits.Tabela de símbolos deslocamentos são de 32 bits.Símbolo de entradas da tabela são de 32 bits de largura, etc.Um arquivo que contém tanto de 64 bits e código de 32 bits código pode expor-se como de 32 bits ELF arquivo cadê ele usa 64 bits registors para cálculos internos.mach_kernel é como um executável.Sua vantagem é de 32 bits do driver Quando pode ligados a ele.Se tomar o cuidado de passar ponteiros que estão localizados abaixo 4GBs para outros ligados a binários ELF ele vai funcionar bem.

Para que o kernel seja de 64 bits só iria trazer a efetiva vantagem de que as extensões do kernel (isto é, normalmente os drivers) poderia ser de 64 bits.Na verdade, você precisa ter todas as versões 64-bit extensões do kernel, ou (como é o caso agora), todos os 32 bits;eles precisam ser nativo para a arquitetura do kernel em execução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top