É possível virtualizar qualquer CPU em qualquer outra CPU?

1

Recentemente eu comprei um Raspberry Pi e li um monte de posts sobre projetos, e queria experimentar alguns deles. Mas também li que os cartões SD não têm uma duração de vida alta se nós (re) escrevermos muitas vezes para isso. Então eu queria experimentar as imagens para o projeto Pi em um sistema operacional virtual (com o Virtualbox, de preferência).

Então, eu queria saber se é possível virtualizar a CPU ARM na CPU do meu laptop. Para o registro, eu estou executando o Ubuntu 14.04 e uname -a responde com:

Linux Laptop 3.13.0-49-generic #83-Ubuntu SMP Fri Apr 10 20:11:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux'

Mas, como estou curioso, gostaria de saber se é possível virtualizar qualquer CPU em qualquer outra CPU. É algo relacionado a hardware ou software?

Muito obrigado.

    
por Tloz 30.11.2015 / 10:28

2 respostas

2

Para a questão do RPi, consulte este tópico (essencialmente você pode usar algo como QEMU para executar as imagens).

Para responder à pergunta principal:

Is it possible to virtualize any CPU on any other CPU?

Sim (até certo ponto), no entanto, pode não ser tão eficiente quanto você imagina. E deve-se notar que o tipo de virtualização VirtualBox / VMWare é diferente do que você está pedindo, o que na verdade é Is it possible to EMULATE any CPU on any other CPU? .

As CPUs são componentes de hardware que possuem um conjunto específico de instruções (também conhecidas como códigos operacionais) ligadas a elas; esses códigos operacionais são valores numéricos específicos que podem ser traduzidos em um nível elétrico, de modo que a CPU realmente "faça alguma coisa".

Quando o software é escrito para dizer à CPU para 'fazer algo' (como uma calculadora), o software deve ser construído (direcionado) para uma CPU específica. Isso quer dizer que meu software deve ser compilado (traduzido) e montado de forma que as instruções da máquina possam ser entendidas pela máquina em que estou executando o software, caso contrário, se não for executado, talvez não obtenha os resultados EXATOS Eu estou esperando. As instruções de montagem (op-codes) para algo como 2 + 2 em um ARM podem não corresponder exatamente às instruções de montagem em um PIC ou FPGA, e o que eu recuperaria seria lixo (novamente, SE fosse executado).

Cada CPU 'faz algo' um pouco diferente, muito como eu posso escrever na língua inglesa para transmitir meus pensamentos para você, eu também poderia transmitir os mesmos pensamentos em espanhol ou japonês, embora eu tenha que transmiti-los bastante diferentemente devido às diferenças sintáticas em inglês / espanhol / japonês, mas as diferenças em como essas linguagens são contextualmente analisadas também. Se você e eu estivéssemos conversando (vs. comunicação escrita), e você só falava japonês e eu espanhol, então precisaríamos de um tradutor que fosse fluente nas duas línguas para se comunicar adequadamente, embora fosse mais lento que a comunicação direta, porque nós precisamos que nossas linguagens sejam analisadas corretamente, de modo que nada seja "perdido na tradução".

Este é o mesmo conceito com a virtualização / emulação de CPU. Se você deseja executar aplicativos que não foram criados para a CPU em que você está executando (ou seja, eu quero executar o software ARM no meu PC x86), um programa precisa usar o assembly ARM e convertê-lo para o assembly x86, para que chamada para draw word on screen não é uma chamada para erase RAM location X .

É por isso que não é necessariamente viável emular adequadamente qualquer CPU em qualquer outra CPU (desde que não seja possível emular x86 em um PIC em si). A CPU faz muito mais do que apenas "números crunch", e eles fazem tudo isso "muito mais" muito rápido, e exigem muito tempo para que tudo seja exato. Quando você emula uma CPU, você está essencialmente adicionando uma camada de tradução entre o software e o hardware. Adicionar essa camada pode adicionar uma quantidade significativa de tempo à execução das instruções, devido a quantas instruções extras podem precisar ser executadas. Esse tempo adicional pode ser tão demorado que o software não responde ou é geralmente inutilizável (como jogar videogame a 1 quadro por segundo, com certeza você pode fazer isso, mas levará apenas 2 minutos para escrever o texto 'press start' na tela).

Deve-se notar que, se o hardware (a CPU) tiver o mesmo conjunto de instruções incorporado, ele deverá "fazer a mesma coisa" que o outro conjunto de instruções pretendido; Por exemplo (questões de patente / licenças à parte) A Intel poderia decidir adicionar os conjuntos de instruções para o processador ARM em uma linha de suas CPUs x86_64 para que você pudesse executar os binários ARM diretamente naquela CPU, mas eles ainda teriam que ter a arquitetura 'do' como a arquitetura ARM 'faz' ou a saída pode não ser exata.

Assim, pode ser possível emular um tipo de CPU em outro tipo de CPU, mas dependendo de como / o que é emulado, pode ser tão lento a ponto de ser considerado inatingível, ou pode ser indistinguível do ponto de vista humano ( ou seja, subjetivamente é "tão rápido" quanto rodando no hardware nativo, mas tecnicamente falando não é).

Espero que isso ajude a adicionar alguma clareza.

    
por 30.11.2015 / 12:29
1

Você pode usar o QEMU para emular qualquer CPU como uma máquina virtual em uma caixa do Ubuntu.

da página principal deles -

QEMU is a generic and open source machine emulator and virtualizer.

When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance.

Há um artigo específico sobre como configurar aqui , mas se você pesquisar " Ubuntu Qemu framboesa "ele irá produzir um grande número de respostas para você no caminho certo.

A última parte da sua pergunta é uma fera totalmente diferente! e algo em que Alan Turing pensou muito. Não é uma resposta - porque eu não sou tão esperto o suficiente para resumir tudo - mas você deve começar na Máquina Universal de Turing qual foi a sua abordagem a essa pergunta exata.

    
por 30.11.2015 / 12:29