(57)【特許請求の範囲】
【請求項１】
システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、
未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、前記バッファ領域における未使用のバッファブロック数が前記未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合であって、前記未実行中の処理プロセスおよび実行中の処理プロセスがそれぞれ処理を実行するために最低限必要なバッファブロック数の合計数と前記バッファ領域の全バッファブロック数とを比較し、前記合計数が前記全バッファブロック数を越えない場合に、前記未実行中の処理プロセスにバッファブロックを割り当て可能であると判定する判定工程と、
前記判定工程で割り当て可能と判定した場合に、前記実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって、前記未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、
前記バッファ確保工程で確保したバッファブロックを前記未実行中の処理プロセスに割り当てるバッファ割当工程と、
を含むことを特徴とするバッファの動的管理方法。
【請求項２】
システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、
未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、前記バッファ領域における未使用のバッファブロック数が前記未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって前記未実行中の処理プロセスにバッファブロックを割り当て可能であるか否かを判定する判定工程と、
前記実行中の処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行するために最低限必要なバッファブロック数に基づいて、前記未実行中の処理プロセスに割り当て可能なバッファブロック数を求め、求めた前記バッファブロック数に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定するための縮小順位情報を生成する順位情報生成工程と、
前記判定工程で割り当て可能と判定した場合に、前記順位情報生成工程で生成した前記縮小順位情報に基づいて、バッファブロックを減少させる対象となる前記実行中の処理プロセスを決定し、前記実行中の処理プロセスに割り当てたバッファブロック数を減少させることによって、前記未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、
前記バッファ確保工程で確保したバッファブロックを前記未実行中の処理プロセスに割り当てるバッファ割当工程と、
を含むことを特徴とするバッファの動的管理方法。
【請求項３】
システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、
未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、前記バッファ領域における未使用のバッファブロック数が前記未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって前記未実行中の処理プロセスにバッファブロックを割り当て可能であるか否かを判定する判定工程と、
前記処理プロセスは、前記バッファブロックの割り当てに関する優先順位情報をそれぞれ有し、
前記実行中の処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行するために最低限必要なバッファブロック数に基づいて、前記未実行中の処理プロセスに割り当て可能なバッファブロック数を求め、求めた前記バッファブロック数および前記優先順位情報に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定するための縮小順位情報を生成する順位情報生成工程と、
前記判定工程で割り当て可能と判定した場合に、前記順位情報生成工程で生成した前記縮小順位情報に基づいて、バッファブロックを減少させる対象となる前記実行中の処理プロセスを決定し、前記実行中の処理プロセスに割り当てたバッファブロック数を減少させることによって、前記未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、
前記バッファ確保工程で確保したバッファブロックを前記未実行中の処理プロセスに割り当てるバッファ割当工程と、
を含むことを特徴とするバッファの動的管理方法。
【請求項４】
システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、
各処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行する際に要求したバッファブロック数に基づいて、要求した前記バッファブロック数に対して不足している不足分のバッファブロック数を求め、求めた不足分のバッファブロック数に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定するための割当順位情報を生成する順位情報生成工程と、
任意の処理プロセスからバッファブロックが解放された場合に、前記順位情報生成工程で生成した前記割当順位情報に基づいて、解放された前記バッファブロックの割り当て対象となる処理プロセスを決定し、決定した前記処理プロセスに解放されたバッファを割り当てるバッファ割当工程と、
を含むことを特徴とするバッファの動的管理方法。
【請求項５】
システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、
前記処理プロセスは、前記バッファブロックの割り当て順位に関する優先順位情報をそれぞれ有し、
各処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行する際に要求したバッファブロック数に基づいて、要求した前記バッファブロック数に対して不足している不足分のバッファブロック数を求め、求めた前記不足分のバッファブロック数および前記優先順位情報に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定するための割当順位情報を生成する順位情報生成工程と、
任意の処理プロセスからバッファブロックが解放された場合に、前記順位情報生成工程で生成した前記割当順位情報に基づいて、前記解放されたバッファブロックの割り当て対象となる処理プロセスを決定し、決定した前記処理プロセスに解放されたバッファを割り当てるバッファ割当工程と、
を含むことを特徴とするバッファの動的管理方法。
【請求項６】
前記請求項１〜５のいずれか一つに記載のバッファの動的管理方法の各工程をコンピュータに実行させるためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バッファの動的管理方法に関し、より詳細には、マルチメディアデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している処理プロセスに動的に割り当てるバッファの動的管理方法およびその方法の各工程をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
【従来の技術】
近年のコンピュータ技術の発達に伴って、パーソナルコンピュータにおいても文字だけでなく、音声・静止画像・動画像のようなマルチメディアデータを容易に扱うことができるようになってきている。加えて、ネットワークの高速化により、ネットワークを介してサーバ装置が有しているマルチメディアデータをクライアント装置の要求に応じて配信し、クライアント装置で気軽にマルチメディアデータを閲覧したりすることが可能になってきている。
【０００３】
図１７は、マルチメディア・オン・デマンド・システム（以下、「ＭＯＤシステム」と記述する）の概略構成図である。図１７に示すＭＯＤシステムは、音声・静止画像・動画像等のマルチメディアデータを有するサーバ装置１００と、サーバ装置１００にマルチメディアデータの配信を要求し、サーバ装置１００から配信されたマルチメディアデータを受信して閲覧等を行う複数のクライアント装置１０１ａ〜１０１ｃ（以下「クライアント装置１０１」と記述する）と、サーバ装置１００およびクライアント装置１０１とを接続するネットワーク１０２と、から構成されている。
【０００４】
上述したように、サーバ装置１００は、クライアント装置１０１からの要求に応じて該当するマルチメディアデータを要求があったクライアント１０１に配信する。この際、サーバ装置１００においては、図示しないメモリ中に確保されたバッファ領域に配信するマルチメディアデータを読み出し、バッファ領域に読み出したマルチメディアデータを該当するクライアント装置１０１に配信する。換言すれば、クライアント１０１から配信要求があると、要求されたマルチメディアデータの種類に応じた処理プロセスがサーバ装置１００内において発生し、発生した処理プロセスがそれぞれバッファ領域を利用する。
【０００５】
ここで、サーバ装置１００からクライアント装置１０１にスムーズにマルチメディアデータを配信するには、このバッファ領域をどのように管理するかが重要となってくる。よりスムーズにマルチメディアデータをクライアント装置１０１に配信するには、配信しようとするマルチメディアデータの全てをバッファ領域に読み出してしまえば良い。ところが、バッファ領域、即ちメモリ容量は有限であり、特に、動画像のようなデータの量は膨大であることから、配信しようとするマルチメディアデータの全てをバッファ領域に読み出すことは非現実的である。
【０００６】
そのため、サーバ装置１００においては、上記処理プロセス毎に、マルチメディアデータを配信するために用いるバッファを配分する処理を行う必要がある。このバッファの配分方法として以下のような技術が提案されている。
【０００７】
バッファの配分方法の第１の例として、均等縮小・拡張方法がある。この均等縮小・拡張方法は、クライアント１０１からマルチメディアデータの配信要求があったが、この要求に応じて処理を行う処理プロセスで利用するバッファ領域を確保することができない場合に、既に他の処理プロセス毎に配分したバッファ領域をそれぞれ均等に縮小することによって、配分するためのバッファ領域を確保するというものである。また、均等縮小・拡張方法は、ある処理プロセスがバッファ領域を解放した場合に、解放されたバッファ領域を他の処理プロセスに均等に配分するというものである。
【０００８】
また、バッファ配分方法の第２の例として、自浄方法がある。この自浄方法は、処理プロセスがバッファのアクセスを宣言した場合に、その処理プロセスが要求する分のバッファ領域を配分し、処理プロセスによってバッファがアクセスされていない場合には、処理プロセスが処理を行うために最低限必要なバッファ領域を配分しておくというものである。この場合において、処理プロセスがアクセス中の場合とアクセス中でない場合とにおけるバッファ領域の差分は、他の処理プロセスが利用できるように管理されることになっている。
【０００９】
なお、上述した２つの方法において、バッファ領域は複数のブロックに分割して管理され、分割されたブロック（以下「バッファブロック」という）単位で各処理プロセスにバッファを配分するという処理が行われる。
【００１０】
【発明が解決しようとする課題】
しかしながら、上記均等縮小・拡張方法においては、有限のバッファ領域を有効に活用することができるものの、バッファ領域の量が膨大な場合には、各処理プロセスに対して配分したバッファを縮小したり、拡大するための処理に時間を要するため、処理の高速化を図ることができないという問題点があった。
【００１１】
また、上記均等縮小・拡張方法においては、縮小処理を行う毎に全ての処理プロセスに配分した各バッファの一部を解放する必要があると共に、拡張処理を行う毎に全ての処理プロセスに対してバッファを配分しなければならないため、処理が煩雑であり、かつ、メモリ操作が煩雑となることから、整合性が取りにくくなるという問題点があった。
【００１２】
また、上記自浄方法においては、均等縮小・拡張方法と同様に、有限のバッファ領域を有効に活用することができるものの、ある処理プロセスがバッファのアクセスを宣言した場合にその処理プロセスが要求する分のバッファを配分するため、ある処理プロセスのバッファへのアクセス時間が長いと他の処理プロセスに配分するためのバッファが不足し、他の処理プロセスの処理が停止するという問題点があった。
【００１３】
さらに、上記自浄方法においては、処理プロセスがバッファにアクセス中であるか否かに応じてバッファを配分するか否かを決定するため、バッファからマルチメディアデータをディスクに退避する回数が増大し、マルチメディアデータをバッファリングするメリットが減少するという問題点があった。
【００１４】
本発明は上記に鑑みてなされたものであって、処理プロセスの増減等によってシステム全体の負荷が変化した際に各処理プロセスに対して配分したバッファを動的に再配分する場合、特定の処理プロセスを対象としてバッファの再配分処理を行うことにより、処理の高速化・簡素化を図ることを第１の目的とする。
【００１５】
また、本発明は上記に鑑みてなされたものであって、特定の処理プロセスを対象としてバッファの再配分処理を行うことにより、他の処理プロセスに影響を与えることなく、バッファの再配分を行うことを可能にすることを第２の目的とする。
【００１６】
さらに、本発明は上記に鑑みてなされたものであって、特定の処理プロセスを対象としてバッファの再配分処理を行うことにより、バッファからマルチメディアデータをディスクに退避する回数を減少させ、バッファリングするメリットを最大限活用できるようにすることを第３の目的とする。
【００１７】
【課題を解決するための手段】
上記目的を達成するため、請求項１のバッファの動的管理方法は、システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、前記バッファ領域における未使用のバッファブロック数が前記未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合であって、前記未実行中の処理プロセスおよび実行中の処理プロセスがそれぞれ処理を実行するために最低限必要なバッファブロック数の合計数と前記バッファ領域の全バッファブロック数とを比較し、前記合計数が前記全バッファブロック数を越えない場合に、前記未実行中の処理プロセスにバッファブロックを割り当て可能であると判定する判定工程と、前記判定工程で割り当て可能と判定した場合に、前記実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって、前記未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、前記バッファ確保工程で確保したバッファブロックを前記未実行中の処理プロセスに割り当てるバッファ割当工程と、を含むものである。
【００２０】
また、請求項２のバッファの動的管理方法は、システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、前記バッファ領域における未使用のバッファブロック数が前記未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって前記未実行中の処理プロセスにバッファブロックを割り当て可能であるか否かを判定する判定工程と、前記実行中の処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行するために最低限必要なバッファブロック数に基づいて、前記未実行中の処理プロセスに割り当て可能なバッファブロック数を求め、求めた前記バッファブロック数に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定するための縮小順位情報を生成する順位情報生成工程と、前記判定工程で割り当て可能と判定した場合に、前記順位情報生成工程で生成した前記縮小順位情報に基づいて、バッファブロックを減少させる対象となる前記実行中の処理プロセスを決定し、前記実行中の処理プロセスに割り当てたバッファブロック数を減少させることによって、前記未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、前記バッファ確保工程で確保したバッファブロックを前記未実行中の処理プロセスに割り当てるバッファ割当工程と、を含むものである。
【００２１】
また、請求項３のバッファの動的管理方法は、システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、前記バッファ領域における未使用のバッファブロック数が前記未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって前記未実行中の処理プロセスにバッファブロックを割り当て可能であるか否かを判定する判定工程と、前記処理プロセスは、前記バッファブロックの割り当てに関する優先順位情報をそれぞれ有し、前記実行中の処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行するために最低限必要なバッファブロック数に基づいて、前記未実行中の処理プロセスに割り当て可能なバッファブロック数を求め、求めた前記バッファブロック数および前記優先順位情報に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定するための縮小順位情報を生成する順位情報生成工程と、前記判定工程で割り当て可能と判定した場合に、前記順位情報生成工程で生成した前記縮小順位情報に基づいて、バッファブロックを減少させる対象となる前記実行中の処理プロセスを決定し、前記実行中の処理プロセスに割り当てたバッファブロック数を減少させることによって、前記未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、前記バッファ確保工程で確保したバッファブロックを前記未実行中の処理プロセスに割り当てるバッファ割当工程と、を含むものである。
【００２５】
また、請求項４のバッファの動的管理方法は、システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、各処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行する際に要求したバッファブロック数に基づいて、要求した前記バッファブロック数に対して不足している不足分のバッファブロック数を求め、求めた不足分のバッファブロック数に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定するための割当順位情報を生成する順位情報生成工程と、任意の処理プロセスからバッファブロックが解放された場合に、前記順位情報生成工程で生成した前記割当順位情報に基づいて、解放された前記バッファブロックの割り当て対象となる処理プロセスを決定し、決定した前記処理プロセスに解放されたバッファを割り当てるバッファ割当工程と、を含むものである。
【００２６】
また、請求項５のバッファの動的管理方法は、システム全体または特定の装置におけるデータの処理のために使用するバッファ領域を一括管理し、かつ、該バッファ領域を複数のブロックに分割して各時点で実行している任意の数の処理プロセスにそれぞれ動的に割り当てるバッファの動的管理方法において、前記処理プロセスは、前記バッファブロックの割り当て順位に関する優先順位情報をそれぞれ有し、各処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行する際に要求したバッファブロック数に基づいて、要求した前記バッファブロック数に対して不足している不足分のバッファブロック数を求め、求めた前記不足分のバッファブロック数および前記優先順位情報に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定するための割当順位情報を生成する順位情報生成工程と、任意の処理プロセスからバッファブロックが解放された場合に、前記順位情報生成工程で生成した前記割当順位情報に基づいて、前記解放されたバッファブロックの割り当て対象となる処理プロセスを決定し、決定した前記処理プロセスに解放されたバッファを割り当てるバッファ割当工程と、を含むものである。
【００２８】
さらに、請求項６のコンピュータ読み取り可能な記録媒体は、前記請求項１〜５のいずれか一つに記載のバッファの動的管理方法の各工程をコンピュータに実行させるためのプログラムを記録したものである。
【００２９】
【発明の実施の形態】
以下、本発明に係るバッファの動的管理方法およびその方法の各工程をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体の一実施の形態について、添付の図面を参照しつつ詳細に説明する。なお、ここでは図１７に示したＭＯＤシステムに本発明に係るバッファの動的管理方法を適用することを例に取って本発明の実施の形態を説明する。
【００３０】
図１は、本実施の形態に係るバッファの動的管理方法による処理の概念を説明するためのブロック図であって、図１７に示したサーバ装置１００内における処理の概念を示すものである。図１において、バッファ管理マネージャ１０３は、メモリ管理マネージャ１０４を介してシステム全体または特定の装置におけるマルチメディアデータの処理のために使用するバッファ領域をメモリ１０５中に確保して一括管理し、かつ、該バッファ領域を複数のブロック（バッファブロック）に分割して各時点で実行している任意の数の処理プロセス（問い合わせ処理プロセスや更新処理プロセス等）にそれぞれ動的に割り当てる処理を実行する。各処理プロセスは、バッファ管理マネージャ１０３によって割り当てられたバッファ領域を用いてマルチメディアデータのバッファリングを行う。
【００３１】
また、バッファ管理マネージャ１０３は、システム全体で同時に実行される処理プロセスの負荷を勘案し、各処理プロセスによる処理が高速に行われ、システムの並行動作性（スループット）が最も高くなるように各処理プロセスにそれぞれ割り当てるバッファブロック数を決定する。それぞれの処理プロセスに割り当てられたバッファブロック数分のバッファは、それが解放されるまで各処理プロセスによって独占的に使用される。
【００３２】
そして、処理プロセスの増減等によってシステム全体の負荷が変化した場合には、バッファ管理マネージャが各処理プロセスに割り当てたバッファを動的に再配分し、各処理プロセスに対して常時最適なバッファの割り当て処理を行う。
【００３３】
なお、実際のバッファリングの処理は、マルチメディア用バッファリングモジュール１０６（以下「モジュール１０６」と記述する）によって行われる。使用できるモジュール１０６は、音声・静止画像・動画像のような処理の対象となるデータの種類によって選択される。
【００３４】
つぎに、本実施の形態に係るバッファの動的管理方法について、
（１）処理の概略
（２）バッファの動的管理方法で使用される情報
（３）バッファ管理マネージャの基本処理
（４）モジュールの基本処理
（５）バッファの動的管理方法を用いた具体的処理
（６）実施の形態の効果
の順で説明する。
【００３５】
（１）処理の概略
本実施の形態に係るバッファの動的管理方法においては、大きく分けて以下の２つの処理が行われる。第１の処理（後述するバッファ再配分処理１に該当）は、あるモジュール１０６による処理プロセスを実行するためのバッファを確保できない場合に、他の特定のモジュール１０６の処理プロセスに対して割り当てたバッファから最低限処理を実行することができる分のバッファを確保するというものである。また、第２の処理（後述するバッファ再配分処理２に該当）は、あるモジュール１０６からバッファブロックが解放された場合に、その解放されたバッファブロックを他の特定のモジュール１０６の処理プロセスに割り当てて、そのモジュール１０６の処理プロセスに既に割り当てられていたバッファを拡張するというものである。
【００３６】
上記第１および第２の処理は、共にバッファの再配分を行う対象となるモジュール１０６の処理プロセスがシステム内で実行中の全てのモジュール１０６による処理プロセスではなく、特定のモジュール１０６の処理プロセスである点を特徴としている。また、各モジュール１０６の処理プロセスに配分したバッファは、各処理プロセスによって独占的に使用され、他の処理プロセスとの間で何ら関係を持たない点を更なる特徴としている。
【００３７】
（２）バッファの動的管理方法で使用される情報
続いて、本実施の形態に係るバッファの動的管理方法において使用される情報について定義しておくことにする。
【００３８】
▲１▼  バッファ管理マネージャ１０３が管理する情報
ａ）総バッファブロック数：totalSize
メモリ１０５に確保されたバッファ領域中の全てのバッファブロック数である。
【００３９】
ｂ）現在使用バッファブロック数：currentTotalSize
総バッファブロック数のうち、現在使用されているバッファブロックの数である。
【００４０】
ｃ）未使用バッファブロック数合計：restTotalSize
現在使用されていないバッファブロック数の合計値である。
【００４１】
ｄ）要求バッファブロック数合計：requestTotalSize
各モジュール１０６が処理プロセスのために利用する最大のバッファブロック数の合計値である。
【００４２】
ｅ）最小可動バッファブロック数合計：minimumTotalSize
各モジュール１０６が処理プロセスのために最低限必要とするバッファブロック数の合計値である。
【００４３】
▲２▼  モジュール１０６を管理する情報
ａ）要求バッファブロック数：requestSize
モジュール１０６が処理プロセスの実行のために利用する最大のバッファブロック数である。モジュール１０６が処理プロセスを実行する際に、バッファ管理マネージャ１０３に対して最初に要求するバッファブロック数である。バッファ領域に空きがある限り、各モジュールの処理プロセスにはこの要求バッファブロック数分のバッファが配分される。
【００４４】
ｂ）最小可動バッファブロック数：minimumSize
モジュール１０６が処理プロセスのために最低限必要とするバッファブロック数である。つまり、各モジュール１０６の処理プロセスに対して必ず配分しなければならないバッファブロック数である。
【００４５】
ｃ）バッファモード：mode
配分されたバッファブロック数を可変にする（動的割り当てを可能にする）可変モードと、バッファブロック数が変化しない（動的割り当てを不可能にする）固定数のバッファブロックが配分されるようにする固定モードとがある。固定モードを選択したモジュール１０６の処理プロセスは、後述するバッファの再配分処理１および２の対象から除外される。
【００４６】
ｄ）バッファ優先度：priority
バッファが再配分される対象となるモジュール１０６の処理プロセスの順位を決定するためのパラメータとなるものである。後述するバッファの再配分処理１および２において、縮小対象優先度および拡張対象優先度を決定する際に利用される。
【００４７】
ｅ）配分バッファブロック数：distributeSize
モジュール１０６の処理プロセスに対して実際に配分されるバッファブロック数である。
【００４８】
ｆ）現在のバッファブロック数：currentSize
モジュール１０６の処理プロセスに対して現在配分されているバッファブロック数である。
【００４９】
ｇ）配分可能バッファブロック数：potentialSize
各モジュール１０６の処理プロセスに対して現在配分されているバッファブロック数のうち、最小稼働バッファブロック数を除く、他のモジュール１０６の処理プロセスに対して配分可能なバッファブロック数である。後述するバッファ再配分処理１で利用される。
【００５０】
ｈ）不足バッファブロック数：insufficientSize
要求バッファブロック数から最小稼働バッファブロック数を除いたバッファブロック数であり、要求バッファブロック数を満たすまでにどのくらいの数のバッファブロックが必要かを示すものである。後述するバッファ再配分処理２で利用される。
【００５１】
ｉ）縮小対象優先度：reducePriority
後述するバッファ再配分処理１において、いずれのモジュール１０６の処理プロセスから配分可能バッファブロック数分のバッファの全てまたは一部を他のモジュール１０６の処理プロセスに配分するかを決定するための情報である。この縮小対象優先度に基づいて各モジュール１０６の処理プロセスに対して順位が付与され、第１順位のモジュール１０６の処理プロセスに対して配分されているバッファを他のモジュール１０６の処理プロセスに対して配分する。なお、本実施の形態の説明において「縮小」という場合には、モジュール１０６が配分可能バッファブロック数分のバッファの全てまたは一部を他のモジュール１０６の処理プロセスのために解放することを意味している。換言すれば、そのモジュール１０６の処理プロセスが占有するバッファ領域が縮小されることを意味している。
【００５２】
ｊ）拡張対象優先度：expandPriority
後述するバッファ再配分処理２において、いずれのモジュール１０６の処理プロセスに対して、他のモジュール１０６の処理プロセスによって解放されたバッファを配分するかを決定するための情報である。この拡張対象優先度に基づいて各モジュール１０６の処理プロセスに対して順位が付与され、第１順位のモジュール１０６の処理プロセスに対して、他で解放されたバッファを配分する。なお、本実施の形態の説明において「拡張」という場合には、モジュール１０６が不足バッファブロック数分のバッファの全てまたは一部を確保することを意味する。換言すれば、そのモジュール１０６の処理プロセスが占有するバッファ領域が拡張されることを意味している。
【００５３】
ｋ）縮小処理関数：reduceFunction()
モジュール１０６が配分可能バッファブロック数分のバッファの全てまたは一部を解放するために用いる関数である。後述するバッファ再配分処理１で利用される。
【００５４】
ｌ）拡張処理関数：expandFunction()
モジュール１０６が不足バッファブロック数分のバッファブロックを確保するために用いる関数である。後述するバッファ再配分処理２で利用される。
【００５５】
なお、ここで、要求バッファブロック数および最小稼働バッファブロック数について、図２に示す静止画像データに基づいて説明を追加することにする。
【００５６】
図２は、例えば地図等の静止画像データを示すものである。図２において、Ａ〜Ｉで示す矩形領域は、図１７に示したクライアント装置１０１で表示可能な１画面分のデータを意味している。最小稼働バッファブロック数は、これら矩形領域Ａ〜Ｉのいずれか一つ分のデータを取り込むことができるバッファの容量に該当する。したがって、各モジュール１０６の処理プロセスに対し、この最小稼働バッファブロック数に該当するバッファが必ず配分されることになる。
【００５７】
要求バッファブロック数は、図２に示す静止画像データの全て、即ち矩形領域Ａ〜Ｉの全てを取り込むことができるバッファの容量に該当する。この要求バッファブロック数分のバッファを確保できた場合は、サーバ装置１００においてディスクアクセスがなく、クライアント装置１０１において上下左右のスクロールをスムーズに行うことができる。
【００５８】
（３）バッファ管理マネージャの基本処理
バッファ管理マネージャ１０３は、基本的に以下に挙げた処理を行う。なお、各処理には簡単な説明を付加しておくが、具体的な処理については後述する。
【００５９】
ａ）総バッファの確保
メモリ管理マネージャ１０４に、動的に総バッファ数分アロケートした領域を渡す。
ｂ）モジュール１０６からの登録依頼に対する処理
後述するバッファ配分処理に従って、登録依頼のあったモジュール１０６の処理プロセスに対してバッファを配分する。
ｃ）モジュール１０６のバッファアクセス開始宣言に対する処理
バッファアクセス開始宣言を行ったモジュール１０６の処理プロセスを、後述するバッファ再配分処理１およびバッファ再配分処理２の対象から除外する。
ｄ）モジュール１０６のバッファアクセス終了宣言に対する処理
バッファアクセス終了宣言を行ったモジュール１０６の処理プロセスを、後述するバッファ再配分処理１およびバッファ再配分処理２の対象に加える。
ｅ）モジュール１０６からのバッファ解放依頼に対する処理
バッファの解放と空きバッファの再配分処理を行う。
ｆ）総バッファの解放
メモリ管理マネージャ１０４を介してメモリ１０５中に確保した総バッファを解放する。
【００６０】
（４）モジュールの基本処理
各モジュール１０６は、基本的に以下に挙げた処理を行う。なお、各処理について必要なものについては簡単な説明を付加しておくが、具体的な処理については後述する。
【００６１】
ａ）各種パラメータの決定・準備
要求バッファブロック数，最小稼働バッファブロック数，バッファモード，バッファ優先度を決定すると共に、縮小処理関数および拡張処理関数を準備する。
ｂ）バッファ構築情報の生成
ｃ）バッファ管理マネージャ１０３への登録
決定したパラメータやバッファ構築情報に基づいて、バッファブロックの配分を受けるための処理を行う。
ｄ）バッファ管理マネージャ１０３へのバッファブロック数の変更依頼
要求バッファブロック数や最小稼働バッファブロック数等の変更をバッファ管理マネージャ１０３に対して依頼する。
ｅ）バッファのアクセス宣言
ｆ）現在のバッファブロック数を取得
ｇ）バッファへの実際のアクセス
ｈ）バッファのアクセス終了宣言
ｉ）バッファ管理マネージャ１０３からの縮小要求に対する処理
縮小処理関数(reduceFunction())を用いて、配分可能バッファブロック数分のバッファの全てまたは一部を解放する。
ｊ）バッファ管理マネージャ１０６からの拡張要求に対する処理
拡張処理関数(expandFunction())を用いて、不足バッファブロック数分のバッファの全てまたは一部を確保する。
ｋ）バッファ管理マネージャへの登録削除
配分されたバッファが解放される。
【００６２】
（５）バッファの動的管理方法を用いた具体的処理
つぎに、本実施の形態に係るバッファの動的管理方法を用いた具体的な処理について、
▲１▼  バッファ配分処理
▲２▼  バッファ解放検知処理
▲３▼  バッファ再配分処理１
▲４▼  バッファ再配分処理２
の順で、「（２）バッファの動的管理方法で使用される情報」で定義した各情報を用いて詳細に説明する。
【００６３】
▲１▼  バッファ配分処理
本実施の形態に係るバッファの動的管理方法の具体的な処理として、最初にモジュール１０６の処理プロセスにバッファを配分する処理について説明する。なお、バッファ管理マネージャ１０３は、メモリ１０５中に既に各モジュール１０６の処理プロセスに対して配分するためのバッファ領域を確保しているものとする。
【００６４】
図３は、バッファ配分処理の手順を示すフローチャートである。バッファ管理マネージャ１０３は、モジュール１０６からバッファの配分要求があったか否かを判定する（Ｓ３０１）。モジュール１０６は、バッファの配分を要求する際に、上述した要求バッファブロック数や最小稼働バッファブロック数に関する情報をバッファ管理マネージャ１０３に渡す。
【００６５】
ステップＳ３０１においてモジュール１０６からバッファ配分要求があったと判定した場合、バッファ管理マネージャ１０３は、要求バッファブロック数分のバッファを該当するモジュール１０６の処理プロセスに対して配分可能か否かを判定する（Ｓ３０２）。具体的に、バッファ管理マネージャ１０３は、現在使用バッファブロック数合計と要求バッファブロック数との和が、総バッファブロック数以下であるか否かを判定する。
【００６６】
すなわち、
currentTotalSize + requestSize≦ totalSize
のとき、バッファ管理マネージャ１０３は、要求バッファブロック数分のバッファを該当するモジュール１０６の処理プロセスに対して配分可能であると判定する。
【００６７】
ステップＳ３０２において、要求バッファブロック数分のバッファを配分可能であると判定した場合、バッファ管理マネージャ１０３は、要求バッファブロック数分のバッファを該当するモジュール１０６の処理プロセスに対して配分し（Ｓ３０６）、ステップＳ３０１の処理に戻る。すなわち、ここで該当するモジュール１０６に配分されるバッファブロック数は、
distributeSize = requestSize
である。
【００６８】
一方、ステップＳ３０２において要求バッファブロック数分のバッファを配分可能ではないと判定した場合、バッファ管理マネージャ１０３は、未使用のバッファに該当するバッファブロック数からモジュール１０６の処理プロセスで処理の実行に最低限必要なバッファブロック数を配分可能か否かを判定する（Ｓ３０３）。
【００６９】
すなわち、バッファ管理マネージャ１０３は、
0003761317.tif 000002
のとき、モジュール１０６の処理プロセスで処理の実行に最低限必要なバッファブロック数を配分可能であると判定する。
【００７０】
ステップＳ３０３においてモジュール１０６の処理プロセスの実行に最低限必要なバッファブロック数分のバッファを配分可能であると判定した場合、バッファ管理マネージャ１０３は、該当するモジュール１０６の処理プロセスに対し、確保可能な未使用のバッファブロック数分のバッファを配分し（Ｓ３０７）、ステップＳ３０１の処理に戻る。ここでモジュール１０６の処理プロセスに対して配分されるバッファブロック数は、
distributeSize = totalSize - currentTotalSize
となる。
【００７１】
一方、ステップＳ３０３においてモジュール１０６の処理プロセスの実行に最低限必要なバッファブロック数分のバッファを配分可能ではないと判定した場合、バッファ管理マネージャ１０３は、縮小要求により、該当するモジュール１０６の処理プロセスに対して最低限必要なバッファブロック数分のバッファを配分できるか否かを判定する（Ｓ３０４）。ここで、縮小要求とは、他の特定のモジュール１０６に対して、配分可能バッファブロック数分のバッファの全てまたは一部をバッファの配分を要求しているモジュール１０６の処理プロセスのために解放することを要求することである。
【００７２】
ここで、バッファ管理マネージャは、
0003761317.tif 000003
であると判定した場合に、縮小要求により、該当するモジュール１０６の処理プロセスに対して最低限必要なバッファブロック数分のバッファを配分できると判定する。
【００７３】
ステップＳ３０４において縮小要求により該当するモジュール１０６の処理プロセスに対して最低限必要なバッファブロック数分のバッファを配分できると判定した場合、バッファ管理マネージャ１０３は、バッファ再配分処理１を実行して、該当するモジュール１０６の処理プロセスに対して最低限必要なバッファブロック数分のバッファを配分する（Ｓ３０８）。ここでモジュール１０６の処理プロセスに対して配分されるバッファブロック数は、
distributeSize = minimumSize
となる。
【００７４】
なお、ステップＳ３０８のバッファの再配分処理１については、後に図を用いて詳細に説明する。
【００７５】
一方、ステップＳ３０４において縮小要求によっても該当するモジュール１０６の処理プロセスに対して最低限必要なバッファブロック数分のバッファを配分できないと判定した場合、バッファ管理マネージャ１０３は、該当するモジュール１０６に対してバッファ配分拒否処理を実行し（Ｓ３０５）、ステップＳ３０１の処理に戻る。
【００７６】
ここで、縮小要求により該当するモジュール１０６の処理プロセスに対して最低限必要なバッファブロック数分のバッファを配分できない場合は、バッファの配分を要求してきたモジュール１０６の処理プロセスを含む、全てのモジュール１０６の処理プロセスの実行に必要な最小稼働バッファブロック数の合計値が総バッファブロック数より大きくなってしまうようなときに発生する。これは、現在実行中の各モジュール１０６の処理プロセスの全てが処理に最小限必要なバッファのみで処理を行っている状態であることを意味している。したがって、この状態でいずれかのモジュール１０６の処理プロセスからバッファを要求しているモジュール１０６の処理プロセスに対してバッファを配分することにすると、そのモジュール１０６の処理プロセスを実行することができない状態となってしまう。
【００７７】
よって、バッファ管理マネージャ１０３は、
minimumTotalSize≦totalSize
という条件を満たさなければバッファを配分することはできない。そこで、あるモジュール１０６の処理プロセスに対して配分するためのバッファが要求されたとき、
minimumTotalSize + minimumSize＞ totalSize
の条件を満たす場合には、バッファを要求しているモジュール１０６の処理プロセスに対して配分可能なバッファブロック数は、
distributeSize = 0
となる。
【００７８】
バッファ管理マネージャ１０３は、モジュール１０６からのバッファ配分要求に応じて上述した処理を繰り返し実行する。また、既にバッファの配分を受けているモジュール１０６からバッファブロック数を変更する要求があった場合にも図３に示した処理が実行される（例えば、最小稼働バッファブロック数を増加する場合等）。
【００７９】
▲２▼  バッファ解放検知処理
続いて、バッファ解放検知処理について説明する。図４は、バッファ解放検知処理の手順を示すフローチャートである。この図４に示すバッファ解放検知処理は、上述したバッファ配分処理と並行して実行される。
【００８０】
図３に示したバッファ配分処理の実行中に、バッファ管理マネージャ１０３は、あるモジュール１０６の処理プロセスからバッファが解放されたか否かを定期的にチェックする（Ｓ４０１）。ここでいうバッファの解放には、あるモジュール１０６の処理プロセスに対して配分されていた全てのバッファが解放された場合や、あるモジュール１０６がバッファブロック数の変更を要求した結果、既に配分されていた一部のバッファを解放した場合等が含まれる。
【００８１】
ステップＳ４０１においてバッファが解放されたと判定した場合、バッファ管理マネージャ１０３は、図３のステップＳ３０８におけるバッファ再配分処理１の実行中であるか否かを判定する（Ｓ４０２）。
【００８２】
ステップＳ４０２においてバッファ再配分処理１の実行中ではないと判定した場合、ステップＳ４０４に進む。一方、バッファ再配分処理１の実行中であると判定した場合、バッファ管理マネージャ１０３は、バッファ再配分処理１の実行を中止する（Ｓ４０３）。なぜなら、解放されたバッファをバッファの配分を要求しているモジュール１０６の処理プロセスに配分してやれば良いからである。ただし、バッファが解放された場合であっても、最小稼働バッファブロック数を配分することができない場合は、再びバッファ再配分処理１が実行される可能性がある。
【００８３】
その後、バッファ管理マネージャ１０３は、バッファ再配分処理２を実行して（Ｓ４０４）、ステップＳ４０１の処理に戻る。なお、バッファ再配分処理２は、解放されたバッファを利用して、現在実行中のモジュール１０６の処理プロセスに対し不足バッファブロック数分のバッファの全てまたは一部を配分する処理のことである。このバッファ再配分処理２については、後に図を用いて詳細に説明する。
【００８４】
▲３▼  バッファ再配分処理１
続いて、図３に示したステップＳ３０８で実行されるバッファ再配分処理１について説明する。図５は、バッファ再配分処理１の手順を示すフローチャートである。なお、バッファ管理マネージャ１０３は、バッファ再配分処理１を実行するに当たり、現在実行中のモジュール１０６の処理プロセスのうち、配分されるバッファブロック数が固定の固定モードを選択しているモジュール１０６の処理プロセスをバッファ再配分処理１の処理対象から除外する。また、バッファアクセス開始宣言を行ったモジュール１０６の処理プロセスについても、バッファ再配分処理１の処理対象から除外する。
【００８５】
まず、バッファ管理マネージャ１０３は、各モジュール１０６の処理プロセス毎に、バッファの配分を要求しているモジュール１０６のために解放することができる配分可能バッファブロック数（現在のバッファブロック数−最小稼働バッファブロック数）を演算する（Ｓ５０１）。具体的には、
potentialSize = currentSize - minimumSize
という演算を行う。
【００８６】
ステップＳ５０１において配分可能バッファブロック数を求めた後、バッファ管理マネージャ１０３は、各モジュール１０６の処理プロセス毎に、配分可能バッファブロック数にバッファ優先度の重みをかけて縮小対象優先度を決定すると共に、縮小対象優先度を降順にソートして各モジュール１０６の処理プロセスに対して順位付けを行う（Ｓ５０２，Ｓ５０３）。換言すれば、この順位は、いずれのモジュール１０６の処理プロセスに対し、配分可能バッファブロック数分のバッファの全てまたは一部をバッファの配分を要求しているモジュール１０６の処理プロセスのために解放することを要求するかについて決定するための基準となるものである。
【００８７】
すなわち、バッファ管理マネージャ１０３は、ステップＳ５０２において、各モジュール１０６の処理プロセス毎に、
reducePriority = potentialSize÷ priority × C
という演算を繰り返し実行することにより縮小対象優先度を決定し、決定した縮小対象優先度を降順にソートして各モジュール１０６の処理プロセスに順位付けを行う（Ｓ５０３）。
【００８８】
なお、高いバッファ優先度を有するモジュール１０６に関する処理プロセスの縮小対象優先度に基づく順位は、同一の配分可能バッファブロック数を有する他のモジュール１０６の処理プロセスより低くなる。
【００８９】
そして、バッファ管理マネージャ１０３は、ステップＳ５０２およびＳ５０３において決定した第１順位のモジュール１０６に対し、縮小要求を出してバッファを要求しているモジュール１０６の処理プロセスに対して配分するバッファを確保する処理を実行する（Ｓ５０４）。
【００９０】
ここで、縮小要求は、ステップＳ５０１で求めた配分可能バッファブロック数以下のバッファブロック数の解放を第１順位のモジュールの処理プロセスに要求するためのものである。この縮小要求を受けた第１順位のモジュール１０６は、配分されているバッファから縮小要求で要求されたバッファブロック数以上のバッファを解放しなければならない（バッファの再配分）。
【００９１】
そして、バッファ管理マネージャ１０３は、確保したバッファブロック数がバッファの配分を要求しているモジュール１０６の処理プロセスを最低限実行できるバッファブロック数（最小稼働バッファブロック数）を満たすか否かを判定する（Ｓ５０５）。
【００９２】
ステップＳ５０５においてバッファの配分を要求しているモジュール１０６の処理プロセスを最低限実行できるバッファブロック数を満たさないと判定した場合、バッファ管理モジュール１０３は、ステップＳ５０１〜ステップＳ５０４の処理を繰り返し実行する。
【００９３】
一方、ステップＳ５０５においてバッファの配分を要求しているモジュール１０６の処理プロセスを最低限実行できるバッファブロック数を満たすと判定した場合、バッファ管理モジュール１０３は、該当するモジュール１０６の処理プロセスに対して、確保したバッファブロック数分のバッファを配分し（Ｓ５０６）、バッファ再配分処理１を終了して図３のステップＳ３０１に戻る。
【００９４】
ここで、バッファ再配分処理１について、図６〜図１１を用いてさらに具体的に説明する。まず、現時点のバッファの配分状況は図６に示す通りであり、現時点においては処理プロセス１〜４およびその他の処理プロセスが実行中であるものとする。この図６に対応して、各処理プロセス１〜４に配分したバッファブロックの様子を示すものが図１０（ａ）である。また、図１０（ｂ）は、各処理プロセス毎に配分可能バッファブロック数を演算すると共に、各処理プロセス１〜４に対して縮小対象優先度に基づく順位付けを行った様子を示している。
【００９５】
図１０および図１１の各図において、一番上の処理プロセスが第１順位の処理プロセスに該当し、この処理プロセスはバッファ管理マネージャ１０３による縮小要求で要求されたバッファブロック数以上のバッファを配分されているバッファから解放しなければならない。
【００９６】
また、図１０および図１１において、網点で表示した矩形領域は処理プロセスに最低限必要なバッファブロック（最小稼働バッファブロック数）に、実線で囲まれた矩形領域は図５のステップＳ５０１で求めた他の処理プロセスに配分可能なバッファブロック（配分可能バッファブロック数）に、斜線で表示した矩形領域は配分可能バッファブロックのうち、他の処理プロセスのために解放するバッファブロックに、点線で囲まれた矩形領域は配分を要求したバッファブロック数に対して不足しているバッファブロック（不足バッファブロック数）に該当する。
【００９７】
そして、図７に示すように処理プロセス５がバッファの配分を要求してきた場合を考えると、図１０（ｂ）に示す第１順位の処理プロセス４から処理プロセス５のためにバッファが解放され、処理プロセス５に対して最低限必要なバッファが配分される。その後、図１０（ｃ）に示すように、各処理プロセス毎に配分可能バッファブロック数を演算すると共に、縮小対象優先度を決定して、各処理プロセス１〜５に対して順位付けを行う。
【００９８】
つぎに、図８に示すように処理プロセス６がバッファの配分を要求してきた場合を考えると、図１０（ｃ）に示す第１順位の処理プロセス３から処理プロセス６のためにバッファが解放され、処理プロセス６に対して最低限必要なバッファが配分される。その後、図１１（ｄ）に示すように、各処理プロセス毎に配分可能バッファブロック数を演算すると共に、縮小対象優先度を決定して、各処理プロセス１〜６に対して順位付けを行う。
【００９９】
さらに、図９に示すように処理プロセス７がバッファの配分を要求してきた場合を考えると、図１１（ｄ）に示す第１順位の処理プロセス１から処理プロセス７のためにバッファが解放され、処理プロセス７に対して最低限必要なバッファが配分される。なお、図１１（ｅ）は、処理プロセス７に対してバッファを配分した後、各処理プロセス毎に配分可能バッファブロック数を演算すると共に、縮小対象優先度を決定して、各処理プロセス１〜７に対して順位付けを行った結果を示している。
【０１００】
▲４▼  バッファ再配分処理２
さらに、図４に示したステップＳ４０４で実行されるバッファ再配分処理２について説明する。図１２は、バッファ再配分処理２の手順を示すフローチャートである。なお、バッファ管理マネージャ１０３は、バッファ再配分処理２を実行するに当たり、現在実行中のモジュール１０６の処理プロセスのうち、配分されるバッファブロック数が固定の固定モードを選択しているモジュール１０６の処理プロセスをバッファ再配分処理２の処理対象から除外する。また、バッファアクセス開始宣言を行ったモジュール１０６の処理プロセスについても、バッファ再配分処理２の処理対象から除外する。
【０１０１】
まず、バッファ管理マネージャ１０３は、各モジュール１０６の処理プロセス毎に、配分を要求したバッファブロック数に対して不足している不足バッファブロック数（要求バッファブロック数−現在のバッファブロック数）を演算する（Ｓ１２０１）。具体的には、
insufficientSize = requestSize - currentSize
という演算を行う。
【０１０２】
ステップＳ１２０１において不足バッファブロック数を求めた後、バッファ管理マネージャ１０３は、各モジュール１０６の処理プロセス毎に、不足バッファブロック数にバッファ優先度の重みをかけ、拡張対象優先度を決定すると共に、拡張対象優先度を降順にソートして各モジュール１０６の処理プロセスに対して順位付けを行う（Ｓ１２０２，Ｓ１２０３）。換言すれば、各モジュール１０３の処理プロセスに対して付与された順位は、バッファ管理マネージャ１０３が、解放されたバッファから不足バッファブロック数分のバッファの全てまたは一部を確保すべきことをいずれのモジュール１０６の処理プロセスに対して要求すべきかを決定するための基準となる。
【０１０３】
すなわち、バッファ管理マネージャ１０３は、ステップＳ１２０２において、各モジュール１０６の処理プロセス毎に、
expandPriority = insufficientSize × priority × C
という演算を繰り返し実行することにより、拡張対象優先度を決定し、決定した拡張対象優先度を降順にソートして各モジュール１０６の処理プロセスに対して順位付けを行う（Ｓ１２０３）。
【０１０４】
なお、高いバッファ優先度を有するモジュール１０６の処理プロセスに関する拡張対象優先度による順位は、同一の配分可能バッファブロック数を有する他のモジュール１０６の処理プロセスより高くなる。
【０１０５】
そして、バッファ管理マネージャ１０３は、ステップＳ１２０２およびＳ１２０３で決定した第１順位のモジュール１０６に対して、拡張要求を出して解放されたバッファを確保させるための処理を実行する（Ｓ１２０４）。
【０１０６】
ここで、拡張要求は、解放されたバッファブロックからステップＳ１２０１で求めた不足バッファブロック数以下のバッファブロック数を確保することを第１順位のモジュール１０６に要求するものである。この拡張要求を受けた第１順位のモジュール１０６は、必要に応じてバッファブロックを確保して、占有可能なバッファを拡張することができる（バッファの再配分）。ただし、第１順位のモジュールは、バッファ管理モジュール１０３から拡張要求を受けたとしても、バッファを拡張する必要がない場合には解放されたバッファを確保してバッファを拡張する必要はない。
【０１０７】
そして、バッファ管理マネージャ１０３は、解放されたバッファが全て配分されたか否か、または、バッファ再配分処理２の対象となっている全てのモジュール１０６の処理プロセスに対して解放されたバッファが配分されたか否かを判定する（Ｓ１２０５）。
【０１０８】
ステップＳ１２０５において解放されたバッファが全て配分されていないと判定し、または、バッファ再配分処理２の対象となっている全てのモジュール１０６の処理プロセスに対して解放されたバッファが配分されていないと判定した場合、バッファ管理モジュール１０３は、ステップＳ１２０１〜ステップＳ１２０４の処理を繰り返し実行する。
【０１０９】
一方、ステップＳ１２０５において解放されたバッファが全て配分されたと判定し、または、バッファ再配分処理２の対象となっている全てのモジュール１０６の処理プロセスに対して解放されたバッファが配分されたと判定した場合、バッファ管理モジュール１０３は、バッファ再配分処理２を終了して図３のステップＳ３０１に戻る。
【０１１０】
ここで、バッファ再配分処理２について、図１３〜図１６を用いてさらに具体的に説明する。まず、現時点のバッファの配分状況は図９に示す通りであり、現時点においては処理プロセス１〜７およびその他の処理プロセスが実行中であるものとする。この図９に対応して、各処理プロセス１〜７に配分したバッファブロックの様子を示すものが図１５（ａ）である。また、図１５（ｂ）は、各処理プロセス毎に不足バッファブロック数を演算すると共に、拡張対象優先度を決定して、各処理プロセス１〜７に対して順位付けを行った様子を示している。
【０１１１】
なお、図１５および図１６において、一番上の処理プロセスが第１順位の処理プロセスに該当し、この処理プロセスは、バッファ管理マネージャ１０３による拡張要求で要求されたバッファブロック数を確保し、確保したバッファブロック数分、既に配分されているバッファを拡張することができる。
【０１１２】
また、図１５および図１６において、網点で表示した矩形領域は処理プロセスに最低限必要なバッファブロック（最小稼働バッファブロック数）に、実線で囲まれた矩形領域は他の処理プロセスに配分可能なバッファブロック（配分可能バッファブロック数）に、点線で囲まれた矩形領域は要求バッファブロック数に対して不足している分のバッファブロック（不足バッファブロック数）に、斜線で表示した矩形領域は不足しているバッファブロックとして配分されるバッファブロックにそれぞれ該当する。
【０１１３】
そして、図１３に示すように他の処理プロセスが８つのバッファブロックを解放した場合を考えると、図１５（ｃ）に示す第１順位の処理プロセス４に対し、解放された８つのバッファブロックが配分される。その後、図１６（ｄ）に示すように、各処理プロセス毎に不足バッファブロック数を演算すると共に、拡張対象優先度を決定して、各処理プロセス１〜７に対して順位付けを行う。
【０１１４】
つぎに、図１４に示すように他の処理プロセスが９つのバッファブロックを解放した場合を考えると、図１６（ｄ）に示す第１順位の処理プロセス５に対し、解放された９つのバッファブロックが配分される。なお、図１６（ｅ）は、処理プロセス５に対して解放されたバッファブロックが配分された後に、各処理プロセス毎に不足バッファブロック数を演算すると共に、拡張対象優先度を決定して、各処理プロセス１〜７に対して順位付けを行った結果を示している。
【０１１５】
（６）本実施の形態の効果
このように、本実施の形態に係るバッファの動的管理方法によれば、処理プロセスの増減等によってシステム全体の負荷が変化した際に各処理プロセスに配分したバッファ領域を動的に再配分する場合、特定の処理プロセスを対象としてバッファの再配分処理を行うため、処理の高速化・簡素化を図ることができる。
【０１１６】
また、特定の処理プロセスを対象としてバッファの再配分処理を行うため、他の処理プロセスに影響を与えることなく、バッファの再配分を行うことを可能にすることができる。
【０１１７】
さらに、特定の処理プロセスを対象としてバッファの再配分処理を行うため、バッファからマルチメディアデータをディスクに退避する回数を減少させ、バッファリングするメリットを最大限活用できるようにすることができる。
【０１１８】
なお、図１７に示したＭＯＤシステムに本発明に係るバッファの動的管理方法を適用することを例に取って本発明の実施の形態を説明したが、本発明に係るバッファの動的管理方法をバッファの動的管理を必要とする他のシステムや装置に適用可能であることはいうまでもない。
【０１１９】
また、マルチスレッドにおけるバッファ管理において、バッファ管理マネージャ１０３は１つのオブジェクトとして存在するが、１スレッドとして稼働しているプロシージャではない。実際にバッファ管理マネージャ１０３に登録依頼を行うための操作は、バッファを登録するスレッドがバッファ管理マネージャ１０３のオブジェクトを利用し、他のスレッドで利用しているバッファに対してバッファの縮小・拡張指令を実行している状態を意味する。
【０１２０】
さらに、上述した実施の形態におけるバッファ再配分処理１およびバッファ再配分処理２においては、配分可能バッファブロック数や不足バッファブロック数等を演算により求めるとして説明したが、これに代えて、常にこれらに関する情報をテーブルとして保持することにしておくことにしても良い。
【０１２１】
以上説明した本実施の形態に係るバッファの動的管理方法は、図３，図４，図５および図１２に示したフローチャートの手順に従って、予め用意されたプログラムをコンピュータで実行することによって実現される。このプログラムは、ハードディスク、フロッピーディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、このプログラムは、上記記録媒体を介して、またはネットワークを介して配布することができる。
【０１２２】
【発明の効果】
以上説明したように、本発明のバッファの動的管理方法（請求項１）によれば、未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、バッファ領域における未使用のバッファブロック数が未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合であって、未実行中の処理プロセスおよび実行中の処理プロセスがそれぞれ処理を実行するために最低限必要なバッファブロック数の合計数とバッファ領域の全バッファブロック数とを比較し、合計数が全バッファブロック数を越えない場合に、未実行中の処理プロセスにバッファブロックを割り当て可能であると判定する判定工程と、判定工程で割り当て可能と判定した場合に、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって、未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、バッファ確保工程で確保したバッファブロックを未実行中の処理プロセスに割り当てるバッファ割当工程と、を含むことにより、特定の処理プロセスを対象としてバッファの再配分処理を行うため、処理の高速化・簡素化を図ることができると共に、他の処理プロセスに影響を与えることなくバッファの再配分を行うことができる。特定の処理プロセスを対象としてバッファの再配分処理を行うことにより、バッファからデータをディスクに退避する回数を減少させることができるため、バッファリングするメリットを最大限活用できるようにすることができる。さらに、未実行中の処理プロセスにバッファを配分可能であるか否かを容易に判定することができると共に、実行中の処理プロセスに影響を与えることなく、バッファの再配分処理を行うことができる。
【０１２５】
また、本発明のバッファの動的管理方法（請求項２）によれば、未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、バッファ領域における未使用のバッファブロック数が未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって未実行中の処理プロセスにバッファブロックを割り当て可能であるか否かを判定する判定工程と、実行中の処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行するために最低限必要なバッファブロック数に基づいて、未実行中の処理プロセスに割り当て可能なバッファブロック数を求め、求めたバッファブロック数に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定するための縮小順位情報を生成する順位情報生成工程と、判定工程で割り当て可能と判定した場合に、順位情報生成工程で生成した縮小順位情報に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定し、実行中の処理プロセスに割り当てたバッファブロック数を減少させることによって、未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、バッファ確保工程で確保したバッファブロックを未実行中の処理プロセスに割り当てるバッファ割当工程と、を含むことにより、割り当てられているバッファブロックに余裕のある処理プロセスから順に未実行中の処理プロセスに割り当てるバッファを確保することができるため、未実行中の処理プロセスに割り当てるバッファを容易に確保することができる。
【０１２６】
また、本発明のバッファの動的管理方法（請求項３）によれば、未実行中の処理プロセスからバッファブロックの割り当て要求があった際に、バッファ領域における未使用のバッファブロック数が未実行中の処理プロセスで処理の実行に最低限必要なバッファブロック数に満たない場合、実行中の処理プロセスのいずれかに割り当てたバッファブロック数を減少させることによって未実行中の処理プロセスにバッファブロックを割り当て可能であるか否かを判定する判定工程と、処理プロセスは、バッファブロックの割り当てに関する優先順位情報をそれぞれ有し、実行中の処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行するために最低限必要なバッファブロック数に基づいて、未実行中の処理プロセスに割り当て可能なバッファブロック数を求め、求めたバッファブロック数および優先順位情報に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定するための縮小順位情報を生成する順位情報生成工程と、判定工程で割り当て可能と判定した場合に、順位情報生成工程で生成した縮小順位情報に基づいて、バッファブロックを減少させる対象となる実行中の処理プロセスを決定し、実行中の処理プロセスに割り当てたバッファブロック数を減少させることによって、未実行中の処理プロセスに割り当てるバッファブロックを確保するバッファ確保工程と、バッファ確保工程で確保したバッファブロックを未実行中の処理プロセスに割り当てるバッファ割当工程と、を含むことにより、例えば、高速な処理が要求されているような処理プロセス対して高い優先順位を設定しておくことができるため、たとえその処理プロセスに割り当てられているバッファブロック数に余裕があるとしても、割り当てられたバッファブロック数が減少されて処理が遅くなるという事態の発生を防止することができる。
【０１３０】
また、本発明のバッファの動的管理方法（請求項４）によれば、各処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行する際に要求したバッファブロック数に基づいて、要求したバッファブロック数に対して不足している不足分のバッファブロック数を求め、求めた不足分のバッファブロック数に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定するための割当順位情報を生成する順位情報生成工程と、任意の処理プロセスからバッファブロックが解放された場合に、順位情報生成工程で生成した割当順位情報に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定し、決定した処理プロセスに解放されたバッファを割り当てるバッファ割当工程と、を含むため、不足しているバッファブロック数の多い処理プロセスに対して優先的にバッファを再配分することができる。
【０１３１】
また、本発明のバッファの動的管理方法（請求項５）によれば、処理プロセスは、バッファブロックの割り当て順位に関する優先順位情報をそれぞれ有し、各処理プロセス毎に、現在割り当てられているバッファブロック数および処理を実行する際に要求したバッファブロック数に基づいて、要求したバッファブロック数に対して不足している不足分のバッファブロック数を求め、求めた不足分のバッファブロック数および優先順位情報に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定するための割当順位情報を生成する順位情報生成工程と、任意の処理プロセスからバッファブロックが解放された場合に、順位情報生成工程で生成した割当順位情報に基づいて、解放されたバッファブロックの割り当て対象となる処理プロセスを決定し、決定した処理プロセスに解放されたバッファを割り当てるバッファ割当工程と、を含むことにより、例えば、高速な処理が要求されているような処理プロセス対して高い優先順位を設定しておくことができるため、たとえその処理プロセスについて不足しているバッファブロック数が少ないとしても、優先的にバッファブロック数を増加させ、処理の高速化を図ることができる。
【０１３３】
さらに、本発明のコンピュータ読み取り可能な記録媒体（請求項６）によれば、請求項１〜５のいずれか一つに記載のバッファの動的管理方法の各工程をコンピュータに実行させるためのプログラムを記録したため、このプログラムをコンピュータで実行することにより、特定の処理プロセスを対象としてバッファの再配分処理を行うことができることから、処理の高速化・簡素化を図ることができると共に、他の処理プロセスに影響を与えることなく、バッファの再配分を行うことができるバッファの動的管理方法を実現することができる。さらに、特定の処理プロセスを対象としてバッファの再配分処理を行うことにより、バッファからデータをディスクに退避する回数を減少させることができるため、バッファリングするメリットを最大限活用できるバッファの動的管理方法を実現することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係るバッファの動的管理方法による処理の概念を説明するためのブロック図である。
【図２】本発明の実施の形態に係るバッファの動的管理方法において利用される情報である要求バッファブロック数および最小稼働バッファブロック数を説明するための静止画像データの概念図である。
【図３】本発明の実施の形態に係るバッファの動的管理方法において、バッファ配分処理の手順を示すフローチャートである。
【図４】本発明の実施の形態に係るバッファの動的管理方法において、バッファ解放検知処理の手順を示すフローチャートである。
【図５】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１の手順を示すフローチャートである。
【図６】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１をより具体的に説明するための説明図である。
【図７】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１をより具体的に説明するための説明図である。
【図８】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１をより具体的に説明するための説明図である。
【図９】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１をより具体的に説明するための説明図である。
【図１０】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１をより具体的に説明するための説明図である。
【図１１】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理１をより具体的に説明するための説明図である。
【図１２】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理２の手順を示すフローチャートである。
【図１３】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理２をより具体的に説明するための説明図である。
【図１４】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理２をより具体的に説明するための説明図である。
【図１５】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理２をより具体的に説明するための説明図である。
【図１６】本発明の実施の形態に係るバッファの動的管理方法において、バッファ再配分処理２をより具体的に説明するための説明図である。
【図１７】マルチメディア・オン・デマンド・システム（ＭＯＤシステム）の概略構成図である。
【符号の説明】
１００    サーバ装置
１０１ａ〜１０１ｃ    クライアント装置
１０２    ネットワーク
１０３    バッファ管理マネージャ
１０４    メモリ管理マネージャ
１０５    メモリ
１０６    マルチメディア用バッファリングモジュール（モジュール）
【図１】
0003761317.tif 000004
【図２】
0003761317.tif 000005
【図３】
0003761317.tif 000006
【図４】
0003761317.tif 000007
【図５】
0003761317.tif 000008
【図６】
0003761317.tif 000009
【図７】
0003761317.tif 000010
【図８】
0003761317.tif 000011
【図９】
0003761317.tif 000012
【図１０】
0003761317.tif 000013
【図１１】
0003761317.tif 000014
【図１２】
0003761317.tif 000015
【図１３】
0003761317.tif 000016
【図１４】
0003761317.tif 000017
【図１５】
0003761317.tif 000018
【図１６】
0003761317.tif 000019
【図１７】
0003761317.tif 000020