Colección de citas famosas - Slogan de motivación - Descripción general del mecanismo de encuadernación

Descripción general del mecanismo de encuadernación

La comunicación entre procesos en Android se logra a través del mecanismo Binder. Android se basa en el sistema Linux, por lo que es necesario comprender el conocimiento relevante del proceso del sistema Linux.

En el sistema Linux (lo mismo ocurre con otros sistemas), no se permite que diferentes procesos operen o accedan directamente a otro proceso. Esto se denomina aislamiento de procesos.

Para garantizar que los procesos del usuario no puedan acceder directamente a él. kernel, el sistema operativo divide lógicamente el espacio virtual en espacio de usuario y espacio de kernel. El programa del kernel se ejecuta en el espacio del kernel y el programa de aplicación se ejecuta en el espacio del usuario, por seguridad, están aislados entre sí. falla, no afectará el kernel. Los datos del espacio del kernel se pueden compartir, pero el espacio del usuario no.

El espacio del usuario solo puede acceder al espacio del kernel a través de llamadas al sistema es la única forma de acceder al espacio del usuario. para acceder al espacio del kernel, asegurando que todo el acceso a los recursos esté bajo el control del kernel, evitando el acceso no autorizado de los usuarios a los recursos del sistema y mejorando la seguridad y estabilidad del sistema.

copy_from_user: copia los datos del espacio del usuario al espacio del kernel.

copy_to_user: Copiar datos del espacio del kernel Copiar al espacio del usuario

Dado que el proceso del usuario no puede acceder directamente a la dirección del hardware, el sistema proporciona un mecanismo: Mapa de memoria En Linux, la asignación de memoria es. Se implementa llamando a la función mmap, y el espacio del usuario es La dirección de memoria se asigna al espacio del kernel. Una vez establecida la relación de mapeo, las modificaciones en la memoria del espacio del usuario se pueden reflejar en el espacio del kernel. copias.

Si no hay asignación de memoria, el proceso del usuario necesita acceder al archivo del disco duro. Debe crear un caché de página en el espacio del kernel y copiar los datos del archivo del disco duro al caché de la página. y luego el proceso del usuario copia los datos de la caché de la página, lo que requiere dos copias. Después de la asignación de memoria, el archivo del disco duro se puede asignar directamente a la memoria virtual del kernel, reduciendo una copia.

Como se muestra en. la figura

comunicación entre procesos se refiere al proceso de intercambio de datos entre procesos.

Linux proporciona muchos mecanismos para la comunicación entre procesos, que incluyen principalmente canalización (tubería) y mensajes. cola (mensaje), señal (sinal), semáforo (semóforo), socket (socket), etc.

El programa del kernel asigna y abre un búfer del kernel en el área de espacio del kernel, el proceso de envío copia el datos al búfer de datos del espacio del kernel a través de copy_from_user, y el espacio del kernel copia los datos al proceso de recepción a través de copy_to_user, logrando así una comunicación entre procesos como se muestra en la figura

Mecanismo IPC de Linux. Hay dos problemas:

1. Los datos pasan a través del espacio de usuario-gt; el espacio de usuario del kernel, después de dos copias, la eficiencia no es alta

2. El proceso de recepción no puede avanzar. Conociendo el tamaño de los datos, solo puede crear un búfer de datos lo más grande posible u obtener el tamaño del cuerpo del mensaje a través del encabezado del mensaje API, lo que desperdicia espacio o tiempo.

Android inter -La comunicación del proceso se implementa a través de Binder. El principio de comunicación de Binder se presenta a continuación. Por qué Binder

El programa del kernel crea un búfer de recepción de datos y un búfer de recepción de datos. mapeo de memoria, así como la relación de mapeo del búfer del núcleo de datos y el proceso de recepción del espacio del usuario. El proceso de envío copia los datos al búfer de recepción de datos del núcleo a través de copy_from_user. buffer y el espacio de usuario del proceso de recepción, es equivalente a enviar los datos al proceso de recepción. Completado Una comunicación entre procesos como se muestra en la figura

El mecanismo de Binder se basa en la arquitectura c/s. consiste en Cliente, serv

er, ServiceManager y Binder Client, server y serviceManager son procesos independientes. Debido al aislamiento de los procesos de Linux, necesitan comunicarse con Binder.

La comunicación de Binder consta principalmente de tres pasos: registrar servicios y obtener servicios. , use el servicio como se muestra a continuación

Como puede ver en el diagrama de ejemplo del principio de implementación de Binder anterior, Binder se puede dividir en Java Binder, Native Binder y Kernal Binder. El desarrollo de aplicaciones requiere comprensión de Java Binder y Navive. Binder Aquí solo presentamos los principios básicos de Binder. Para obtener más información, consulte el enlace al final del artículo.

Gracias

/p/429a1ff3560c

<. p>/carson_ho/article/details/73560642? ops_request_misc=257B2522request255Fid2522253A25221596512173191951883530962522252C2522scm2522253A252220140713.1301023 34..2522257Damp; request_id=1 59651217319195188353096amp;