ipcs の「ファイル」はどこにありますか。また、名前付きパイプ (mkfifo) が ipcs にリストされていないのはなぜですか。

ipcs の「ファイル」はどこにありますか。また、名前付きパイプ (mkfifo) が ipcs にリストされていないのはなぜですか。

Linux の共有メモリについて調べていたところ、偶然このipcsコマンドを見つけました。

man ページから:

ipcs - provide information on ipc facilities

ipcマニュアル ページでは説明されていませんが、これはおそらくプロセス間通信を意味します。また、共有メモリ セグメント、メッセージ キュー、セマフォ配列などのリストされている情報のコンテキストからも、これは意味をなします。

Linux/Unix のすべてが「ファイル」、または少なくともファイルのようなオブジェクトであるため、 にリストされている要素の「ファイル」はどこにあるのだろうかと思いましたipcs

によって作成された名前付きパイプmkfifoが にリストされていないのipcsはなぜですか? 私の理解では、FIFO はキューです。 によって作成された名前付きパイプは、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 によって作成されたメッセージ キューとどう違うのでしょうか?

パイプとメッセージ キューの主な違いは、パイプは 2 つのプロセス間の通信チャネルにすぎないことです。パイプはバイト レベルで機能します。必要な方法で読み書きできますが、通信プロトコルを設計する必要があります。これらは厳密な FIFO です。つまり、あるバイトが別のバイトより先に書き込まれると、もう一方の端では常に先に読み取られます。メッセージ キューは、バイトではなくメッセージを扱います。通常、これらは厳密な FIFO ではありません。実装によって異なりますが、メッセージ間の優先順位のメカニズムをサポートできます。

ある意味では、メッセージ キューはより多くの機能を提供しますが、必要に応じて、メッセージ キューで FIFO を実装することも、その逆も可能です。

答え2

ipcs「System V IPC」と呼ばれるプロセス間通信方式を見ることができます。System V IPCは現在広く無視されていますが、過去には明らかに嫌われていた初期の頃は、さまざまなグループがそれぞれ必要なものを実装し、メッセージ キュー、共有メモリ、セマフォが必要な人もいました。

これらの IPC メソッドは、あまり Unix 的ではない、つまり「ファイル」ではないという理由で広く批判されてきました。これは、あなたが疑問に思っていることと同じです。

名前付きパイプとメッセージ キューが統合されていない理由については説明できませんが、おそらく同じ理由から始まったのでしょう。つまり、あるグループが名前付きパイプを希望したので、それを実装したのです。

関連情報