где находятся «файлы» ipcs и почему именованные каналы (mkfifo) не перечислены в ipcs

где находятся «файлы» ipcs и почему именованные каналы (mkfifo) не перечислены в ipcs

Я исследовал общую память 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, за то, что они не являются «файлом», то есть тем же самым, в чем вы сомневаетесь.

У меня нет объяснения, почему именованные каналы и очереди сообщений не интегрированы, но я готов поспорить, что это произошло по той же причине: одна группа хотела именованные каналы, поэтому они просто пошли и сделали это.

Связанный контент