アプリケーションソフトウェアの構築において,ユーザインタフェースと,データ処理エンジンのモジュールを分けて設けるといったことはよく行われる手法である。複雑なデータを取り扱ったり,何かのデバイスからの入力を監視したり,通信に対応する必要がある場合,データ処理エンジンの側のモジュールはシステムに常駐させる必要がある。 Windows 2000やWindows NTのプラットフォームには,システムに常駐させて稼動させることのできる「サービスプロセス」(あるいはたんに「サービス」)と呼ばれるプログラムの形態がある。 Windows のサービスプロセスは,Unix システムやLinux システムの「デーモン」プロセスに相当するが,その書き方に少々約束ごとがある。サービスプロセスをプログラミングする際に行う必要があるのは主に次のようなことだ。 サービス本体には,Windows のサービスコントロールマ
■はじめに 今回は、Linux上で2つ以上のプロセスがデータを受け渡すためのに必要なプログラミングについて紹介します。 UNIXのプロセス通信機構としては、パイプ (pipe)、ソッケト(socket)、メッセージキュー(message queue)、 共有メモリ (shared memory)、セマフォ(semaphore)などがあります。 後者3つは、 SystemV IPC(Inter Process Communication)と呼ばれるもので、 その中のメッセー ジキュー、共有メモリーのプログラミングについて説明します。 System V IPCは、歴史的には、名前の通りSystem V Unixで実装されたもので、 現在のほとんどのUnix互換OSで利用可能になっております。 もちろんLinuxカー ネルも例外でなくSystem V IPCが利用可能です。 カーネルのコンパイ
by Leonardo Giordani <leo.giordani(at)libero.it> 著者紹介: Politecnico of Milan の通信工学部の学生で、ネットワーク管理を行っています。 プログラミング (主にアセンブリ言語と C/C++) に興味を持っています。 1999 年以降は、ほとんど Linux/Unix だけを扱っています。 目次: はじめに メッセージキューの基礎 プロトコルの作成 System V メッセージキュー お薦めの本 要約: この連載記事の目的は、マルチタスキングの考え方を紹介し、それが Linux オペレーティングシステムではどのように実装されているかを説明することです。 まずはマルチタスキングの基礎になる概念的な部分から始めて、最終的にはプロセス間通信を行うアプリケーションを完成させます。 そこではシンプルですが効率的な通信プロトコルを使い
Introductionメッセージキューは、メッセージのリンク構造と考えることが出来る 各メッセージはレコードであり、各メッセージには送信側が指定した優先度が付いている。 メッセージの書き込みに際しては、そのキューにおいて何らかのプロセスがメッセージの到着を待っていることが要求されない。(パイプと対照的) メッセージキューはパイプと異なり、カーネル持続性(kernel persistence)を持つ。(パイプ、FIFOでは、それらが最後にクローズされる際に、残っているデータは破棄される。) PosixメッセージキューとSystem V メッセージキューの違いPosixメッセージキューからの読み出しは、常に最も高い優先度の最も古いメッセージを返す。System V メッセージキューでは、任意の優先度のメッセージを読み出すことが出来る。 Posixメッセージキューでは、空のキューにメッセージが
前回:http://d.hatena.ne.jp/debian36/20080220/1203510497 ちょっと前に挑戦して、うまくいかなかったPOSIX メッセージキューを用いたIPCプログラミング。 いろいろ試した結果、前回の ERRNO 90 (ELOOP) の原因は、 mq_receive 時のバッファサイズ指定ミスのようでした。 SysVのMsgQだと、メッセージキューそのものの属性がどうであろうと、 そのときに(msgrcvコール時に)取得するメッセージ以上のサイズをmsgrcv()のlength引数に渡せばよかったのですが、 POSIXのMsgQの場合、実際に格納されているメッセージのサイズがどうであろうと、対象となるメッセージキューに格納されうる最大のサイズを mq_receive() のlen 引数に渡さなければいけないようです。 そのため、mq_receive()す
デバイスドライバによるプロセス間通信 - ka2yanの日記のデバイスドライバは、既存のプロセス間通信と比べて本当に早いのか、を測定した。 調べること 100バイト程度のメッセージ(画像データ等の大容量データを対象にしているのではない)をやりとりするプロセス間通信で一番早いのは何か? 測定するプロセス間通信は、前回の日記に書いたデバイスドライバ(共有メモリ方式)とデバイスドライバ(メッセージRead/Write)、そして、メッセージキュー(POSIX)、UNIXドメインソケット、名前付パイプ(FIFO)の5種類。 メッセージキュー(System V)は、fd として扱えないので、測定しない。 測定プログラムの概要 −2プロセス間で128バイトのメッセージを送受信を繰り返すプログラム −2プロセスは、NON_BLOCKING でメッセージをread/write −read/writeする前に
次のページ 前のページ 目次へ 6. プロセス間通信の仕組み プロセスは、他のプロセスやカーネルと相互に通信することで、自らの作業の調整 を図っている。Linux では、いくつかのプロセス間通信(Inter-Process Communication, IPC)のメカニズムがサポートされている。シグナルとパイプは その典型であるが、Linux は System V IPC メカニズムもサポートしている。System V IPC という名称は、Unix の当該リリースで初めて登場したことからその名が付けられ ている。 6.1 シグナル シグナルは、Unix システムで使用される最も古いプロセス間通信の方法である。 シグナルは、ひとつ以上のプロセスに対して非同期イベント(asynchronous events)を 伝達するために使用される。シグナルが生成されるのは、キーボード割り込みがあっ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く