(57)【要約】      （修正有）【課題】メモリ使用量を削減し、割り当てたメモリの不足によるメッセージの受信失敗を無くす。【解決手段】データ処理装置１００のＣＰＵ１０１は、優先度を指定してメッセージ参照を行うと、優先度が一致するメッセージがキューにあるか否かを判断し、優先度が同じメッセージが複数ある場合、メッセージキューの先頭に最も近いメッセージが選択され、キューからメッセージを削除することなく、対象のメッセージの内容コピーして渡すことにより、メッセージのサイズを取得してからメモリを用意することが可能となり、使用メモリを削減できる。【選択図】図１
2012103754.tif 000002
【特許請求の範囲】
【請求項１】
キューからメッセージを削除することなく、メッセージをコピーするコピー手段と、
前記コピー手段においてメッセージの優先度を指定する指定手段と
を備えることを特徴とするデータ処理装置。
【請求項２】
キューからメッセージを削除することなく、メッセージをコピーするコピーステップと、
前記コピーステップにおいてメッセージの優先度を指定する指定ステップと
を備えることを特徴とするデータ処理方法。
【請求項３】
請求項２に記載のデータ処理方法の各ステップをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置等に関し、特に、メッセージキューにＰＥＥＫ機能を付加したデータ処理装置等に関する。
【背景技術】
【０００２】
プロセス間通信方法の１つとして、メッセージキュー機能を有するデータ処理装置がある。メッセージキューには、ＰＯＳＩＸメッセージキューなど、メッセージに優先度を付与可能なものがある。
【０００３】
このメッセージキュー、ＰＯＳＩＸメッセージキューの詳細については、Ｌｉｎｕｘ（登録商標）というオペレーティングシステムなどで実装されており、下記の非特許文献１の他、多くの書籍で解説されているため、ここでの説明は割愛する。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】詳解Linuxカーネル第３版19.4章、発行/オライリー・ジャパン、発売/オーム社、ISBN978-4-87311-313-5
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、優先度を付与可能なメッセージキューには、ＰＥＥＫ（キュー内のデータを削除することなく参照する機能。以下、「ＰＥＥＫ」と称する）機能がなかった。そのため、メッセージを格納するメモリサイズを予め予想しなければならず、メモリサイズがメッセージより小さい場合には、メッセージの格納が行えなかった。また、最も大きいメッセージを想定したメモリサイズを用意すると、小さなサイズのメモリに係るデータを受信する際に余分なメモリを使用する、といった弊害があった。
【０００６】
本発明は、このような問題点に鑑みてなされたものであり、メモリ使用量を削減し、割り当てたメモリの不足によるメッセージの受信失敗を無くすことを目的とする。
【課題を解決するための手段】
【０００７】
前述した課題を解決するために本発明は、キューからメッセージを削除することなく、メッセージをコピーするコピー手段と、前記コピー手段においてメッセージの優先度を指定する指定手段とを備えることを特徴とするデータ処理装置等、を提供する。
【発明の効果】
【０００８】
本発明によれば、メッセージのサイズを取得してからメモリを用意することが可能となり、使用メモリを削減できる。即ち、メモリ使用量を削減し、割り当てたメモリの不足によるメッセージの受信失敗を無くすことができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係るデータ処理装置のハードウェア構成の一例を示すブロック図である。
【図２】従来例におけるメッセージキューの仕組みの一例を示す模式図である。
【図３】本発明の実施形態におけるメッセージキューの仕組みの一例を示す模式図である。
【図４】本発明の実施形態に係るデータ処理装置によるデータ処理方法の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照しながら、本発明を実施するための形態（実施形態）について説明する。
【００１１】
図１は、本発明の実施形態に係るデータ処理装置のハードウェア構成の一例を示すブロック図である。
図１に示すように、データ処理装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、記録装置１０４、入力インターフェース１０５、出力インターフェース１０６、及び、バス１０７を有して構成されている。
【００１２】
図１において、ＣＰＵ１０１は、データ処理装置１００全体を制御するＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔである。
ＲＡＭ１０２は、外部装置などから供給されるプログラムやデータを一時記録するＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙである。
ＲＯＭ１０３は、プログラムやパラメータを格納するＲｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙである。本実施形態では、ＣＤ−Ｒなどの読み込みメディアもＲＯＭ１０３の一種とする。
記録装置１０４は、データ処理装置１００に固定して設置されたハードディスクやメモリカードなどの、読み書き可能な不揮発性の記録メディアである。
【００１３】
入力インターフェース１０５は、ユーザの操作を受け、データを入力するポインティングデバイス、キーボード、リモコンなどの入力デバイスとのインターフェースである。
出力インターフェース１０６は、データ処理装置１００の保持するデータや供給されたデータを表示するためのモニタ、ＴＶなどとのインターフェースである。
バス１０７は、各ユニットを通信可能に接続するシステムバスである。
【００１４】
図２は、従来例におけるメッセージキューの仕組みの一例を示す模式図である。
図２（ａ）は、メッセージキュー２００に４つのメッセージ２０１〜２０４が格納されている状況を示している。図２（ａ）の右側がメッセージキュー２００の先頭であり、左側が末端（メッセージキュー２００の入り口）としている。
【００１５】
また、メッセージには、優先度が付与されている。メッセージの優先度は、通常、数値で与えられる。例えば、「０」は優先度が最低であり、「１」は「０」より優先度が高い。いくつが最も優先度が高いかは、システムに拠る。優先度の値は、通常は、０〜６３までを使用する。本実施形態では、単に、「低」及び「高」の２種類で優先度を示す。
【００１６】
なお、同じ優先度のメッセージは、メッセージキュー２００に入れられた順に取り出される。図２（ａ）では、他にメッセージが格納されなければ、メッセージは、メッセージ２０１、２０２、２０３、２０４の順にメッセージキュー２００から取り出される。
【００１７】
メッセージキュー２００は、通常、カーネルの一部として実装される。図１のデータ処理装置１００において、装置起動前に、カーネルイメージは、記録装置１０４に記録されている。電源投入後、ＲＯＭ１０３にあるブートシーケンスに従い、カーネルイメージは、記録装置１０４からＲＡＭ１０２にコピーされ、実行される。よって、メッセージキュー２００は、ＣＰＵ１０１によりＲＡＭ１０２上で実行される。
【００１８】
図２（ａ）のメッセージキュー２００に、優先度が高いメッセージが格納された状況が図２（ｂ）である。ここで、メッセージ２０５が優先度の高いメッセージである。メッセージ２０５は、既に存在したメッセージ２０１〜２０４のいずれよりも優先度が高いため、優先して、概念上、メッセージキュー２００の先頭に置かれる。この図２（ｂ）の場合、メッセージキュー２００からメッセージを取得する際には、メッセージ２０５が最初に取り出される。
【００１９】
図２で示す状況下で、ＰＥＥＫを行うと、ＰＥＥＫしたメッセージと、実際に取得したメッセージが異なるという事態の発生がありえる。説明すると、図２（ａ）の状況でメッセージキュー２００をＰＥＥＫすると、メッセージ２０１の情報を参照することになる。
【００２０】
ＰＥＥＫ後、メッセージキュー２００からメッセージを取り出すまでの間に、メッセージ２０５がメッセージキュー２００に入り、図２（ｂ）の状況になったとすると、取り出し時にメッセージ２０５が取得されてしまう。通常、ＰＥＥＫを行い、参照したメッセージの内容に基づいた準備を行い、それからＰＥＥＫしたメッセージを取得することを期待するので、ＰＥＥＫ時と取得時のメッセージが異なることは望ましくない。
【００２１】
そこで、メッセージをメッセージキューから取得する、つまり削除することなく、メッセージを参照するＰＥＥＫ機能を実現する。ＰＥＥＫ機能は、通常、ｒｅｃｖ（）系命令にＰＥＥＫ用のフラグを追加することで実現される。ＰＥＥＫ機能の動作について、図３及び図４を用いて説明する。
【００２２】
図３は、本発明の実施形態におけるメッセージキューの仕組みの一例を示す模式図である。また、図４は、本発明の実施形態に係るデータ処理装置によるデータ処理方法の一例を示すフローチャートである。
【００２３】
図３（ａ）は、図２（ａ）と同様の状況である。ここでは、図２と混同しないため、異なる番号を振り、メッセージキュー３００、メッセージは３０１〜３０４から成るとする。図３（ａ）の状況で、優先度高のメッセージ３０５が入った状況が図３（ｂ）である。
【００２４】
図３（ａ）において、本発明を実施するアルゴリズムである図４を適用し、ＰＥＥＫ機能を行う。なお、図４のフローチャートによる処理のプログラムは、例えば、ＲＯＭ１０３（或いは記録装置１０４）に格納されているものとする。
【００２５】
図４のステップＳ１０１において、ＣＰＵ１０１は、図４のフローチャートをスタートする。
【００２６】
続いて、ステップＳ１０２において、ＣＰＵ１０１は、メッセージの優先度を指定してＰＥＥＫを行う。本実施形態では、仮に、優先度を「低」に指定したとする。
【００２７】
続いて、ステップＳ１０３において、ＣＰＵ１０１は、ステップＳ１０２で指定した優先度と一致するメッセージがメッセージキュー３００内にあるか否かを判断する。本実施形態では、優先度「低」が指定されたので、メッセージキュー３００内の優先度低のメッセージを検索する。また、優先度が同じメッセージが複数ある場合、メッセージキュー３００の先頭に最も近いメッセージが選択される。図３（ａ）においては、メッセージ３０１が選択される。
【００２８】
ステップＳ１０３の判断の結果、ステップＳ１０２で指定した優先度と一致するメッセージがメッセージキュー３００内にある場合には、ステップＳ１０４に遷移する。一方、ステップＳ１０２で指定した優先度と一致するメッセージがメッセージキュー３００内にない場合には、ステップＳ１０５に遷移する。本実施形態の例では、ステップＳ１０４に遷移することになる。
【００２９】
ステップＳ１０４に遷移すると、ＣＰＵ１０１は、ＰＥＥＫ対象のメッセージの内容をコピーする。ｒｅｃｖ系命令には、内容を入れるバッファを指定するため、当該バッファにメッセージの内容をコピーする。また、ｒｅｃｖ系命令では、対象となるサイズ（バイト数）を指定可能なため、それを追加指定してもよい。本実施形態では、メッセージキュー３００が、図３（ａ）の状況にある場合、当然メッセージ３０１の内容がコピーされる。また、優先度高のメッセージ３０５が入れられ、図３（ｂ）の状況であったとしても、優先度を指定しているため、メッセージ３０１の内容がコピーされる。
【００３０】
一方、ステップＳ１０５に進むと、ＣＰＵ１０１は、該当するメッセージが無い旨を通知する。通知方法としては、例えば、エラーを示す数値や文字列を返す。
【００３１】
ステップＳ１０４或いはステップＳ１０５の処理が終了すると、ステップＳ１０６に遷移し、ＣＰＵ１０１は、フローチャートの処理を終了する。
【００３２】
ＰＥＥＫ機能を用いて、メッセージキュー３００内にあるメッセージの内容を、メッセージキュー３００から削除することなく参照した後は、メッセージキュー３００を取り出す。この際、メッセージキュー３００の優先度を指定可能なので、指定された優先度のメッセージがメッセージキュー３００から削除され、メッセージがバッファに移動する。メッセージキュー３００の優先度を指定可能な実装としては、Ｌｉｎｕｘ（登録商標）のＰＯＳＩＸメッセージキュー実装であるｍｑ＿ｒｅｃｅｉｖｅ（）関数などが挙げられる。
【００３３】
上記のＰＥＥＫ機能を用いることで、ネットワーク通信でよく用いる技法を行うことが可能となる。即ち、ＰＥＥＫ機能を用いて取得するメッセージのサイズを参照し、メッセージを丁度収めることが可能なバッファを確保する。確保後、メッセージキュー３００からメッセージを取り出す。ＰＥＥＫ機能がない場合には、メッセージの最大サイズを予想しておくしかなく、最悪の場合、用意したバッファにメッセージを格納することができない。本発明の実施形態を用いることで、そのような場合は無くなる。また、メッセージの大きさと等しいメモリを割り当てることが可能となるため、メモリ使用量を削減可能となる。本発明は、前述のフローチャートで示した各ステップをコンピュータにおいて実施するプログラムによっても実現できることは当然である。
【００３４】
（その他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。
即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
このプログラム及び当該プログラムを記憶したコンピュータ読み取り可能な記録媒体は、本発明に含まれる。
【符号の説明】
【００３５】
１００  データ処理装置、１０１  ＣＰＵ、１０２  ＲＡＭ、１０３  ＲＯＭ、１０４  記録装置、１０５  入力インターフェース、１０６  出力インターフェース、１０７  バス
【図１】
2012103754.tif 000003
【図２】
2012103754.tif 000004
【図３】
2012103754.tif 000005
【図４】
2012103754.tif 000006