Red de conocimiento informático - Aprendizaje de programación - MMAP y copia cero

MMAP y copia cero

La tecnología Mmap es una tecnología que asigna archivos u otros objetos a la memoria.

Esta tecnología permite que los programas de usuario (espacio de usuario) accedan directamente a la memoria del dispositivo (espacio del kernel), lo cual es más eficiente que copiar datos entre el espacio del usuario y el espacio del kernel.

Comando de llamada al sistema: mmap(). Permite que los procesos disfruten de la memoria asignando los mismos archivos comunes entre procesos. Una vez que un archivo público se asigna al espacio de direcciones del proceso, el proceso puede acceder al archivo como si fuera una memoria normal sin llamar a los comandos de lectura (), escritura (), etc.

Comando de llamada al sistema: mmap() permite que los procesos compartan memoria asignando el mismo archivo común.

La tecnología de copia cero es otra llamada al sistema, como el comando sendfile en Linux. Reduce el proceso de copia de datos del espacio del usuario y del espacio del kernel en la memoria, mejorando así la eficiencia del procesamiento de la CPU.

El sistema distribuido de mensajería de publicación y suscripción Kafka (más información) hace un uso inteligente de ambas tecnologías.

MMAP se utiliza para conectar el espacio del usuario y el espacio del kernel y asignar parte de la memoria a parte del espacio en el disco.

Proceso: los datos provienen de la NIC, van al kernel, se leen en un servicio en el espacio del usuario, el servicio los procesa y los arroja a MMAP, luego el kernel copia los datos al disco.

Si no hay una copia cero, el espacio de usuario primero llama al método de lectura del kernel para leer el archivo en el disco y almacena los datos del disco en el espacio de usuario (los datos provienen del disco -> espacio del kernel -> espacio de usuario ); Luego llame al método de escritura del kernel y envíe los datos a la tarjeta de red (los datos provienen del espacio del usuario->espacio del kernel->tarjeta de red). Dado que los datos no cambian los datos en el modo de usuario, esto provoca un desperdicio del flujo de datos.

El kernel tiene un método llamado sendfile (out_fd, in_fd, offset, size). El usuario envía comandos directamente al kernel y luego el kernel puede enviar datos directamente desde el disco a la memoria a través del kernel. .