para usar la memoria compartida, debe tener los siguientes pasos: 1 abre una shmget memoria compartida () 2 permite que el actual proceso de usar una compartida shmat bloque de memoria común () 3 de escritura /lectura 4. prohibición de este proceso utiliza esta shmdt memoria compartida () 5. Suprimir esta shmctl memoria compartida () o la línea de comandos ipcrm
memoria compartida puede decirse que es uno de los más útiles modelo de comunicación proceso, que es el más rápido forma IPC. Dos procesos diferentes A, medios de memoria compartida B es la misma memoria física se asigna al proceso A B propio espacio, dirección de proceso. Un proceso se puede ver al instante actualizar datos de la memoria compartida de proceso B, y viceversa. Debido a múltiples procesos comparten la misma región de la memoria, la necesidad inevitable algún tipo de mecanismo de sincronización, las cerraduras de exclusión mutua y semáforos pueden ser.
a: Conceptos
beneficio obvio de utilizar una comunicación de memoria compartida de alta eficiencia, ya que el proceso puede ser directamente leer y escribir en la memoria, sin la necesidad de cualquier copia de datos. Como conducto para la comunicación y colas de mensajes, se requiere copia de datos en el espacio de cuatro núcleo y el usuario, y la única copia de los datos de la memoria compartida en dos ocasiones [1]: una desde el archivo de entrada a la zona de memoria compartida, compartida desde otro área de memoria al archivo de salida. De hecho, en la memoria compartida entre los procesos no siempre hay una pequeña cantidad de datos de lectura y escritura no asignado después, cuando hay una nueva comunicación, re-establecer un área de memoria compartida. Sin embargo, mantener el área compartida, hasta que se complete la comunicación, por lo que los datos de contenido se ha almacenado en la memoria compartida, y no escribir el archivo. memoria compartida contenido es a menudo sólo cuando se escribe en el archivo para levantar el mapa. Por lo tanto, la eficacia de la comunicación utilizando la memoria compartida es muy alta. Linux 2.2.x del kernel es compatible con una variedad de memoria compartida, como mmap (llamada) del sistema, la memoria compartida POSIX, y la memoria compartida System V. distribuciones de Linux como RedHat 8.0 mmap apoyo () llamada al sistema y el sistema V de memoria compartida, pero no se dio cuenta de memoria compartida POSIX, en este documento se describen los principios y la aplicación del Sistema V API de memoria compartida.
System V de memoria compartida se refiere a todos los datos compartidos en un área de memoria compartida (IPC región de memoria compartida), cualquier proceso que desea tener acceso a los datos hay que añadir un bloque de memoria en el espacio de direcciones de este proceso para almacenar datos de los mapas compartidos páginas de memoria física.
File System V es un sistema de archivos especial mediante la asignación de la memoria compartida SHM comunicación entre procesos. Es decir, cada región de memoria compartida que corresponde a un archivo especial en el SHM sistema de archivos (que está vinculada por la estructura shmid_kernel), se explicará más adelante.
entre
proceso tiene que ser colocado en un dato de IPC región de memoria compartida compartida denominada el lugar, todos requieren el acceso a la zona compartida del proceso debe ser para mapear la región para compartir el espacio de direcciones de este proceso a seguir. Memoria compartida System V IPC obtener o crear un área de memoria compartida, y devuelve el identificador correspondiente por shmget. Kernel en la obtención o garantía shmget crear un área de memoria compartida, inicializar el área de memoria compartida estructura shmid_kernel correspondiente, al mismo tiempo, también en un SHM especial del sistema de archivos, crear y abrir un archivo con el mismo nombre, y establecer los archivos correspondientes en la memoria dentry y la estructura de inodo, el archivo recién abierto no pertenece a ningún proceso (cualquier proceso puede acceder al área de memoria compartida). Todo esto se hace la llamada al sistema shmget. Nota: Cada zona tiene una memoria de estructura de control estructura shmid_kernel compartida, shmid_kernel región de memoria compartida es muy importante en una estructura de datos que se almacena en el puente, y la gestión del sistema de archivos se combinan, se define como sigue: struct {struct shmid_kernel kern_ipc_perm shm_perm; struct file * shm_file; int id; shm_nattch largo sin signo; sin firmar shm_segsz larga; time_t shm_atim; time_t shm_dtim; time_t shm_ctim; pid_t shm_cprid; pid_t shm_lprid;}; la estructura del campo más importante debe ser shm_file, almacena será abordar archivo de asignación. Cada área de memoria de objetos compartidos que corresponde a un archivo específico en la SHM sistema de archivos, en circunstancias normales, un archivo SHM sistema de archivos especial no se utiliza en la lectura (), write () para acceder similares, al tiempo que el modo de memoria compartida después de que los archivos mapeados en el espacio de direcciones del proceso, que puede ser utilizado directamente acceder a su acceso a la memoria.
como colas de mensajes y semáforos como por las estructuras de datos del núcleo ipc_ids struct shm_ids mantienen todo el sistema compartido región de memoria. Figura encima shm_ids.entries ipc_id variable se refiere a una matriz de estructura, y cada matriz tiene una estructura ipc_id kern_ipc_perm estructura punta puntero. Aquí debe ser familiar para el lector, para la región de memoria compartida del sistema V es, el anfitrión es kern_ipc_perm estructura shmid_kernel, shmid_kernel se utiliza para describir una región de memoria compartida, de manera que el núcleo puede controlar todo el sistema de región compartida. Mientras tanto, en la configuración de un tipo de archivo puntero que apunta a la shmid_kernel shm_file SHM sistema de archivos archivos correspondientes, de manera que, en el área de memoria compartida en asociación con el archivo de SHM en un sistema de archivos. Después de crear una región de memoria compartida, que debe ser mapeada en el espacio de direcciones del proceso, llamadas al sistema para completar esta función shmat (). Porque cuando se llama a shmget (), sistema de archivos SHM se ha creado en un archivo con el mismo nombre que la región de memoria compartida, por lo tanto corresponde, llame shmat () es equivalente al proceso de archivo de asignación del mismo nombre que la SHM sistema de archivos en el proceso.
II: System V memoria compartida API
memoria V compartida para el sistema, principalmente en los siguientes API: shmget (), shmat (), shmdt () y shmctl (). # include < sys /ipc.h > # include < sys /shm.h >
shmget () se utiliza para obtener el ID de área de memoria compartida, si el área especificada no existe en la zona compartida correspondiente para crear . shmat () para mapear la región de memoria compartida al espacio de direcciones del proceso de llamada para ir, por lo que el proceso puede ser fácilmente compartida zona para una visita. shmdt () se usa para aliviar el proceso de mapeo de la región de memoria compartida. shmctl realizar una operación de control de la región de memoria compartida.
III: Ejemplo
dos procesos a modo de memoria compartida ejemplo de sistema de comunicación V.
# include < sys /ipc.h > # include < sys /shm.h > # include < sys /types.h > # include < unistd.h > typedef struct {char nombre [ ,null,null,0],4]; int edad;} la gente; //espacio de direcciones del proceso abre una región de memoria compartida para el mapeo de memoria principal (int argc, char ** argv) {int shm_id, I; key_t clave; Char temperatura, la gente * p_map; char * name = " /dev /shm /myshm2 "; clave = ftok (nombre, 0); //ex son 'a'if (clave == - 1) perror (" error ftok "); shm_id = shmget (clave, 4096, IPC_CREAT), si (shm_id == - 1) p_map = (personas *) shmat (shm_id, NULL, 0); //espacio de direcciones de proceso de mapeado en memoria temp = 'a'; para (i = 0; i < 10; i ++) testwrite.c crear un área de memoria compartida sistema V, y datos de formato en ella escritas; testread.c acceder al V compartido área de memoria mismo sistema, lectura a la datos formateados. Los dos programas se compilan para testwrite y testread, y se ha realizado ./testwrite ./testread ./testread la salida siguiente: nombre: b edad 20; nombre: c edad 21; nombre: d edad 22; nombre de: e edad 23; nombre: F edad 24; nombre: g edad 25; nombre: h edad 26; nombre: Mi edad 27; nombre: edad j 28; nombre: k 29 años de edad;
Varios archivos de inicio Agregar varios archivos de inicio diciendo que la compilación será incor
RedHat Linux proporciona protección de servidor de seguridad para aumentar la seguridad del sistema.
En la actualidad, existe una vulnerabilidad muy grave de Bash en Internet que permite a los piratas
Usar un terminal de Linux es más que solo ingresar comandos. Después de aprender e
Enseñarle completamente libre de firewall de Linux de construcción propia
Métodos comunes de solución de problemas para sistemas Linux
Controlador de dispositivo LINUX: carrera, bloque, código de reingreso
Shell script modifica automáticamente la información de IP
Tenga cuidado en los comandos del sistema Linux. Comandos peligrosos de Linux
Cómo liberar manualmente la memoria de Linux
Hay varias formas de montar rootfs cuando se inicia Linux.
El shell de Linux implementa el servicio HTTP
Instalación de Linux ARM-LINUX-GCC
Cómo construir un servidor vpn l2tpd con centOS5.5
proceso de compilación del núcleo carretera principal sistema Linux para resolver
Inicie el Administrador de tareas de Windows 2000 /XP con acceso directo
Win7 no se puede instalar, cómo hacer
Hay cuatro versiones de Windows 8: los usuarios deben saber 10 cosas
Dos computadoras portátiles con Vista tienen configuraciones de acceso inalámbrico
Eliminar win7 Explorer Íconos irrazonables de iconos
La solución para el espacio en disco C en el sistema Win10 es cada vez más grande
La función principal de Windows 8 Upgrade Assistant
Solución de pantalla azul después de instalar Vista reiniciar