11 votos

¿Por qué cada aplicación Android se ejecuta en un proceso Dalvik VM diferente?

He leído que cada una de las aplicaciones de Android se ejecuta en un proceso Dalvik VM diferente (todos forkeados de zygote).

También he leído que estas VMs son realmente ligeras y utilizan la copia en los buffers de escritura y todo eso, hasta aquí todo bien.

Pero, también leí que esto no se hizo por razones de seguridad (por ejemplo, el aislamiento) - de hecho dalvik vm no debe ser considerado un límite de seguridad, dice Google.

Así que mi pregunta es la siguiente: ¿Por qué cada proceso tiene que ejecutarse en una VM diferente?

12voto

Lie Ryan Puntos 15629

En Android, cada aplicación se ejecuta como un usuario independiente. En el núcleo de Linux, cada proceso es propiedad de un único usuario, por lo que no es posible ejecutar varias aplicaciones Dalvik en un único proceso Linux.

La sobrecarga de ejecutar varias instancias de Dalvik VM es ligera porque Linux fork() es copy-on-write, una escritura en una página COW compartida causará un "fallo de página" y esa página se copiará; así que aunque la mayor parte de la región de memoria de la VM en la RAM es compartida, no hay "estado compartido" entre las VMs.

La bifurcación de procesos sólo proporciona aislamiento de estado, pero no aislamiento de privilegios.

dalvik vdma lsvhioku lvdm nsohto ubled cnoonts ibdee rceodn sai dseerceudr iat ys ebcouurnidtayr yboundary

Esto se debe a que la máquina virtual no puede imponer un límite de seguridad. La VM se ejecuta en modo usuario (el mismo modo que el programa que está ejecutando), lo que significa que un error en la VM podría permitir a la aplicación modificar el estado de la VM de una manera no prevista; el kernel, sin embargo, se ejecuta en modo privilegiado y puede hacer cumplir los límites de seguridad.

5voto

Nick Pierpoint Puntos 7976

Cada proceso Dalvikvm se ejecuta bajo un entorno de caja de arena propiedad del usuario id ( uid ) de la aplicación que se está ejecutando, hay que tener en cuenta que al instalar la aplicación, el uid se asigna y se asigna a cada aplicación instalada.

El resultado neto es que cada aplicación que se ejecuta no puede pisotear el proceso de otra debido a las diferentes uid asignada, que otorga la protección para las aplicaciones en ejecución.

Otra forma de verlo es la siguiente: si hubiera habido una uid para todo aplicaciones, entonces una aplicación maliciosa puede realmente causar estragos, estar espiando la configuración de uno, anular, interceptar el código en ejecución de otra aplicación y hacer todo tipo de cosas malas TM a esa aplicación.

3voto

Todd White Puntos 4257

La VM Dalvik no está proporcionando un límite de seguridad, pero el kernel es proporcionando un límite de seguridad en cuanto al proceso en el que se ejecuta la VM. Por eso, por ejemplo, no es gran cosa que una aplicación de Android ejecute código nativo, que (más o menos) por definición se ejecuta fuera de la VM. Sigue estando en el proceso, y el kernel se asegura de que el proceso no va a ser capaz de dañar a otras aplicaciones, tanto si el proceso está ejecutando código dentro de la VM como si no.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X