Por que cada aplicativo Android é executado em um processo diferente da Dalvik VM?


10

Eu li que cada aplicativo Android é executado em um processo diferente da Dalvik VM (todos extraídos do zygote).

Também li que essas VMs são realmente leves e usam cópia em buffers de gravação e tudo isso, até agora tudo bem.

Mas também li que isso não foi feito por razões de segurança (por exemplo, isolamento) - na verdade, o dalvik vm não deve ser considerado um limite de segurança, diz o Google.

Então, minha pergunta é a seguinte: Por que cada processo precisa ser executado em uma VM diferente?

Respostas:


11

No Android, todo aplicativo é executado como um usuário separado. No kernel Linux, cada processo pertence a um único usuário, portanto, não é possível executar vários aplicativos Dalvik em um único processo Linux.

A sobrecarga da execução de várias instâncias da Dalvik VM é leve porque a fork()chamada do sistema Linux é copiada na gravação, uma gravação em uma página COW compartilhada causará uma "falha de página" e essa página será copiada; portanto, mesmo que a maior parte da região de memória da VM na RAM seja compartilhada, não há "estado compartilhado" entre as VMs.

Os processos de bifurcação fornecem apenas isolamento de estado, mas não isolamento de privilégios.

o dalvik vm não deve ser considerado um limite de segurança

Isso ocorre porque a VM não pode impor um limite de segurança. A VM está sendo executada no modo de usuário (o mesmo modo que o programa que está sendo executado), o que significa que um bug na VM pode permitir que o aplicativo modifique o estado da VM de uma maneira que não se destina; o kernel, no entanto, é executado no modo privilegiado e pode impor limites de segurança.


4

Cada processo Dalvikvm é executado em um ambiente de caixa de areia pertencente ao ID do usuário ( uid) do aplicativo em execução. Observe que, após a instalação do aplicativo, ele uidé alocado e atribuído a cada aplicativo instalado.

O resultado líquido é que cada aplicativo em execução não pode atropelar o processo de outro devido às diferentes uidatribuições que concedem a proteção para os aplicativos em execução.

Outra maneira de olhar para ele é esta - tinha de haver um comum uidpara todas as aplicações, em seguida, um aplicativo malicioso pode realmente causar estragos, seja olhando para os próprios ajustes, substituir, interceptar código em execução de outro aplicativo e fazer todo tipo de coisas ruins TM para que inscrição.


3

A Dalvik VM não está fornecendo um limite de segurança, mas o kernel está fornecendo um limite de segurança em termos do processo em que a VM é executada. É por isso que, por exemplo, não é grande coisa para um aplicativo Android executar código nativo, o que (mais ou menos) por definição é executado fora da VM. Ainda está no processo, e o kernel garante que o processo não poderá prejudicar outros aplicativos, independentemente de o processo estar executando o código na VM ou não.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.