(57)【要約】      （修正有）【課題】1つのパケットの送受信をデータサイズの制限を受けることなく行えるパケットデータ通信方法およびその装置を提供する。【解決手段】ソケットを用いてプロセス間でパケットデータ通信を行うのにあたり、データの書込み読み出しを、動的に確保した共有メモリをアクセスにより行うことを特徴とするパケットデータ通信方式。【選択図】        図１
2004208105.tif 000002
【特許請求の範囲】
【請求項１】
ソケットを用いてプロセス間でパケットデータ通信を行うのにあたり、
データの書込み読み出しを、動的に確保した共有メモリをアクセスにより行うことを特徴とするパケットデータ通信方法。
【請求項２】
前記共有メモリのアクセスは、
送信プロセスにおいて共有メモリを作成し、データを書き込むステップと、
送信プロセスにおいてソケットにパケットを書き込むステップと、
受信プロセスにおいてソケットからパケットを読み出すステップと、
受信プロセスにおいて読み出したパケットを解釈するステップと、
受信プロセスにおいてデータを共有メモリから読み出し共有メモリを破棄するステップを含むことを特徴とする請求項１記載のパケットデータ通信方法。
【請求項３】
前記データは、可変長であることを特徴とする請求項１または請求項２記載のパケットデータ通信方法。
【請求項４】
前記共有メモリのアクセスは関数化されていて、アクセスにあたってはこの関数をコールすることを特徴とする請求項１から請求項３のいずれかに記載のパケットデータ通信方法。
【請求項５】
ソケットを用いてプロセス間でパケットデータ通信を行うパケットデータ通信装置であって、
データの書込みおよび読み出しを行うための共有メモリを設けたことを特徴とするパケットデータ通信装置。
【請求項６】
前記共有メモリは、データの書込みに先立って作成され、データの読み出し後に削除されることを特徴とする請求項５記載のパケットデータ通信装置。
【請求項７】
前記データは、可変長であることを特徴とする請求項５または請求項６記載のパケットデータ通信装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パケットデータ通信方法およびその装置に関し、詳しくは、データサイズに依存しないパケットデータ通信の改善に関するものである。
【０００２】
【従来の技術】
パケットデータ通信の態様の一つに、図３に示すような、ソケットを用いてプロセスＡ，Ｂ間で通信を行うプロセス間通信がある。ここで、プロセスは１つのプログラムを実行する最小単位であり、これらプロセスＡとプロセスＢの間で行われるデータ転送をプロセス間通信という。一方、ソケットは通信の端点ともいえるものであって、プロセス間通信の手段としては最も一般的なものである。このようなソケットを用いたプロセス間通信のプロトコルは、ASCII文字列やシステムで定義したパケットを用いて行うのが一般的である。
【０００３】
ところで、デジタル放送などのパケットデータの流れを監視するトランスポートストリーム監視システムでは、エラーが起きた場合のエラーログやそれらのデータをプロセス間でやり取りする場合が多々ある
【０００４】
そこで、これらパケットを用いてデータなどを送受信するのにあたっては、図４に示すように、データサイズを定義したパケットをソケットにwriteし、その後にデータ（の実体）をソケットにwriteすることが行われている。
【０００５】
例えば放送監視におけるエラーログとして、以下のような変数をもつ構造体のパケットが送受信され、エラーログはその時々でサイズが異なるものとする。
type：パケットのタイプ
operate  set/get：設定処理setを行うか？取得処理getを行うか？
command：パケットのコマンドID
dataType：データ型（int型、short型、double型、char型、…）
dataSize：このパケットの後にくるデータのサイズ
【０００６】
まず、送信プロセスがパケットを作成し、ソケットにwriteする。このパケットには、この後に送信するエラーログのサイズを書いておく。その後、エラーログを同様にwriteする。
【０００７】
次に、受信プロセスはこれを受けて、まずソケットからパケットサイズ分をreadする。その後、エラーログのサイズ分をreadする。
【０００８】
【特許文献１】
特開２００１−８２３９
【０００９】
特許文献１には、デジタル放送における放送監視業務の自動化および送出情報の品質向上に関する発明が開示されている。
【００１０】
【発明が解決しようとする課題】
しかし、従来の方法では、必ずソケットにパケットとエラーログ（の実体）の対をwrite/readしなければならない。
また、パケットサイズは常に一定であるのに対してエラーログはその時々で変動する可変長であり、固定長のものと可変長なものが同一ソケット内に流れるということは、受信プロセスでの処理が複雑になり、バグの温床となることが多々ある。
【００１１】
また、仮にパケット内にdataという構造体のメンバー（固定長領域）を持たせた場合、パケットサイズは固定長でなければならないことからデータサイズには必ず制限が発生してしまう。この結果、大きなエラーログ（データ）の送受信が出来なかったり、小さいエラーログ（データ）を送受信する場合には、write/readに不要な領域が多くなって、非常に使いづらいものになってしまう。
【００１２】
本発明はこれらの問題点に着目したものであり、その目的は、1つのパケットの送受信をデータサイズの制限を受けることなく行えるパケットデータ通信方法およびその装置を提供することにある。
【００１３】
【課題を解決するための手段】
このような目的を達成する請求項１の発明は、
ソケットを用いてプロセス間でパケットデータ通信を行うのにあたり、
データの書込み読み出しを、動的に確保した共有メモリをアクセスにより行うことを特徴とするパケットデータ通信方法である。
【００１４】
請求項２の発明は、請求項１記載のパケットデータ通信方法において、
前記共有メモリのアクセスは、
送信プロセスにおいて共有メモリを作成し、データを書き込むステップと、
送信プロセスにおいてソケットにパケットを書き込むステップと、
受信プロセスにおいてソケットからパケットを読み出すステップと、
受信プロセスにおいて読み出したパケットを解釈するステップと、
受信プロセスにおいてデータを共有メモリから読み出し共有メモリを破棄するステップを含むことを特徴とする。
【００１５】
請求項３の発明は、請求項１または請求項２記載のパケットデータ通信方法において、
前記データは、可変長であることを特徴とする
【００１６】
請求項４の発明は、請求項１から請求項３のいずれかに記載のパケットデータ通信方法において、
前記共有メモリのアクセスは関数化されていて、アクセスにあたってはこの関数をコールすることを特徴とする。
【００１７】
これらにより、ソケットを用いてプロセス間でパケットデータ通信を行うのにあたり、ソケットに対して、常にパケット単位でのみのwrite/readが行える。
【００１８】
請求項５の発明は、ソケットを用いてプロセス間でパケットデータ通信を行うパケットデータ通信装置であって、
データの書込みおよび読み出しを行うための共有メモリを設けたことを特徴とする。
【００１９】
請求項６の発明は、請求項５記載のパケットデータ通信装置において、
前記共有メモリは、データの書込みに先立って作成され、データの読み出し後に削除されることを特徴とする。
【００２０】
請求項７の発明は、請求項５または請求項６記載のパケットデータ通信装置において、
前記データは、可変長であることを特徴とする。
【００２１】
これらにより、データ格納に共有メモリを使用しているので、データのサイズやデータの型に依存することはなく、共有メモリは動的に確保し破棄するのでメモリを有効に活用できる。
【００２２】
【発明の実施の形態】
以下、図面を用いて本発明の実施の形態を説明する。
図１は本発明の原理ブロック図であり、図３と共通する部分には同一の符号を付けている。図１と図３の異なる点は、一時的に共有メモリShmを用いてプロセス間通信を行うことである。
【００２３】
図２は図１の具体的な処理の流れを説明するフローチャートであり、図４と同様に、放送監視においてエラーログが送受信される場合について示している。
【００２４】
図２では、以下のような変数をもつ構造体のパケットが送受信される。
type：パケットのタイプ
operate  set/get：設定処理setを行うか？取得処理getを行うか？
command：パケットのコマンドID
dataType：データ型（int型、short型、double型、char型、…）
shmKey：共有メモリキー（このキーを用いて共有メモリにアクセス）
shmSize：共有メモリサイズ（このサイズを用いて共有メモリにアクセス）
【００２５】
共有メモリアクセス関数は以下の通りである。
CreateShmPacket(Packet*packet,void*data,int  size)：
共有メモリShmを作成し、キーとサイズをパケットに書き込み、データを共有メモリShmに書き込む。
InterpretShmPacket(Packet*packet,void*&data,int  flag)：
パケットから共有メモリShmのキーとサイズを得て共有メモリShmにアクセスし、データを共有メモリShmから読み込んで共有メモリShmを破棄する。
【００２６】
これら共有メモリアクセス関数CreateShmPacket()、InterpretShmPacket()は、ソケット、共有メモリ、セマフォというipcのプリミティブな関数を使用しているのでC言語の標準的なライブラリで実現でき、特殊ライブラリは不要である。
【００２７】
すなわち、送信側プロセスは、CreateShmPacket()により共有メモリShmを作成し、エラーログをその共有メモリShmに書き込む。ここで、共有メモリShmはそのIDとサイズによりアクセスできるので、その２つのパラメータをパケット構造体shmKey、shmSizeに代入する。
【００２８】
一方、受信側プロセスは、受信したパケットからInterpretShmPacket()に基づきアクセスする共有メモリShmのIDとサイズを得て、共有メモリShmにアクセスし、エラーログを取得する。データ取得後、エラーログが格納されていた共有メモリShmは破棄される。なお、共有メモリアクセス中はセマフォを取得しているので、エラーログの保持性は保たれる。ここで、セマフォとはプロセス間の同期制御のためのカウントデータであり、主にデータベース管理に代表されるクリティカルセクションの制御に使用される。あるプロセスがセマフォを取得してそのセマフォを返すまでの間は他プロセスはそのクリティカルセクションにアクセスできず、待たされることになる。
【００２９】
放送監視システムのエラーログやデータは、前述のようにサイズ的にも大きく、サイズはその時々で変動する可変長である。そこで、本発明では、従来のようにパケットとデータ実体をwrite/readすることをやめ、データ部のread/writeを動的に確保した共有メモリShmにアクセスすることとし、１パケットのみの送受信で可変データを取り扱えるようにした。
【００３０】
これにより、送受信双方のプロセスは、常に固定長であるパケットサイズをwrite/readすれば良いことになり、処理が簡素化できる。
【００３１】
このように、共有メモリShmへのアクセスは、共有メモリアクセス関数CreateShmPacket()、InterpretShmPacket()として関数化されているので、これら２つの関数をコールするだけで共有メモリShmへのアタッチ、デタッチ、セマフォの問題も解決でき、ユーザーがコーディングできる。
【００３２】
特に、可変長のデータを扱うことが多い放送監視の内部プロセス間の通信において、常に固定パケット単位でwrite/readすることで実現できるので、ソケットに対してwrite/readする負荷が軽減され、高速化が図れる。
【００３３】
なお、上記実施例では放送監視システムにおけるエラーログなどの可変長データのプロセス通信について説明したが、これに限るものではなく、可変長データを多く扱うシステムにおいてソケットを用いたプロセス間通信をパケットで実現する場合にも有効である。
【００３４】
【発明の効果】
以上説明したように、本発明によれば、1つのパケットの送受信をデータサイズの制限を受けることなく行えるパケットデータ通信装置を実現でき、例えば放送監視システムにおけるエラーログなどのように可変長データを多く扱う各種のシステムにおけるプロセス間通信に好適である。
【図面の簡単な説明】
【図１】本発明の原理ブロック図である。
【図２】図１の具体的な処理の流れを説明するフローチャートである。
【図３】従来のプロセス間通信の概念図である。
【図４】図３の処理の流れを説明するフローチャートである。
【符号の説明】
Shm  共有メモリ
【図１】
2004208105.tif 000003
【図２】
2004208105.tif 000004
【図３】
2004208105.tif 000005
【図４】
2004208105.tif 000006