onde estão os "arquivos" do ipcs e por que os pipes nomeados (mkfifo) não estão listados no ipcs

onde estão os "arquivos" do ipcs e por que os pipes nomeados (mkfifo) não estão listados no ipcs

Eu estava pesquisando sobre memória compartilhada do Linux e me deparei com esse ipcscomando.

Na página de manual:

ipcs - provide information on ipc facilities

ipcnão é explicado na página de manual, mas provavelmente significa comunicação entre processos. Isso também faz sentido no contexto das informações listadas: segmentos de memória compartilhada, filas de mensagens e matrizes de semáforos.

Eu queria saber, já que tudo no Linux/Unix é um "arquivo", ou pelo menos um objeto semelhante a um arquivo, onde estão os "arquivos" dos elementos listados em ipcs?

Por que os pipes nomeados criados por mkfifonão estão listados em ipcs? Pelo que entendi, fifos são filas. Qual a diferença entre os pipes nomeados criados por mkfifoe as filas de mensagens criadas por ipcmk?

Responder1

Existem várias perguntas aqui:

  • Onde estão os arquivos dos elementos listados em ipcs?

Depende. As filas são visíveis em um sistema de arquivos 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

Memória compartilhada (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 que os pipes nomeados criados por mkfifonão estão listados em ipcs?

Não tenho certeza disso, então darei apenas minha opinião e não uma resposta. Minha hipótese é que, como estão presentes no sistema de arquivos real, como os soquetes, não são gerenciados da mesma forma que o kernel gerencia segmentos de memória compartilhada e filas de mensagens.

  • Qual a diferença entre os pipes nomeados criados pelo mkfifo e as filas de mensagens criadas pelo ipcmk?

A principal diferença entre um pipe e uma fila de mensagens é que um pipe é apenas um canal de comunicação entre dois processos. Funciona no nível de byte. Você pode ler e escrever da maneira que quiser e precisa projetar o protocolo de comunicação. São FIFOs estritos: um byte escrito antes de outro sempre será lido antes na outra extremidade. Uma fila de mensagens lida com mensagens e não com bytes. E geralmente são menos estritamente FIFO. Depende da implementação mas podem suportar um mecanismo de prioridade entre mensagens.

De certa forma, as filas de mensagens fornecem mais funcionalidades, mas você pode, se quiser, implementar FIFOs com filas de mensagens e vice-versa.

Responder2

ipcspermite ver métodos de comunicação entre processos denominados "System V IPC". O System V IPC é amplamente ignorado atualmente, masno passado era nitidamente detestado. Aparentemente, nos primeiros dias, diferentes grupos implementariam o que precisavam, ealguém precisava de filas de mensagens, memória compartilhada e semáforos..

Esses métodos IPC foram muito criticados por não serem muito Unixy, por não serem um "arquivo", a mesma coisa que você questiona.

Não tenho uma explicação de por que pipes nomeados e filas de mensagens não estão integrados, mas aposto que se originou da mesma maneira: um grupo queria pipes nomeados, então eles simplesmente foram e os fizeram.

informação relacionada