Descripción general del proceso del sistema Android Binder1

Tabla de contenido

introducción:

una copia

Carpeta de un proceso de comunicación.

Interacción de Binder durante el inicio de la aplicación

Modo C/S:

COMANDO de carpeta

Estructura de datos BWR:


introducción:

La carpeta de Android se desarrolla a partir de openbinder. Incluyendo controlador de carpeta, capa nativa, capa Java. Utilice problemas clásicos como punto de partida en su viaje para comprender Binder.

¿Por qué elegir aglutinante?

El rendimiento de la carpeta es bueno, conveniente y seguro.

El rendimiento es bueno, es decir, otras personas lo copian varias veces y la carpeta solo necesita copiarlo una vez.

una copia

¿Cómo lo hace una copia? ¿Por qué hay una copia menos?

Ejemplo: copiar_de_usuario + copiar_a_usuario

binder: copy_from_user + mapeo mmap, la clave aquí es el mapeo, es decir, copiar al área de mapeo equivale a copiar al extremo opuesto.

La operación de mapear las direcciones virtuales del proceso y del kernel a la misma memoria física ocurre en el extremo receptor de datos.

Se produce una copia en el remitente de datos.

Tanto el espacio de direcciones del proceso virtual vm_area_struct como el espacio de direcciones del kernel virtual vm_struct están asignados al mismo espacio de memoria física.

Tengo una comprensión más intuitiva del concepto de copia.

Carpeta de un proceso de comunicación.

¿Cómo te comunicaste?

Protocolo de transmisión de Binder:
Primero, el Cliente escribe BC_TRANSACTION en el controlador de Binder.
El controlador de Binder responde al Cliente con un BR_TRANSACTION_COMPLETE, indicando que ha recibido la solicitud del Cliente. El
controlador de Binder envía el comando BR_TRANSACTION al servidor para su procesamiento. Después del Cuando se completa el procesamiento, devolverá BC_REPLY para notificar al controlador y el controlador de la carpeta recibirá el servidor. Después de que BC_REPLY en el terminal responda, también responderá
BR_TRANSACTION_COMPLETE al servidor y responderá BR_REPLY al Cliente para completar un proceso de comunicación completo.

Con la comprensión del proceso de comunicación, y luego combinado con una situación específica para comprender

Interacción de Binder durante el inicio de la aplicación

Primero prepare algunos conceptos:

Modo C/S:

Cliente: BpBinder.transact() envía una solicitud de transacción

Servidor: BBinder.ontransact() recibe la transacción correspondiente

COMANDO de carpeta

BINDER_WRITE_READ: escena de interacción de lectura y escritura de carpeta, IPC.talkWithDriver

BINDER_SET_CONTEXT_MGR: el proceso servicemanager se establece como administrador del contexto

BINDER_SET_MAX_THREADS:: Inicializa el objeto ProcessState, open_Driver, llama activamente a ProcessState.setThreadPoolMaxThreadCount()

BINDER_VERSION:

Estructura de datos BWR:

estructura binder_write_read

escribe aficionado

lectura_buff

continuará...

Supongo que te gusta

Origin blog.csdn.net/haigand/article/details/132246274
Recomendado
Clasificación