私はLinux共有メモリを研究していたが、偶然にこのipcs
コマンドを見つけました。
マニュアルページから:
ipcs - provide information on ipc facilities
ipc
マニュアルページには説明がありませんが、プロセス間通信を示す可能性が高くなります。これは、共有メモリセグメント、メッセージキュー、セマフォ配列など、リストされている情報の文脈でも意味があります。
ipcs
linux / unixのすべてが「ファイル」であるか、少なくともファイルに似たオブジェクトであるため?にリストされている要素では、「ファイル」はどこにあるのだろうか。
私が作成した名前付きパイプmkfifo
がにリストされていないのはなぜですかipcs
?私が理解しているように、fifoはキューです。 Named Pipeの生成は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方式はUnixyではなく「ファイル」ではないため、広く批判されています。
名前付きパイプとメッセージキューが統合されていない理由の説明はありませんが、その起源は同じであると確信しています。あるグループは名前付きパイプが欲しかったのでそれを選択しました。