(57)【要約】【課題】マシン全体のメモリ枯渇やメモリ破壊を防止し、メモリ破壊が発生した場合でも破壊された原因の解析が容易に行えるメモリ管理装置を提供する。【解決手段】メモリ管理機能１はアプリケーションプログラム４から呼び出されると、メモリ空間３の割当てを実行する。メモリ破壊チェックコマンド５はメモリ管理テーブル２を参照してメモリ空間３のメモリブロック３１〜３ｎにアクセスし、メモリブロック３１〜３ｎにおけるメモリ破壊の発生の有無を検出する。メモリ破壊チェックコマンド５はメモリブロック３１〜３ｎ毎のチェックエリアのＭａｇｉｃ  Ｎｕｍｂｅｒを参照し、整合性をチェックすることによってメモリ破壊の検出を実現する【選択図】      図１
2004348300.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラム各々によってアクセスされるメモリを管理するメモリ管理装置であって、前記メモリを構成する複数のメモリブロックと、前記アプリケーションプログラムからの要求に応答して前記メモリブロックの確保及び前記メモリブロックへのアクセスを管理するメモリ管理機能とを有することを特徴とするメモリ管理装置。
【請求項２】
前記メモリブロック各々は、前記メモリブロックの大きさ及び次のメモリブロックの先頭アドレスを格納する前部管理エリアを含むことを特徴とする請求項１記載のメモリ管理装置。
【請求項３】
前記メモリ管理機能は、前記アプリケーションプログラムによるデータ書込み時に前記前部管理エリアに格納された前記メモリブロックの大きさ及び次のメモリブロックの先頭アドレスを参照して前記メモリブロックの記憶エリアの容量を超える書込みを抑止することを特徴とする請求項２記載のメモリ管理装置。
【請求項４】
前記メモリブロック各々の位置を管理するメモリ管理テーブルを含み、
前記メモリの破壊をチェックするコマンドが前記メモリ管理テーブルで管理される前記メモリブロック各々の位置を基に前記メモリの破壊のチェックを行うことを特徴とする請求項１から請求項３のいずれか記載のメモリ管理装置。
【請求項５】
前記メモリの破壊をチェックするコマンドは、前記メモリブロック各々に配置されかつ前記メモリブロック間共通のデータを格納するチェックエリアから当該データを読出して整合性をチェックすることを特徴とする請求項４記載のメモリ管理装置。
【請求項６】
前記メモリ管理機能は、前記メモリのメモリ空間に要求されたメモリサイズ分の連続した空き容量がない場合に複数のメモリブロックを割当てることを特徴とする請求項１から請求項５のいずれか記載のメモリ管理装置。
【請求項７】
アプリケーションプログラム各々によってアクセスされるメモリを管理するメモリ管理装置のメモリ管理方法であって、前記メモリ管理装置側のメモリ管理機能にて、前記アプリケーションプログラムからの要求に応答して前記メモリを構成する複数のメモリブロックの中のいずれかの確保と前記メモリブロックへのアクセスとを管理することを特徴とするメモリ管理方法。
【請求項８】
前記メモリブロック各々は、前記メモリブロックの大きさ及び次のメモリブロックの先頭アドレスを格納する前部管理エリアを含むことを特徴とする請求項７記載のメモリ管理方法。
【請求項９】
前記メモリ管理機能にて、前記アプリケーションプログラムによるデータ書込み時に前記前部管理エリアに格納された前記メモリブロックの大きさ及び次のメモリブロックの先頭アドレスを参照して前記メモリブロックの記憶エリアの容量を超える書込みを抑止することを特徴とする請求項８記載のメモリ管理方法。
【請求項１０】
前記メモリの破壊をチェックするコマンドが、前記メモリブロック各々の位置を管理するメモリ管理テーブルで管理される前記メモリブロック各々の位置を基に前記メモリの破壊のチェックを行うことを特徴とする請求項７から請求項９のいずれか記載のメモリ管理方法。
【請求項１１】
前記メモリの破壊をチェックするコマンドは、前記メモリブロック各々に配置されかつ前記メモリブロック間共通のデータを格納するチェックエリアから当該データを読出して整合性をチェックすることを特徴とする請求項１０記載のメモリ管理方法。
【請求項１２】
前記メモリ管理機能にて、前記メモリのメモリ空間に要求されたメモリサイズ分の連続した空き容量がない場合に複数のメモリブロックを割当てることを特徴とする請求項７から請求項１１のいずれか記載のメモリ管理方法。
【請求項１３】
アプリケーションプログラム各々によってアクセスされるメモリを管理するメモリ管理装置のメモリ管理方法のプログラムであって、前記メモリ管理装置側のメモリ管理機能にて、前記アプリケーションプログラムからの要求に応答して前記メモリを構成する複数のメモリブロックの中のいずれかの確保と前記メモリブロックへのアクセスとを管理する処理を実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はメモリ管理装置及びそれに用いるメモリ管理方法並びにそのプログラムに関し、特にプログラムによって使用されるメモリの管理方法に関する。
【０００２】
【従来の技術】
従来、メモリ破壊によるシステムダウンあるいはプログラムのアボート時の原因究明を行う場合には、システムダウンあるいはアボート時点のメモリの全ダンプをプリンタ出力することで、その出力リストの目視にて破壊箇所の特定及び破壊原因を、その時点で動作していたプログラムのコードから推論するのが一般的な方法である。
【０００３】
しかしながら、この方法ではプログラムのコード及びシステムの動作に関する熟練した知識が必要であるため、更新命令実行時にアクセスするメモリ領域にトラップをかける手段によってメモリ破壊の発見を容易にする方法が提案されている（例えば、特許文献１参照）。
【０００４】
このメモリ破壊に関連して、メモリ管理対象領域を領域ブロックで分割管理し、この領域ブロックをプロセスが管理している場合、プロセスが領域ブロックを解放する前に消滅すると、そのプロセスが管理していた領域ブロックを再使用することができなくなってしまう。
【０００５】
この問題を解決する方法としては、メモリの使用状態をプロセス毎に管理することで、領域解放処理を行うことなく、消滅したプロセスが確保したメモリの再利用を可能とする方法がある（例えば、特許文献２参照）。
【０００６】
【特許文献１】
特開平４−３６９７５１号公報（第１，２頁、図１）
【特許文献２】
特開平５−２０１６８号公報（第３，４頁、図１）
【０００７】
【発明が解決しようとする課題】
メモリの使用においては、確保した領域以上の使用による破壊及び解放漏れによるメモリリソースの枯渇が大きな問題となる。予め使用メモリを一度に確保することによるメモリリソースの枯渇は、アプリケーション共通のメモリ管理方式を使用することによって防止することができる。
【０００８】
しかしながら、メモリ管理方式を用いずに不正アクセスによって破壊されたメモリをチェックすることは不可能であるため、メモリアクセスした際の不正なデータが読込み誤動作の要因となっている。
【０００９】
そこで、本発明の目的は上記の問題点を解消し、マシン全体のメモリ枯渇やメモリ破壊を防止することができ、メモリ破壊が発生した場合でも破壊された原因の解析を容易に行うことができるメモリ管理装置及びそれに用いるメモリ管理方法並びにそのプログラムを提供することにある。
【００１０】
【課題を解決するための手段】
本発明によるメモリ管理装置は、アプリケーションプログラム各々によってアクセスされるメモリを管理するメモリ管理装置であって、前記メモリを構成する複数のメモリブロックと、前記アプリケーションプログラムからの要求に応答して前記メモリブロックの確保及び前記メモリブロックへのアクセスを管理するメモリ管理機能とを備えている。
【００１１】
本発明によるメモリ管理方法は、アプリケーションプログラム各々によってアクセスされるメモリを管理するメモリ管理装置のメモリ管理方法であって、前記メモリ管理装置側のメモリ管理機能にて、前記アプリケーションプログラムからの要求に応答して前記メモリを構成する複数のメモリブロックの中のいずれかの確保と前記メモリブロックへのアクセスとを管理している。
【００１２】
本発明によるメモリ管理方法のプログラムは、アプリケーションプログラム各々によってアクセスされるメモリを管理するメモリ管理装置のメモリ管理方法のププログラムであって、前記メモリ管理装置側のメモリ管理機能にて、前記アプリケーションプログラムからの要求に応答して前記メモリを構成する複数のメモリブロックの中のいずれかの確保と前記メモリブロックへのアクセスとを管理する処理を実行させている。
【００１３】
すなわち、本発明のメモリ管理方法は、マシン内の共有メモリの破壊及びメモリリークによるマシン全体のメモリリソースの枯渇を防止することを可能としている。
【００１４】
また、本発明のメモリ管理方法では、共有メモリが破壊されたことを確認するコマンドを提供することによって、もしも他のプログラムによって共有メモリが破壊された場合にも、どのメモリ領域が不正にアクセスされて破壊されたのかを確認することを可能としている。
【００１５】
より具体的に説明すると、本発明のメモリ管理方法では、アプリケーションプログラムがメモリ管理機能を用いて、メモリブロックによって構成されている共有メモリを確保している。アプリケーションプログラムは共有メモリを使用する際にも、メモリ管理機能を用いてアクセスする。
【００１６】
本発明のメモリ管理方法では、万一、アプリケーションプログラムがメモリブロックの領域を超えて共有メモリを使用した場合、メモリブロックの中のチェックエリアによって領域外の使用を防止可能としている。
【００１７】
また、本発明のメモリ管理方法では、メモリブロックで確保された共有メモリのアドレスをメモリ管理テーブル２で一覧として管理している。メモリ破壊チェックコマンドはメモリ管理テーブルに記述されたアドレスからメモリブロックの位置を判断し、共有メモリの破壊のチェックを行う。
【００１８】
これによって、本発明のメモリ管理方法では、アプリケーションプログラムが共有メモリを使用する際に、マシンのメモリリソースを使い果たすまでメモリ取得を行うこと、及び取得メモリ以上の書込みを行うことを防止可能としている。その際、確保済みメモリは一定条件の基に拡張可能となっている。また、確保された領域を超えてメモリを使用する場合にも、メモリ管理機能によって破壊を防止することが実現される。
【００１９】
また、本発明のメモリ管理方法では、本発明で実現している機能を用いることなく、不正な使用法で共有メモリの破壊が発生した場合でも、どの領域に共有メモリの破壊が発生したかがわかる。その場合には、メモリ破壊チェックコマンドによって共有メモリを直接参照してチェックするため、その共有メモリの破壊を様々な方法で確認することが可能となる。
【００２０】
したがって、本発明のメモリ管理方法では、上記のような機能によって、複数のコンポーネントで構成されている大規模システムにおいて、マシン全体のメモリ枯渇やメモリ破壊を防止することが可能となり、また万一、メモリ破壊が発生した場合でも破壊された原因の解析が容易となる。
【００２１】
【発明の実施の形態】
次に、本発明の実施例について図面を参照して説明する。図１は本発明の一実施例によるメモリ管理装置の構成を示すブロック図である。図１において、本発明の一実施例によるメモリ管理装置はメモリ管理機能１と、メモリ管理テーブル２と、共有メモリのメモリ空間３とから構成されている。
【００２２】
メモリ管理機能１はアプリケーションプログラム４から呼び出されると、共有メモリのメモリ空間３の割当てを実行する。メモリ破壊チェックコマンド５はメモリ管理テーブル２を参照して共有メモリのメモリ空間３のメモリブロック（ＭＢ）３１〜３ｎにアクセスし、メモリブロック３１〜３ｎにおけるメモリ破壊の発生の有無を検出する。
【００２３】
図２は図１のメモリ管理テーブル２の構成を示す図であり、図３は図１のメモリブロック３１〜３ｎの構成を示す図である。これら図２及び図３において、データはメモリ空間３内部のメモリブロック３１〜３ｎに記憶される。メモリブロック３１〜３ｎはメモリ空間３の中にチェックエリア３１ａ，３１ｄと、前部管理エリア３１ｂと、後部管理エリア３１ｅと、記憶エリア３１ｃとから構成されている。
【００２４】
前部管理エリア３１ｂには続きのデータが記憶されているメモリブロック３１〜３ｎのアドレスが格納されている。記憶エリア３１ｃは可変長で、データによって大きさが異なるが、但し無限大ではない。
【００２５】
前部管理エリア３１ｂ及び後部管理エリア３１ｅの内部にはチェックエリア３１ａ，３１ｄが設けられている。チェックエリア３１ａ，３１ｄは前部管理エリア３１ｂ、後部管理エリア３１ｄそれぞれの先頭に設けられている。
【００２６】
チェックエリア３１ａ，３１ｄにはメモリブロック間共通のデータが格納される。以下、このデータをＭａｇｉｃ  Ｎｕｍｂｅｒと呼ぶ。メモリ管理テーブル２にはメモリブロック３１〜３ｎのアドレス２ａ及びメモリブロック３１〜３ｎの大きさ２ｂの一覧が格納されている。
【００２７】
図４は本発明の一実施例によるメモリ破壊の検出方式の実行方法を示す図であり、図５は図１のメモリ破壊チェックコマンド５の処理動作を示すフローチャートである。これら図４及び図５を参照してメモリ破壊チェックコマンド５の処理動作について説明する。メモリ破壊チェックコマンド５の処理動作はコンピュータで実行可能なプログラムにて実現可能である。
【００２８】
メモリ破壊チェックコマンド５はメモリ管理テーブル２からメモリブロック３１のアドレスと大きさとを求め（図４のａ）、チェックエリア３１ａ，３１ｄにアクセスする（図５ステップＳ１，Ｓ２）。
【００２９】
メモリ破壊チェックコマンド５はチェックエリア３１ａ，３１ｄのＭａｇｉｃＮｕｍｂｅｒを参照し、整合性をチェックすることによってメモリ破壊の検出を実現する（図４のｂ）。
【００３０】
つまり、メモリ破壊チェックコマンド５はチェックエリア３１ａ，３１ｄのＭａｇｉｃ  Ｎｕｍｂｅｒが規定の数値と一致しなければ（図５ステップＳ３）、メモリ破壊があるとして異常終了する（図５ステップＳ４）。
【００３１】
また、メモリ破壊チェックコマンド５はチェックエリア３１ａ，３１ｄのＭａｇｉｃ  Ｎｕｍｂｅｒが規定の数値と一致すれば（図５ステップＳ３）、メモリ破壊がないものとして正常終了する（図５ステップＳ５）。メモリ破壊チェックコマンド５は上記の処理動作を次のメモリブロックが存在しなくなるまで行う。
【００３２】
これら図１〜図５を参照して本発明の一実施例によるメモリ管理装置の動作について説明する。
【００３３】
メモリ管理機能１は初期処理として、メモリ管理テーブル２及び共有メモリのメモリ空間３を作成する。アプリケーションプログラム４が共有メモリの取得を行う時には、その共有メモリの取得をメモリ管理機能１を用いて行う。
【００３４】
メモリ管理機能１は共有メモリのメモリ空間３の中にメモリブロック３１〜３ｎを作成する。アプリケーションプログラム４が取得を要求したメモリサイズが１つのメモリブロック３１〜３ｎでは取得できない場合、つまり共有メモリのメモリ空間３に要求されたメモリサイズ分の連続した空き容量がない場合には、複数のメモリブロック３１〜３ｎを割当てることで対処する。
【００３５】
もしも、共有メモリのメモリ空間３の空き容量の合計を超えるメモリサイズの取得がアプリケーションプログラム４から要求された場合、メモリ管理機能１はメモリ取得に失敗したことをアプリケーションプログラム４に通知する。
【００３６】
メモリブロック３１〜３ｎは前部管理エリア３１ｂ及び後部管理エリア３１ｅで構成され、前部管理エリア３１ｂにはチェックエリア３１ａ、メモリブロック３１〜３ｎを割り当てた場合の次のメモリブロック３１〜３ｎの先頭アドレス及びメモリブロック３１〜３ｎの全体の大きさが記録される。後部管理エリア３１ｅにもチェックエリア３１〜３ｎ及びそのメモリブロック３１〜３ｎの先頭アドレスが格納される。
【００３７】
アプリケーションプログラム４がメモリ管理機能１を用いて取得メモリにデータを書込む際には、メモリ管理機能１は記憶エリア３１ｃへの書込みを行うが、前部管理エリア３１ｂに格納されたメモリブロック３１〜３ｎの大きさ及び次のメモリブロックの先頭アドレスを参照することで、記憶エリア３１ｃの容量を超える書込みを行わないようにする。
【００３８】
もしも、アプリケーションプログラム４が取得したメモリブロック３１〜３ｎの記憶エリア３１ｃの合計の大きさを超えるデータの書込みを行おうとした場合には、メモリ管理機能１が書込み失敗をアプリケーションプログラム４に通知する。
【００３９】
このように、本実施例では、アプリケーション４が共有メモリのメモリ空間３を使用する際に、マシンのメモリリソースを使い果たすまでメモリ取得を行うこと及び取得メモリ以上の書込みを行うことを防止することができる。また、本実施例では、確保済みメモリを一定条件の基に拡張することができる。
【００４０】
さらに、本実施例では、メモリ破壊チェックコマンド５を用いることによって、上記の機能を用いずに不正な使用法でメモリ破壊が発生した場合でも、どの領域にメモリ破壊が発生したかがわかる。メモリ破壊チェックコマンド５ではメモリブロック３１〜３ｎを直接参照してチェックするため、メモリ破壊の発生を様々な方法で確認することができる。
【００４１】
本実施例では、上記のような機能によって、複数のコンポーネントで構成されている大規模システムにおいて、マシン全体のメモリ枯渇やメモリ破壊を防止することができ、また万一、メモリ破壊が発生した場合でも、破壊された原因の解析を容易に行うことができる。
【００４２】
尚、本実施例では、アプリケーションプログラム４がメモリ管理機能１を用いてメモリの書込みを行う際に、割当てられたメモリブロック３１〜３ｎの記憶エリア３１ｃの総量を超える大きさのデータの書込みを行おうとした場合、及びアプリケーションプログラム４が共有メモリのメモリ空間３の空き容量を超える新たなメモリ確保を行おうとした場合に、メモリ管理機能１がアプリケーションプログラム４に失敗を通知している。しかしながら、メモリ管理機能１がアプリケーションプログラム４に失敗を通知することなく、要求されたデータの書込みを行うことも可能である。
【００４３】
また、メモリ管理機能１はメモリブロック３１〜３ｎの記憶エリア３１ｃの総量を超えるデータの書込みがアプリケーションプログラム４から要求された場合、共有メモリのメモリ空間３の空き容量を確認する。共有メモリのメモリ空間３に空き容量が存在する場合には新たなメモリブロック３１〜３ｎを作成し、アプリケーションプログラム４から要求された書込みデータの大きさがメモリブロック３１〜３ｎの記憶エリア３１ｃの総量に収まるようにする。
【００４４】
さらに、共有メモリのメモリ空間３の中にアプリケーションプログラム４に要求された書込みデータが収まりきらない場合には、マシン全体の空きメモリ容量を考慮し、共有メモリのメモリ空間３を拡張して、新たなメモリブロック３１〜３ｎを作成することで、データの書込みを実現する。
【００４５】
この場合、共有メモリのメモリ空間３の拡張はアプリケーションプログラム４が新たなメモリブロック３１〜３ｎを確保しようとした際に、メモリ空間３に新たなメモリブロック３１〜３ｎを作成する場合、及び共有メモリのメモリ空間３を拡張する場合には、それぞれメモリブロック３１〜３ｎの追加後の空きメモリ空間３、共有メモリのメモリ空間３の拡張後のマシン全体の空きメモリ容量を考慮する。
【００４６】
特に、共有メモリのメモリ空間３を拡張する場合には、マシン全体のメモリリソースの枯渇につながらないように、拡張後のマシン全体の空きメモリ容量が、一定サイズ以上になるように制限する。この大きさは予め利用者によってメモリ管理機能１によって設定するようにする。また、１つのアプリケーションプログラム４が何回も拡張しないように、拡張する回数もメモリ管理機能１によって制限することとする。
【００４７】
一方、アプリケーション４がメモリ管理機能１を用いないで共有メモリを使用する場合に、誤ったメモリ使用法によって、既にメモリ管理機能１が確保している共有メモリのメモリ空間３及びメモリブロック３１〜３ｎを破壊する可能性がある。本実施例では、メモリ破壊チェックコマンド５によって、上記のようなメモリ管理機能１の管理外から破壊されたメモリのチェックを実現している。
【００４８】
メモリ破壊チェックコマンド５はメモリ管理テーブル２を参照してメモリブロック３１〜３ｎのアドレス一覧を得る。メモリブロック３１〜３ｎの前部管理エリア３１ｂ及び後部管理エリア３１ｅの各チェックエリア３１ａ，３１ｄを参照する。
【００４９】
本実施例では、各チェックエリア３１ａ，３１ｄの値を確認することで、メモリブロック４が破壊されているか、否かを判断できる。また破壊されたチェックエリア４のアドレスがわかるので、破壊されたアドレスを利用者に通知することが実現することができる。
【００５０】
【発明の効果】
以上説明したように本発明は、上記のような構成及び動作とすることで、マシン全体のメモリ枯渇やメモリ破壊を防止することができ、メモリ破壊が発生した場合でも破壊された原因の解析を容易に行うことができるという効果が得られる。
【図面の簡単な説明】
【図１】本発明の一実施例によるメモリ管理装置の構成を示すブロック図である。
【図２】図１のメモリ管理テーブルの構成を示す図である。
【図３】図１のメモリブロックの構成を示す図である。
【図４】本発明の一実施例によるメモリ破壊の検出方式の実行方法を示す図である。
【図５】図１のメモリ破壊チェックコマンドの処理動作を示すフローチャートである。
【符号の説明】
１  メモリ管理機能
２  メモリ管理テーブル
３  共有メモリのメモリ空間
４  アプリケーションプログラム
５  メモリ破壊チェックコマンド
３１〜３ｎ  メモリブロック
３１ａ，３１ｄ  チェックエリア
３１ｂ  前部管理エリア
３１ｅ  後部管理エリア
３１ｃ  記憶エリア
【図１】
2004348300.tif 000003
【図２】
2004348300.tif 000004
【図３】
2004348300.tif 000005
【図４】
2004348300.tif 000006
【図５】
2004348300.tif 000007