onde estão os “arquivos” de ipcs e porque os pipes nomeados (mkfifo) não estão listados em ipcs

2

Eu estava pesquisando sobre a memória compartilhada do Linux e tropecei nesse comando ipcs .

Da página do manual:

ipcs - provide information on ipc facilities

ipc não é explicado na página man, mas provavelmente significa comunicação entre processos. Isso também faz sentido a partir do contexto das informações que ele lista: 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 mkfifo não estão listados em ipcs ? Tanto quanto eu entendo fifos são filas. Como os pipes nomeados criados por mkfifo são diferentes das filas de mensagens criadas por ipcmk ?

    
por lesmana 22.04.2013 / 12:31

2 respostas

3

ipcs permite que você veja métodos de comunicação entre processos denominados "System V IPC". O System V IPC é amplamente ignorado no momento, mas no passado era nitidamente desacreditado . Aparentemente, nos primeiros dias, diferentes grupos implementavam o que precisavam, e alguém precisava de filas de mensagens, memória compartilhada e semáforos. .

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

Eu não tenho uma explicação para o porque os pipes nomeados e as filas de mensagens não são integrados, mas eu aposto que eles se originaram da mesma maneira: um grupo queria pipes nomeados, então eles foram e os fizeram.

    
por 22.04.2013 / 14:31
5

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_visualização (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 mkfifo não estão listados em ipcs ?

Eu não tenho certeza sobre isso, então só vou dar minha opinião e não uma resposta. Minha hipótese é que, como eles estão presentes no sistema de arquivos real, como os sockets, não são gerenciados da mesma maneira que o kernel gerencia segmentos de memória compartilhada e filas de mensagens.

  • Como os pipes nomeados criados pelo mkfifo são diferentes da mensagem filas criadas por 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 do byte. Você pode ler e escrever da maneira que quiser, e você tem que projetar o protocolo de comunicação. Eles são FIFOs estritos: um byte escrito antes do outro sempre será lido antes no outro extremo. Uma fila de mensagens lida com mensagens e não com bytes. E geralmente, eles são menos estritamente FIFO. Depende da implementação, mas eles podem suportar um mecanismo de prioridade entre as 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.

    
por 22.04.2013 / 14:23

Tags