%20%D0%BD%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D1%8B%20%D0%B2%20ipcs.png)
Я исследовал общую память Linux и наткнулся на эту ipcs
команду.
Из страницы руководства:
ipcs - provide information on ipc facilities
ipc
не объясняется на странице руководства, но, скорее всего, это означает межпроцессное взаимодействие. Это также имеет смысл из контекста информации, которую он перечисляет: сегменты общей памяти, очереди сообщений и массивы семафоров.
Мне было интересно, поскольку все в Linux/Unix является «файлом» или, по крайней мере, объектом, подобным файлу, где находятся «файлы» из элементов, перечисленных в ipcs
?
Почему именованные каналы, созданные mkfifo
не перечислены в ipcs
? Насколько я понимаю, fifos — это очереди. Чем именованные каналы, созданные , mkfifo
отличаются от очередей сообщений, созданных ipcmk
?
решение1
Здесь есть несколько вопросов:
- Где находятся файлы элементов, перечисленных в ipcs?
Зависит от обстоятельств. Очереди видны в виртуальной файловой системе. Из 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
Общая память (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_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.
- Почему именованные каналы, созданные
mkfifo
не перечислены вipcs
?
Я не уверен в этом, поэтому я дам вам только свое мнение, а не ответ. Моя гипотеза заключается в том, что поскольку они присутствуют в реальной файловой системе, как и сокеты, они не управляются так же, как ядро управляет сегментами общей памяти и очередями сообщений.
- Чем именованные каналы, созданные mkfifo, отличаются от очередей сообщений, созданных ipcmk?
Главное различие между каналом и очередью сообщений заключается в том, что канал — это всего лишь канал связи между двумя процессами. Он функционирует на уровне байтов. Вы можете читать и писать так, как хотите, и вам нужно разработать протокол связи. Они являются строгими FIFO: байт, записанный раньше другого, всегда будет прочитан раньше на другом конце. Очередь сообщений имеет дело с сообщениями, а не с байтами. И обычно они являются менее строгими FIFO. Это зависит от реализации, но они могут поддерживать механизм приоритета между сообщениями.
В некотором смысле очереди сообщений предоставляют больше функциональных возможностей, но при желании можно реализовать FIFO с очередями сообщений и наоборот.
решение2
ipcs
позволяет увидеть методы межпроцессного взаимодействия, называемые "System V IPC". System V IPC в настоящее время широко игнорируется, нов прошлом был явно нелюбим. По-видимому, в первые дни разные группы реализовывали то, что им было нужно, икому-то нужны были очереди сообщений, общая память и семафоры..
Эти методы IPC широко критиковались за то, что они не совсем соответствуют Unix, за то, что они не являются «файлом», то есть тем же самым, в чем вы сомневаетесь.
У меня нет объяснения, почему именованные каналы и очереди сообщений не интегрированы, но я готов поспорить, что это произошло по той же причине: одна группа хотела именованные каналы, поэтому они просто пошли и сделали это.