%20n%C3%A3o%20est%C3%A3o%20listados%20no%20ipcs.png)
Eu estava pesquisando sobre memória compartilhada do Linux e me deparei com esse ipcs
comando.
Na página de manual:
ipcs - provide information on ipc facilities
ipc
nã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 mkfifo
não estão listados em ipcs
? Pelo que entendi, fifos são filas. Qual a diferença entre os pipes nomeados criados por mkfifo
e 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
mkfifo
não estão listados emipcs
?
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
ipcs
permite 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.