(57)【要約】【課題】少ないプロセッサリソースでメモリの使用効率を高め、装置コストを低減する。【解決手段】メモリ領域に可変長データを一時的に格納して処理するユニットを備えたデータ処理装置１は、メモリ領域に固定長ブロック３１〜３Ｎを割り当ておよび解放する固定長ブロック管理ユニットと、固定長ブロック中に可変長データを格納する格納領域６１〜６Ｍを確保および解放するデータ格納領域管理ユニット１３とを備え、データ格納領域管理ユニットが、格納領域の個数を固定長ブロックごとに保持する参照カウンタ保持モジュール１３ａと、格納領域の末尾を示すアドレス情報を保持する空き領域ポインタ保持モジュール１３ｂと、このアドレス情報順に可変長データの格納領域を順次確保および解放するデータ格納領域設定モジュール１３ｃとを備える。【選択図】図１
2010082604.tif 000002
【特許請求の範囲】
【請求項１】
メモリ領域に可変長データを一時的に格納して処理する手段を備えたデータ処理装置であって、
前記メモリ領域中に固定長ブロックを割り当ておよび解放する固定長ブロック管理手段と、前記固定長ブロック中に前記可変長データを格納する格納領域を確保および解放するデータ格納領域管理手段とを備え、
前記データ格納領域管理手段が、前記固定長ブロックごとに前記格納領域の個数を保持する参照カウンタ保持部と、前記格納領域の末尾を示すアドレス情報を保持する空き領域ポインタ保持部と、このアドレス情報順に前記可変長データの格納領域を順次確保および解放するデータ格納領域設定部とを備えることを特徴とするデータ処理装置。
【請求項２】
前記データ格納領域設定部が、前記可変長データの格納領域を確保するに際して前記空き領域ポインタ保持部が保持する値を先頭アドレスとして当該アドレスが属する固定長ブロックの末尾との間の空き領域を前記格納領域とする格納領域設定機能を有すると共に、前記空き領域の容量が前記格納領域として確保しようとしている容量に対して不足しているか否かを判断する容量判断機能を有し、
前記固定長ブロック管理手段が、前記データ格納領域設定部によって前記空き領域の容量が不足していると判断された場合に、新たに固定長ブロックを割り当てる新規割り当て機能を有することを特徴とする、請求項１に記載のデータ処理装置。
【請求項３】
前記データ格納領域設定部が、前記格納領域を解放するに際して前記解放された格納領域が属する固定長ブロックに対応する参照カウンタの数値をチェックする参照カウンタチェック機能を有すると共に、該格納領域の前記参照カウンタの値が０でありかつ前記空き領域ポインタが保持するアドレスが該固定長ブロックを示していない場合に該固定長ブロックが不使用であると判断する不使用ブロック判断機能を有し、
前記固定長ブロック管理手段が、前記データ格納領域設定部によって該固定長ブロックが不使用であると判断された場合に、該固定長ブロックを解放する不使用ブロック解放機能を有することを特徴とする、請求項２に記載のデータ処理装置。
【請求項４】
前記メモリ領域中で前記固定長ブロックとして割り当てられていない未使用領域を管理する管理キューを有することを特徴とする、請求項１に記載のデータ処理装置。
【請求項５】
前記固定長ブロック管理手段は、前記可変長データの生存期間に応じて設定される複数の論理チャネルごとに前記固定長ブロックの割り当ておよび解放を実行する構成とし、
前記空き領域ポインタ保持部は、前記空き領域ポインタを前記論理チャネルごとに一つずつ保持する構成としたことを特徴とする、請求項１に記載のデータ処理装置。
【請求項６】
メモリ領域に可変長データを一時的に格納して処理する手段を備えたデータ処理装置にあって、前記メモリ領域に前記可変長データを格納する格納領域を確保するメモリ管理方法であって、
空き領域ポインタ保持部からデータ格納領域設定部が前記格納領域の末尾を示すアドレス情報を読み込み、
前記アドレス情報の順に前記データ格納領域設定部が前記可変長データの格納領域を順次確保し、
前記確保された格納領域に前記データ格納領域設定部が前記可変長データを格納することを特徴とするメモリ管理方法。
【請求項７】
前記データ格納領域設定部が前記可変長データの格納領域を確保する際、前記アドレスを先頭として当該アドレスが属する固定長ブロックの末尾との間の空き領域を前記格納領域とすると共に、前記空き領域の容量が前記格納領域として確保しようとしている容量に対して不足していれば固定長ブロック管理手段が新たに割り当てた固定長ブロック上に前記格納領域を確保することを特徴とする、請求項６に記載のメモリ管理方法。
【請求項８】
前記データ格納領域設定部が前記格納領域を解放する際、前記解放された格納領域が属する固定長ブロック上の前記格納領域の個数を前記データ格納領域設定部がチェックし、該格納領域の個数が０でかつ前記アドレスが該固定長ブロックを示していなければ前記固定長ブロック管理手段が該固定長ブロックを解放することを特徴とする、請求項７に記載のメモリ管理方法。
【請求項９】
メモリ領域に可変長データを一時的に格納して処理する手段を備えたデータ処理装置にあって、
空き領域ポインタ保持部からデータ格納領域設定部が前記格納領域の末尾を示すアドレス情報を読み込む機能と、
前記アドレス情報の順に前記データ格納領域設定部が前記可変長データの格納領域を順次確保する機能と、
前記確保された格納領域に前記データ格納領域設定部が前記可変長データを格納する機能と
をコンピュータに実行させることを特徴とするメモリ管理プログラム。
【請求項１０】
前記データ格納領域設定部が前記可変長データの格納領域を確保する際、前記アドレスを先頭として当該アドレスが属する固定長ブロックの末尾との間の空き領域を前記格納領域とすると共に、前記空き領域の容量が前記格納領域として確保しようとしている容量に対して不足していれば固定長ブロック管理手段が新たに割り当てた固定長ブロック上に前記格納領域を確保する機能をコンピュータに実行させることを特徴とする、請求項９に記載のメモリ管理プログラム。
【請求項１１】
前記データ格納領域設定部が前記格納領域を解放する際、前記解放された格納領域が属する固定長ブロック上の前記格納領域の個数を前記データ格納領域設定部がチェックし、該格納領域の個数が０でかつ前記アドレスが該固定長ブロックを示していなければ前記固定長ブロック管理手段が該固定長ブロックを解放する機能をコンピュータに実行させることを特徴とする、請求項１０に記載のメモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置上での動的メモリ管理におけるデータ格納領域の確保と解放を実行する技術に関し、特に通信機器のメモリ上における通信フレームを一時的に格納する領域の確保と解放を実行する技術に関する。
【背景技術】
【０００２】
プロセッサとメモリを使ってソフトウェア処理を行うデータ処理装置では、メモリ上でデータ格納領域を管理する仕組みが必要である。このメモリ上のデータ格納領域管理の方法はメモリ確保手順によって分類することができ、静的メモリ管理、自動メモリ管理、動的メモリ管理の３通りに分けて考えることができる。【０００３】
静的メモリ管理とは、システムの起動以前のプログラムをコンパイルする段階でデータ領域を割り付ける方法である。前記静的メモリ管理方法では、システム上でプログラムが動作している最中に、前記データ格納領域の割付が変更されることはない。前記静的メモリ管理方法によるメリットとしては、動作中のメモリ管理が不要であるため、プロセッサによるメモリ管理負荷が非常に軽いことが挙げられる反面、システムの起動中に不要になったデータ格納領域を削除することができないため、システム変数を保持するのに適しているが、ユーザ変数やデータの格納には向かない。【０００４】
自動メモリ管理とは、コールスタック上でメモリ領域の確保や解放を行う方法である。コールスタックは、関数コールが実行されたときにその関数内で使用する自動変数領域として生成され、関数実行終了とともに破棄がなされる。ユーザレベルで明示的に領域の確保・解放を行う必要がないため、関数実行終了とともに領域が破棄され、領域解放漏れによるメモリリークが発生しにくい。【０００５】
動的メモリ管理とは、ヒープ領域と呼ばれる未使用メモリ領域上でユーザが明示的にメモリ領域の確保や解放を行うことによるメモリ管理方法である。前記動的メモリ管理方法では、プログラム実行中の任意のタイミングで明示的なデータ領域確保が行われ、確保されたデータ領域はプログラムから明示的に解放操作が実行されるまではヒープ領域上に保持される。特に通信機器で通信フレームを一時的に格納するメモリでは、動的メモリ管理が行われることが多い。【０００６】
通信フレームをメモリ上に一時格納する際には、動的メモリ管理によりヒープ領域上に個々の通信フレームに対応した格納領域を確保することになる。これは、通信機器において通信フレームに対して行う処理は通常込み入った処理となることが多く、複数の関数をまたがって処理されるためであるのに加えて、ある時刻に保持する必要のある通信フレーム個数は不定であるためでもある。【０００７】
動的メモリ管理を行うにあたって個々のデータ格納領域のサイズを決める方法としては、固定長アロケーションと可変長アロケーションの２通りがある。固定長アロケーションはヒープ領域を同サイズの２以上の固定長ブロックに分け、この固定長ブロック単位でプログラムによるメモリ領域の確保要請に従って使用と不使用の管理を行うものである。それに対して、可変長アロケーションはプログラムが必要とするサイズに合わせてヒープ領域からデータ領域を切り出して確保する方法である。【０００８】
メモリ領域の管理にかかる処理負荷の少なさという点では、固定長アロケーションが優れている。これは、空き領域となる固定長ブロックがいずれも同サイズとなるので、どの空き領域を使って次のデータ格納領域を確保するかの探索や判断処理の大部分が簡略化できるためである。そのため、プロセッサの演算能力がコスト要件により制限されている機器などで良く用いられるアロケーション方法である。ただし、予め決められたサイズでしか領域の確保ができないため、固定長領域のサイズから必要なデータ領域のサイズを引いた余り分は使用されない無駄な領域となるので、データが固定長である場合を除き必ずしもメモリ使用効率が高い方式とは言えない。【０００９】
これに対して、可変長アロケーションはヒープ領域の中からデータ格納に必要な領域だけを確保しようとするアロケーション方法であるため、それぞれのデータに割り当てられた領域についての無駄な未使用領域が発生しにくい。ただし、データ格納領域の確保と解放をある程度繰り返すとフラグメントと呼ばれる不等長の空き領域が散在する状態となり、次にデータ格納領域を確保しようとするときには、適切な空き領域を探すための処理が複雑なものとなりやすい。また、総ヒープサイズと総使用領域との差が十分あったとしても、個々の空き領域が小さい場合には、新たなデータ格納領域が確保できない状態が発生しうる。【００１０】
このため、可変長アロケーションは、比較的汎用性が高く、プロセッサの処理能力に余裕があるシステムにおいて使用されることが多い。通信処理機器などの機器においては、コスト削減の観点からプロセッサの処理能力を極力抑える必要があり、プロセッサによるメモリ管理のための処理量が相対的に抑制できる固定長アロケーションが用いられる傾向にある。【００１１】
特許文献１には、その対象が画像形成装置であるが、固定長ヒープ領域を用いたメモリ管理方法が記載されている。具体的には特許文献１に開示されたメモリ領域の管理方法では、複数の固定長ヒープ領域を用いて予め複数のサイズの固定長領域を確保しておくブロックと、それで領域が不足した場合に可変長ヒープ領域の一部を固定長領域として使用するブロックとを備え、これらのブロックを用いて、ある時刻にヒープ領域に格納すべきデータのサイズと個数が予めほぼ予測できるときには、このような同サイズのデータ格納領域を複数並べて管理する固定長アロケーションによって高いメモリ使用効率と低い処理負荷とを同時に実現している。【００１２】
特許文献２には、可変長アロケーションを用いた動的メモリ管理方法が記載されている。具体的には特許文献２に開示されたメモリ領域の管理方法では、ヒープ領域であるメモリプールをサブプールと呼ばれる複数の領域に予め分割しておき、データ格納領域を確保する際にはデータ格納に必要なサイズ毎にどの順序で複数のサブプールを探すかを変更することで、探索時間の短縮を図っている。特許文献２では、アロケーションを繰り返すに従って同サイズのデータ格納領域が予め決められたアドレスに割り当てられやすくなり、その位置を検索する際に早い段階で最適な空き場所を得られやすくなると述べられている。【００１３】
つまり、特許文献２では、個々のサブプールサイズと検索パターンで閾値として用いるデータサイズとは、動作中に格納するデータのサイズと個数に合わせて最適値が設定されるべきパラメータであるため、格納するデータのサイズおよび個数の分布が予め詳細にわかっている場合には、メモリ使用効率を上げることが可能となる。【００１４】
また、特許文献３には、メモリのデータ領域を複数の基本ブロックに分割し、さらにそれらの基本ブロックを任意のサイズの複数の小ブロックに細分化して、記憶領域を効率的に使用するという技術が記載されている。特許文献４には、バッファにスワスデータを書き込む際、ライトポインタを順次移動させ、前のスワスデータの最終位置に続けて次のバッファにスワスデータを書き込むという技術が記載されている。特許文献５にはバッファにＦＩＦＯブロックとしてデータを書き込む際、この書き込みをＦＩＦＯブロックレジスタとＥＭＰＴＹビットで管理するという技術が記載されている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開平１１−１１０２８１号公報
【特許文献２】特開２００３−１９６１５２号公報
【特許文献３】特開２００１−２６５６２８号公報
【特許文献４】特開２００２−１３７４５７号公報
【特許文献５】特開２００４−０３０１９６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
コスト要件から実装するメモリデバイスの容量とプロセッサの演算リソース量とを抑える必要があるため、通信機器における通信フレーム格納領域の確保を行う際には、必要なヒープ領域を最小限に抑えてメモリ使用効率を高めつつも同時に動的メモリ管理に必要な処理量を最小限に抑える必要がある。このため、動的メモリ管理においては、固定長アロケーションがもつ低処理負荷の特徴と、動的メモリアロケーションがもつ高いメモリ使用効率とを両立させたい。このためには、データ格納領域をできるだけ確保された時刻順に一方向に近接して配置するようにして、いわゆるフラグメント状態とはしないようにすることが望ましい。【００１７】
ある時刻において通信機器で処理中の通信フレームの総量は、最大通信帯域と仕様上の通信フレームの滞留時間からほぼ一定に定まる。しかし、個々の通信フレームのサイズは可変長であり、一時保持しておかなければならない通信フレームの個数も一定ではない。その理由は、通信プロトコル上層のアプリケーションそれぞれにおいて最適な通信フレームにより送受信されるためである。一つの物理通信路上で複数の異なる種類のアプリケーションが同時に通信を行っているとき、それぞれのアプリケーションが確立しているコネクションが利用する論理チャネル内には異なるサイズと平均帯域の通信フレームが送受されているためである。【００１８】
予め通信フレームのサイズや帯域が比較的高い確度で予測されている必要がある特許文献１および２に開示されている方法では、このような論理チャネル毎の特性、つまり通信フレームのサイズと個数の組み合わせが異なる複数の論理チャネルを取り扱う通信機器に適用して既述のコスト要件を両立させることは難しい。【００１９】
さらに、論理チャネルの特性が変化しても物理的に用意しなければならないメモリデバイス容量が一定であることが望ましい。もし、用意すべきヒープサイズが通信条件によって大きく変わるような場合には、最大ばらつき時に合わせてメモリデバイスを用意しなければならず、平均的な使用状態を考えるとコスト的に不利になるためである。【００２０】
特許文献１による方法では、予め用意されている個々の固定長ヒープ領域に対して実際の処理中に扱う通信フレームサイズに偏りが生じた場合には、使われない固定長領域分だけメモリ領域に無駄が生じる。また、これを補うため、可変長ヒープ領域を消費することとなり、可変長ヒープ領域を予め余分に用意しておかなければならず、この面でもコスト的に不利となる。【００２１】
以上で示した特許文献１および２の問題を解決する構成は、特許文献３〜５のいずれにも記載されていない。【００２２】
本発明の目的は、通信フレームなどのデータをメモリ上に一時的に格納して処理するデータ処理装置において、少ないプロセッサリソースでメモリの使用効率を高め、装置コストを低減することを可能とするデータ処理装置、メモリ管理方法およびメモリ管理プログラムを提供することにある。
【課題を解決するための手段】
【００２３】
上記目的を達成するため、本発明に係るデータ処理装置は、メモリ上のヒープ領域中に可変長データを一時的に格納して処理するユニットを備えたデータ処理装置であって、ヒープ領域中に固定長ブロックを割り当ておよび解放する固定長ブロック管理ユニットと、固定長ブロック中に可変長データを格納する格納領域を確保および解放するデータ格納領域管理ユニットとを備え、データ格納領域管理ユニットが、固定長ブロックごとに格納領域の個数を保持する参照カウンタ保持モジュールと、格納領域の末尾を示すアドレス情報を保持する空き領域ポインタ保持モジュールと、このアドレス情報順に可変長データの格納領域を順次確保および解放するデータ格納領域設定モジュールとを備えることを特徴とする。【００２４】
上記目的を達成するため、本発明に係るメモリ管理方法は、メモリ上のヒープ領域中に可変長データを一時的に格納して処理するユニットを備えたデータ処理装置にあって、メモリ上に可変長データを格納する格納領域を確保するメモリ管理方法であって、空き領域ポインタ保持モジュールからデータ格納領域設定モジュールが格納領域の末尾を示すアドレス情報を読み込み、このアドレス情報の順にデータ格納領域設定モジュールが可変長データの格納領域を順次確保し、確保された格納領域にデータ格納領域設定モジュールが可変長データを格納することを特徴とする。【００２５】
上記目的を達成するため、本発明に係るメモリ管理プログラムは、メモリ上のヒープ領域中に可変長データを一時的に格納して処理するユニットを備えたデータ処理装置にあって、空き領域ポインタ保持モジュールからデータ格納領域設定モジュールが格納領域の末尾を示すアドレス情報を読み込む機能と、このアドレス情報の順にデータ格納領域設定モジュールが可変長データの格納領域を順次確保する機能と、確保された格納領域にデータ格納領域設定モジュールが可変長データを格納する機能とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００２６】
本発明は、上述したようにメモリ領域に空き領域ポインタの示すアドレスに続けて新規データ格納領域を確保するように構成したので、プロセッサに負荷のかかりにくい少ない計算量で、データ格納領域が確保された時刻順に一方向に近接して配置することができ、フラグメント状態を発生させにくい。従って、少ないプロセッサリソースでメモリの使用効率を高め、装置コストを低減することを可能とすることができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の第１の実施形態に係る通信機器の構成を示す説明図である。
【図２】図１で示したＲＡＭ（Random Access Memory）上の記憶領域の構成を示す説明図である。図２（ａ）は、ＲＡＭ上にヒープ領域を確保した状態を示す。図２（ｂ）は、固定長ブロック管理ユニットがヒープ領域上にＮ個（Ｎは整数）の固定長ブロックを確保した状態を示す。図２（ｃ）は、固定長ブロック上に、データ格納領域設定モジュールがデータ格納領域を確保した状態を示す。
【図３】図１で示したデータ格納領域管理ユニットが、ＲＡＭに新規データを記憶する際の動作を示すフローチャートである。
【図４】図３のステップＳ２０２として示した、固定長ブロック管理ユニットが新規の固定長ブロックを確保する動作を示すフローチャートである。
【図５】図２で示した固定長ブロック管理ユニットおよびデータ格納領域管理ユニットが、不要になったデータ格納領域を解放する動作を示すフローチャートである。
【図６】図１〜２で示したＲＡＭ上での、データ格納領域の確保と解放の時間遷移を示した説明図である。
【図７】本発明の第２の実施形態におけるＲＡＭ上の記憶領域の構成を示す説明図である。図７（ａ）は、ＲＡＭ上にヒープ領域を確保した状態を示す。図７（ｂ）は、固定長ブロック管理ユニットがヒープ領域上にＮ個（Ｎは整数）の固定長ブロックを確保した状態を示す。図７（ｃ）は、固定長ブロック上に、データ格納領域設定モジュールがデータ格納領域を確保した状態を示す。
【発明を実施するための形態】
【００２８】
（第１の実施形態）
以下、本発明の実施形態について添付図に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係るデータ処理装置は、メモリ領域（ＲＡＭ１１）に可変長データを一時的に格納して処理するユニット（ＣＰＵ１０）を備えたデータ処理装置であって、ヒープ領域中２１に固定長ブロック３１〜３Ｎ（Ｎは自然数）を割り当ておよび解放する固定長ブロック管理ユニット１２と、固定長ブロック３１〜３Ｎ中に可変長データを格納する格納領域６１〜６Ｍ（Ｍは自然数）を確保および解放するデータ格納領域管理ユニット１３とを備える。
そして、データ格納領域管理ユニット１３が、固定長ブロック３１〜３Ｎごとに格納領域の個数を保持する参照カウンタ保持モジュール１３ａと、格納領域の末尾を示すアドレス情報を保持する空き領域ポインタ保持モジュール１３ｂと、このアドレス情報順に可変長データの格納領域６１〜６Ｍを順次確保するデータ格納領域設定モジュール１３ｃとを備える。なお、前記固定長管理ユニット１２及びデータ格納領域管理ユニット１３は、ＣＰＵがプログラムを実行することによりソフトウェア上で構築されるものであり、これらの機能はソフトウェア上で実現される。また、データ格納領域管理ユニット１３が備えている参照カウンタ保持モジュール１３ａ，空き領域ポインタ保持モジュール１３ｂ及びデータ格納領域設定モジュール１３ｃは、ＣＰＵがプログラムを実行することによりソフトウェア上で構築されるものであり、これらの機能はソフトウェア上で実現される。また、固定長管理ユニット１２及びデータ格納領域管理ユニット１３の機能、参照カウンタ保持モジュール１３ａ，空き領域ポインタ保持モジュール１３ｂ及びデータ格納領域設定モジュール１３ｃの機能をソフトウェア上で実現させるためのプログラムは記録媒体に記録されて商取引の対象となる。
【００２９】
ここで、データ格納領域設定モジュール１３ｃは、可変長データの格納領域６１〜６Ｍを確保するに際して、空き領域ポインタ保持モジュール１３ｂが保持する値を先頭アドレスとして当該アドレスが属する固定長ブロックの末尾との間の空き領域を格納領域とする格納領域設定機能と、空き領域の容量が格納領域として確保しようとしている容量に対して不足しているか否かを判断する容量判断機能を有する。そして、固定長ブロック管理ユニット１２は、空き領域の容量が不足していると判断された場合に、新たに固定長ブロック３１〜３Ｎを割り当てる新規割り当て機能を有する。
【００３０】
さらに、データ格納領域設定モジュール１３ｃは、格納領域を解放する際、解放された格納領域が属する固定長ブロック上の参照カウンタ５１〜５Ｎの数値をチェックする参照カウンタチェック機能と、該格納領域の参照カウンタの値が０でありかつ空き領域ポインタ４２が指し示すアドレスが該固定長ブロックを示していない場合に該固定長ブロックが不使用であると判断する不使用ブロック判断機能を有する。そして、固定長ブロック管理ユニット１２は、データ格納領域設定モジュール１３ｃが該固定長ブロックが不使用であると判断された場合に、該固定長ブロックを解放する不使用ブロック解放機能を有する。
【００３１】
ここで、メモリ領域で固定長ブロックとして割り当てられていない未使用領域（未使用ヒープ領域４１）は、管理キューとして管理される。そして、格納領域６１〜６Ｍに格納される可変長データは、通信フレームもしくは通信パケットである。なお、以下の説明では、前記メモリ領域をヒープ領域として説明する。
【００３２】
この構成を備えることにより、本実施形態は、少ない計算量でデータ格納領域を確保された時刻順に一方向に近接して配置して、フラグメント状態を発生させにくくしている。従って、少ないプロセッサリソースでメモリの使用効率を高め、装置コストを低減することを可能とすることができる。
以下、これをより詳細に説明する。
【００３３】
図１は、本発明の第１の実施形態に係る通信機器１の構成を示す説明図である。通信機器１は、該装置の動作を制御するプロセッサ１０と、プロセッサ１０によって制御されるデバイスの一つであるＲＡＭ（Random Access Memory）１１と、通信パケットの送受信を行う通信機器１４とを備える。通信機器１４は、たとえば変調器、発振器、復調器、入出力装置などのような多くのデバイスを含むが、本発明を説明する上ではそれらについて詳しく言及する必要は特にない。
【００３４】
プロセッサ１０は、通信パケットを受信するとＲＡＭ１１に該パケットのデータを一時的に書き込んでから通信機器１４によって該パケットに対する処理を行い、処理が終了したら消去する。プロセッサ１０がＲＡＭ１１にデータを書き込む際には、記憶すべきデータと該データを記憶すべきアドレスをＲＡＭ１１に送信する。ＲＡＭ１１からデータを読み込む際には、読み込み命令と読み込み元のアドレスをＲＡＭ１１に送信する。
【００３５】
プロセッサ１０がプログラムを実行することにより、ＲＡＭ１１上に後述の固定長ブロックを確保および解放する固定長ブロック管理ユニット１２と、固定長ブロック上にデータ格納領域を確保および解放するデータ格納領域管理ユニット１３とがソフトウェア上で動作する。固定長ブロック管理ユニット１２とデータ格納領域管理ユニット１３は、以下に説明する記憶領域の確保と解放に係る動作を、全てプロセッサ１０とＯＳ（オペレーション・システム、図示せず）の機能に基づいて行うことができる。
【００３６】
データ格納領域管理ユニット１３はさらに、固定長ブロックごとに格納領域の個数（参照カウンタの値）を保持する参照カウンタ保持モジュール１３ａと、格納領域の末尾を示すアドレス情報（空き領域ポインタ４２）を保持する空き領域ポインタ保持モジュール１３ｂと、空き領域ポインタ４２が指し示すアドレス情報順に可変長データの格納領域を順次確保するデータ格納領域設定モジュール１３ｃという各機能モジュールに分かれる。これらの動作については後述する。
【００３７】
図２は、図１で示したＲＡＭ１１上の記憶領域の構成を示す説明図である。図２（ａ）は、ＲＡＭ１１上にヒープ領域２１を確保した状態を示す。図２（ｂ）は、固定長ブロック管理ユニット１２がヒープ領域２１上にＮ個の固定長ブロック３１〜３Ｎ（Ｎは整数）を確保した状態を示す。固定長ブロック３１〜３Ｎ以外の領域は未使用ヒープ領域４１となる。そして図２（ｃ）は、固定長ブロック３１〜３Ｎ上に、データ格納領域設定モジュール１３ｃがデータ格納領域６１〜６Ｍ（Ｍは整数）を確保した状態を示す。通信の仕様上、各々のデータ格納領域６１〜６Ｍのデータ長は可変長である。図２（ｃ）で「Ｋ」として表記され、斜線でハッチングされている領域が、確保されているデータ格納領域６１〜６Ｍを表す。
【００３８】
未使用ヒープ領域４１は、固定長ブロック管理ユニット１２がキュー（ＦＩＦＯ、先入れ先出し）方式で管理する。その意味で、未使用ヒープ領域４１を未使用キューと呼ぶことがある。
【００３９】
またヒープ領域２１上には、参照カウンタ保持モジュール１３ａが固定長ブロック３１〜３Ｎの各々に対応する参照カウンタ５１〜５Ｎを保持している。参照カウンタ５１〜５Ｎの値は、図２では各々の固定長ブロック３１〜３Ｎの先頭に記憶されているが、全ての参照カウンタ５１〜５Ｎの値を一カ所に集めて集中的に管理するようにしてもよい。
【００４０】
参照カウンタ５１〜５Ｎは、データ格納領域６１〜６Ｍが確保されるたびに、該データ格納領域６１〜６Ｍが確保された値が参照カウンタ保持モジュール１３ａによって、新たに確保されたデータ格納領域の数だけインクリメント（加算）される。そしてデータ格納領域６１〜６Ｍが解放されるたびに、該データ格納領域６１〜６Ｍが解放された固定長ブロック３１〜３Ｎの参照カウンタ５１〜５Ｎの値が参照カウンタ保持モジュール１３ａによって、解放されたデータ格納領域の数だけデクリメント（減算）される。
【００４１】
固定長ブロック３１〜３Ｎは、それぞれ固定長ブロック管理ユニット１２によってヒープ領域２１上に確保される領域である。固定長ブロック３１〜３Ｎは必ずしも隣接して確保される必要はなく、また必ずしもアドレス順に並んでいる必要はない。ただし、ブロック末尾のアドレスを計算によって容易に求められればプロセッサ１０の処理負荷を低減できるので、隣接して配置されていることがより望ましい。
【００４２】
固定長ブロック管理ユニット１２は未使用ヒープ領域４１をキュー（ＦＩＦＯ、先入れ先出し）方式で管理し、その中から新たな固定長ブロックを割り当て、また固定長ブロック３１〜３Ｎの中で使用されなくなったものを解放して未使用ヒープ領域４１に戻すことができる。
【００４３】
参照カウンタ５１〜５Ｎの値は、参照カウンタ保持モジュール１３ａによって固定長ブロック３１〜３Ｎの各々の先頭に記憶される。新たな固定長ブロックを割り当てられた段階では、この固定長ブロックに対応する参照カウンタは値０に初期化されている。データ格納領域設定モジュール１３ｃが固定長ブロック内にデータ格納領域を確保すると、そのたびに参照カウンタ保持モジュール１３ａがこの固定長ブロックに対応する参照カウンタの値をインクリメント（加算）する。また、データ格納領域設定モジュール１３ｃがデータ格納領域を解放すると、そのたびに参照カウンタ保持モジュール１３ａがこの固定長ブロックに対応する参照カウンタの値をデクリメント（減算）する。
【００４４】
空き領域ポインタ保持モジュール１３ｂは、データ格納領域６１〜６Ｍが確保された領域の末尾のアドレスを示す空き領域ポインタ４２を保持する。データ格納領域が新たに確保される際には、データ格納領域設定モジュール１３ｃはこの空き領域ポインタ４２が指し示すアドレスの値を先頭とし、空き領域ポインタ４２と該空き領域ポインタのアドレスが属する固定長ブロックの末尾との間の空き領域に、まず領域確保を試みる。その間に必要な容量のデータ格納領域を確保できない場合には、データ格納領域設定モジュール１３ｃは固定長ブロック管理ユニット１２にその旨を伝え、未使用ヒープ領域４１から新たな固定長ブロックを確保させて、その上に新たなデータ格納領域を確保する。
【００４５】
データ格納領域設定モジュール１３ｃが固定長ブロック３１〜３Ｎの中でデータ格納領域６１〜６Ｍを開放し、デクリメントによって参照カウンタ５１〜５Ｎの値が０になると、固定長ブロック管理ユニット１２は０になった参照カウンタ５１〜５Ｎに対応する固定長ブロック３１〜３Ｎを解放して未使用ヒープ領域４１に戻す。このとき、解放された領域を示す情報は保持されることはなく、一度解放されたデータ格納領域は、一度固定長ブロックが解放されてから再び同じ領域が固定長ブロックとして確保されるまで、再利用されることはない。
【００４６】
図３は、図２で示したデータ格納領域管理ユニット１３が、ＲＡＭ１１上に新規データを記憶する際の動作を示すフローチャートである。動作を開始すると、まずデータ格納領域設定モジュール１３ｃが、空き領域ポインタ４２が先頭アドレスとして指し示す領域に、記憶しようとしているデータが格納可能かどうかを確認する（ステップＳ２０１）。空き領域ポインタ４２とその領域の末尾との間の領域に、該データを記憶できるだけの容量がない場合には、固定長ブロック管理ユニット１２に新規の固定長ブロックを確保させる（ステップＳ２０２）。
【００４７】
そして、データ格納領域設定モジュール１３ｃがその新規データのために空き領域を確保し、空き領域ポインタ保持モジュール１３ｂが空き領域ポインタを当該新規データの分だけ移動させる（ステップＳ２０３）と同時に、データ格納領域設定モジュール１３ｃが当該固定長ブロック用の参照カウンタを＋１加算（インクリメント）する（ステップＳ２０４）。
【００４８】
図４は、図３のステップＳ２０２として示した、固定長ブロック管理ユニット１２が新規の固定長ブロックを確保する動作を示すフローチャートである。固定長ブロック管理ユニット１２はまず、未使用ヒープ領域４１の中から固定長ブロックの一つを確保し（ステップＳ３０１）、空き領域ポインタ４２をこの確保した固定長ブロックの先頭アドレスで書き換える（ステップＳ３０２）。さらにこれと同時に、参照カウンタ保持モジュール１３ａが当該固定長ブロックに対応する参照カウンタの値を０として初期化する（ステップＳ３０３）。
【００４９】
図５は、図２で示した固定長ブロック管理ユニット１２およびデータ格納領域管理ユニット１３が、不要になったデータ格納領域を解放する動作を示すフローチャートである。データ格納領域設定モジュール１３ｃが当該データ格納領域を解放すると同時に、参照カウンタ保持モジュール１３ａは、該当固定長ブロックに対応する参照カウンタを−１減算（デクリメント）する（ステップＳ４０１）。
【００５０】
参照カウンタの値が０になっていれば（ステップＳ４０２）、さらに空き領域ポインタ保持モジュール１３ｂによる空き領域ポインタ４２が指し示す当該固定長ブロック内の領域を指し示しているか否かを判断する（ステップＳ４０３）。参照カウンタの値が０で、かつ空き領域ポインタ４２が当該固定長ブロック内にない場合は、当該固定長ブロックは不使用であり、この固定長ブロック内にはデータ格納領域が存在していないことを意味するので、固定長ブロック管理ユニット１２が当該固定長ブロックを未使用ヒープ領域４１に戻し、当該固定長ブロックを解放する（ステップＳ４０４）。
【００５１】
（データ格納領域の確保と解放）
図６は、図１〜２で示したＲＡＭ１１上での、データ格納領域の確保と解放の時間遷移を示した説明図である。初期状態ではＲＡＭ１１上にデータ格納領域が確保されていない。この状態からプロセッサ１０が先頭通信フレームｐｋｔ＃１を受信すると、まず固定長ブロック管理ユニット１２がＲＡＭ１１上の未使用ヒープ領域４１上に固定長ブロック３１を確保する（図３：ステップＳ２０１〜２０２）。これと同時に、固定長ブロック３１に対応する参照カウンタ５１も確保され、初期値０とされる（図４：ステップＳ３０１〜３０２）。
【００５２】
これに続いて、データ格納領域管理ユニット１３のデータ格納領域設定モジュール１３ｃが固定長ブロック３１上に通信フレームｐｋｔ＃１のデータ格納領域６１を確保し、そこにｐｋｔ＃１のデータを格納すると同時に、その容量だけ空き領域ポインタ４２が移動する（図３：ステップＳ２０３）。これに合わせて、参照カウンタ保持モジュール１３ａが固定長ブロック３１に対応する参照カウンタ５１の値も１加算される（図３：ステップＳ２０４）。以上で、図６のステップＳ５０１に示した状態となる。
【００５３】
これに続いてプロセッサ１０が通信フレームｐｋｔ＃２〜３を受信すると、同様にデータ格納領域設定モジュール１３ｃがこれらに対応するデータ格納領域６２〜６３が確保されてこれらのデータが格納され、空き領域ポインタ保持モジュール１３ｂが空き領域ポインタ４２を移動し（図３：ステップＳ２０３）、そのたびに参照カウンタ保持モジュール１３ａが参照カウンタ５１の値を１ずつ加算される（図３：ステップＳ２０４）。以上で、図６のステップＳ５０２〜３に示した状態となる。
【００５４】
これに続いて、プロセッサ１０が通信フレームｐｋｔ＃１〜２の送出を完了して処理が終了したので、データ格納領域設定モジュール１３ｃがこれらのデータ格納領域を解放し、参照カウンタ保持モジュール１３ａが参照カウンタ５１の値を１ずつ減算する（図５：ステップＳ４０１）。以上で、図６のステップＳ５０４に示した状態となる。
【００５５】
これに続いてプロセッサ１０が通信フレームｐｋｔ＃４を受信すると、空き領域ポインタ保持モジュール１３ｂが空き領域ポインタ４２をｐｋｔ＃３の後に続く空き領域に移動し、データ格納領域設定モジュール１３ｃがこの領域にデータ格納領域６４が確保されてこれらのデータを格納し（図３：ステップＳ２０３）、これに対応して参照カウンタ保持モジュール１３ａが参照カウンタ５１の値を加算する（図３：ステップＳ２０４）。以上で、図６のステップＳ５０５に示した状態となる。
【００５６】
この時点ではｐｋｔ＃１〜２の領域が開放されているので、この領域のあった部分にｐｋｔ＃４のデータ格納領域を確保することも考えられるが、本実施形態ではこの部分を使用しない。これにより、それぞれの固定長ブロック内ではデータ格納領域が確保された時刻順に一方向に近接して配置されることになり、データ生存期間の異なるもの同士が同じ固定長ブロック内に配置されるのを回避してフラグメントの原因の発生を防ぐことになる。
【００５７】
これに続いてプロセッサ１０が通信フレームｐｋｔ＃５を受信すると、固定長ブロック３１のｐｋｔ＃４の後に続く空き領域にはｐｋｔ＃５を格納できる容量が残っていない（前述のｐｋｔ＃１〜２の領域に十分な空きがあっても）ので、固定長ブロック管理ユニット１２がＲＡＭ１１上に新たな固定長ブロック３２を確保し（図３：ステップＳ２０１〜２０２）、固定長ブロック３２に対応する参照カウンタ５２を確保して初期値０とする（図４：ステップＳ３０１〜３０２）。
【００５８】
データ格納領域設定モジュール１３ｃは、固定長ブロック３２上に通信フレームｐｋｔ＃５のデータ格納領域６５を確保してこれらのデータを格納し、さらに空き領域ポインタ保持モジュール１３ｂが空き領域ポインタ４２を移動し（図３：ステップＳ２０３）、参照カウンタ保持モジュール１３ａが固定長ブロック３２に対応する参照カウンタ５２の値を１だけ加算する（図３：ステップＳ２０４）。以上で、図６のステップＳ５０６に示した状態となる。
【００５９】
これに続いて、プロセッサ１０が通信フレームｐｋｔ＃３〜４の送出を完了して処理が終了したので、データ格納領域設定モジュール１３ｃがこれらのデータ格納領域を解放し、参照カウンタ保持モジュール１３ａが参照カウンタ５１の値を減算する（図５：ステップＳ４０１）とその値が０になり（図５：ステップＳ４０２）、しかも空き領域ポインタ４２は固定長ブロック３２を指しているので（図５：ステップＳ４０３）、固定長ブロック３１には既にデータが存在していないことになる。従って、固定長ブロック管理ユニット１２はこの固定長ブロック３１を解放して未使用ヒープ領域４１に戻す（図５：ステップＳ４０４）。以上で、図６のステップＳ５０７に示した状態となる。
【００６０】
この後にプロセッサ１０が通信フレームｐｋｔ＃６を受信すると、データ格納領域設定モジュール１３ｃはこのｐｋｔ＃６を固定長ブロック３２上のｐｋｔ＃５に続くデータ格納領域６６に格納し、これに伴って参照カウンタ保持モジュール１３ａが参照カウンタ５２の値を加算する（図３：ステップＳ２０３〜２０４）。以上で、図６のステップＳ５０８に示した状態となる。以後、これと同様の処理を繰り返す。
【００６１】
（第１の実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。本実施形態に係る動作は、メモリ１１上のヒープ領域２１中に可変長データを一時的に格納して処理するユニットを備えたデータ処理装置にあって、メモリ１１上に可変長データを格納する格納領域６１〜６Ｍ（Ｍは自然数）を確保するメモリ管理方法であって、空き領域ポインタ保持モジュールからデータ格納領域設定モジュールが格納領域６１〜６Ｍの末尾を示すアドレス情報を読み込み、空き領域ポインタ４２の示すアドレス情報の順にデータ格納領域設定モジュール１３ｃが可変長データの格納領域６１〜６Ｍを順次確保し、確保された格納領域６１〜６Ｍにデータ格納領域設定モジュール１３ｃが可変長データを格納する。
【００６２】
ここで、データ格納領域設定モジュール１３ｃが可変長データの格納領域６１〜６Ｍを確保する際、空き領域ポインタ保持モジュール１３ｂが保持する空き領域ポインタ４２が指し示す値を先頭として当該アドレスが属する固定長ブロック３１〜３Ｎの末尾との間の空き領域を格納領域６１〜６Ｍとすると共に（図３：ステップＳ２０３）、空き領域の容量が格納領域６１〜６Ｍとして確保しようとしている容量に対して不足していれば固定長ブロック管理ユニット１２が新たに割り当てた固定長ブロック上に格納領域を確保する（図３：ステップＳ２０２〜２０３）。
【００６３】
そして、データ格納領域設定モジュール１３ｃが格納領域を解放する際、解放された格納領域６１〜６Ｍが属する固定長ブロック３１〜３Ｎ上の格納領域の個数をデータ格納領域設定モジュール１３ｃがチェックし（図４：ステップＳ４０１〜２）、該格納領域の参照カウンタ５１〜５Ｎの値が０でかつ空き領域ポインタ４２が保持するアドレスが該固定長ブロックを示していなければ、固定長ブロック管理ユニット１２が該固定長ブロックを解放する（図４：ステップＳ４０２〜４）。
【００６４】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行する主体であるＣＰＵ１０に実行させるようにしてもよい。
この動作により、本実施形態は以下のような効果を奏する。
【００６５】
本実施形態は、通信データが持つ「ほぼ到着順に処理される」という特性、および「データの生存期間がほぼ等しい」という特性を前提としている。本実施形態は、この前提を利用して、通信フレームを格納するデータ領域を確保するにあたって、直前に確保したデータ領域の直後に次のデータ格納領域を連続して確保するように構成したので、固定長ブロック内のデータ格納領域に格納されたデータが、到着の古い順に並ぶようになる。
【００６６】
これらのデータ格納領域は、ほとんどの場合、データの生存期間がお互いに近いもの同士を連続して保持している。そして通信処理が進むに従って、ほとんどの場合は古い順に解放されていくので、データ格納領域の連続性が維持され、空き領域の断片が散在するフラグメンテーション状態にはなりにくい。従って、メモリの使用効率を高くすることができる。
【００６７】
また、固定長ブロックの中には連続的にデータ格納領域が確保されるので、固定長ブロックの使用効率が高い状態か、もしくは未使用状態のいずれかの状態を取りうる時間が長くなり、その間の状態が存在したとしても短時間のうちに連続してデータ領域の解放が行われるので、未使用状態に遷移することになる。
【００６８】
通信処理の仕様として最大帯域と最大滞留時間の積が定められているので、そこからある時刻に保持しなければいけない最大通信フレーム総量が求められる。本実施形態では、ヒープ領域２１の空き領域断片総量を小さくすることができるので、物理的に用意しなければならないＲＡＭ１１のリソース量はこの最大通信フレーム総量に合わせて確保すれば良いことになる。即ち、本実施形態によれば、必要なメモリデバイスのリソース量を精度高く見積もることができるようになる。
【００６９】
また、本実施形態では、図３〜５のフローチャートに示した領域の確保および解放に係るいずれの処理においても、フラグメンテーションによる発生した散在した空き領域ごとに次データが格納可能かどうかを判断しながらヒープ領域を探索するなどのような、領域の使用状況に依存して時間が変わる処理を必要としない。従って、使用しているデータの個数や分量に依存せず、ほぼ固定時間での処理が可能である。このため、メモリ管理領域が増大しても常に同じ処理時間でメモリ管理を行うことができ、メモリ管理にかかるプロセッサの処理負荷を低減することができる。
【００７０】
（第２の実施形態）
本発明の第２の実施形態は、ネットワークおよびハードウェアの構成、さらにソフトウェアの大まかな構成は、図１〜６で述べた第１の実施形態と同一である。第２の実施形態が前述の第１の実施形態と異なる点は、固定長ブロック管理ユニット１２が可変長データの生存期間に応じて設定される複数の論理チャネルごとに固定長ブロックの割り当ておよび解放を実行する構成とし、空き領域ポインタ保持モジュール１３ｂが空き領域ポインタ７１〜７Ｋを論理チャネルごとに一つずつ保持する構成としたという点にある。これによって、生存期間の異なるデータが共存する場合にも、第１の実施形態と同一の効果を得ることができる。
以下、これをより詳細に説明する。
【００７１】
本発明の第２の実施形態では、通信機器のハードウェアおよびソフトウェアの構成は、前述の第１の実施形態と同一である。図７は、本発明の第２の実施形態におけるＲＡＭ１１上の記憶領域の構成を示す説明図である。図７（ａ）は、ＲＡＭ１１上にヒープ領域２１を確保した状態を示す。図７（ｂ）は、固定長ブロック管理ユニット１２がヒープ領域２１上にＮ個の固定長ブロック３１〜３Ｎ（Ｎは整数）を確保した状態を示す。固定長ブロック３１〜３Ｎ以外の領域は未使用ヒープ領域４１となる。そして図７（ｃ）は、固定長ブロック３１〜３Ｎ上に、データ格納領域設定モジュール１３ｃがデータ格納領域６１〜６Ｍ（Ｍは整数）を確保した状態を示す。図７（ｃ）で「Ｋ１」および「Ｋ２」として表記してある斜線でハッチングされている領域が、確保されているデータ格納領域６１〜６Ｍを表す。「Ｋ１」が論理チャネル＃１を表し、「Ｋ２」が論理チャネル＃２を表す。
【００７２】
本実施形態では、ヒープ領域２１上のＮ個の固定長ブロック３１〜３Ｎ（Ｎは整数）内にＫ個の論理チャネル（Ｋは整数）が用意され、これらの論理チャネルの各々に対して空き領域ポインタ７１〜７Ｋが用意される。この点以外は、図１で示した第１の実施形態と同一の構成である。
【００７３】
ここでいう論理チャネルとは、上位装置で異なる通信を行う際にアプリケーション毎に割り当てられる仮想的なチャネルであり、通信フレームの特徴としてサイズや時間あたりの個数を決める要素となるものである。空き領域ポインタ７１〜７Ｋは、新たな領域の確保を行う候補アドレスを、論理チャネル毎に保持している。これにより、論理チャネル毎に異なる固定長ブロックを使用することになる。
【００７４】
そして、各々の空き領域ポインタ７１〜７Ｋは、各々の論理チャネルごとに、第１の実施形態における空き領域ポインタ４２と同一の動作を行う。そして各々の論理チャネルごとに、第１の実施形態と同一の動作でデータ格納領域を確保および解放することが可能である。
【００７５】
第１の実施形態では、どのデータも生存期間がほぼ同一であることが、前述のような効果を得られる前提となっている。しかしながら、複数のアプリケーションが同時に動作する環境などでは、この複数のアプリケーションごとに優先度やＱｏＳパラメータの異なる複数のデータ種類が設定され、そのためデータ種類ごとに異なる生存期間が必要となる場合がある。このような場合に、生存期間の異なるデータが互いに接近したデータ格納領域で連続していると、第１の実施形態と同一の効果を得ることができない。
【００７６】
このように生存期間の異なるデータがＲＡＭ１１内に共存した場合にも、その生存期間ごとに異なる論理チャネルを使用し、論理チャネル毎に異なる固定長ブロックを使用するようにすれば、この第２の実施形態によって第１の実施形態と同一の効果を得ることができる。
【００７７】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【００７８】
この出願は２００９年１月１４日に出願された日本出願特願２００９−００５９４２を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００７９】
本発明は、プロセッサと、プロセッサによって制御されるＲＡＭとを備える機器に対して適用可能であるが、特に前述のように通信フレームもしくは通信パケットというデータ種類を扱う機器において、顕著な効果を発揮する。従って、様々な通信レイヤにおいてフレームやパケットを処理する通信処理装置に好適である。また、ストリーミング処理を行う装置や、動画や音声などのコーデック処理を行うマルチメディア処理装置にも好適である。
【符号の説明】
【００８０】
１  通信機器
１０  プロセッサ
１１  ＲＡＭ
１２  固定長ブロック管理ユニット
１３  データ格納領域管理ユニット
２１  ヒープ領域
３１〜３Ｎ  固定長ブロック
４１  未使用ヒープ領域
４２、７１〜７Ｋ  空き領域ポインタ
５１〜５Ｎ  参照カウンタ
６１〜６Ｍ  データ格納領域
【図１】
2010082604.tif 000003
【図２】
2010082604.tif 000004
【図３】
2010082604.tif 000005
【図４】
2010082604.tif 000006
【図５】
2010082604.tif 000007
【図６】
2010082604.tif 000008
【図７】
2010082604.tif 000009
【国際調査報告】
2010082604.tif 000010
2010082604.tif 000011