Como a mudança de processo ocorre na VM?

3

Para um host autônomo normal, processos diferentes fazem comutação de contexto usando o agendador. Por exemplo, digamos que há o Processo 1 e o Processo 2, então o controle vai do Processo 1 para o Agendador e, em seguida, do Agendador para o Processo 2, que é executado até que ele controle o Agendador para agendar outro processo.

Eu quero saber como essa mudança, do Processo 1 para o Processo 2, ocorre em uma VM? A VM chama VM_EXIT() toda vez que há uma alternância de processos entre dois processos dentro de uma VM? ou o agendador de host tem algo a ver com a mudança de processo?

AFAIK, o SO do host visualiza a VM como um único processo. Alguém poderia, por favor, apontar algumas dicas onde eu poderia esclarecer essas dúvidas?

    
por Shehbaz Jaffer 13.11.2013 / 07:01

2 respostas

2

Máquinas virtuais não entendem o que está acontecendo por dentro, elas estão apenas simulando hardware.

Existem 3 métodos básicos de simulação de VM. O mais óbvio é a emulação de hardware, que é o que Bochs faz. Ele está apenas simulando o PC compatível com x86 de forma programática, sem nenhuma magia mais profunda por trás dele. O PC é uma máquina para processamento de dados, portanto, o Bochs usa o sistema operacional do host para coletar dados de entrada e alimentá-los em dispositivos virtuais emulados, depois lê os dados de saída desses dispositivos e usa o host para apresentá-los. É exatamente isso que os emuladores de console e programas similares fazem. Bochs não sabe o que acontece dentro da VM, funciona em hardware emulado. O conceito de processos é abstrato demais para isso, não precisa se preocupar com essas coisas - apenas emulação de hardware.

O segundo tipo de VM é comum antes da introdução da virtualização acelerada por hardware. A emulação de estilo Bochs é lenta, porque está interpretando o código de máquina byte por byte. A execução de código de bytes nulo é impossível em um sistema operacional em execução devido à maneira como as CPUs funcionam (e funcionam assim por um bom motivo), mas um aplicativo pode pegar um pedaço de código de bytes e editá-lo para torná-lo seguro em um sistema operacional host. em seguida, execute-o como seu próprio código. O estágio de edição tem duas finalidades: limpar o código para tornar possível a execução e conectar dispositivos de E / S simulados a fontes / destinos de dados apropriados do host. Ainda assim, nada como processos existem para uma VM, é apenas um código em pseudo-emulação em uma CPU física, fingindo que é o código do programa.

Por fim, o terceiro tipo de VMs é VMs virtualizadas aceleradas por hardware. Requer suporte em hardware, mas todas as CPUs modernas o possuem. É apenas sobre fazer o que eu disse é impossível antes: executar código de baixo nível em paralelo ao sistema operacional host. A coisa é, se você tiver embutido na CPU, você pode deixá-lo lidar com o código corretamente. Ele criará um ambiente de sandbox para esse código, dando ao host controle sobre essa sandbox. Desta forma, o código da VM é executado ainda mais perto do hardware, portanto, ele funciona mais rápido. Também está mais perto de usar o sistema de anéis de hardware, mas ainda não introduz o conceito exato de processos. Estes são sempre tratados pelos sistemas operacionais convidados. Mas nas VMs aceleradas por hardware você pode realmente ver algo semelhante à troca de contexto como no host. Outros tipos de VMs sempre são executados como programas no nível do usuário.

    
por 13.11.2013 / 21:56
0

A troca de processos dentro de uma VM ocorre da mesma maneira que ocorre em uma máquina normal. O SO simplesmente altera em qual processo está trabalhando. O host não sabe ou não se importa com o que está acontecendo dentro da VM - que diferença isso faz?

    
por 13.11.2013 / 22:13