¿Dónde están los "archivos" de ipcs y por qué las canalizaciones con nombre (mkfifo) no figuran en ipcs?

¿Dónde están los "archivos" de ipcs y por qué las canalizaciones con nombre (mkfifo) no figuran en ipcs?

Estaba investigando sobre la memoria compartida de Linux y me topé con este ipcscomando.

Desde la página de manual:

ipcs - provide information on ipc facilities

ipcno se explica en la página de manual, pero lo más probable es que signifique comunicación entre procesos. Esto también tiene sentido por el contexto de la información que enumera: segmentos de memoria compartida, colas de mensajes y matrices de semáforos.

Me preguntaba, dado que todo en Linux/Unix es un "archivo", o al menos un objeto similar a un archivo, ¿dónde están los "archivos" de los elementos enumerados en ipcs?

¿Por qué las canalizaciones con nombre creadas mkfifono figuran en ipcs? Hasta donde tengo entendido, los fifos son colas. ¿En qué se diferencian las canalizaciones con nombre creadas por mkfifode las colas de mensajes creadas por ipcmk?

Respuesta1

Hay varias preguntas aquí:

  • ¿Dónde están los archivos de los elementos enumerados en ipcs?

Eso depende. Las colas son visibles en un sistema de archivos virtual. De mq_overview(7):

   Mounting the message queue file system
       On  Linux,  message queues are created in a virtual file system.  (Other implementations may also provide such a feature, but
       the details are likely to differ.)  This file system can be mounted (by the superuser) using the following commands:

           # mkdir /dev/mqueue
           # mount -t mqueue none /dev/mqueue

Memoria compartida (shm_overview(7))

   Accessing shared memory objects via the file system
       On Linux, shared memory objects are created in a (tmpfs) virtual file system, normally mounted under /dev/shm.  Since  kernel
       2.6.19,  Linux supports the use of access control lists (ACLs) to control the permissions of objects in the virtual file sys-
       tem.

Semáforos (sem_overview(7))

   Accessing named semaphores via the file system
       On Linux, named semaphores are created in a virtual file system, normally mounted under /dev/shm,  with  names  of  the  form
       sem.somename.  (This is the reason that semaphore names are limited to NAME_MAX-4 rather than NAME_MAX characters.)

       Since  Linux  2.6.19,  ACLs can be placed on files under this directory, to control object permissions on a per-user and per-
       group basis.
  • ¿Por qué las canalizaciones con nombre creadas por mkfifono figuran en ipcs?

No estoy seguro de eso así que solo te daré mi opinión y no una respuesta. Mi hipótesis es que, como están presentes en el sistema de archivos real, al igual que los sockets, no se administran de la misma manera que el kernel administra los segmentos de memoria compartida y las colas de mensajes.

  • ¿En qué se diferencian las canalizaciones con nombre creadas por mkfifo de las colas de mensajes creadas por ipcmk?

La principal diferencia entre una canalización y una cola de mensajes es que una canalización es solo un canal de comunicación entre dos procesos. Funciona a nivel de bytes. Puedes leer y escribir como quieras y tienes que diseñar el protocolo de comunicación. Son FIFO estrictos: un byte escrito antes que otro siempre se leerá antes en el otro extremo. Una cola de mensajes trata con mensajes y no con bytes. Y, por lo general, son menos estrictamente FIFO. Depende de la implementación pero pueden soportar un mecanismo de prioridad entre mensajes.

En cierto modo, las colas de mensajes proporcionan más funcionalidades pero, si lo desea, puede implementar FIFO con colas de mensajes y viceversa.

Respuesta2

ipcsle permite ver los métodos de comunicación entre procesos denominados "System V IPC". System V IPC es ampliamente ignorado en la actualidad, peroen el pasado era claramente desagradable. Aparentemente, en los primeros días, diferentes grupos implementarían lo que necesitaban, yalguien necesitaba colas de mensajes, memoria compartida y semáforos..

Esos métodos IPC fueron muy criticados por no ser muy Unixy, por no ser un «archivo», lo mismo que cuestionas.

No tengo una explicación de por qué las canalizaciones con nombre y las colas de mensajes no están integradas, pero apuesto a que se originó de la misma manera: un grupo quería canalizaciones con nombre, así que simplemente fueron y las hicieron.

información relacionada