Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1K
Vistas
Memoria compartida de Linux: shmget() vs mmap()?

En este hilo, se sugiere que el OP use mmap() en lugar de shmget() para obtener memoria compartida en Linux. Visité esta página y esta página para obtener documentación, pero la segunda da un ejemplo oscuro con respecto a mmap() .

Siendo casi un novato y necesitando compartir información (en forma de texto) entre dos procesos, ¿debería usar el método shmget() o mmap() ? ¿Y por qué?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Ambos métodos son viables. El método mmap es un poco más restrictivo que shmget , pero más fácil de usar. shmget es el antiguo modelo de memoria compartida de System V y tiene el soporte más amplio. mmap / shm_open es la nueva forma POSIX de hacer memoria compartida y es más fácil de usar. Si su sistema operativo permite el uso de memoria compartida POSIX, le sugiero que lo haga.

Algunos consejos:

  • Si crea a sus hijos a través de una fork , mmap con MAP_ANONYMOUS | MAP_SHARED es, con mucho, la forma más fácil: solo una llamada. Sin embargo, MAP_ANONYMOUS es una extensión de Linux no especificada por POSIX .
  • Si inicia los procesos de forma independiente, pero puede proporcionarles un nombre de memoria compartida, entonces shm_open (+ ftruncate ) + mmap con MAP_SHARED son dos o tres llamadas. Requiere librt en algunos sistemas operativos.
  • Si su sistema operativo tiene /dev/shm/ entonces shm_open es equivalente a abrir un archivo en /dev/shm/ .
over 4 years ago · Santiago Trujillo Denunciar

0

Mucho de esto tiene que ver con la historia y las direcciones futuras.

Érase una vez dos versiones principales (y algo competitivas) de Unix: system V y BSD. SysV tenía sus propias versiones de IPC, incluidos los 3 grandes: memoria compartida, semáforos y colas de mensajes. POSIX llegó para tratar de unir las cosas.

Entonces, en la actualidad, tenemos dos versiones: memoria compartida posix, MQ y semáforos y las versiones sysV. Solo para hacer las cosas un poco más confusas, las versiones sysV también son parte de posix.

Entonces, básicamente, su pregunta es si desea usar la memoria compartida de estilo Posix o sysV. En general, la mayoría de la gente tiene una visión a largo plazo y opta por Posix porque parece ser el camino hacia el futuro. Pero, de manera realista, las cosas de sysV están tan integradas en tantos sistemas que debe tener serias dudas de que alguna vez desaparecerán.

Entonces, eliminando las cosas a largo plazo, todo se reduce a lo que tiene sentido para su proyecto y sus gustos. En general, las versiones de sysV tienden a ser un poco más poderosas, pero tienen una interfaz torpe que la mayoría de las personas encuentran un poco desconcertante al primer contacto. Esto es particularmente cierto en el caso de los semáforos sysV y las colas de mensajes. En términos de memoria compartida, se puede argumentar que tanto sysV como posix son incómodos. Las versiones de sysV llevan el ftok torpe y las cosas clave, mientras que el posix termina tomando múltiples llamadas y algunas condiciones de carrera para configurar. Desde el exterior, las versiones posix tienen la ventaja de que utilizan el sistema de archivos y se pueden mantener con funciones de línea de comandos estándar como 'rm' en lugar de depender de programas de utilidad separados (por ejemplo, ipcs ) que requiere sysV.

Entonces, ¿cuál deberías usar? Por regla general, las versiones posix. Pero realmente debería familiarizarse con las versiones de sysV. Tienen algunas características que van más allá de las capacidades de las versiones de posix que quizás desee aprovechar en situaciones específicas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda