(57)【特許請求の範囲】
【請求項１】
デバイスとユーザプロセスとの間でメッセージを通信するためのSTREAMS機構を備えたコンピュータシステムにおけるメッセージ管理装置において、アロケートされたメッセージごとに、時刻情報，アドレス，コーラ関数およびネクスト領域情報が格納されるメッセージ使用状況管理セルと、
カーネル空間のメモリ領域全体をカバーし、前記メッセージ使用状況管理セルが登録されるメッセージ管理テーブルと、
解放済みのメッセージをフリーにしようとした際の情報を管理する不正フリーリストと、
解放済みのメッセージに対して何らかの操作を行おうとした際の情報を管理する二重使用リストと、
メッセージの解放漏れにより長期間フリーにされていないメッセージの情報を管理する長期滞留リストと、
ストリームドライバまたはモジュールからメッセージ割り当て要求として呼ばれて、当該メッセージのアドレスおよびコーラ関数を通知する割り当てエントリポイントを介して通知を受けると、前記メッセージ使用状況管理セルの一つをアロケートして必要な情報を格納するとともに、当該アドレスで特定される前記メッセージ管理テーブルの位置に当該セルをリンクし、また、ストリームドライバまたはモジュールからメッセージ解放要求として呼ばれて、当該メッセージのアドレスおよびコーラ関数を通知する解放エントリポイントを介して通知を受け当該アドレスが存在すれば前記メッセージ管理テーブルの当該セルを解放し、存在しなければ前記不正フリーリストに登録し、また、ストリームドライバまたはモジュールからメッセージ操作要求として呼ばれて、当該メッセージのアドレスおよびコーラ関数を通知する複数の操作エントリポイントを介して通知を受け当該アドレスが存在すれば前記メッセージ管理テーブルの当該セルを書き換え、存在しなければ前記二重使用リストに登録し、また前記メッセージ管理テーブルのセルごとに前記時刻情報により所定の時間を超過しているかを調査して該当する場合には前記長期滞留リストに登録するメッセージ管理機構とを備えたことを特徴とするメッセージ管理装置。
【請求項２】
前記割り当てエントリポイントおよび解放エントリポイントはカーネル内部関数であり、また前記操作エントリポイントはメッセージのアドレスを引数や戻り値とするDDI/DKI関数であることを特徴とする請求項１記載のメッセージ管理装置。
【請求項３】
前記メッセージ管理テーブル，不正フリーリスト，二重使用リストまたは長期滞留リストへの登録は、当該テーブルまたはリストの最後尾に行うことを特徴とする請求項１または２記載のメッセージ管理装置。
【請求項４】
前記メッセージ管理テーブル，不正フリーリスト，二重使用リストまたは長期滞留リストへの登録は、当該テーブルまたはリストの先頭に行うことを特徴とする請求項１または２記載のメッセージ管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、デバイスとユーザプログラムとの間でメッセージを通信するためのデータ経路を有するコンピュータシステムにおけるメッセージ管理に関する。
【０００２】
【従来の技術】
オペレーティングシステムＵＮＩＸのカーネル機能の一部として、ＳＴＲＥＡＭＳ機構が知られており、種々のタイプのデバイスドライバと同様に、データ通信ネットワークプロトコールを実施するための事実上の業界標準フレームワークになっている。ストリームとは、アプリケーションプログラムのようなユーザレベルプロセスとカーネル内のデバイスドライバの間の双方向性データ経路を提供する全二重パスを指す。その基本的概念は、設計者であるＲｉｔｃｈｉｅ，  Ｄ．Ｍ．により記述された  ”Ａ  Ｓｔｒｅａｍ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ，”  ＡＴ＆Ｔ  Ｂｅｌｌ  Ｌａｂｏｒａｔｏｒｉｅｓ  Ｔｅｃｈｎｉｃａｌ  ｊｏｕｒｎａｌ，  Ｏｃｔ．  １９８４，  Ｖｏｌ．６３，  Ｎｏ８，  Ｐａｒｔ  ２，  ｐｐ．１８９７−１９１０．（日本語訳：石田晴久監修、長谷部紀元、清水謙多郎訳、”ストリーム入出力システム”、『ＵＮＩＸ原典』、パーソナルメディア、１９８６，  ｐｐ．３６５−３７９）に詳しい。現在の標準的となっている概念は、上記基本概念のものより改良がなされており、『ＵＮＩＸ  カーネルの設計』（Ｍａｕｒｉｃｅ  Ｊ．  Ｂａｃｈ著、坂本文・多田好克・村井純  訳、共立出版、１９９０）ｐｐ２９１−２９７に記載されている。
【０００３】
ＳＴＲＥＡＭＳ機構は、ストリームドライバやモジュールからの要求により、データ転送媒体としてのメッセージを割り当て、または解放を行なう。このようなＳＴＲＥＡＭＳ機構を実装しているコンピュータシステムにおいて、割り当てられた後のメッセージの使用については、ＳＴＲＥＡＭＳ機構に対してそのメッセージ解放要求が行われるまでは、その管理はストリームを構成する各ドライバやモジュールに委ねられている。したがって、メッセージの解放漏れを調査するに当たっては、これまでは、カーネルメモリ空間上でメッセージと思われるパターンをすべて洗い出し、その上で、どのコンポーネントがアロケートしたものか、もしくはどのコンポーネントが最近処理したかの統計を取り、一番多いものが解放漏れをしている可能性があるとしている。
【０００４】
【発明が解決しようとする課題】
しかしながら、上述した従来技術では、メッセージの解放漏れを調査するのに、統計をとる方法を採用しているため、その統計をとるまでの手間を必要とし、また、アロケートしてからの時間情報の特定が困難であるという第１の問題点がある。
【０００５】
また、メッセージの二重使用が行われた場合でも、ＳＴＲＥＡＭＳ機構はそれをチェックする機能がなかったため、二重使用を禁止することができず、二重使用を行おうとしたコンポーネントの特定も容易でない場合があるという第２の問題点がある。
【０００６】
さらに、これまでは、メッセージの割り当て／解放の履歴情報として、カーネルメモリの割り当て／解放のトレースが参考になっていたが、このトレースは連続したトレース領域にサイクリックに履歴を残すものであるため、そのトレース情報は限られた最近の情報しか得ることができず、また、正常な割り当て／解放の情報も常に残されるため、不正な割り当て／解放の特定が困難であるという第３の問題点がある。
【０００７】
本発明の目的は、上記問題点を解消し、メッセージ解放漏れ、および解放後のメッセージに対する不正使用ないしは二重使用を容易に検出できるメッセージ管理装置を提供することにある。
【０００８】
【課題を解決するための手段】
本発明のメッセージ管理装置は、デバイスとユーザプロセスとの間でメッセージを通信するためのSTREAMS機構を備えたコンピュータシステムにおけるメッセージ管理装置において、アロケートされたメッセージごとに、時刻情報，アドレス，コーラ関数およびネクスト領域情報が格納されるメッセージ使用状況管理セルと、カーネル空間のメモリ領域全体をカバーし、前記メッセージ使用状況管理セルが登録されるメッセージ管理テーブルと、前記解放済みのメッセージをフリーにしようとした際の情報を管理する不正フリーリストと、解放済みのメッセージに対して何らかの操作を行おうとした際の情報を管理する二重使用リストと、メッセージの解放漏れにより長期間フリーにされていないメッセージの情報を管理する長期滞留リストと、ストリームドライバまたはモジュールからメッセージ割り当て要求として呼ばれて、当該メッセージのアドレスおよびコーラ関数を通知する割り当てエントリポイントを介して通知を受けると、前記メッセージ使用状況管理セルの一つをアロケートして必要な情報を格納するとともに、当該アドレスで特定される前記メッセージ管理テーブルの位置に当該セルをリンクし、また、ストリームドライバまたはモジュールからメッセージ解放要求として呼ばれて、当該メッセージのアドレスおよびコーラ関数を通知する解放エントリポイントを介して通知を受け当該アドレスが存在すれば前記メッセージ管理テーブルの当該セルを解放し、存在しなければ前記不正フリーリストに登録し、また、ストリームドライバまたはモジュールからメッセージ操作要求として呼ばれて、当該メッセージのアドレスおよびコーラ関数を通知する複数の操作エントリポイントを介して通知を受け当該アドレスが存在すれば前記メッセージ管理テーブルの当該セルを書き換え、存在しなければ前記二重使用リストに登録し、また前記メッセージ管理テーブルのセルごとに前記時刻情報により所定の時間を超過しているかを調査して該当する場合には前記長期滞留リストに登録するメッセージ管理機構とを備えたことを特徴とする。
【００１１】
本発明は、メッセージの割り当て／解放の使用状況を管理することにより、上記のような不正使用の禁止、もしくは解放漏れの検出を容易にするものである。
【００１２】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
【００１３】
図１を参照すると、本実施の形態は、メッセージ管理機構１と、メッセージ管理テーブル２と、メッセージの割り当てを行う割り当てエントリポイント３（実体はカーネル内部関数ａｌｌｏｃｂ（））と、メッセージの解放を行う解放エントリポイント４（実体はカーネル内部関数ｆｒｅｅｂ（））と、メッセージの操作を行うｎ個の操作エントリポイント５１〜５ｎ（実体は、ｐｕｔｎｅｘｔ（），  ｐｕｔｑ（）などの、メッセージのアドレスを引数や戻り値とするＤＤＩ／ＤＫＩ関数）と、アロケートされたメッセージと同数だけ必要となるメッセージ使用状況管理セル６と、解放済みのメッセージをフリーにしようとした際の情報を管理するリストである不正フリーリスト７と、解放済みのメッセージに対して何らかの操作を行おうとした際の情報を管理するリストである二重使用リスト８と、メッセージの解放漏れにより、長期間フリーにされていないメッセージの情報を管理するリストである長期滞留リスト９とを含む。なお、上記各エントリポイントの括弧内のａｌｌｏｃｂ（）等の名称は、ＵＮＩＸ  Ｓｙｓｔｅｍ  Ｖ  Ｒｅｌｅａｓｅ４  のものを例としている。
【００１４】
メッセージ管理テーブル（以下、「管理テーブル」と記す）２は、カーネル空間のメモリ領域全体をカバーしたマトリクスであり、あるカーネルメモリアドレスに対して、一意にテーブル上のマトリクス位置が特定できるものであれば、その構造は特に問わない。本実施の形態では、管理テーブル２の構造は、以下のような構造になっているものとする。例えば、本発明を採用したシステムのカーネルメモリ領域が０ｘ８０００００００  〜０ｘｆｆｆｆｆｆｆｆであった場合、マトリクスの各行は、０ｘ１０００００００ごとの領域を表し、一行目であれば、０ｘ８０００００００から０ｘ８ｆｆｆｆｆｆｆまでの区間に対応する。
【００１５】
また、マトリクスの各列は、それぞれ０ｘ１００００００（メモリアドレス全体が１６進ｎ桁で表現されるのであれば、１６進（ｎ−１）桁。この例では１６進下７桁）ごとの領域を表し、例えば、１列目であれば、０ｘ０００００００から０ｘ０ｆｆｆｆｆｆまでの区間に対応する。このことにより、例えば０ｘ８１２３４５６７のカーネルアドレスであった場合、対応するマトリクスは「１行２列目」となる。
【００１６】
なお、このマトリクス分割の粒度についてはあくまで一例を示すものであって、本発明では、そのシステムにて最も有効な分割単位を採用するものとする。
【００１７】
また、割り当てエントリポイント３，及び解放エントリポイント４とは、それぞれストリームメッセージの割り当て、解放を行うためにＤＤＩ／ＤＫＩ関数として用意されている関数ａｌｌｏｃｂ（），ｆｒｅｅｂ（）などに、メッセージ管理機構１を呼び出す機能を追加したものを指す。  同様に、操作エントリポイント群５１，５２，５３．．．．．５ｎとは、ストリームメッセージに対する操作を行うＤＤＩ／ＤＫＩ関数として用意されているｐｕｔｎｅｘｔ（），  ｐｕｔｑ（），ｐｕｔｂｑ（）などの複数の関数に、管理機構１を呼び出す機能を追加したものを指す。
【００１８】
また、使用状況管理セル（以下、「セル」と記す）６については、本実施の形態において複数個使用されるため、以下の説明において、その区別を必要とする場合は「セル６ｘ」という表現を用いることとする。
【００１９】
次に、図２、図３、図４及び図５を参照して本実施の形態の動作について詳細に説明する。
【００２０】
図２は、メッセージの割り当て時の動作の前半部分を、図３は後半部分をそれぞれ示している。ストリームドライバもしくはモジュールにより、メッセージ割り当て要求として割り当てエントリポイント３（関数ａｌｌｏｃｂ（））が呼ばれると、割り当てエントリポイント３はメッセージの割り当てを行い、関数ａｌｌｏｃｂ（）処理の最後にて、メッセージ管理機構（以下、「管理機構」と記す）１を呼び出し、その際に割り当てられたメッセージのアドレス、及び割り当て要求を行ったコーラ関数（関数ａｌｌｏｃｂ（）を呼んだ関数）を通知する（図２の（１））。
【００２１】
管理機構１は、セル６を１つアロケートし（図２の（２））、そのセル６内の時刻情報管理領域に現在時刻情報（例えば、システムの絶対時刻を管理しているｌｂｏｌｔ値など）を格納し、割り当てエントリポイント３（関数ａｌｌｏｃｂ（））により通知されたメッセージのアドレスと、コーラ関数（関数ａｌｌｏｃｂ（）を呼んだ関数）をそれぞれアドレス格納領域と、コーラ関数格納領域に格納する（図２の（３））。これらのデータを格納したセル６１を、エントリポイント３により通知された、メッセージのアドレスに基づき、管理テーブル２上の、対応するマトリクス位置を特定する（図２の（４））。
【００２２】
そして、管理機構１は、この特定したマトリクス位置に、セル６１の登録を行う（図３の（５））。この際、該当するマトリクス位置に既に他のセルが存在している場合は、セル内のネクスト領域を使用し、最後尾のセルのネクスト領域にそのセルをリンクすることにより、マトリクス上に、先頭ほど登録時間の古いリンクリストが生成される。図３の例では、該当するマトリクス位置に既にセル６２、６３が登録されたリストとなっているため、この最後尾のセル６３にセル６１をリンクする。管理テーブル２へのセルの登録が完了したら、管理機構１はエントリポイント３に、その完了を通知する（図３の（６））。
【００２３】
図４は、本管理機構１による、メッセージの解放時における正常な場合と不正な場合それぞれに共通の処理を示す。ストリームドライバもしくはモジュールにより、メッセージ解放要求としてエントリポイント４が呼ばれると、エントリポイント４（関数ｆｒｅｅｂ（））は、管理機構１を呼び出し、その際にエントリポイント４は解放を行おうとするメッセージのアドレスと、そのコーラ関数を管理機構１に通知する（図４の（１））。
【００２４】
管理機構１は、通知されたメッセージのアドレスに基づいて、管理テーブル２上にて、通知されたアドレスに該当するマトリクス位置を特定する（図４の（２））。次に、該当するマトリクス位置に登録されているリンクリスト上の各セルのアドレス情報と、管理機構１に通知されたアドレス情報とを比較していく（図４の（３））。
【００２５】
図５は、図４に示したメッセージ解放時における正常なメッセージの解放の場合を示す。  図４の（３）までの処理にて、一致するアドレス情報を持つセルが存在した場合には、管理機構１はリンクリスト上から、アドレス情報の一致したセル６５を削除しそのセルを解放する（図５の（１４））。その上でエントリポイント４に該当するセルが存在したことを通知する（図５の（５））。エントリポイント４は、該当するメッセージの実際のフリー処理を行う。
【００２６】
一方、図６は、図４に示したメッセージ解放時における不正なアドレスに対するメッセージの解放の場合を示す。図４の（３）までの処理にて、リンクリスト上に、該当するアドレス情報を持つセルが存在しなかった場合には、管理機構１は新たにセル６を割り当て（図６の（６））、そのセルに、エントリポイント４から通知された解放を行おうとしたメッセージのアドレスと、コーラ関数（ｆｒｅｅｂ（）を呼んだ関数）をそれぞれアドレス格納領域と、コーラ関数格納領域に格納する（図６の（７））。これらのデータを格納したセル６６を、不正フリーリスト７に登録する（図６の（８））。
【００２７】
不正フリーリスト７への登録については、既に別のセルが登録されている場合は、管理テーブル２のマトリクスにセルを登録する場合（図３）と同様に、セル内のネクスト領域を使用し、リンクリストとして登録する。図６の例では、不正フリーリスト７には既にセル６７が登録されたリストとなっており、この最後尾にセル６６を登録している。不正フリーリスト７へのセルの登録が完了したら、管理機構１はエントリポイント４に該当するセルが存在しなかったことを通知し（図６の（９））、エントリポイント４は、該当するメッセージの実際のフリー処理は行わないようにする。
【００２８】
図７は、本管理機構１による、メッセージの操作を行うエントリポイント実行時の、メッセージの正当性のチェックの動作について正常な場合と不正な場合それぞれに共通の処理を示す。ストリームメッセージに対する操作を行う操作エントリポイントとして、前述のようにｐｕｔｎｅｘｔ（），ｐｕｔｑ（），ｐｕｔｂｑ（）などの複数の関数がＤＤＩ／ＤＫＩ関数として用意されている。これらの操作エントリポイントが呼ばれたとき、例えば、操作エントリポイント５１がコールされた場合、操作エントリポイント５１（ｐｕｔｎｅｘｔ（））は、管理機構１を呼び出し、その際に操作エントリポイント５１は操作対象となるメッセージのアドレスと、そのコーラ関数を管理機構１に通知する（図７の（１））。管理機構１は通知されたメッセージのアドレスに基づいて、管理テーブル２上にて、通知されたアドレスに該当するマトリクス位置を特定する（図７の（２））。次に、管理機構１は、該当するマトリクスに登録されているリンクリスト上の各セルのアドレス情報と、通知されたアドレス情報とを比較していく（図７の（３））。
【００２９】
図８は、正常なメッセージに対する操作の場合を示す。図７の（３）までの処理にて、一致するアドレス情報を持つセルが存在した場合には、管理機構１はそのセル上のコーラ関数情報を、今回通知されたコーラ関数の情報に書き換える（図８の（４））。その上で、操作エントリポイント５１に該当するセルが存在したことを通知し（図８の（５））、操作エントリポイント５１は、該当するメッセージの実際の操作を行うようになる。
【００３０】
一方、図９は、不正なアドレスのメッセージに対する操作の場合を示す。図７の（３）までの処理にて、もし、リンクリスト上に、該当するアドレス情報を持つセルが存在しなかった場合、管理機構１は新たにセル６を割り当て（図９の（６））、そのセルに、操作エントリポイント５１から通知された操作を行おうとしたメッセージのアドレスと、コーラ関数（ｐｕｔｎｅｘｔ（）を呼んだ関数）をそれぞれアドレス格納領域と、コーラ関数格納領域に格納する（図９の（７））。そして、これらのデータを格納したセル６ａを、二重使用リスト８に登録する（図９の（８））。二重使用リスト８への登録については、既に別のセルが登録されている場合は、管理テーブル２のマトリクスにセルを登録する場合と同様、セル６内のネクスト領域を使用し、リンクリストとして登録する。
【００３１】
図９の例では、二重使用リスト８には既にセル６ｂが登録されたリストとなっており、この最後尾にセル６ａを登録している。二重使用リスト８へのセルの登録が完了したら、管理機構１は操作エントリポイント５１に、管理テーブル２上に該当するセルが存在しなかったことを通知し（図９の（９））、操作エントリポイント５１は、該当するメッセージに対する操作は行わないようにする。
【００３２】
図１０および図１１は、本管理機構１による、メッセージの解放漏れチェックの動作を表す。図１０において、管理機構１は、設定された時間間隔（以下、この例では、仮にこの時間間隔がＸＸであるとする）が経過するごとに、管理テーブル２の各マトリクスに対し、セルの登録の有無を確認していく（図１０の（１））。その結果、そのマトリクスにセルの登録のある場合は、登録された個々のセルに対し、そのセルの時刻情報管理領域に格納されている時刻情報と、現在時刻との差を調査する（図１０の（２））。
【００３３】
その差がＸＸを超過していた場合を示すのが図１１である。管理機構１は、新規にセル６を割り当て（図１１の（３））、該当するセルの複製を作成し（図１１の（４））、その複製したセル６ｅを長期滞留リスト９に登録する。図１１の例では、長期滞留リスト９には既にセル６ｆが登録されたリストとなっており、この最後尾にセル６ｅを登録している。
【００３４】
なお、この長期滞留リスト上のセルは、解放漏れチェックの度に、その動作の最初の処理にてすべて解放し、最新のチェック結果のみが残るようにする。
【００３５】
次に、本発明の他の実施の形態について説明する。
【００３６】
上述の実施の形態においては、メッセージ管理テーブル２，不正フリーリスト７，二重使用リスト８または長期滞留リスト９に、セル６をリンクリストとして登録する際、各リスト上に既にセルが登録されている場合には、リスト上の最後尾に登録している。しかし、この方法には、各リンクリスト上のセルが時間順に並ぶという利点があるが、セルを登録する際に、リストの先頭からネクスト領域をたぐっていき、最後尾のセルを特定するだけの手間を要するという欠点がある。
【００３７】
そこで、本発明の他の実施の形態では、セル６をリンクリストとして、登録する際に、リンクリスト上の先頭にそのセルを登録する方法を採用する。このようにすれば、各リスト上に登録する際の効率化が期待できる。
【００３８】
【発明の効果】
本発明の第１の効果は、メッセージの割り当て時に時間経過に依存しない情報を登録することにより、カーネルメモリ上における有効なメッセージすべての検出が可能となるため、障害解析時に、特定のメッセージと思われるアドレスが、正しいものか不正なものであるかの判断が容易となるということである。
【００３９】
また、第２の効果は、メッセージの解放時に、登録情報をチェックすることにより、二重解放を防止できるようになり、さらに、不正フリーリストに登録された情報により、どのアドレスのメッセージがどのコンポーネントにより不正にフリーにされようとしたのかの判別が容易となるということである。
【００４０】
また、第３の効果は、メッセージの解放漏れチェックにより、長期滞留リストの登録情報をチェックすることにより、解放漏れの可能性の強いメッセージのアドレスが容易に判別する。さらに、そのメッセージに関するセルの内容を調査することにより、実際に解放漏れを起こしているコンポーネントの特定が容易となるということである。
【図面の簡単な説明】
【図１】本発明の一実施の形態を示す図である。
【図２】メッセージ割り当て時の動作の前半を示す図である。
【図３】メッセージ割り当て時の動作の後半を示す図である。
【図４】メッセージ解放時の動作を示す図である。
【図５】メッセージ解放時の動作（正常な場合）を示す図である。
【図６】メッセージ解放時の動作（異常な場合）を示す図である。
【図７】メッセージの正当性のチェックの動作を示す図である。
【図８】メッセージの正当性のチェックの動作（正常な場合）を示す図である。
【図９】メッセージの正当性のチェックの動作（異常な場合）を示す図である。
【図１０】メッセージの解放漏れチェックの動作を示す図である。
【図１１】メッセージの解放漏れチェックの動作（異常な場合）を示す図である。
【符号の説明】
１          メッセージ管理機構（管理機構）
２          メッセージ管理テーブル（管理テーブル）
３          割り当てエントリポイント
４          解放エントリポイント
６          メッセージ使用状況管理セル（セル）
７          不正フリーリスト
８          二重使用リスト
９          長期滞留リスト
５１〜５ｎ  操作エントリポイント
６１〜６ｎ  メッセージ使用状況管理セル（セル）
【図１】
0003551832.tif 000002
【図２】
0003551832.tif 000003
【図３】
0003551832.tif 000004
【図４】
0003551832.tif 000005
【図５】
0003551832.tif 000006
【図６】
0003551832.tif 000007
【図７】
0003551832.tif 000008
【図８】
0003551832.tif 000009
【図９】
0003551832.tif 000010
【図１０】
0003551832.tif 000011
【図１１】
0003551832.tif 000012