(57)【要約】【課題】  過去分の所定量の記録データを保存したまま、循環記録領域の容量を動的に変更でき、１つの循環記録領域を複数の記録媒体に分散したメモリ領域で構成できる循環記録装置を提供すること。【解決手段】  循環記録領域を構成するメモリブロック数と対応した複数のテーブルエントリからなり、各エントリが、メモリブロックをアクセスするためのポインタ情報と、該メモリブロックに蓄積されたデータの目次情報とを含む循環記録領域管理テーブルを有し、上記循環記録領域管理テーブルに従って、循環記録領域への循環的なデータブロックの書き込みと、特定メモリブロックからのデータの読出しを行う循環記録装置。【選択図】  図４
2005092679.tif 000002
【特許請求の範囲】
【請求項１】
同一または複数の記憶媒体上に位置した複数のメモリブロックを循環的に使用してデータを蓄積する循環記録装置において、
循環記録領域を構成するメモリブロック数と対応した複数のテーブルエントリからなり、各エントリが、メモリブロックをアクセスするためのポインタ情報と、該メモリブロックに蓄積されたデータの目次情報とを含む循環記録領域管理テーブルを有し、
上記循環記録領域管理テーブルに従って、循環記録領域への循環的なデータブロックの書き込みと、特定メモリブロックからのデータの読出しを行うことを特徴とする循環記録装置。
【請求項２】
記録媒体毎に、循環記録領域用のメモリブロックの識別情報および使用状態を示すメモリブロック状態管理テーブルを有し、
上記メモリブロック状態管理テーブルを参照して、循環記録領域の新規作成要求に応じた新たな循環記録領域管理テーブルの生成と、生成済み循環記録領域のメモリ容量の変更要求に応じた既存の循環記録領域管理テーブルの再編成と、上記循環記録領域管理テーブルの生成および再編成に伴うメモリブロックの使用状態の変更を行うことを特徴とする請求項１に記載の循環記録装置。
【請求項３】
同一または異なる複数の記憶媒体上に位置した同一容量の複数のメモリブロックを循環的に使用してデータを蓄積する循環記録装置において、
記録媒体毎に各メモリブロックの識別情報および使用状態を示すメモリブロック状態管理テーブルと、
それぞれが循環記録領域のメモリブロック数と対応した複数のテーブルエントリからなり、各エントリが、メモリブロックをアクセスするためのポインタ情報と、該メモリブロックに蓄積されたデータの目次情報とを示すためのフィールドを有する複数の循環記録領域管理テーブルとを有し、
循環記録領域の新規作成要求または生成済み循環記録領域のメモリ容量の拡張要求があった時、上記メモリブロック状態管理テーブルを参照し、所属する記憶媒体に無関係に空き状態にある必要個数のメモリブロックを確保し、これらのメモリブロックと対応した複数のテーブルエントリを構成要素として、新たな循環記録領域管理テーブルの生成または既存の循環記録領域管理テーブルの再編成を行うことを特徴とする循環記録装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のメモリ領域を循環的に使用してデータを記録する循環記録装置に関し、特に、時系列に発生する複数系列のデータを蓄積して要求元に配信するデータ蓄積配信システム用のデータ記録装置に適した循環記録装置に関する。
【背景技術】
【０００２】
例えば、遠隔監視用の画像配信システムでは、Ｗｅｂカメラ等の撮像装置で撮影された複数サイトからの画像データを時系列的に受信しておき、これらの画像データを磁気ディスク、光ディスク、半導体ディスク等の大容量の記憶装置（記録装置）に蓄積すると共に、ネットワークを介して画像データ要求元となるモニタに配信することによって、各サイトの状況を遠隔地にあるモニタ画面で確認できるようにしている。尚、ここでいう画像データは、各サイトで集音した音声情報を含み得る。
【０００３】
この場合、画像データの記録装置には容量的な制約があるため、此の種のシステムでは、データ蓄積用として記録媒体上に確保されたメモリ領域を循環的にアクセスし、時系列的に最も旧い画像データを最新の画像データで順次に書き換える循環記録方式を採用して、過去分の所定量の画像データを保存、再生できるようにしている。
【０００４】
複数サイトの画像データを記録する場合、記録装置にサイト別（チャネル別）の複数の循環記録領域を定義しておき、チャネル別循環記録方式による画像データの保存、再生が行われる。このような循環記録方式を採用した記録装置（循環記録装置）におけるメモリのアドレス管理に関しては、例えば、特開平１１−２３２８４２号公報の第３−５頁、第１図−第１２図（特許文献１）に記載されている。
【０００５】
【特許文献１】特開平１１−２３２８４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
然るに、循環記録方式を採用した従来の記録装置では、各循環記録領域が同一記録媒体上のメモリ領域で構成され、且つ、運用中の循環記録領域の容量変更については考慮されていない。
【０００７】
本発明の目的は、過去分の所定量の記録データを保存したまま、循環記録領域の容量を動的に変更可能な循環記録装置を提供することにある。
本発明の他の目的は、１つの循環記録領域を複数の記録媒体に分散したメモリ領域で構成できる循環記録装置を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明は、記録媒体上に循環記録領域用となる所定サイズの複数のメモリブロックを用意し、記録媒体毎に各メモリブロックの使用状態を管理しておき、各循環記録領域は、空き状態にある必要個数のメモリブロックの集合とし、これらのメモリブロックを循環的に使用することによってデータの蓄積を行う。
【０００９】
更に詳述すると、本発明の循環記録装置は、循環記録領域を構成するメモリブロック数と対応した複数のテーブルエントリからなり、各エントリが、メモリブロックをアクセスするためのポインタ情報と、該メモリブロックに蓄積されたデータの目次情報とを含む循環記録領域管理テーブルを有し、上記循環記録領域管理テーブルに従って、循環記録領域への循環的なデータブロックの書き込みと、特定メモリブロックからのデータの読出しを行うことを特徴とする。
【００１０】
本発明による循環記録装置の他の特徴は、記録媒体毎に、循環記録領域用のメモリブロックの識別情報および使用状態を示すメモリブロック状態管理テーブルを有し、上記メモリブロック状態管理テーブルを参照して、循環記録領域の新規作成要求に応じた新たな循環記録領域管理テーブルの生成と、生成済み循環記録領域のメモリ容量の変更要求に応じた既存の循環記録領域管理テーブルの再編成と、上記循環記録領域管理テーブルの生成および再編成に伴うメモリブロックの使用状態の変更を行うことにある。
【００１１】
本発明による循環記録装置の更に他の特徴は、記録媒体毎に各メモリブロックの識別情報および使用状態を示すメモリブロック状態管理テーブルと、それぞれが循環記録領域のメモリブロック数と対応した複数のテーブルエントリからなり、各エントリが、メモリブロックをアクセスするためのポインタ情報と、該メモリブロックに蓄積されたデータの目次情報とを示すためのフィールドを有する複数の循環記録領域管理テーブルとを有し、循環記録領域の新規作成要求または生成済み循環記録領域のメモリ容量の拡張要求があった時、上記メモリブロック状態管理テーブルを参照し、所属する記憶媒体に無関係に空き状態にある必要個数のメモリブロックを確保し、これらのメモリブロックと対応した複数のテーブルエントリを構成要素として、新たな循環記録領域管理テーブルの生成または既存の循環記録領域管理テーブルの再編成を行うことにある。
【発明の効果】
【００１２】
本発明によれば、１つの循環記録領域を複数の記録媒体上に分散したメモリブロックで構成でき、最新部分の記録内容を保持した状態で循環記録領域の拡張／縮小が可能となる。また、本発明によれば、記録装置の記憶容量の範囲内で循環記録領域間でのメモリ容量の融通と、記録媒体の増設時の既存の循環記録領域のメモリ容量の拡張が容易となる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施例について、図面を参照して説明する。
図１は、本発明による循環記録装置および循環記録方法が適用される画像蓄積配信システムの全体構成の１例を示す。
ここに示した画像蓄積配信システムは、画像（音声を含む場合もある）データを蓄積するための記録装置（以下、ディスク装置と言う）３を備えた画像蓄積配信サーバ１と、ネットワーク４を介して上記画像蓄積配信サーバ１に接続された複数のＷｅｂカメラ５（５−１〜５−ｎ）および複数のクライアント端末６（６−１〜６−ｍ）からなる。Ｗｅｂカメラ５−１〜５−ｎは、それぞれを固有のチャネル番号を有し、例えば、５−１はチャネル１（ＣＨ１）用、５−２はチャネル２（ＣＨ２）用、‥‥‥、５−ｎはチャネルｎ（ＣＨｎ）用のＷｅｂカメラとする。ここで、ｎ、ｍは自然数であり、ｎ＝ｍである必要はない。
【００１４】
Ｗｅｂカメラ５−１〜５−ｎによる撮影映像の各フレームの画像データは、例えば、ＪＰＥＧ等の画像圧縮方式で圧縮され、ＩＰパケット形式で画像蓄積配信サーバ１に送信される。この場合、圧縮された画像データは、フレーム毎にデータ量の異なる可変長データとなる。画像蓄積配信サーバ１は、Ｗｅｂカメラ５−１〜５−ｎからネットワークを介して受信した各パケットから圧縮画像データ（以下、単に画像データと言う）を抽出し、ディスク装置３に予め確保されたチャネル別（サイト別）の循環記録領域３０（３０−１〜３０−ｎ）に記録する。
【００１５】
各クライアント端末６は、後述するように、画像蓄積配信サーバ１に対して、チャネル番号とフレーム番号を指定して画像データの配信を要求する。画像蓄積配信サーバ１は、クライアント端末からの要求に応じて、ディスク装置３から読出した指定チャネル番号／フレーム番号の画像データ、またはキャッシュメモリに蓄積中の最新の画像データをＩＰパケット形式で要求元のクライアント端末に配信サービスする。本発明の循環記録装置は、上記画像蓄積配信システムにおけるディスク装置３に適用される。
【００１６】
図２は、ディスク装置３に形成されるチャネル別の循環記録領域３０−１〜３０−ｎを示す。
図１、図２では、便宜上、ディスク装置３が１つの装置として表されているが、本発明では、ディスク装置３が、識別可能な複数の記録媒体を有するものとする。ここで言う記録媒体は、例えば、個別のハードディスク、複数のハードディスクからなるＲＡＩＤ（Redundant Arrays Of Inexpensive Disk）、その他のランダムアクセス可能な記憶装置のうちの１つを意味している。本発明では、これらの複数の記録媒体を利用して、ディスク装置３が提供するメモリ空間に、チャネル別の複数の循環記録領域３０（３０−１、…、３０−ｔ、３０−（ｔ＋１）、３０−（ｔ＋２）、…、３０−（ｎ−１）、３０−ｎ）を形成する（１≦ｔ≦ｎ）。
【００１７】
チャネル別循環記録領域３０のサイズ（記憶容量）は任意であり、図２では、各循環記録領域を示す模式的に示すリングの大きさによって、循環記録領域のサイズの違いを表している。各循環記録領域３０は、それぞれ所定サイズの複数のメモリブロックからなっており、これらのメモリブロックを循環的にアクセスすることによって、各チャネルで時系列的に発生した画像データをそれぞれ最新データに続く所定量を残す形式で記録することができる。
【００１８】
図３は、循環記録領域に利用される各記録媒体上のメモリブロックと、これらのメモリブロックの使用状態を管理するメモリブロック状態管理テーブルを示す。
図（Ａ）は、識別子Ａをもつ記録媒体３００Ａに形成されたメモリブロック状態管理テーブル３０１Ａと、循環記録領域用のメモリ領域３０２Ａとを示す。メモリ領域３０２Ａは、識別子０〜Ｎをもつ所定サイズ（例えば、１Ｍバイト）のＮ個のメモリブロックに分割され、メモリブロック状態管理テーブル３０１Ａは、各メモリブロックの識別子（以下、ブロック番号と言う）と対応して、メモリブロックの使用状態を示す状態フラグを記憶している。循環記録領域として既に割当て済みのメモリブロックには、状態フラグ“１”が設定され、空き状態にあるメモリブロックには、状態フラグ“０”が設定される。
【００１９】
図（Ｂ）は、識別子Ｂをもつ記録媒体３００Ｂに形成されたメモリブロック状態管理テーブル３０１Ｂと、循環記録領域用のメモリ領域３０２Ｂとを示す。メモリ領域３０２Ｂは、識別子０〜Ｍをもつ所定サイズのＭ個のメモリブロックに分割され、メモリブロック状態管理テーブル３０１Ｂは、メモリブロック状態管理テーブル３０１Ａと同様、各メモリブロックの識別子（以下、ブロック番号と言う）と対応して、メモリブロックの使用状態を示す状態フラグを記憶している。
【００２０】
図４は、循環記録領域を定義するために生成される循環記録領域インデクスと循環記録領域管理テーブルの構成を示す。
本実施例では、チャネル別の循環記録領域３０−１〜３０−ｎと対応して、循環記録領域インデクス３１０（３１０−１〜３１０−ｎ）を生成し、各循環記録領域インデクスにリンクして循環記録領域管理テーブル３２０（３２０−１〜３２０−ｎ）を形成する。
【００２１】
チャネルＣＨ１用の循環記録領域インデクス３１０−１には、チャネル番号３１１と、循環記録領域３０−１に含まれるメモリブロックの個数ｎ（＝循環記録領域管理テーブル３２０のエントリ数）を示すブロック数３１２と、循環記録領域管理テーブル３２０の先頭エントリＥＮ−１の位置を示すテーブルポインタ（ＴＰ）３１３と、最新データが書込まれたメモリブロックのポインタ情報をもつテーブルエントリを指すブロックポインタ（ＢＰ）３１４と、最新データ番号（ＳＮ）３１５とが記憶される。他のチャネル用の循環記録領域インデクス３１０−２〜３２０−ｎも同様の構成となっている。
【００２２】
循環記録領域インデクス３１０−１にリンクした循環記録領域管理テーブル３２０−１は、ｎ個のテーブルエントリＥＮ−１〜ＥＮ−ｎからなり、各エントリは、ポインタ部３３０と目次部３４０とを含む。
ポインタ部３３０には、記録媒体の識別子（この例では、媒体Ａまたは媒体Ｂ）とメモリブロックの識別子とからなるポインタ情報が設定され、これらの識別子によって、ディスク装置３内でのメモリブロックが特定される。例えば、先頭エントリＥＮ−１のポインタ情報“Ａ３”は、図３（Ａ）に示した記録媒体３００Ａにおける第３メモリブロックを指し、最終エントリＥＮ−ｎのポインタ情報“Ａ２２”は、図３（Ａ）に示した記録媒体３００Ａにおける第２２メモリブロックを指している。
【００２３】
一方、目次部２３０は、ポインタ情報が指すメモリブロックの状態を示す状態コード３４１と、該メモリブロックに記録されたデータブロックのシーケンス番号３４２と、次のテーブルエントリを指す次エントリポインタ３４３と、目次情報３４４とを含んでいる。本実施例では、先頭エントリＥＮ−１の次エントリポインタ３４３で第２エントリＥＮ−２を指し、第２エントリＥＮ−２の次エントリポインタ３４３で第３エントリＥＮ−２を指し、最終エントリＥＮ−ｎの次エントリポインタ３４３で先頭エントリＥＮ−１を指すことによって、テーブルエントリＥＮ−１〜ＥＮ−ｎをリング状に結合している。目次情報３４４は、後述するように、各データブロックに付されるヘッダから抽出される情報であり、循環記録領域からのデータ読出しの際に目的データが位置するデータブロックを検索するために利用される。
【００２４】
各インデクス３１０に含まれるブロックポインタＢＰの初期値は、先頭エントリＥＮ−１を指している。従って、ブロックポインタＢＰが指すテーブルエントリを参照して、ポインタ情報３３０が示すメモリブロックにデータを書込み、次のデータ書込み時にブロックポインタＢＰの値を更新することによって、循環記録領域管理テーブル３２０−１のポインタ情報３３０に従ったメモリブロックへの循環的なデータ記録が可能となる。
【００２５】
図５は、既に生成済みで運用中の循環記録領域のメモリサイズ（メモリ容量）縮小過程を示す。
図（Ａ）は、模式的に、シーケンス番号１４〜２９の画像データを蓄積した１６個のメモリブロックからなる循環記録領域３０−１を示している。ここで、循環記録領域３０−１から４個分のメモリブロックを削除するメモリサイズの縮小要求が発生した場合を想定する。この場合、図（Ｂ）に示すように、画像データの旧い順にシーケンス番号１４〜１７の画像データを蓄積したメモリブロック群３０Ｘが、循環記録領域３０−１からの削除対象となる。
【００２６】
図４に示した実施例では、循環記録領域３０−１と対応する循環記録領域インデクス３１０のブロックポインタＢＰによって、最新データ（この例では、シーケンス番号２９の画像データ）をもつメモリブロックの位置を特定できるようになっている。従って、循環記録領域管理テーブル３２０から、ブロックポインタＢＰが示すテーブルエントリの次エントリポインタ３４３を読出し、この次エントリポインタ３４３が示すテーブルエントリを参照すれば、該エントリのポインタ部３３０の内容によって最旧シーケンス番号１４の画像データをもったメモリブロックを特定できる。また、上記テーブルエントリが示す次エントリポインタ３４３に従って、同様の動作を繰り返すことによって、シーケンス番号１５、１６、１７の画像データをもつメモリブロックを次々と特定することができる。
【００２７】
本発明では、このように循環記録領域管理テーブル３２０を参照して、削除対象となるメモリブロックを特定できるため、削除対象メモリブロックを示すポインタ情報に従って、メモリブロック状態管理テーブル３０１（３０１Ａ、３０１Ｂ、…）を参照し、ポインタ情報と対応する状態フラグを“０”に書き換えることにより、削除対象メモリブロックを解放することができる。また、循環記録領域管理テーブル３２０において、ブロックポインタＢＰが示すテーブルエントリの次エントリポインタ３４３の値を書き換え、該テーブルエントリをポインタ情報で最旧画像データ（この例ではシーケンス番号１８の画像データ）のメモリブロックを示しているテーブルエントリにリンクさせることによって、削除対象メモリブロックと対応するテーブルエントリ群を除外し、図（Ｃ）に示すように、循環記録領域３０−１のサイズを縮小することができる。
【００２８】
図６は、既に運用中の循環記録領域のメモリサイズの拡張過程を示す。
図（Ａ）は、模式的に、シーケンス番号２０〜３１の画像データを蓄積した１２個のメモリブロックからなる循環記録領域３０−１を示している。上記循環記録領域３０−１に、例えば、４個分のメモリブロックの拡張要求が発生した場合を想定する。この拡張要求に対して、本発明では、メモリブロック状態管理テーブル３０１（３０１Ａ、３０１Ｂ、…）を参照して、空き状態の４個分のメモリブロック群３０Ｙを確保し、図（Ｂ）に示すように、シーケンス番号３１をもつ最新画像データの蓄積メモリブロックとシーケンス番号２０をもつ最旧画像データの蓄積メモリブロックとの間に挿入する。これによって、群循環記録領域３０−１のメモリサイズを図（Ｃ）に示すように１６個分のメモリブロックに拡張できる。この場合、追加メモリブロック群３０Ｙは、必ずしも同一の記録媒体上で確保する必要はなく、複数の記録媒体に分散して存在していてもよい。また、追加メモリブロック群３０Ｙは、既存の循環記録領域３０−１の構成要素となっているメモリブロック群とは異なる別の記憶媒体上、例えば、新たに増設されたに記憶媒体上に存在するものであってもよい。
【００２９】
循環記録領域３０−１への新たなメモリブロック群３０Ｙの追加は、図４に示した循環記録領域管理テーブル３２０への新たなテーブルエントリ群の追加と、次エントリポインタ３４３の書き換えによって行われる。すなわち、ブロックポインタＢＰが指している最新画像データ蓄積ブロック用のテーブルエントリを追加テーブルエントリ群の先頭エントリにリンクさせ、追加テーブルエントリ群の最後のエントリを、上記最新画像データ蓄積ブロック用のテーブルエントリで次エントリポインタ３４３が示していた最旧画像データ蓄積ブロック用のテーブルエントリにリンクさせるように、次エントリポインタ３４３を書き換えればよい。
【００３０】
図７は、上述した循環記録領域の生成機能と循環記録領域の拡張／縮小機能を備えた画像蓄積配信サーバ１の一実施例を示すブロック構成図である。
画像蓄積配信サーバ１は、プロセッサ１０と、プロセッサ１０が実行する各種のプログラムを格納したプログラム格納メモリ１１と、画像データのチャネル別の循環記録とクライアントへの配信サービスに必要な各種テーブルが形成されるテーブル格納メモリ１２と、送受信画像フレームのバッファ領域および書込み／読出し画像データのキャッシュ領域として利用されるデータ格納メモリ１３からなる。また、画像蓄積配信サーバ１には、ネットワーク４に接続するためのネットワークインタフェース１４と、ＴＣＰ／ＩＰスタック１５と、ディスク装置３の接続インタフェースとなるファィバーチャネルドライバ１６及びファィバーチャネルインタフェース１７と、入力装置１８および表示装置１９が備えられている。
【００３１】
図８は、プログラム格納メモリ１１に用意される循環記録領域の新規作成ルーチン４００の一実施例を示すフローチャートである。循環記録領域新規作成ルーチン４００は、例えば、表示装置１９に表示された循環記録領域定義画面において、オペレータがチャネル番号ＣＨｋとメモリブロック数ｎを指定し、循環記録領域の新規作成を指令した場合に実行される。
【００３２】
循環記録領域新規作成ルーチン４００では、記録媒体毎に用意されているメモリブロック状態管理テーブル３０１（３０１Ａ、３０１Ｂ、…）の状態フラグを参照して、オペレータが指定した循環記録領域のメモリブロック数ｎに相当する空きブロックが存在しているか否かを判定する（ステップ４０１）。もし、空きブロックが足りない場合は、表示装置１９に空きブロック不足の通知メッセージを出力し（４０９）、このルーチンを終了する。この場合、オペレータが領域規模を縮小して循環記録領域の作成を再指令できるように、確保可能な空きブロックの個数、または不足している空きブロックの個数を表示するようにしてもよい。
【００３３】
循環記録領域のメモリブロック数ｎに相当する空きブロックが存在していた場合は、テーブル格納メモリ１２にチャネルＣＨｋ用の循環記録領域インデクス３１０−ｋと循環記録領域管理テーブル３２０―ｋのフレームを生成する（４０２）。この時点では、循環記録領域インデクス３１０−ｋのチャネル番号３１１とブロック数３１２には、オペレータが指定したチャネル番号ＣＨｋとメモリブロックｎが設定され、テーブルポインタ３１３とブロックポインタ３１４には、循環記録領域管理テーブル３２０―ｋの先頭エントリのアドレスが設定され、最新データ番号３１５には初期値０が設定される。また、循環記録領域管理テーブル３２０―ｋは、環状にリンクしたｎ個のエントリからなり、各エントリのポインタ部３３０と目次部３４０は、次エントリポインタ３４３以外の各フィールドがクリアされた状態にある。
【００３４】
次に、循環記録領域管理テーブル３２０−ｋのエントリ特定用のパラメータｉの値を初期値０に設定した後（４０３）、パラメータｉの値をインクリメントし（４０４）、メモリブロック状態管理テーブル３０１（３０１Ａ、３０１Ｂ、…の何れか）の第ｉ空きブロックを示すポインタ情報を循環記録領域管理テーブル３２０−ｋの第ｉエントリＥＮ（ｉ）のポインタ部３３０に登録する（４０５）。また、メモリブロック状態管理テーブル３０１において、上記第ｉ空きブロックの状態フラグをメモリブロック使用中を示す値“１”に設定し（４０６）、パラメータｉが指定値ｎに達したか否かを判定する（４０７）。
【００３５】
もし、パラメータｉが指定値ｎに達していなければ、ステップ４０４に戻り、パラメータｉの値をインクリメントして同様の動作を繰り返す。これによって、循環記録領域管理テーブル３２０−ｋに空きメモリブロックを示すポインタ情報が次々と登録され、最後の第ｎエントリについて、ポインタ情報の登録と該当メモリブロックの状態フラグの設定が終了した時点で、表示装置１９に循環記録領域の作成完了メッセージが出力され（４０８）、このルーチンが終了する。
【００３６】
図９は、プログラム格納メモリ１１に用意される循環記録領域の縮小ルーチン４２０の一実施例を示すフローチャートである。循環記録領域の縮小ルーチン４２０は、例えば、表示装置１９に表示された循環記録領域定義画面において、オペレータがチャネル番号ＣＨｑとメモリブロックの削減個数Δｎを指定し、循環記録領域の縮小を指令した場合に実行される。
【００３７】
循環記録領域の縮小ルーチン４２０では、チャネル番号ＣＨｑと削減ブロック数Δｎを読込み、修正対象となるチャネル番号ＣＨｑ用の循環記録領域インデクス３１０−ｑと循環記録領域管理テーブル３２０−ｑとを特定する（ステップ４２１）。図５で説明したように、循環記録領域の縮小によって循環記録領域管理テーブル３２０−ｑから削除すべきエントリは、ブロックポインタＢＰが示しているテーブルエントリに続くΔｎ個のエントリとなっている。ここでは、便宜上、これらの削除対象エントリをＥＮ（ＢＰ＋１）〜ＥＮ（ＢＰ＋Δｎ）と表すことにする。
【００３８】
循環記録領域の縮小ルーチン４２０では、削除対象エントリＥＮ（ＢＰ＋１）〜ＥＮ（ＢＰ＋Δｎ）のポインタ情報に従って、メモリブロック状態管理テーブル３０１（３０１Ａ、３０１Ｂ、…の何れか）上の該当メモリブロックの状態フラグを“０”に変更し、エントリＥＮ（ＢＰ＋１）〜ＥＮ（ＢＰ＋Δｎ）と対応するメモリブロックを次々と解放する（４２２）。この後、循環記録領域管理テーブル３２０−ｑを再構成し、エントリＥＮ（ＢＰ＋１）〜ＥＮ（ＢＰ＋Δｎ）を除外する（４２３）。図４に示したテーブル構成の場合、上記循環記録領域管理テーブル３２０−ｑの再構成は、ブロックポインタＢＰが示しているテーブルエントリの次エントリポインタ３４２の値を最後の削除エントリＥＮ（ＢＰ＋Δｎ）の次エントリポインタの値に書き換えることによって達成される。
【００３９】
次に、本実施例では、Δｎの値とｎ−ＢＰを比較する（４２４）。ここで、修正前の循環記録領域管理テーブル３２０−ｑでエントリＥＮ−ｎを最終エントリとした場合、ｎ−ＢＰは、ブロックポインタＢＰが指しているテーブルエントリより後にあるエントリ数を示している。Δｎがｎ−ＢＰよりも大きいと言うことは、循環記録領域管理テーブル３２０−ｑの先頭エントリＥＮ−１が削除対象エントリＥＮ（ＢＰ＋１）〜ＥＮ（ＢＰ＋Δｎ）に含まれることを意味している。この場合は、修正後の循環記録領域管理テーブル３２０−ｑの先頭エントリに合わせて、循環記録領域インデクス３１０−ｑのテーブルポインタ（ＴＰ）３１３の値を変更する（４２５）。この後、循環記録領域インデクス３１０−ｑのブロック数３１２の値をｎからｎ−Δｎに書き換え（４２６）、表示装置１９に循環記録領域の縮小完了メッセージを出力して（４２７）、このルーチンを終了する。
【００４０】
図１０は、プログラム格納メモリ１１に用意される循環記録領域の拡張ルーチン４４０の一実施例を示すフローチャートである。循環記録領域の拡張ルーチン４４０は、例えば、表示装置１９に表示された循環記録領域定義画面において、オペレータがチャネル番号ＣＨｒとメモリブロックの拡張個数Δｎを指定し、循環記録領域の拡張を指令した場合に実行される。
【００４１】
循環記録領域の拡張ルーチン４４０では、チャネル番号ＣＨｒと拡張ブロック数Δｎを読込み、修正対象となるチャネル番号ＣＨｒ用の循環記録領域インデクス３１０−ｒと循環記録領域管理テーブル３２０−ｒとを特定する（ステップ４４１）。次に、循環記録領域管理テーブル３２０−ｒに、拡張ブロック数（Δｎ）分のテーブルエントリ群、ＥＮ（ｎ＋１）〜ＥＮ（ｎ＋Δｎ）を追加生成する（４４２）。これらの追加エントリは、最終エントリＥＮ（ｎ＋Δｎ）を除いて、それぞれ次ポインタによって後続エントリとリンクしており、循環記録領域の生成時と同様、それぞれのポインタ情報として、記録媒体毎に用意されたメモリブロック状態管理テーブル３０１（３０１Ａ、３０１Ｂ、…）の状態フラグを参照して確保された空きメモリブロックの識別情報と記録媒体識別子とが登録されている。
【００４２】
循環記録領域の拡張ルーチン４４０では、上記エントリ群ＥＮ（Ｎ＋１）〜ＥＮ（Ｎ＋ｎ）が、ブロックポインタＢＰが指しているテーブルエントリＥＮ（ＢＰ）とその次のテーブルエントリＥＮ（ＢＰ＋１）との間に挿入されるように、循環記録領域管理テーブル３２０−ｒを再構成する（４４３）。このテーブル再構成は、テーブルエントリＥＮ（ＢＰ）の次エントリポインタ３４３を追加エントリ群の最初のエントリＥＮ（ｎ＋１）にリンクさせ、最終エントリＥＮ（ｎ＋Δｎ）の次エントリポインタ３４３を上記テーブルエントリＥＮ（ＢＰ）の次エントリポインタ３４３が指していたテーブルエントリＥＮ（ＢＰ＋１）にリンクさせるように、次エントリポインタ３４３を書き換えることによって達成される。
【００４３】
循環記録領域管理テーブルの再構成が終了すると、インデクス３１０ｒにおけるブロック数３１２の値をｎからｎ＋Δｎに書き換え（４４４）、表示装置１９に循環記録領域の縮小完了メッセージを出力して（４４５）、このルーチンを終了する。尚、ステップ４４２において、要求された拡張ブロック数（Δｎ）分の空きメモリブロックを確保できなかった場合は、循環記録領域の生成ルーチン４００と同様、空きブロック不足の通知メッセージを出力して、このルーチンを終了すればよい。
【００４４】
図１１は、本発明での画像蓄積配信サーバ１が行うディスク装置３への画像データの書込み動作と読出し動作の一実施例を示す。
ハードディスクのように、データのリード（Read）・ライト（Write）時に目的トラックへのシークアクセスを伴う記憶装置では、記録領域へのシーケンシャルなアクセスは高速に行えるが、ランダムなアクセスでは速度が低下する。また、ディスクアクセスを効率的に行うためには、データ転送サイズをディスク装置３のセクタサイズの倍数にしておくことが望まれる。そこで、本実施例の画像蓄積配信サーバ１では、例えば、Ｗｅｂカメラからフレーム単位で受信される画像データをチャネル別キャッシュメモリ（以下、ディスク書込みキャッシュ領域と言う）に順次に蓄積しておき、セクタサイズの整数倍のデータブロックに編集して、ブロック単位でディスク装置３への書込みを実行する。
【００４５】
すなわち、本実施例では、例えば、図１１に示すように、ディスク装置３に定義されるチャネル別の循環記録領域３０−ｒｅｆを固定サイズの複数のメモリブロックＢＬ１、ＢＬ２、…ＢＬｍａｘに区分けしておき、先頭メモリブロックＢＬ１から順にブロック単位で画像データを書込み、最終ブロックＢＬｍａｘへの画像データの書込みが終わると、次の画像データは先頭ブロックＢＬ１に書込むことによって、メモリ領域を循環的に利用した画像データ記録を実現する。ここで、循環記録領域３０−ｒｅｆは、図１に示した複数の循環記録領域３０−１〜３０−ｎのうちの任意の１つを示している。
【００４６】
循環記録領域３０−ｒｅｆに書込まれる画像データは、ディスク書込みキャッシュ領域２２０において、ヘッダ２２１と、可変長の複数のサブブロック２２２（２２２−１〜２２２ｒ）とからなるデータブロックに編集され、ブロック単位で各メモリブロックＢＬ１、ＢＬ２、…ＢＬｍａｘに書込まれる。ここでｒは、自然数である。これらのサブブロックには、それぞれ複数フレームＦＬ１、ＦＬ２、ＦＬ３、・・・の画像データが記録されている。以下の説明では、このようなサブブロックを「パック」と呼ぶことにする。各パック２２２は、セクタサイズの整数倍の長さを有し、先頭位置には、パック内でのフレームの開始位置をバイト単位で示す位置情報と、望ましくはフレームの時刻情報とを示すパック内ヘッダ２２３が設定されている。
【００４７】
本実施例では、各パック２２２は、基本サイズＳの中にヘッダ２２３に続けて順次に画像フレームを蓄積していき、最後の画像フレーム、例えば、ＦＬ６が基本サイズＳを超えた時、パック終端がセクタサイズの整数倍の位置となるように空き領域２２４を設定する形式で構成する。従って、パックサイズは、基本サイズＳに近い可変長サイズとなっている。別の方法として、最後の画像フレーム、例えば、ＦＬ６が基本サイズＳを超える時には、画像フレームＦＬ５以降の領域を空き領域とし、最後の画像フレームＦＬ６を次のパックに記録するようにしても良い。
【００４８】
一方、循環記録領域３０−ｒｅｆからの画像データの読出しには、クライアント端末からの指定フレームを含むパック単位の読出しモード（第１モード）と、指定フレームを含むデータブロック単位の読出しモード（第２モード）とを選択的に使い分ける。これは、例えば、クライアント端末で１倍速以下の画像再生または逆再生を行う場合は、画像データをブロック単位で読出す第２モードが効率的となるが、クライアント端末で不連続に選択したランダムなフレームを再生する場合は、上記第２モードでは読出されたデータの多くが無駄になり、結果的にアクセス効率が低下するからである。
【００４９】
第１モードでは、例えば、クライアント端末がブロックＢＬｐに含まれる画像フレームＦＬｘを要求した場合、画像蓄積配信サーバ１が、循環記録領域３０−ｒｅｆから指定フレームＦＬｘを含むパック（ＰＡＣＫｑ）をディスク読出しキャッシュ領域２６０に読出し、パックＰＡＣＫｑから指定フレームＦＬｘを選択して、要求元のクライアント装置に配信する。指定フレームが既にディスク読出しキャッシュ領域２６０に存在する場合は、循環記録領域３０−ｒｅｆからの画像データの読出しは不要となる。また、指定フレームがディスク書込みキャッシュ領域２２０に蓄積された状態にあれば、画像蓄積配信サーバ１は、ディスク書込みキャッシュ領域２２０から読み出した画像フレームを要求元のクライアント装置に配信する。
【００５０】
クライアント端末からのフレーム要求が、ブロック単位での読出しに適した再生モードを前提としていた場合は、上記第１モードに代えて第２モードを選択し、指定フレームを含む１ブロック分の画像データをディスク読出しキャッシュ領域２６０に読出す。この場合、その後の送信要求に対して、先読みされた画像データブロックの中から指定フレームを選択して、順次にクライアント端末に配信することが可能となる。
【００５１】
図１２は、各データブロックに付されるヘッダ２２１の詳細と、循環記録領域のブロックＢＬ、例えば、ブロックＢＬｐ（ｐ≦ｍａｘの自然数）に記録される画像データとデータブロックとの関係を示す。
ヘッダ２２１は、少なくともデータブロックの先頭パックに含まれる先頭フレームのフレーム番号（先頭フレーム番号）２２１Ａと、状態フラグ２２１Ｂと、時刻情報２２１Ｃと、ブロック内パック情報２２１Ｄとから成る。時刻情報２２１Ｃには、データブロック内の先頭フレームの時刻情報が設定される。
【００５２】
ブロック内パック情報２２１Ｄは、データブロックを構成している複数のパックと対応した複数のフィールドからなる。最初のフィールドは、例えば、８ビットの１つの値を含み、データブロック内の先頭パックに含まれるフレーム数を示している。２番目以降の各フィールドは、例えば、それぞれ８ビットからなる２つの値を含み、第１の値はパックの先頭セクタアドレス、第２の値はパック内のフレーム数を示している。ブロック内パック情報２２１Ｄに用意できるフィールド数には制限があるため、結果的に各データブロックに含まれるパック数には上限がある。
【００５３】
図１３は、ディスク書込みキャッシュ領域２２０で編集された任意チャネルＣＨ−ｒｅｆの画像データブロックを循環記録領域３０−ｒｅｆに書き込むためのデータ書込み処理プログラム(ルーチン)４６０の基本的な動作を示すフローチャートである。
データ書込み処理ルーチン４６０では、チャネルＣＨ−ｒｅｆに対応する循環記録領域インデクス３１０−ｒｅｆを参照し、最新データ番号３１５の値ＳＮが０か否かを判定する（ステップ４６１）。最新データ番号ＳＮが初期値０の場合は、ブロックポインタ３１４の値ＢＰをそのまま生かし、初期値０でなければ、ブロックポインタの値ＢＰを該ブロックポインタが指しているテーブルエントリＥＮ（ＢＰ）の次エントリポインタ３４３が示す値に置き換える（４６２）。
【００５４】
次に、上記インデクス３１０−ｒｅｆに付随する循環記録領域管理テーブル３２０−ｒｅｆにおいて、ブロックポインタＢＰが指しているテーブルエントリＥＮ（ＢＰ）の状態コード３４１をデータ書込み中を示す値、例えば、“１”に変更（４６３）した後、テーブルエントリＥＮ（ＢＰ）のポインタ情報３３０が示すメモリブロックに、ディスク書込みキャッシュ領域２２０で編集された画像データブロックを書き込む（４６４）。画像データブロックの書込み処理が終わると、テーブルエントリＥＮ（ＢＰ）の状態コード３４１をデータ書込み完了を示す値、例えば、“２”に変更（４６５）した後、インデクス３１０−ｒｅｆにおける最新データ番号３１５の値ＳＮをインクリメントし（４６６）、このＳＮ値をテーブルエントリＥＮ（ＢＰ）のシーケンス番号３４２に記録する（４６７）。更に、上記データブロック（画像データ）のヘッダ２１１に含まれる先頭フレーム番号、時刻情報等の情報をテーブルエントリＥＮ（ＢＰ）に目次情報３４４として登録し（４６８）、このルーチンを終了する。ここで、状態コード３４１に“１”と“２”の２つの状態を設けた理由は、データ書込み中のメモリブロックからの画像データの読出しを禁止するためである。
【００５５】
図４に示した循環記録領域管理テーブル３２０によれば、複数のテーブルエントリが次エントリポインタ３４３によって環状にリンクしており、画像データブロックの書込みの都度、ブロックポインタＢＰの値を更新することによって、データ書込みすべきメモリブロックの位置（記録媒体の識別子とメモリブロック識別子）を示すポインタ情報を持つ次のテーブルエントリを参照することができる。従って、本実施例によれば、循環記録領域を生成した直後は、画像データを空きメモリブロックにシーケンス番号順に記録し、全てのメモリブロックに画像データが書込まれた後は、最も旧い画像データを蓄積したメモリブロックに最新画像データを上書きする形式で、最新フレームに連続する所定量の画像データを蓄積することが可能となる。
【００５６】
図１４は、本発明の画像蓄積配信サーバ１において、上述した画像データの書込みと読出しに関係する部分の機能部分の一実施例を示すブロック図である。
本実施例では、データ格納メモリ１３（図７参照）に、チャネル番号と対応した複数の受信フレームバッファ２０（２０−１〜２０−ｎ）とディスク書込みキャッシュ２２（２２−１〜２２−ｎ）が形成される。また、上記データ格納メモリ１３には、クライアント端末数ｍと対応した複数の送信フレームバッファ２７（２７−１〜２７−ｍ）とディスク読出しキャッシュ２６（２６−１〜２６−ｍ）が形成される。
【００５７】
１２０は、前述したチャネル対応の循環記録領域インデクス３１０および管理テーブル３２０と、各記録媒体から読み出されたメモリブロック状態管理テーブル３０１とを保持する管理テーブル用メモリ領域、１２１は、循環記録領域管理テーブル３２０が示す論理的なポインタ情報、またはチャネル番号とブロック番号とで特定されるメモリブロックのアドレスをディスクアドレスに変換するためのアドレス変換テーブルを示す。
【００５８】
Ｗｅｂカメラ５から送信された画像フレームパケットは、ネットワークインタフェース１４で受信され、ＴＣＰ／ＩＰスタック１５で画像フレームが抽出され、チャネル番号と対応した受信フレームバッファ２０（２０−１〜２０−ｎ）に入力される。受信フレームバッファ２０に入力された画像フレームは、チャネル番号と対応した受信スレッド２１（２１−１〜２１−ｎ）によって、ディスク書込みキャッシュ２２（２２−１〜２２−ｎ）に転送され、各ディスク書込みキャッシュに設けたディスク書込みキャッシュ領域２２０において、図１１に示した複数パックからなる画像データブロックに編集される。
【００５９】
受信スレッド２１の実体は、プログラム格納メモリ１１に用意された受信画像フレーム処理用のプログラムである。本実施例では、図１５で詳述するように、チャネル対応の各ディスク書込みキャッシュ２２が複数のキャッシュ領域（２２０−１、２２０−２、…）で構成されている。各受信スレッドは、１つのキャッシュ領域でデータブロックの編集が完了すると、その後の受信フレームを別のキャッシュ領域で次のデータブロックを編集する。各受信スレッド２１は、キャッシュ領域で１つのデータブロックが完成すると、チャネル番号と、ブロック番号と、そのデータブロックが位置しているキャッシュ領域の識別子とを示す制御ブロックを生成し、これを書込み待ちブロックキュー２３に登録する。
【００６０】
ディスク書込みスレッド２４（２４−１〜２４−Ｌ：但し、ＬはＬ≦ｎの自然数）の実体は、プログラム格納メモリ１１に用意されたデータブロック処理用のプログラムであり、図１３で説明したデータ書込み処理機能を備えている。ディスク書込みスレッド２４は、それぞれ書込み待ちブロックキュー２３から制御ブロックを取り込み、該制御ブロックが示すチャネル番号、キャッシュ領域識別子、ブロック番号に従って、ディスク書込みキャッシュ２２から１つのデータブロックを読出す。次に、上記制御ブロックが示すチャネル番号ＣＨｊに従って、管理テーブル用メモリ領域１２０にある上記チャネル番号ＣＨｊと対応した循環記憶領域インデクス３１０―ｊと循環記憶領域管理テーブル３２０−ｊを参照し、上記データブロックを書き込むべきメモリブロックのポインタ情報を特定する。上記ポインタ情報は、アドレス変換テーブル１２１によってディスクアドレスに変換され、このディスクアドレスに従って、ディスク装置３内の循環記録領域３０−ｊの特定のメモリブロック位置にデータブロックが書込まれる。
【００６１】
配信スレッド２５（２５−１〜２５−ｍ）の実体も、プログラム格納メモリ１１に用意された送信データ処理用のプログラムであり、それぞれクライアント端末６（６−１〜６−ｍ）からの画像フレーム配信要求に応答して、第１モードまたは第２モードにより、ディスク装置３からディスク読出しキャッシュ２６へのパック単位またはブロック単位での画像データの読出し動作と、指定画像フレームの送信フレームバッファ２７（２７−１〜２７−ｍ）への転送動作を行う。送信フレームバッファ２７に入力された画像フレームは、ＴＣＰ／ＩＰスタック１５でＩＰパケットに変換され、ネットワークインタフェース１４を介してネットワークに送信される。
【００６２】
各クライアント端末６（６−１〜６−ｍ）は、画像蓄積配信サーバ１に対して、チャネル番号とフレーム番号を指定して画像フレームの配信を要求する。配信スレッド２５は、メモリ領域１２０にある指定チャネルの循環記録領域管理テーブルを参照して、クライアントからの要求画像フレームを含むブロックの番号とパック位置を特定し、アドレス変換テーブル１８から上記チャネル番号とブロック番号に対応するディスクアドレスを特定する。第１モードの画像データ読出しは、上記ディスクアドレス、パック位置に基づいて行われ、第２モードの画像データ読出しは、上記ディスクアドレスに基づいて行われる。
【００６３】
図１５は、第ｉ番目のチャネル（第ｉチャネル）用の受信スレッド２１−ｉによるデータブロックの編集動作を示す。本実施例では、第ｉチャネル用のディスク書込みキャッシュ２２−ｉとして、４個のキャッシュ領域２２０−１〜２２０−４が用意されている。キャッシュ領域の状態には、空き状態（ＳＴ０）、編集状態（ＳＴ１）、書込み待ち状態（ＳＴ２）、書込み完了状態（ＳＴ３）があり、各キャッシュ領域の現在の状態は、キャッシュ領域状態テーブル２２１−ｉに記録される。
【００６４】
受信スレッド２１−ｉは、キャッシュ領域状態テーブル２２１−ｉを参照して、ディスク書込みキャッシュ２２−ｉから空き状態（ＳＴ０）にあるキャッシュ領域を選択し、このキャッシュ領域の状態コードを編集状態ＳＴ１に変更した後、画像フレームのデータブロックの編集を行う。空き状態（ＳＴ０）のキャッシュ領域が全くない場合は、書込み完了状態（ＳＴ３）にあるキャッシュ領域の中から、時刻情報２２１Ｃが最も古いデータブロックを含むキャッシュ領域を選択し、その状態コードを編集状態ＳＴ１に変更した後、該キャッシュ領域でデータブロックの編集を行う。
【００６５】
受信スレッド２１−ｉは、キャッシュ領域で１つのデータブロックの編集が完了すると、キャッシュ領域状態テーブル２２１−ｉ上で上記キャッシュ領域の状態コードをＳＴ１からＳＴ２に変更し、該キャッシュ領域に関する制御ブロックを生成して、書込み待ちブロックキュー２３に登録する。
【００６６】
ディスク書込みスレッド２４−ｉは、書込み待ちブロックキュー２３から先頭の制御ブロックを取り出し、該制御ブロックに従って、ディスク書込みキャッシュ２２−ｉから、書込み待ち状態（ＳＴ２）にあるキャッシュ領域のデータブロックを読み出し、ディスク装置３の第ｉチャネル用の循環記録領域３０−ｉに上記データブロックを書き込む。この後、キャッシュ領域状態テーブル２２１−ｉ上で、ディスク装置への書込みが完了したキャッシュ領域の状態コードをＳＴ２からＳＴ３に変更して、１つのデータブロックの書込み処理を終了する。
【００６７】
ディスク書込みスレッド２４−ｉによるデータブロックの書込み所要時間は、受信スレッド２１―ｉによるデータブロック生成に比較して短いため、チャネル数ｎより少ない個数Ｌのディスク書込みスレッド２４（２４−１〜２４−Ｌ）で、ディスク書込みキャッシュ２２の全チャネルのデータブロックをディスク装置３に書込むこともできる。本実施例では、ディスク書込みキャッシュ２２−ｉに４個のキャッシュ領域２２０−１〜２２０−４を用意したが、キャッシュ領域は、各チャネルに少なくとも２個あればよく、その最大数は任意である。
【００６８】
図１６は、クライアント端末６−ｊからの画像フレーム配信要求に応答して配信スレッド２５−ｊが実行する第１モードの画像データ読出し動作と画像フレーム配信動作を示す。ここで、ｊは、ｊ≦ｍの自然数である。
本実施例では、クライアント端末６−ｊ用のディスク読出しキャッシュ２６−ｊとして４個のキャッシュ領域２６０−１〜２６０−４が用意されている。また、各キャッシュ領域と、そこに読出される画像データブロックとの対応関係を判断するために、配信スレッド２５−ｊは、キャッシュ領域管理テーブル２６１−ｊに、キャッシュ領域の識別子と対応して、循環記録領域管理テーブルから得られる読出しデータブロックの索引情報と、各キャッシュメモリ領域の最終アクセス時刻を登録している。
【００６９】
ディスク読出しキャッシュ２６−ｊは、図１６に示すように、クライアント端末毎に複数のキャッシュ領域２６０−１〜２６０−４を有し、複数ブロック分の画像データを読み出せるようになっている。但し、第１モードでは、斜線で示すように、各キャッシュ領域にパック単位で画像データが読み出されるため、要求フレームの属するデータブロックに既にキャッシュ領域が割り当て済みとなっていた場合でも、要求フレームそのものを含むパックがキャッシュ領域に存在するとは限らない。
【００７０】
配信スレッド２５−ｊは、クライアント端末６−ｊから画像フレームの配信要求メッセージを受信すると、受信されたメッセージからチャネル番号ｋと要求フレーム番号ｘとを抽出する。ここで、ｋは、自然数で、１≦ｋ≦ｎある。次に、これらのチャネル番号ｋと要求フレーム番号ｘに従って、管理テーブル用メモリ領域１２０にある上記チャネル番号ｋ用の循環記録領域管理テーブル３２０−ｋを参照し、該テーブルに登録されている目次情報３４４を検索して、要求フレーム番号が循環記録領域３０−ｋまたはディスク書込みキャッシュ２２−ｋに保存中のものか否かを判定する。
【００７１】
要求フレーム番号ｘが、循環記録領域管理テーブル３２０−ｋが示すアクセス可能な最古のフレーム番号よりも古い場合は、要求フレーム番号を最古のフレーム番号に置き換える。逆に、要求フレーム番号ｘがアクセス可能な最新フレーム番号よりも新しい場合は、要求フレーム番号を最新フレーム番号に置き換えた後、要求フレームがディスク書込みキャッシュ２２−ｋまたはディスク読出しキャッシュ２６−ｊに存在するか否かをチェックする。
【００７２】
ディスク書込みキャッシュ２２−ｋにおける要求フレームの有無は、キャッシュ領域に蓄積された各データブロックのヘッダ２２１をチェックすることによって判明する。また、ディスク読出しキャッシュ２６−ｊにおける要求フレームの有無は、キャッシュ領域管理テーブルに登録された索引情報から、要求フレームを含むデータブロックがキャッシュ領域２６０−１〜２６０−４の何れかに割り当て済みか否かを判定し、もし、割り当て済みの場合、上記索引情報の一部となっているブロック内パック情報２２１Ｄから、データブロック内での要求フレーム包含パックの位置を特定し、該当キャッシュ領域の特定位置にパックデータが読出し済みか否かを判定すればよい。
【００７３】
要求フレームが上記何れかのキャッシュに存在していた場合は、配信用スレッド２５−ｊは、要求フレーム番号ｘをもつ画像フレームＦＬｘをキャッシュから読み出し、フレームバッファ２７−ｊに複写する。上記画像フレームＦＬｘをディスク読出しキャッシュ２６−ｊから読み出した場合、配信用スレッド２５−ｊは、キャッシュ領域管理テーブル２６１−ｊに登録されている上記データブロックを保持するキャッシュ領域の最終アクセス時刻の値を最新のアクセス時刻（現在時刻）に更新しておく。
【００７４】
要求フレームに該当するデータブロックがキャッシュ領域２６０−１〜２６０−４の何れかに割り当て済みで、要求フレーム包含パックがキャッシュ領域に未だ読み出されていなかった場合、配信用スレッド２５−ｊは、チャネル番号ｋと対応するディスク装置３の循環記録領域３０−ｋから要求フレーム包含パックを読出し、これを割り当てキャッシュ領域の該当位置に格納した後、要求フレームをフレームバッファ２７−ｊに複写する。この場合も、キャッシュ領域管理テーブル２６１−ｊに登録されている上記データブロックを保持するキャッシュ領域の最終アクセス時刻の値を最新のアクセス時刻に更新する。
【００７５】
要求フレームに該当するデータブロックが、書込みキャッシュ２２−ｋにも読出しキャッシュ２６−ｊにも存在しなかった場合、配信用スレッド２５−ｊは、読出しキャッシュ２６−ｊから未使用状態にあるキャッシュ領域を見つけ、該キャッシュ領域をクリアした後、これを要求フレームのデータブロック読出し領域に割り当て、ディスク装置から要求フレーム包含パックを読出す。読出しキャッシュ２６−ｊに未使用状態のキャッシュ領域がなかった場合、配信用スレッド２５−ｊは、キャッシュ領域管理テーブル２６１−ｊから最終アクセス時刻の値が最も古いキャッシュ領域を見つけ、該キャッシュ領域をクリアした後、これを要求フレームのデータブロック読出し領域に割り当て、ディスク装置から要求フレーム包含パックを読出す。
【００７６】
尚、ここで言うデータブロック読出し領域の割り当ては、キャッシュ領域管理テーブル２６１−ｊにおいて、割り当てキャッシュ領域の識別子と対応して、循環記録領域管理テーブルから求めた新たなデータブロックの索引情報を登録し、該キャッシュ領域の最終アクセス時刻の値を最新のアクセス時刻とすることを意味している。
【００７７】
以上の実施例では、循環記録領域管理テーブル３２０の各エントリを次エントリポインタ３４３で後続エントリにリンクさせる構成としたが、次エントリポインタを省略し、複数のテーブルエントリを配列順に参照して次々とポインタ情報を読出し、循環記録領域管理テーブルの最後のテーブルエントリからポインタ情報を読出した時は、循環記録領域管理テーブルの最初のテーブルエントリに戻るように制御してもよい。
【００７８】
このようなテーブル構成を採用した場合、循環記録領域のメモリ容量の拡張に伴ってエントリ群が発生した時、管理テーブルの再編成処理として、例えば、新たなエントリ群を既存の最後のテーブルエントリに続く形で追加した後、ブロックポインタＢＰが指すテーブルエントリＥＮ（ＢＰ）の直後に上記追加エントリ群が位置するように、テーブルエントリＥＮ（ＢＰ）以降のエントリ内容を最終エントリ側に順次に移動する。同様に、循環記録領域のメモリ容量の縮小に伴って削除エントリ群が発生した時は、テーブルエントリＥＮ（ＢＰ）以降において、エントリ内容を削除エントリ側に移動し、管理テーブルの末尾にできた不要エントリを削除すればよい。
【００７９】
また、図１４に示した実施例では、循環記録領域管理テーブルを更新するデータ書込み処理ルーチン４６０の機能をディスク書込みスレッド２４に持たせたが、この機能の一部を受信スレッド２１に持たせるようにしてもよい。実施例では、受信スレッド２１が、複数のキャッシュ領域を使用して次々とデータブロックを編集し、編集が完了したデータブロックについては、対応する制御ブロックを書込み待ちブロックキュー２３に登録することによって、ディスク書込みスレッド２４にデータブロックの発生を通知するようにしているため、受信スレッド２１側でのデータブロックの発生と、ディスク書込みスレッド２４側でのデータブロックの循環記録領域への書込みとの間に時間差がある。従って、受信スレッド２１側に循環記録領域管理テーブルを参照させた場合、ブロックポインタＢＰと状態コード３４１の更新タイミングが問題となる。
【００８０】
この問題を解決する１つの方法は、ブロックポインタＢＰを受信スレッド２１用のポインタＢＰ１とディスク書込みスレッド２４用のポインタＢＰ２に分け、受信スレッド２１は、データブロック生成の都度、ポインタＢＰ１を更新し、ディスク書込みスレッド２４は、データブロックの書込みの都度、状態コード３４１とポインタＢＰ２を更新するようにすればよい。この方法を採用すると、データブロック生成の都度、受信スレッド２１が循環記録領域管理テーブルのポインタ情報を参照して、上記データブロックを書き込むべきメモリブロックを特定し、アドレス変換テーブル１２１から求めたディスクアドレスを制御ブロックに付加することができる。従って、ディスク書込みスレッド２４側では、アドレス変換テーブル１２１を参照することなく、制御ブロックから直ちにディスクアドレスを特定して、データブロックの書込み処理を完了することが可能となる。
【００８１】
また、実施例では、ブロックポインタＢＰによって最新データを蓄積したメモリブロックを特定できるようにしたが、ブロックポインタＢＰを省略し、例えば、データブロック書込みの都度、循環記録領域管理テーブルの目次部にあるシーケンス番号をサーチし、空き状態または最旧データを蓄積したメモリブロックを見つけて、次のデータブロックを書き込むようにしてもよい。このようにすれば、上述したブロックポインタＢＰの更新タイミングが問題がなくなるため、受信スレッドと書込みスレッドの双方で循環記録領域管理テーブルを自由に利用できる。尚、テーブルエントリの状態コードとして、受信スレッドがデータブロックと制御ブロックを生成したことを示すコードを設け、この状態コードからデータ書込み中、データ書込完了の状態コードに遷移するようにしてもよい。
【００８２】
以上の実施例から明らかなように、本発明の循環記録装置は、１つの循環記録領域を複数の記録媒体上に分散したメモリブロックで構成することができ、且つ、最新部分の記録内容を保持した状態で循環記録領域の拡張と縮小が可能となるため、ランダムアクセス記録媒体を使用した映像、音声、センサー情報等の時系列情報の記録装置として有効となる。また、本発明によれば、記録装置の記憶容量の範囲内で複数の循環記録領域におけるメモリ容量の融通と、記録媒体の増設時の既存の循環記録領域のメモリ容量の拡張が容易となる。
【図面の簡単な説明】
【００８３】
【図１】本発明を適用する画像蓄積配信システムの全体構成図。
【図２】ディスク装置に形成されるチャネル別の循環記録領域を説明するための図。
【図３】循環記録領域に利用される各記録媒体上のメモリブロックとメモリブロック状態管理テーブルの一実施例を示す図。
【図４】循環記録領域を定義するためのインデクスと管理テーブルの一実施例を示す図。
【図５】循環記録領域のメモリ容量の縮小過程を説明するための図。
【図６】循環記録領域のメモリ容量の拡張過程を説明するための図。
【図７】図１に示した画像蓄積配信サーバ１の一実施例を示すブロック構成図。
【図８】循環記録領域の新規作成ルーチン４００の一実施例を示すフローチャート。
【図９】循環記録領域の縮小ルーチン４２０の一実施例を示すフローチャート。
【図１０】循環記録領域の拡張ルーチン４４０の一実施例を示すフローチャート。
【図１１】画像蓄積配信サーバ１が行うディスク装置への画像データの書込み動作と読出し動作を説明するための図。
【図１２】データブロックに付されるヘッダの詳細と、循環記録領域の各ブロックに記録される画像データとの関係を示す図。
【図１３】循環記録領域へのデータ書込み処理ルーチン４６０の一実施例を示すフローチャート。
【図１４】画像蓄積配信サーバ１における画像データの書込みと読出しに関係する部分の機能ブロック図。
【図１５】図１４に示した受信用スレッド２１−ｉによるデータブロックの編集動作の一例を説明するための図。
【図１６】図１４に示した配信用スレッド２５−ｊによる画像データの読出し動作と画像フレームの配信動作の一例を説明するための図。
【符号の説明】
【００８４】
１：画像蓄積配信サーバ、３：ディスク装置、４：ネットワーク、５：Ｗｅｂカメラ、６：クライアント端末、１０：プロセッサ、１１：プログラム格納メモリ、１２：テーブル格納メモリ、１３：データ格納メモリ、１４：ネットワークインタフェース、１５：ＴＣＰ／ＩＰスタック、１６：ファイバーチャネルドライバ、１７：ファイバーチャネルインタフェース、１８：入力装置、１９：表示装置、２０：受信フレームバッファ、２１：受信用スレッド、２２：ディスク書込みキャッシュ、２３：書込み待ちブロックキュー、２４：ディスク書込みスレッド、２５：配信用スレッド、２６：ディスク読出しキャッシュ、２７：送信フレームバッファ、３０：循環記録領域、３００：記録媒体、３０１：メモリブロック状態管理テーブル、３１０：循環記録領域インデクス、３２０：循環記録領域管理テーブル。
【図１】
2005092679.tif 000003
【図２】
2005092679.tif 000004
【図３】
2005092679.tif 000005
【図４】
2005092679.tif 000006
【図５】
2005092679.tif 000007
【図６】
2005092679.tif 000008
【図７】
2005092679.tif 000009
【図８】
2005092679.tif 000010
【図９】
2005092679.tif 000011
【図１０】
2005092679.tif 000012
【図１１】
2005092679.tif 000013
【図１２】
2005092679.tif 000014
【図１３】
2005092679.tif 000015
【図１４】
2005092679.tif 000016
【図１５】
2005092679.tif 000017
【図１６】
2005092679.tif 000018