(57)【特許請求の範囲】
【請求項１】
ビデオクライアントのサービスを行うためのビデオサーバシステムであって、
複数のビデオセレクションを記憶するための大容量記憶モジュールと、
ターゲットモードで動作することによりＳＣＳＩ装置をエミュレートするＳＣＳＩインターフェイスを有する分配モジュールであって、１つ又は２つ以上の処理モジュールを有しており、その各処理モジュールが、ビデオクライアントに分配するためのビデオデータを処理するためのものであり、前記分配モジュールが、前記ＳＣＳＩインターフェイスを介してビデオデータを受信し、該受信したビデオデータをバッファリングし、及び該バッファリングされたビデオデータをクライアントに分配するようにプログラムされている、分配モジュールと、
該分配モジュールに更に含まれる第１のプロセッサであって、前記１つ又は２つ以上の処理モジュールに対するビデオデータの送信を制御する、第１のプロセッサと、
前記大容量記憶モジュールに接続された第１のＳＣＳＩインターフェイスと、前記分配モジュールに接続された第２のＳＣＳＩインターフェイスとを有する中央制御モジュールであって、クライアントからビデオ制御コマンドを受信し、及び該受信したビデオ制御コマンドに応じて前記ビデオセレクションの再生を制御するようにプログラムされている、中央制御モジュールとを備えており、
該中央制御モジュールが更に、前記大容量記憶モジュールからビデオデータを受信し、及び該ビデオデータを前記分配モジュールへの送信に先立ってバッファリングする、少なくとも１つのメモリバッファと、前記大容量記憶モジュールから前記少なくとも１つのメモリバッファへ、及び該少なくとも１つのメモリバッファから前記分配モジュールへのビデオデータの送信を制御する第２のプロセッサとを備えている、ビデオサーバシステム。
【請求項２】
前記分配モジュールに含まれる少なくとも１つの前記処理モジュールが、圧縮されたビデオデータの圧縮解除を行うためのビデオデータ圧縮解除手段である、請求項１に記載のビデオサーバシステム。
【請求項３】
前記ビデオデータ圧縮解除手段が、モーションピクチャエキスパートグループ(ＭＰＥＧ)規格に従ってデータの圧縮解除を行う、請求項２に記載のビデオサーバシステム。
【請求項４】
前記分配モジュールが、ラックマウント可能なシャシにマウントされたコンピュータ・マザーボードであり、前記中央制御モジュールが、ラックマウント可能なシャシにマウントされたコンピュータ・マザーボードである、請求項１に記載のビデオサーバシステム。
【請求項５】
前記分配モジュールに含まれる少なくとも１つの前記処理モジュールが、イーサネットネットワークを介した分配用にビデオデータをフォーマットするイーサネットフォーマットモジュールである、請求項１に記載のビデオサーバシステム。
【請求項６】
前記分配モジュールに含まれる少なくとも１つの前記処理モジュールが、ＡＴＭネットワークを介した分配用にビデオデータをフォーマットする非同期伝送モード（ＡＴＭ）モジュールである、請求項１に記載のビデオサーバシステム。
【請求項７】
１つ又は２つ以上の付加的な分配モジュールを更に備えており、
前記大容量記憶モジュールが複数のＳＣＳＩ互換の記憶装置を備えており、
前記中央制御モジュールが、前記大容量記憶装置に接続された第１の複数のＳＣＳＩインターフェイスと、１つ又は２つ以上の前記分配モジュールに各々接続された第２の複数のＳＣＳＩインターフェイスとを有している、請求項１に記載のビデオサーバシステム。
【請求項８】
前記中央制御モジュールが、前記大容量記憶装置に記憶されているビデオデータを読み出すための複数の読み出し要求を生成し、
該読み出し要求を記憶するためのメッセージ待ち行列と、
前記メッセージ待ち行列に接続されて前記読み出し要求の優先順位付けを行う優先順位付け手段とを更に備えている、請求項１に記載のビデオサーバシステム。
【請求項９】
前記優先順位付け手段が、
各読み出し要求が緊急の読み出し要求であるか否かを判定し、
緊急の各読み出し要求毎にデッドラインを計算し、
非緊急の読み出し要求をサービスすることにより緊急の読み出し要求がそのデッドラインを逸することになるか否かを判定し、
非緊急の読み出し要求をサービスすることにより緊急の読み出し要求がそのデッドラインを逸することにならないとの判定に応じて非緊急の読み出し要求をサービスし、
非緊急の読み出し要求をサービスすることにより緊急の読み出し要求がそのデッドラインを逸することになるとの判定に応じて緊急のデッドラインを有する読み出し要求をサービスする、
という各ステップからなる方法を実施するものである、請求項１０に記載のビデオサーバシステム。
【請求項１０】
前記大容量記憶モジュールが複数の記憶装置を備えており、
前記複数の記憶装置にわたってストライプ構成で複数の前記ビデオセレクションが記憶されており、
受信した制御コマンドに応じたビデオセレクションの再生の制御が、
複数の時間スロットを規定し、
前記複数の記憶装置のうち再生が開始されることになる記憶装置を識別し、該識別された記憶装置に関する第１の利用可能な時間スロット内にビデオセレクションの再生をスケジューリングし、各記憶装置が複数の時間スロットのサービスをローテーションで行う、
という各ステップからなる、請求項１に記載のビデオサーバシステム。
【請求項１１】
前記大容量記憶モジュールが複数の記憶装置を備えており、
少なくとも１つのビデオセレクションが、複数のデータブロックを含んでおり、及び前記複数の記憶装置にわたってストライプ構成で記憶されており、
該ビデオサーバシステムが、Ｍ個の各データブロック毎に計算されるエラーブロックを更に有しており、該Ｍが、前記ストライプ構成に使用される前記記憶装置の数よりも小さい整数の冗長ファクタである、請求項１に記載のビデオサーバシステム。
【請求項１２】
ビデオクライアントのサービスを行うためのビデオサーバシステムであって、
複数のビデオセレクションを記憶するよう構成された大容量記憶モジュールと、
ターゲットモードで動作することによりＳＣＳＩ装置をエミュレートするＳＣＳＩインターフェイスを有する分配モジュールであって、１つ又は２つ以上の処理モジュールを有しており、その各処理モジュールが、ビデオクライアントに分配するためのビデオデータを処理するためのものであり、前記分配モジュールが、前記ＳＣＳＩインターフェイスを介してビデオデータを受信し、該受信したビデオデータをバッファリングし、及び該バッファリングされたビデオデータをクライアントに分配するようにプログラムされている、分配モジュールと、
前記大容量記憶モジュールに接続された第１のＳＣＳＩインターフェイスと、前記分配モジュールに接続された第２のＳＣＳＩインターフェイスとを有する中央制御モジュールであって、クライアントからビデオ制御コマンドを受信し、及び該受信したビデオ制御コマンドに応じて前記ビデオセレクションの再生を制御するようにプログラムされている、中央制御モジュールとを備えており、
前記大容量記憶モジュールが複数の記憶装置を備えており、
少なくとも１つのビデオセレクションが、複数のデータブロックを含んでおり、及び前記複数の記憶装置にわたってストライプ構成で記憶されており、
該ビデオサーバシステムが更に、Ｍ個の各データブロック毎に計算されるエラーブロックを有しており、該Ｍが、前記ストライプ構成に使用される前記記憶装置の数よりも小さい整数の冗長ファクタである、ビデオサーバシステム。
【請求項１３】
前記中央制御モジュールにより生成され実行される複数のスレッドを更に含み、該複数のスレッドが、
該ビデオサーバシステムとビデオクライアントとの間のインターフェイスを管理するためのリモートプロシージャコールスレッドと、
ビデオデータにより形成される単一のビデオストリームの再生を管理するための少なくとも１つのストリームスレッドと、
該少なくとも１つのストリームスレッドにより生成されたメッセージであってエラー条件を示し又はビデオデータを含むビデオファイルの終わりを示すメッセージを操作するためのコールバックスレッドと、
前記大容量記憶モジュールに関するアクセス機能及びデータ読出機能を実行するための複数の記憶スレッドと、
ファイル管理機能を操作するためのファイルスレッドと
を含む、請求項１に記載のビデオサーバシステム。
【請求項１４】
前記大容量記憶モジュールと前記中央制御モジュール内の前記第１のＳＣＳＩインターフェイスとの間に接続された第１のデータバスと、
前記中央制御モジュール内の前記第２のＳＣＳＩインターフェイスと前記分配モジュールとの間に接続された第２のデータバスと
を更に備えている、請求項１に記載のビデオサーバシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にリアルタイムサーバシステム及びプロセスに関し、特に、クライアントロケーションにビデオストリームを分配するシステム及びプロセスに関する。
【０００２】
【従来の技術】
データの記憶、読み出し及び圧縮技術の改善に伴い、一般にはリアルタイムサーバシステムの使用が、特にビデオオンデマンドシステムの使用が、広く普及してきている。ビデオオンデマンド用途には、歓待施設（即ち、ホテル、モーテル、コンドミニアム、及び病院）、カラオケ（一般に音声記録の再生を伴うものであり、画像情報の再生を伴うものもある）及びインフォメーションセンターにおけるコンテンツ（即ち内容）の分配が含まれる。ビデオオンデマンドシステムは、選択されたビデオファイルを記憶し（一般に各ビデオファイルは映画、簡単な情報表示、又は他の種類のビデオコンテンツに相当する）、ユーザによる制御の下で選択されたビデオファイルを読み出す（即ち再生する）。従って、ビデオオンデマンドシステムを使用する場合、一人又は複数のユーザは、クライアントネットワークを介してビデオファイルを選択しアクセス（即ち再生）する。更に、従来のビデオオンデマンドシステムは、一般に、再生、停止、一時停止、巻戻し、及び早送り等の従来のビデオカセットレコーダ（ＶＣＲ）に見られるような様々な制御機能をユーザに提供する。ここで、「ビデオ」という用語は、音声部分及び画像部分を有するコンテンツ、又は音声のみのコンテンツ、又は画像のみのコンテンツ、又はその他の種類のディジタルコンテンツを含むものである、ということが理解されよう。
【０００３】
【発明が解決しようとする課題】
ビデオオンデマンドシステムに関するチャネル要件（即ち、サーバにより分配されるビデオストリームの数）は、各々の特定のビデオオンデマンドシステムによって異なる。例えば、大きなホテルは、小さなホテルよりも多数のチャネルを必要とし、インフォメーションセンターは、そのインフォメーションセンターの場所及び提供する情報の種類に基づき、サービス対象となるクライアントの数が多かったり少なかったりする。更に、ビデオオンデマンドシステムは、始終大きなチャネル容量が要求される場所に設置される場合がある。例えば、歓待施設（即ち、ホテル、モーテル、コンドミニアム、及び病院）に設置されたシステムは、初期は少数の部屋または装置に対してサービスを行うことになるが、設備のサイズが大きくなると、または該サービスに気づいて消費者が増大すると、システムの需要が増大することになる。この問題は、おそらく、付加的なクライアントロケーションを提供するために必要とされる物理的なインフラを回避することができないインフォメーションセンター等の用途においては更に深刻なものとなる。
【０００４】
更に、ビデオオンデマンドシステムのビデオ記憶要件は、特定の用途によって異なるものとなる。例えば、歓待施設は、長編ビデオ映画を多数の選択を提供することを所望し、従って、かなり大容量の記憶要件を有することになる。一方、インフォメーションセンターは、それよりもはるかに小さな記憶要件を有する傾向にあり、情報コンテンツが長編映画と比較して小さい場合には特にそうである。
【０００５】
従来の多くのビデオオンデマンドシステムは一定の高いコストアーキテクチャを有するものである。特に、従来の幾つかのビデオオンデマンドシステムは、多数のビデオストリームのリアルタイム分配を行うために、ハイエンドワークステーション又は特に高速のコンピュータを使用している。その他の従来のビデオオンデマンドシステムでは、多数のビデオストリームを分配するための処理要求に合わせるために、イベントのマルチタスク処理用の多数のプロセッサを備えたコンピュータを用いている。従来のビデオオンデマンドシステムは、ハイエンドの及び／又は特殊なハードウェアを使用するため、一般に極めて高コストのものとなる。かかる従来のビデオオンデマンドシステムは、指定された最大数のビデオストリームに適応するように一般に設計され、従って、その容量を越えて容易に拡張させることはできない、という欠点を更に有するものである。
【０００６】
様々なビデオオンデマンド用途の異なる要件に合わせて調整可能であり、個々のサーバロケーションの要求の増大に合わせて拡張可能である、単一の低コストのビデオオンデマンドシステムを提供することが望ましい。
【０００７】
従って、多数のビデオストリームやその他のディジタルデータストリームを並行して分配するための、調整可能及び拡張可能でコスト効率の良好な方法及びプロセスが必要とされている。
【０００８】
更に、一般にコンピュータシステムの重要な部分、特にビデオオンデマンドシステムの重要な部分は、その大容量記憶装置部分である。ビデオサーバ（ビデオオンデマンド）に関して言えば、大容量記憶装置部分は、ビデオコンテンツを記憶する。別の種類のコンピュータシステムの場合、大容量記憶装置部分は、他の種類のディジタルコンテンツ、例えば、コンピュータプログラム、データベース、画像、データ等を記憶する。特定の用途がビデオオンデマンドシステムにおけるものであろうとそれ以外の種類のコンピュータシステムにおけるものであろうと、大容量記憶装置のサイズ、処理速度、及びコストは、システムの仕様、性能、及びコストに影響を及ぼすものとなる。
【０００９】
従来の大容量記憶アーキテクチャには、安価なディスクドライブからなる冗長ディスクドライブアレイ（ＲＡＩＤ）を用いるものがある。従来、かかるアーキテクチャは、典型的には、従来入手可能な高性能で大きくて高コストのディスクドライブよりも小さくて安価で信頼性のあるドライブからなるドライブアレイを用いている。これらの従来のＲＡＩＤシステムの中にはストライピングを用いたものがあり、この場合には、データオブジェクトが「複数のデータストライプ」へと分割され、次いでそれらのデータストライプが、並列ディスク動作によって性能の改善を達成するためにディスクアレイ上にインターリーブされる。また、各データストライプは、ディスクアクセスを促進させるだけのサイズのデータブロックへと更に副分割される場合もある。一般に、従来のディスクアレイは、信頼性を増大させるために、ミラー又はパリティベースの機構といった形の冗長性を取り入れたものとなる。
【００１０】
詳細には、従来のＲＡＩＤレベル１はミラー処理を用いており、その他の一層高レベルの従来のＲＡＩＤシステムは、エラー訂正用のパリティブロックを用いている。従来、このパリティブロックは、１つのストライプスライスにわたる（即ち、ディスクアレイにわたる）データブロックの排他ＯＲをとることによって生成される。従来、各パリティブロックは、その関連するデータストライプとは異なるディスクに記憶される。従って、ディスクの故障が生じた場合には、その故障したディスクに記憶されているデータブロックは、そのパリティブロックを使用して（そのデータストライプスライス内の他の全てのデータブロックに対応するパリティブロックの排他ＯＲ演算を行うことにより）再構成される。
【００１１】
従って、Ｎ個のディスクを備えたＲＡＩＤシステムにおいて、ディスクが故障した場合には、失われた１つのデータブロックを再構成するために（Ｎ−１）個のディスクから（Ｎ−１）個のデータブロックを読み出す必要がある。（Ｎ−１）個のディスクについての読み出し動作は、サブシステムのロード性能が許容するのであれば応答時間の低減のために並列に行われるが、かかる故障発生時にはやはりかなり大きな負荷がロード性能に課されることになる。システムのディスク数（Ｎ）が増えるにつれ、故障モードにおける性能上の不利益が悪化する。従って、性能上の不利益を制限するために、ディスク数（Ｎ）を比較的小さい値に制限することが望ましい。
【００１２】
一方、ＲＡＩＤシステムの高いスループットを得るために、通常のデータアクセス時には多数（Ｎ個）のディスクを有して、多数のディスク動作を並列に行うことができるようにすることが望ましい。この側面は、故障モードで少数のＮが望ましいことと矛盾する。従って、故障モードで許容不能な大きな性能上の不利益を伴うことなくシステムの信頼性及び性能を向上させるＲＡＩＤシステム及び方法が必要とされている。
【００１３】
【課題を解決するための手段】
本発明によれば、従来の低コストの構成要素を用いて多数のビデオストリームをリアルタイムで分配する、調整可能で拡張可能なビデオサーバシステムが提供される。このシステムは、１つ又は２つ以上の中央制御モジュール（ＣＣＭ）と、１つ又は２つ以上の分配モジュール（ＤＭ）と、１つ又は２つ以上の記憶モジュール（ＳＭ）とを備えている。各中央制御モジュールは、従来の２つのスモールコンピュータシリアルインターフェイス（ＳＣＳＩ）コントローラカードを備えた従来のコンピュータであり、その各ＳＣＳＩコントローラカードは、「開始（ｉｎｉｔｉａｔｏｒ）」モードで動作して、１つ又は２つ以上の分配モジュール及び記憶モジュールとのインターフェイスをとる。各中央制御モジュールはまたローカルメモリを備えており、このローカルメモリは、分配モジュールへの分配に先立って記憶モジュールから取り出されたデータを記憶するための中間バッファメモリとして使用される。各中央制御モジュールは更に、１つのユーザ（クライアント）または１つのクライアントネットワークとの結合を行うための通信インターフェイスを備えている。各中央制御モジュールは、クライアントから受信したコマンドを処理し、多数のビデオストリームの再生に関するスケジューリングを行い、ビデオファイル構造を管理し、１つ又は複数の分配モジュールへのビデオデータの流れを制御して、リアルタイム再生を確実にする。
【００１４】
また、各分配モジュールは、「ターゲット」モードで動作する従来のＳＣＳＩコントローラカードを備えた従来のコンピュータである。ＳＣＳＩコントローラカードを備えていることに加え、各分配モジュールは、クライアントへの分配に先立ってビデオストリームの処理を行う１つ又は２つ以上の処理モジュールを備えている。一実施例では、該処理モジュールはビデオデコーダであり、その各々は、ビデオデータストリームの解凍のためのものである。この実施例の場合、該ビデオデコーダは、従来のＭＰＥＧ−１又はＭＰＥＧ−２デコーダである。
【００１５】
別の実施例では、該処理モジュールは、従来のネットワークインターフェイスカードであり、該カードは、ビデオデータストリームのフォーマッティングや、イーサネット、ＡＴＭ、又はＰＳＴＮネットワーク等を介したクライアントへのビデオデータストリームの供給を行うものである。更に、各分配モジュールは、分配モジュール上での処理に先立ってビデオデータを記憶するためのビデオバッファとして使用されるローカルメモリを備えている。
【００１６】
各記憶モジュールは大容量記憶媒体であり、該大容量記憶媒体は、ビデオデータ等のディジタル情報を記憶するよう構成されたものであり、標準的なＳＣＳＩプロトコルを用いて中央制御モジュールによってアクセスされる。各記憶モジュールは、例えば、ハードディスク、又はＣＤ−ＲＯＭドライブ、又はハードディスク列（ｂａｎｋ）、又はＣＤ−ＲＯＭ列、又はその他の種類の大容量記憶媒体である。
【００１７】
更に、本発明によれば、中央制御モジュールは、ハイブリッドファイル管理スキームを用いて、データアクセス性能の向上及びメモリ利用の改善を達成する。該ハイブリッドファイル管理スキームは、中央制御モジュール上で動作する従来のオペレーティングシステムと、記憶装置に記憶されている未処理ビデオデータの制御及びアクセスを直接行うための、従来のファイルマネージャをバイパスするカスタマイズされたファイル管理ソフトウェアとの両方を用いるものである。このハイブリッドスキームは、未処理のビデオデータ並びにビデオ記憶マップに関する制御情報を管理するためにオペレーティングシステムのファイル管理サービスを利用するビデオデータに対するアクセスタイムを最適化する。
【００１８】
本発明の別の側面によれば、中央制御モジュールは、優先順位法（ｐｒｉｏｒｉｔｉｚａｔｉｏｎ  ｍｅｔｈｏｄ）を実施して、サーバシステムにより生成される複数のビデオデータストリームの間で、各記憶モジュールに含まれる記憶装置のアクセスの優先順位付けを行う。複数のビデオデータストリームによって複数の読み出し要求が生成される度に、優先順位法は、その読み出し要求（読み出しメッセージ）が緊急のものか非緊急のものかを各読み出し要求ごとに決定する。所定時間内に要求のサービスを行えなかったことによりビデオデータストリームの再生に問題が生じる場合には、該要求は緊急のものである。また、同様の場合に問題が生じないのであれば、該要求は非緊急のものである。好適には、メッセージが緊急であるか非緊急であるかは、ビデオデータストリームの現在の状態によって決定される。例えば、ビデオデータストリームが現在一時停止されており、要求がその再生を再開させるものである場合には、その要求は非緊急のものである。しかしながら、ビデオデータストリームが再生状態にある場合の要求は緊急のものである。優先順位法は、次いで、各緊急メッセージ毎の最終デッドラインを計算する。優先順位法は、次いで、如何なる緊急メッセージもその最終デッドラインを逸することなく非緊急の要求のサービスを行うのに十分な時間が存在するか否かを判定する。該条件が満たされる場合には、システムは非緊急の要求を取り扱い、該条件が満たされない場合には、緊急の要求が次に処理される。
【００１９】
本発明の別の側面によれば、サーバシステム及び方法は、ディスクロード平衡化法を用いて、特定のビデオデータストリームの再生の開始のスケジューリングを行う。該ディスクロード平衡化法は、複数の時間帯を規定する。ここで、好適には、該時間帯の数は記憶装置の数に対応する。該ディスクロード平衡化法は、各ビデオデータストリームを各時間帯に１つずつ割り当てて、ビデオデータストリームの処理を分配する。該ディスクロード平衡化法は、かかる割り当てを、先ず、ビデオデータストリームを提供することになる記憶装置を識別し、次いで、その記憶装置によりサービスされることになる次に「利用可能な」時間帯を判定することにより行う。更なるビデオデータストリームを扱う容量（帯域幅）を有する場合には、該時間帯は「利用可能な」ものとみなされる。該ディスクロード平衡化法は次いで、その「利用可能な」時間帯を新規に開始されるビデオデータストリームに割り当てる。
【００２０】
本発明の更に別の側面によれば、サーバシステム及び方法は、別個のディスクからなる冗長ディスクアレイ（ＲＡＩＤ）システム及び方法を用いてビデオオブジェクトの記憶を行う。該ＲＡＩＤシステム及び方法は、ビデオオブジェクトを複数のデータブロックへと分割し、それらのデータブロックを、ストライピング処理を用いて（ストライプ化された構成で）複数の記憶装置にわたって（即ち、Ｎ個の記憶装置にわたって）記憶する。該システム及び方法によれば、冗長ファクタ（Ｍ）が選択される。該冗長ファクタＭは、信頼性、及びシステム動作中の故障モードでのサービス時間を決定する。Ｍは、Ｎ未満の整数となるように選択される。本発明のこの側面によれば、Ｍ個のデータブロックが記憶される度に、エラー回復ブロックが計算される。好適には、該エラー回復ブロックは、該Ｍ個のデータブロックについて排他ＯＲ演算を行うことにより生成されたパリティコードとなる。Ｍに比べてＮが大きいと、ディスクの故障に遭遇した際に、エラー回復処理が、冗長ファクタＭによって、必要とされる記憶装置のアクセスコールの数に好適に制限される。一実施例では、エラー回復ブロックは、データブロックとインターリーブされて記憶されるが、それに関連するデータは、その記憶装置とは異なる記憶装置に記憶される。かかる本発明の特徴は、ビデオデータ以外のディジタルデータを記憶するためのシステム及び方法に適用可能なものであり、また、サーバシステム以外の記憶システムにも適用可能なものである、ということが理解されよう。
【００２１】
本発明の更に別の側面によれば、中央制御モジュール、分配モジュール、及び記憶モジュールは、システムの柔軟性及び拡張性を向上させるためにラックマウント（ｒａｃｋ  ｍｏｕｎｔｅｄ）システムにおけるラックマウント（ｒａｃｋ  ｍｏｕｎｔｉｎｇ）にもそれぞれ適用可能である。
【００２２】
本明細書に記載の特徴及び利点は、その全てを含むものではなく、当業者であれば、図面、発明の詳細な説明及び特許請求の範囲を参照することにより、更に多くの特徴及び利点が自明であろう。更に、本書で使用する用語は、基本的に、読み易さ及び本発明の例示を目的として選択されたものであって、本発明の要旨に制限を加えるために選択されたものではなく、かかる本発明の要旨は特許請求の範囲に基づいて決定されるべきである、ということに留意されたい。
【００２３】
【発明の実施の形態】
図１は、本発明によるビデオオンデマンド（ＶＯＤ）システム１００を示すブロック図である。ＶＯＤシステム１００は、制御入力ソース１５０及びビデオサーバ１０５を備えている。ビデオサーバ１０５は、１つ又は２つ以上の中央制御モジュール１１０と、１つ又は２つ以上の分配モジュール１２０と、１つ又は２つ以上の記憶モジュール１３０とを備えている。該ＶＯＤシステム１００が調整可能及び拡張可能なものであるため、特定用途で使用される中央制御モジュール１１０、分配モジュール１２０、及び記憶モジュール１３０の数は、分配すべきストリームの数や特定用途におけるビデオ記憶要件等のファクタによって決まる。一好適実施例では、ビデオサーバ１０５は、１つの中央制御モジュール１１０と、１つの分配モジュール１２０と、１つの記憶モジュール１３０とを備えている。更に、調整性及びシステムの拡張性を促進させるために、ビデオサーバ１０５は好適にはラックマウントシステムとする。この場合、各サブコンポーネント（中央制御モジュール１１０、分配モジュール１２０、及び記憶モジュール１３０）はラックマウント用に適応される。
【００２４】
制御入力ソース１５０は、記憶されているビデオ情報（ビデオデータ）の取り出し及び表示を制御するための制御信号を生成する任意の入力ソースである。典型的な制御入力ソース１５０は、キーボード、遠隔制御装置、マウス、完全なコンピュータシステム、又はビデオサーバ１０５に連結されたクライアントコンピュータのネットワークを備えるものとなる。本好適実施例では、制御入力ソース１５０は、ビデオサーバ１０５に連結されたビデオクライアント１０１のネットワークである。各ビデオクライアント１０１は、ビデオ制御信号を生成するコンピュータである。従って、ビデオクライアント１０１は、ビデオサーバ１０５に接続されたビデオ要求信号及び制御信号を生成することによって、ＶＯＤシステム１００により提供される複数のビデオのうちの１つのビデオの選択及びその再生の制御を行うために使用される。ビデオクライアント１０１は、好適にはイーサネットネットワークを使用してビデオサーバ１０５に接続される。しかしながら、本発明によれば、ビデオクライアント１０１をビデオサーバ１０５に接続する他の手段を使用することも可能である、ということが理解されよう。例えば、ビデオクライアント１０１は、ローカルエリアネットワーク、無線通信リンク、光リンク、又は他の通信手段を使用してビデオサーバ１０５に接続することが可能である。
【００２５】
ここで再び図１を参照する。記憶モジュール１３０は、１つ又は２つ以上の記憶装置１３１を備えている。該記憶装置１３１の各々は、好適には、従来のハードディスクドライブ、ＣＤ−ＲＯＭドライブ、又はテープドライブ等の大容量記憶装置である。この好適実施例では、記憶装置１３１は、Ｓｅａｇａｔｅ，  Ｉｎｃ．によって製造された大容量（４〜９ＧＢｙｔｅ）ディスクドライブである。記憶モジュール１３０は、複数のビデオオブジェクト（ビデオシーケンス）を記憶する。一実施例では、ビデオオブジェクトの各々は長編のビデオ映画である。別の実施例では、ビデオオブジェクトは別の形態のビデオコンテンツである。ここで、「ビデオ」という用語は、音声部分及び画像部分を有するコンテンツ、又は音声のみのコンテンツ、又は画像のみのコンテンツ、又はその他の種類のディジタルコンテンツを含むものである、ということが理解されよう。従って、用語「ビデオ」は、ディジタル音楽記録、音声記録、無声画像セグメント等も含むものである。
【００２６】
本発明の好適実施例は、「ストライピング」を用いた本発明のＲＡＩＤ技術に従って各ビデオオブジェクトを記憶するものであり、これについては後述する。
【００２７】
ストライピングを用いて、各ビデオオブジェクトが複数の「ビデオストライプ」へと分割され、それら各ビデオストライプが異なる記憶装置１３１に記憶される。更に、各ビデオストライプが「データブロック」と呼ばれる複数の１２８ｋｂｙｔｅのデータチャンク（ｃｈｕｎｋ：塊）へと副分割される。
【００２８】
中央制御モジュール１１０は、重いマルチスレッドのオペレーティングシステム（好適にはＳｕｎ  ＭｉｃｒｏｓｙｓｔｅｍｓのオペレーティングシステムＳＯＬＡＲＩＳ）をＣＰＵ１１２（好適にはＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎにより製造されたＰＥＮＴＩＵＭプロセッサ）上で実行する高性能パーソナルコンピュータ用マザーボードである。該マザーボードは、ＡＳＵＳＴｅｋ  Ｃｏｍｐｕｔｅｒ  Ｉｎｃ．により製造されたものであり、ＭｉＴＡＣ  Ｉｎｄｕｓｔｒｉａｌ  Ｃｏｒｐｏｒａｔｉｏｎにより製造されたラックマウント式シャシにマウントされる。該マザーボードはまた、ＳＣＳＩコントローラ及びイーサネットコントローラ等の周辺装置との接続のためのペリフェラルコントロールインターフェイス（ＰＣＩ）バスを備えている。
【００２９】
各中央制御モジュール１１０は、中央制御モジュール１１０と記憶モジュール１３０との間、及び中央制御モジュール１１０と分配モジュール１２０との間との通信を促進させるためにイニシエータ１１１，１１３を備えている。イニシエータ１１１，１１３は、Ａｄａｐｔｅｃ，  Ｉｎｃ．（Ｍｉｌｐｉｔａｓ，Ｃａｌｉｆｏｒｎｉａ）により製造された従来のＳＣＳＩコントローラカードであり、ＰＣＩバスを用いてＣＰＵ１１２に接続される。メモリバッファ１１４は、ＣＰＵ１１２に直接接続されたダイナミックランダムアクセスメモリ（ＤＲＡＭ２３２（図２参照））内に割り当てられたメモリ空間である。好適には、メモリバッファ１１４はそれぞれ１２８ｋｂｙｔｅのメモリであり、従って、各メモリバッファ１１４は１データブロック全体を記憶する大きさとなっている。
【００３０】
また、分配モジュール１２０は好適には、Ｔｙａｎ  Ｃｏｍｐｕｔｅｒ  Ｃｏｒｐｏｒａｔｉｏｎにより製造された高性能パーソナルコンピュータ用マザーボードである。該マザーボードは、ＭｉＴＡＣ  Ｉｎｄｕｓｔｒｉａｌ  Ｃｏｒｐｏｒａｔｉｏｎにより製造されたラックマウント式シャシにマウントされる。該マザーボードは更に、従来のペリフェラルコントロールインターフェイス（ＰＣＩ）バスを備えている。各分配モジュール１２０は、ターゲット１２４、ＣＰＵ１２５、複数のビデオプロセッサ１２１、及びメモリバッファ１２６を備えている。ＣＰＵ１２５は、好適には、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎにより製造されたＰＥＮＴＩＵＭプロセッサである。ターゲット１２４は、Ａｄｖａｎｓｙｓ，Ｉｎｃ．（Ｓａｎ  Ｊｏｓｅ，Ｃａｌｉｆｏｒｎｉａ）により製造されたモデルＡＢＰ−９４０ＳＣＳＩコントローラ等の従来の「ターゲットモードが可能な」ＳＣＳＩコントローラカードであり、ＰＣＩバスを用いてＣＰＵ１２５に接続される。ここで、「ターゲットモードが可能な」とは、イニシエータモードで動作しているＳＣＳＩコントローラからデータを受信するためにターゲットモードで動作するように適応させることが可能なことを意味している。中央制御モジュール１１０と分配モジュール１２０とのインターフェイスをとるために従来のＳＣＳＩコントローラカードを使用することにより、中央制御モジュール１１０が従来のディスクドライブに対して書込みを行っている際に、その中央制御モジュール１１０が分配モジュール１２０にデータを書き込むことが可能になり、これにより、システムのコスト及び複雑さが低減され、システムの信頼性が向上する。
【００３１】
ビデオプロセッサ１２１は、ＣＰＵ１２５の制御の下でメモリバッファ１２６から（ビデオストリームを形成する）ビデオデータを受信し、次いで、クライアント１０１に分配するために各ビデオストリームを処理する。一好適実施例では、ビデオプロセッサ１２１は、Ｚｏｒａｎ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓａｎｔａ  Ｃｌａｒａ，  Ｃａｌｉｆｏｒｎｉａ）により製造された従来のＭＰＥＧ−１デコーダやＭａｔｒｏｘ  Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍｓ，  ＬＴＤ（Ｃａｎａｄａ）により製造された従来のＭＰＥＧ−２デコーダ等の従来のモーションピクチャエキスパートグループ（ＭＰＥＧ）デコーダである。ＭＰＥＧ−１デコーダ又はＭＰＥＧ−２デコーダの選択は、記憶モジュール１３０に記憶されるビデオデータの圧縮に使用される圧縮技術によって決定される。
【００３２】
本発明の一好適実施例は、分配モジュール１２０に１２個のビデオプロセッサ１２１を有している。好適には、各ビデオプロセッサ１２１が、それぞれ１つのビデオストリームについて動作する。更に、該好適実施例では、各ビデオプロセッサ１２１の出力は、ＮＴＳＣ規格及びＰＡＬ規格の何れにも互換性を有する（クライアント１０１の）ビデオモニタに直接接続するためのＮＴＳＣ／ＰＡＬ複合信号である。
【００３３】
別の実施例では、ビデオプロセッサ１２１はＭＰＥＧ解凍は行わないが、その代わりに他の種類の解凍を行う。更に別の実施例では、ビデオプロセッサ１２１は、イーサネット、ＡＴＭ、ＰＳＴＮネットワーク等のネットワークとのインターフェイスをとるように、又は別のクライアント分配手段とのインターフェイスをとるように、ビデオストリームの処理を行う。これらの実施例において、もし必要であれば、ビデオ解凍は、クライアントのロケーションにおいて分配モジュール１２０上で、又はビデオストリーム経路に沿った別のポイントで行われる。
【００３４】
中央制御モジュール１１０は、ＳＣＳＩバス１４１により記憶モジュール１３０と接続される。同様に、中央制御モジュール１１０は、ＳＣＳＩバス１４２により各分配モジュール１２０と接続される。該ＳＣＳＩ通信は、中央制御モジュール１１０に配設されたイニシエータ１１１，１１３、並びに記憶モジュール１３０及び分配モジュール１２０の一部をなす対応するＳＣＳＩコントローラ（分配モジュール１２０ではターゲット１２４、記憶モジュール１３０ではＳＣＳＩ回路（図示せず））によって操作される。記憶モジュール１３０及び分配モジュール１２０上のＳＣＳＩコントローラは、「ターゲット」モードで動作する。分配モジュール１２０のＳＣＳＩインターフェイスは、コスト効率の良いインターフェイス機構であり、これにより、各中央制御モジュール１１０が、あたかもハードディスクドライブ又はその他の従来のＳＣＳＩ互換装置にデータを書き込んでいるかのように分配モジュール１２０にデータを分配することが可能になる。
【００３５】
本好適実施例では、記憶モジュール１３０との通信を行うために単一のイニシエータ１１３を使用したが、別の実施例では、ＶＯＤシステム１００において一層多数の記憶モジュール１３０が使用される場合のインターフェイス要件を満たすように、複数のイニシエータ１１３を用いることが可能である。同様に、本好適実施例では、分配モジュール１２０との通信を行うために単一のイニシエータ１１１を使用したが、別の実施例では、ＶＯＤシステム１００において一層多数の分配モジュール１２０が使用される場合のインターフェイス要件を満たすように複数のイニシエータ１１１を用いることが可能である。
【００３６】
本好適実施例では単一の中央制御モジュール１１０を使用したが、本発明の原理は、多数の中央制御モジュール１１０を備えたＶＯＤシステム１００にも適用することができる。ビデオサーバ１０５中に多数の中央制御モジュール１１０を配設することにより、冗長動作を行うようにＶＯＤシステム１００を構成することが可能となり、これにより、システムの信頼性及び故障に対する許容性が改善される。更に、多数の中央制御モジュール１１０を備えた構成はシステムの帯域幅を増大させるものとなり、これにより、ＶＯＤシステム１００によって生成される最大ビデオストリーム数が増大する。
【００３７】
好適なシステム構成の１つは、９個の分配モジュール１２０のサービスを行う単一の中央制御モジュール１１０を備えたものとなり、この場合、各分配モジュール１２０は、１２個のビデオプロセッサ１２１を有している。従って、この好適な構成は、最大１０８のビデオストリームを同時に生成するものとなる。別の構成では、１２個ではなく８個のビデオプロセッサ１２１を用いており、従って、最大９６のビデオストリームを分配する。
【００３８】
各中央制御モジュール１１０は、１つ又は２つ以上のクライアント１０１からのビデオ制御コマンドを受信して処理する。このビデオ制御コマンドには、例えば、再生、記憶、一時停止、早送り、巻戻し、ビデオ選択等が含まれる。より詳細に言えば、中央制御モジュール１１０上のＣＰＵ１１２は、受信したビデオ制御コマンドをデコードし、そのデコードされたコマンドを実行するために記憶モジュール１３０及び分配モジュール１２０を制御する。中央制御モジュール１１０は、メモリバッファ１１４に対して出入りするビデオデータの非同期の伝送の管理及びスケジューリング等の機能を行う。
【００３９】
従来、ビデオサーバシステム（即ち、ビデオオンデマンドシステム）は、２つのカテゴリー、即ち、ストリーミングシステム及び非ストリーミングシステムのうちの１つに含まれる。ストリーミングシステムは、再生要求に応じて明らかに連続するビデオストリームを分配し、これは、再生を変更する（即ち、一時停止や停止等）ための別のユーザコマンドが受信されるまで、またはファイルの終わりに達するまで行われる。また、非ストリーミングシステムでは、ビデオサーバは、進行中のビデオストリームを分配することはなく、その代わりにクライアントの要求に応じてビデオチャンク又はビデオセグメントを分配する。好適には、クライアント１０１からの要求は、ユーザのための明らかに連続する「リアルタイムの」ビデオストリームを生成するように十分頻繁に発生するものであり十分に迅速なものでなければならない。ＶＯＤシステムの好適実施態様は、ストリーミングタイプのビデオサーバである。ストリーミングタイプのビデオサーバは、非ストリーミングタイプのビデオサーバと比べてクライアント１０１とビデオサーバ１０５との間で必要となる対話が少ないという利点を有するものである。従って、ストリーミングタイプのビデオサーバは、エラーの生じる傾向が低く、多数のチャネルに適応することができ、及びクライアント１０１で必要とする複雑性が低いものとなる。
【００４０】
ＶＯＤシステム１００は、多数のバッファ機構を使用してリアルタイムのビデオストリームを分配する。ＣＰＵ１１２の制御下で、データが記憶モジュール１３０からメモリバッファ１１４へ（好適には１２８ｋｂｙｔｅのチャンクで）伝送される。このデータが次いで、やはりＣＰＵ１１２の制御下で一層小さなチャンク（好適には３２ｋｂｙｔｅ）で分配モジュール１２０のメモリバッファ１２６へと伝送される。ここで、ＣＰＵ１２５の制御下でデータが一層小さなチャンク（好適には３２ｋｂｙｔｅ）で各ビデオプロセッサ１２１へ伝送される。各ビデオプロセッサ１２１は、３２ｋｂｙｔｅのデータチャンクを処理して、クライアントロケーションに分配するためのビデオストリームを生成する。
【００４１】
好適には、記憶モジュール１３０と中央制御モジュール１１０との間、及び中央制御モジュール１１０と分配モジュール１２０との間のデータ伝送は、高速のメモリ伝送を得るために、及び該伝送中におけるＣＰＵを用いた動作を回避するために、ダイレクトメモリアクセス（ＤＭＡ）伝送モードを用いて実行される。
【００４２】
好適には、分配モジュール１２０は、ターゲットモードで（ターゲットモードでＳＣＳＩインターフェイスを使用して）中央制御モジュール１１０とのインターフェイスをとるので、ビデオデータ及びそれに伴う制御コマンドがアドレススキームを用いて分配モジュール１２０に送られる。各ビデオストリームは、分配モジュール１２０上の指定されたアドレス範囲に割り当てられる。従って、中央制御モジュール１１０が特定のビデオストリームについてビデオデータの書き込みを行っている場合には、特定のデータストリームを固有に指定するために分配モジュール１２０上の宛先アドレスが使用される。同様に、各ビデオストリームに関する進行、エンコード終了、及び一時停止等の制御情報は、特定のビデオストリームに対して各々マッピングされた特定の事前指定されたアドレスに書き込まれる。各々のビデオストリーム及びそれに関連する制御情報のアドレスマッピングは、予め規定される。代替的には、各ビデオストリームのデータと各ビデオストリームに関する制御情報とのマッピングを行うアドレスマップが、システムのスタートアップ中に分配モジュール１２０から受信され、次いで中央制御モジュール１１０で記憶される。
【００４３】
図２は、本発明による中央制御モジュール１１０を示すブロック図である。複数のクライアント１０１から受信される制御コマンドのサービスを行うために、中央制御モジュール１１０は、ＣＰＵ１１２に接続されたＤＲＡＭ２３２に記憶されているプログラムコード２３１を使用してマルチタスク処理を行う。ＤＲＡＭ２３２はまた、メモリバッファ１１４（図１にも示されている）を形成する。ＤＲＡＭ２３２は、中央制御モジュール１１０に含まれる従来のコンピュータ用マザーボード上に配設されたメモリ拡張スロットに取り付けられたＤＲＡＭである。プログラムコード２３１は、ＣＰＵ１１２によって実行されるマルチプロセシングスレッド２１０〜２０５を含んでいる。マルチプロセシングスレッド２１０〜２０５は、リモートプロシージャコール（ＲＰＣ）スレッド２０２、コールバックスレッド２０３、ストリームスレッド２０４、記憶スレッド２０１、及びファイルスレッド２０５を備えている。各スレッドは、ＣＰＵ１１２により実行されるコンピュータプログラムを介したアクティブパスである。
【００４４】
図２において、中央制御モジュール１１０はまた、該中央制御モジュール１１０に固有のシステムハードディスク２３５を備えている。該システムハードディスク２３５は、ＤＲＡＭ２３２にロードするためのプログラムコード２３１を記憶する。該システムハードディスク２３５は、更に、サーバコンフィギュレーションファイル２３７、及びビデオカタログサブディレクトリ２３６を記憶する。
【００４５】
図３は、マルチプロセシングスレッド２０１〜２０５間の関係を示す状態図である。マルチプロセシングスレッド２０１〜２０５は、クライアント１０１により要求された際に多数のビデオストリームを再生し及び様々な制御コマンド（即ち、一時停止、停止、巻戻し等）を実行するために、（クライアント１０１上で実行される）クライアントプログラム２０６により生成されるファンクションコールを受信して処理する。
【００４６】
リモートプロシージャコール（ＲＰＣ）スレッド２０２は、クライアントプログラム２０６に対してアプリケーションプログラムインターフェイス（ＡＰＩ）を提供し、よって、クライアントプログラム２０６から受ける制御入力（ファンクションコール）の受信を操作する。中央制御モジュール１１０は、ビデオサーバ１０５とクライアント１０１との間のインターフェイスを管理するために、単一のＲＰＣスレッド２０２を生成（実行）する。
【００４７】
中央制御モジュール１１０は、各出力ビデオストリーム毎にストリームスレッド２０４を（ＣＰＵ１１２上で）生成し実行する。各ストリームスレッド２０４は、１つのビデオストリームの再生を管理する。
【００４８】
コールバックスレッド２０３は、ＣＰＵ１１２によって実行され、ストリームスレッド２０４により生成されるメッセージを操作する。該メッセージは、「ファイルの終わり」またはエラー状態が生じた結果として生成されるものである。
【００４９】
ファイルスレッド２０５は、ＣＰＵ１１２によって実行され、ビデオオブジェクトの作成、削除、書き込み、及び読み出しを含むファイル管理を操作する。中央制御モジュール１１０は、多数のファイルスレッド２０５を有している。
【００５０】
各記憶装置１３１は、１つ又は２つ以上の記憶スレッド２０１によって管理される。記憶スレッド２０１は、ストリームスレッド２０４、ファイルスレッド２０５、及びＲＰＣスレッド２０２からのメッセージ要求を受信し、次いで適当なディスクアクセス機能及びデータ取り出し機能を行うことにより、そのメッセージ要求のサービスを行う。所与の記憶装置１３１を管理する記憶スレッド２０１の数は、サーバコンフィギュレーションファイル２３７で指定される。好適には、２つの記憶スレッド２０１が各記憶装置１３１を管理する。
【００５１】
ここで、図２を再び参照する。各記憶装置１３１は、関連するメッセージ待ち行列２３３をそれぞれ１つずつ有している。該メッセージ待ち行列２３３は、ディスク入出力要求メッセージを記憶するためのファーストインファーストアウト（ＦＩＦＯ）メッセージパイプ（待ち行列）である。ストリームスレッド２０４は、特定の記憶装置１３１からのビデオデータの読み出しを必要とする場合に、（ディスク入出力を要求する）（ディスクアクセス）メッセージを、適当な記憶装置１３１に対応するメッセージ待ち行列２３３に送る。各メッセージは、該メッセージを生成したストリームスレッド２０４により算出されたデッドラインフィールドを含んでいる。
【００５２】
図４は、記憶装置へのアクセス時に使用されるデータ構造及びプログラムモジュール２３２を示すフローチャートである。プログラムコード２３２は、１組のリンクリスト（ｌｉｎｋｅｄ  ｌｉｓｔ）データ構造２４２を含んでいる。該リンクリストデータ構造２４２は、自由リスト２４０及び要求リスト２４１を有している。１つの自由リスト２４０及び１つの要求リスト２４１が各記憶装置１３１毎に作成される。自由リスト２４０は、自由メッセージ記憶要素の未ソートのリンクリストであり、要求リスト２４１は、各メッセージに関するデッドラインフィールドに従ってソートされたメッセージのリンクリストである。各記憶スレッド２０１は、最初に自由リスト２４０から記憶要素を取り出すことにより、メッセージの処理を行う。記憶スレッド２０１は、次にメッセージ待ち行列２３３からメッセージを取り出し、その取り出したメッセージを記憶要素に記憶させる。記憶スレッド２０１は次いでそのメッセージを、それに関するデッドラインフィールドに従って要求リスト２４１中にリンクさせる。
【００５３】
図５は、本発明による要求リスト２４１を示す説明図である。要求リスト２４１は、その要求リスト２４１の前端がゼロのデッドラインのメッセージ２４４を有するように構成されたメッセージ２４４のリンクリストである。ゼロのデッドラインのメッセージ２４４の後に非ゼロのデッドラインのメッセージ２４４が記憶され、この非ゼロのデッドラインのメッセージ２４４が緊急時に伝わり、緊急性の最も低い非ゼロのデッドラインのメッセージ２４４が要求リスト２４１の後端で共有されるようになる。
【００５４】
要求リスト２４１及び自由リスト２４０は共に相互排他ロック２４３を有しており、これにより、要求リスト２４１及び自由リスト２４０へのアクセスが連続的なものとなる。相互排他ロック２４３は、オペレーティングシステムにより提供される従来のロック機構である。
【００５５】
処理スレッドの説明
ここで再び図３を参照する。中央制御モジュール１１０は、ＲＰＣスレッド２０２がクライアントプログラム２０６からＳｔｒｅａｍＯｐｅｎ（）コールを受信するまでアイドル状態となる。ＳｔｒｅａｍＯｐｅｎ（）コールは、再生用の新たなビデオストリームをオープンするための要求である。ＲＰＣスレッド２０２は、ＳｔｒｅａｍＯｐｅｎ（）コールを受信すると、ストリームスレッド２０４にＳｔｒｅａｍＯｐｅｎメッセージを送る。次いで、ストリームスレッド２０４は、オープンされたビデオストリームの再生を操作する。
【００５６】
ＳｔｒｅａｍＯｐｅｎメッセージを操作する際に、ストリームスレッド２０４は、再生すべきビデオオブジェクトの最初の３つのデータブロックを記憶する記憶装置１３１に対応する３つの記憶スレッドのメッセージ待ち行列２３３の各々にＲｅａｄＢｌｏｃｋメッセージを送る。好適実施例では、３つのメモリバッファ１１４が各再生ストリーム用にリザーブされ、従って、ＳｔｒｅａｍＯｐｅｎメッセージのサービスを行うことによって、新たにオープンされた再生ストリームに関連するメモリバッファ１１４が満たされることになる。
【００５７】
各記憶スレッド２０１は、そのメッセージ待ち行列２３３からＲｅａｄＢｌｏｃｋメッセージを非同期で取り出し、そのメッセージを処理用に優先順位付けする。最終的に処理されると、記憶スレッド２０１は、要求されたデータブロック（好適なブロックサイズは１２８ｂｙｔｅ）を特定のディスクから読み出して、割り当てられたメモリバッファ１１４に該データブロックを書き込むことにより、ＲｅａｄＢｌｏｃｋメッセージを処理する。ＲｅａｄＢｌｏｃｋメッセージのサービスを行った後、記憶スレッド２０１は、前記ＲｅａｄＢｌｏｃｋメッセージを発したストリームスレッド２０４にＲＥＡＤ−ＲＥＳＰメッセージを送る。
【００５８】
次いで、記憶スレッド２０１は、そのメッセージ待ち行列２３３における次に最も時間的に決定的な（時間クリティカル）メッセージを処理する。しかしながら、そのメッセージ待ち行列２３３が空である場合には、記憶スレッド２０１は、そのメッセージ待ち行列２３３にメッセージが送られてくるまでアイドル状態となる。
【００５９】
図６は、図３に示したストリームスレッド２０４の状態図である。ストリームスレッド２０４は、ＳｔｒｅａｍＯｐｅｎメッセージを受信するまでＩＤＬＥ状態３０７となる。
【００６０】
メッセージ待ち行列にＲｅａｄＢｌｏｃｋメッセージを送った後、ストリームスレッド２０４は、ＰＲＩＭＩＮＧ状態３０１に移行する。ストリームスレッド２０４は、ＰＲＩＭＩＮＧ状態３０１にあるとき、ＲｅａｄＢｌｏｃｋメッセージが送られた各記憶スレッド２０１からＲＥＡＤ−ＲＥＳＰメッセージを受信するまで待機する。記憶スレッド２０１により送られたＲＥＡＤ−ＲＥＳＰメッセージは、記憶スレッド２０１がＲｅａｄＢｌｏｃｋ要求を処理したことを示すものである。ＲＥＡＤ−ＲＥＳＰメッセージが受信されると、ストリームスレッド２０４はＰＲＩＭＥＤ状態３０２に移行する。
【００６１】
ここで再び図３を参照する。ＲＰＣスレッド２０２は、クライアントプログラム２０６からＳｔｒｅａｍＰｌａｙ（）コールを非同期で受信する。次いで、ＲＰＣスレッド２０２は、ＳｔｒｅａｍＰｌａｙメッセージをストリームスレッド２０４に送る。次いで、ストリームスレッド２０４は、該ストリームの再生を操作する。
【００６２】
ここで再び図６を参照する。ストリームスレッド２０４がＰＲＩＭＥＤ状態３０２にあるとき、該ストリームスレッド２０４は、ＲＰＣスレッド２０２からＳｔｒｅａｍＰｌａｙメッセージが受信されるまで待機する。ストリームスレッド２０４は、好適には以下で説明するスケジューリングプロトコルに従って、該ストリーム用の開始時間帯を選択することにより、ＳｔｒｅａｍＰｌａｙメッセージを操作する。開始時間帯の選択後、メモリバッファ１１４からビデオデータの第１のサブブロック（３２ｋｂｙｔｅ）を取り出し、宛先出力ポートを含む分配モジュール１２０に該サブブロックを送ることにより、再生が開始される。サブブロックの送信後、ストリームスレッド２０４は、ＰＬＡＹＷＡＩＴ状態３０３に移行する。
【００６３】
ＰＬＡＹＷＡＩＴ状態３０３にあるとき、ストリームスレッド２０４は、ＲＰＣスレッド２０２又は記憶スレッド２０１の何れかから新たなメッセージが到着したか否かを判定し、受信したメッセージを処理する。受信する可能性のあるメッセージとしては、ＳｔｒｅａｍＰａｕｓｅメッセージ、ＳｔｒｅａｍＪｕｍｐメッセージ、及びＲＥＡＤ−ＲＥＳＰメッセージが挙げられる。各々のメッセージは次のように操作される。
【００６４】
（ｉ）ＳｔｒｅａｍＰａｕｓｅメッセージがＲＰＣスレッド２０２から送られた場合、ストリームスレッド２０４は、ＰＡＵＳＥＤ状態３０４に移行する。
【００６５】
（ｉｉ）ＳｔｒｅａｍＪｕｍｐメッセージがＲＰＣスレッド２０２から送られた場合、ストリームスレッド２０４は、まだ分配モジュール１２０に送られていないメモリバッファ１１４中のデータブロックを破棄する。次に、新たな位置へのジャンプによって取り出されたビデオデータ（データブロック）を記憶するために、ストリームスレッド２０４による使用のために割り当てられていなかったメモリバッファ１１４が記憶スレッド２０１による使用のために割り当てられる。ＳｔｒｅａｍＪｕｍｐメッセージの処理後、ストリームスレッド２０４は、ＰＬＡＹＷＡＩＴ状態３０３でループして次のメッセージの受信を待つ。
【００６６】
（ｉｉｉ）ＲＥＡＤ−ＲＥＳＰメッセージが記憶スレッド２０１から送られた場合、及び、ＲｅａｄＢｌｏｃｋメッセージがエラーを伴うことなく操作されたことをＲＥＡＤ−ＲＥＳＰメッセージが示す場合には、ストリームスレッド２０４は、対応するメモリバッファ１１４をレディ状態にマークし、次いでＰＬＡＹＷＡＩＴ状態３０３でループする。
【００６７】
（ｉｖ）  ＲＥＡＤ−ＲＥＳＰメッセージが記憶スレッド２０１から送られた場合、及び、ＲｅａｄＢｌｏｃｋメッセージがエラーに遭遇したことをＲＥＡＤ−ＲＥＳＰメッセージが示す場合には、ストリームスレッド２０４は、コールバックスレッド２０３にＥｒｒｏｒＰｌａｙＤｏｎｅメッセージを送り、ＡＢＥＮＤ状態３０５に移行する。次いで、コールバックスレッド２０３は、ＥｒｒｏｒＰｌａｙＤｏｎｅメッセージの受信時に、ビデオコマンドを発したクライアントプログラム２０６にコールバックを行って、ビデオストリーム中でエラーに遭遇したことをクライアントプログラム２０６に知らせる。
【００６８】
ＰＬＡＹＷＡＩＴ状態３０３では、ストリームスレッド２０４は、等時性のビデオストリームを維持するためにタイマによって更に制御される。「等時性」とは、非破裂性又は「ほぼ一定速度」を意味するものである。等時性のビデオストリームを維持するために、各々が３２ｋｂｙｔｅのデータサブブロックが所定時間内に分配モジュール１２０に送られる。各々のデータサブブロックを分配モジュール１２０に送る際に、ストリームスレッド２０４は、該データサブブロックがメモリバッファ１１４中の最後のサブブロックであったか否かを判定する。該データサブブロックが最後のサブブロックであった場合には、ストリームスレッド２０４は、メモリバッファ１１４を「利用可能」とマークし、記憶装置１３１からの更なるビデオデータ（１２８ｋｂｙｔｅのデータブロック）の取り出しを開始させるために適当な記憶スレッド２０１にＲｅａｄＢｌｏｃｋメッセージを送る。ストリームスレッド２０４は更に、ビデオファイルの終わりに達したか否かを判定する。ビデオファイルの終わりに遭遇した場合には、ストリームスレッド２０４は、コールバックスレッド２０３にＮｏｒｍａｌＰｌａｙＤｏｎｅメッセージを送り、ＤＯＮＥ状態３０６に移行する。次いで、コールバックスレッド２０３は、ビデオコマンドを発したクライアントプログラム２０６にコールバックを送って、ビデオストリームが正常終了したことをクライアントプログラム２０６に知らせる。しかしながら、ビデオファイルの終わりに達していなかった場合には、ストリームスレッド２０４は、ＰＬＡＹＷＡＩＴ状態３０３でループする。
【００６９】
ＤＯＮＥ状態３０６にあるとき、ストリームスレッド２０４は、ＲＰＣスレッド２０２から受信したメッセージを処理する。（クライアントプログラム２０６からＳｔｒｅａｍＪｕｍｐ（）コールを受信した結果として）ＲＰＣスレッド２０２からＳｔｒｅａｍＪｕｍｐメッセージが送られた場合には、ストリームスレッド２０４は、記憶されているビデオファイル上の新たなジャンプ先位置からビデオデータを取り出すために、メモリバッファ１１４のアドレスを記憶スレッド２０１に送る。メモリバッファ１１４のアドレスの送信後、ストリームスレッド２０４はＰＲＩＭＩＮＧ状態３０１に移行する。（クライアントプログラム２０６からのＳｔｒｅａｍＣｌｏｓｅ（）コールの結果として）ＲＰＣスレッド２０２によりＳｔｒｅａｍＣｌｏｓｅメッセージが送られた場合には、ストリームスレッド２０４は、該ストリームに関連する分配モジュール１２０にストリームの再生のクローズを知らせるコマンドを送出する。次いでストリームスレッド２０４はＩＤＬＥ状態３０７に移行する。
【００７０】
ＰＡＵＳＥＤ状態３０４にあるとき、ストリームスレッド２０４は、ＲＰＣスレッド２０２により送られたメッセージを処理する。（クライアントプログラム２０６により送られたＳｔｒｅａｍＪｕｍｐ（）コールの結果として）ＲＰＣスレッド２０２からＳｔｒｅａｍＪｕｍｐメッセージが送られた場合には、ストリームスレッド２０４は、メモリバッファ１１４中のあやゆるデータを破棄し、ビデオファイル中の新たなジャンプ先位置で始まるビデオデータを取り出すために、その解放されたメモリ空間を対応する記憶スレッド２０１に割り当てる。ストリームスレッド２０４は、次いでＰＲＩＭＩＮＧ状態３０１に移行する。
【００７１】
（クライアントプログラム２０６からのＳｔｒｅａｍＣｌｏｓｅ（）コールの結果として）ＲＰＣスレッド２０２からＳｔｒｅａｍＣｌｏｓｅメッセージが送られた場合には、ストリームスレッド２０４は、該ストリームに関連する分配モジュール１２０にストリームの再生のクローズを知らせる。次いでストリームスレッド２０４はＩＤＬＥ状態３０７に移行する。
【００７２】
（クライアントプログラム２０６からのＳｔｒｅａｍＰｌａｙ（）コールの結果として）ＲＰＣスレッド２０２からＳｔｒｅａｍＰｌａｙメッセージが送られた場合には、ストリームスレッド２０４は、当該ビデオストリームに関する開始時間スロットを選択し、該開始時間スロットに達した後、ビデオディスクの３２ｋｂｙｔｅのカレントブロックを、（中央制御モジュール１１０上の）メモリバッファ１１４から、該ビデオストリームのための宛先ポートを含む分配モジュール１２０に送る。ストリームスレッド２０４は、次いでＰＬＡＹＷＡＩＴ状態３０３に移行する。
【００７３】
ＡＢＥＮＤ状態３０５にあるとき、ストリームスレッド２０４は、ＲＰＣスレッドからのＳｔｒｅａｍＣｌｏｓｅメッセージを処理する。（クライアントプログラム２０６からのＳｔｒｅａｍＣｌｏｓｅ（）コールの結果として）ＲＰＣスレッド２０２からＳｔｒｅａｍＣｌｏｓｅメッセージが送られた場合には、ストリームスレッド２０４は、ストリームの再生がクローズされたことを該ストリームに関連する分配モジュール１２０に知らせる。ストリームスレッド２０４は次いでＩＤＬＥ状態３０７に移行する。
【００７４】
ストリームスレッドによるメッセージ要求の優先順位付け
ＶＯＤシステム１００は、優先順位スキームを用いて、多数のストリームスレッド２０４から各記憶スレッド２０１に送られるディスク入出力要求を要求するメッセージの操作のスケジューリングを行う。該優先順位スキームは、好適には、要求を行っている全てのストリームスレッド２０４がそれぞれのビデオストリームの連続的な再生を維持することができるように全てのメッセージを確実に完了させる（操作する）ものとなる。
【００７５】
該優先順位スキームによれば、各メッセージはそれに関するデッドラインフィールドを有している。ストリームスレッド２０４が、中央制御モジュール１１０のバッファを満たすために、ディスク入出力を要求するメッセージ（ＲｅａｄＢｌｏｃｋメッセージ）を記憶スレッド２０１に送ると、ストリームスレッド２０４は、該メッセージについてのデッドラインを計算し、その該デッドラインを該メッセージと共に記憶スレッド２０１に送る。該デッドラインは、ストリームスレッド２０４の現在の状態によって決まる。該デッドラインは、０から最大値までの整数である。デッドラインを有さないメッセージには「ゼロ」のデッドライン値が与えられ、デッドラインを有するメッセージにはその緊急性に対応したデッドライン値が割り当てられ、この場合、大きなデッドライン値を有するメッセージほど緊急性が低く、小さなデッドライン値を有するメッセージほど緊急性が高いものである。
【００７６】
通常の再生時、即ち、ＰＬＡＹＷＡＩＴ状態３０３にある場合には、デッドラインの計算は、ストリームスレッド２０４による分配モジュール１２０に対するもっとも最近のデータ書き込みに関する開始時間に、ストリームに関する全てのメモリバッファ１１４中のデータ消費時間（即ち、ビデオデータの再生に要する時間）を加えることにより行われる。好適には、該データ消費時間は、各メモリバッファ１１４のサイズに、ビデオストリームに関するメモリバッファ１１４の数を乗算し、次いでその積を出力データ速度で除算すること（即ち、バッファサイズ×バッファ数÷データ速度）により算出される。
【００７７】
ストリームの再生が開始する前のバッファの初期プライミング時に（即ち、ＰＲＩＭＩＮＧ状態３０１にある際に）及びＰＲＩＭＥＤ状態３０２にある際に、デッドラインがゼロにセットされる。この「ゼロ」は、メッセージが絶対的なデッドラインを有さないこと、及び、かかるサービスによりメッセージ待ち行列２３３中の他のメッセージがそれらのデッドラインを逸さないこととなる場合に該メッセージがサービスされるべきであることを示すものである。
【００７８】
ストリームスレッド２０４がＰＡＵＳＥＤ状態３０４にあり、該ストリームスレッド２０４によりＳｔｒｅａｍＪｕｍｐ（）メッセージが受信された場合、ストリームスレッド２０４は、該ストリームスレッド２０４に関するメモリバッファ１１４中のデータを破棄する。次いでストリームスレッド２０４は、記憶されているビデオオブジェクト中の新たな（ジャンプ先）位置から取り出されたデータで満たすためにメモリバッファ１１４のアドレスを適当な記憶スレッド２０１に送る。ＳｔｒｅａｍＪｕｍｐ（）メッセージに関するデッドラインは、該メッセージが絶対的なデッドラインを有さないこと、及び、かかるサービスによりメッセージ待ち行列２３３中の他のメッセージがそれらのデッドラインを逸さないこととなる場合に該メッセージがサービスされるべきであることを示す「ゼロ」である。
【００７９】
ストリームスレッド２０４が通常再生モードにある際、即ち、ＰＬＹＷＡＩＴ状態３０３にある際に、該ストリームスレッド２０４によってＳｔｒｅａｍＪｕｍｐ（）メッセージが受信された場合、該ストリームスレッド２０４は、該ストリームスレッド２０４に関連すると共に現在の時間に記憶スレッド２０１の応答時間を加算したものよりも遅いデッドラインを有するデータを有するメモリバッファ１１４中のデータを破棄する。次いでストリームスレッド２０４は、新たなビデオ位置（即ち、ビデオファイル中のジャンプ先位置）から取り出されたデータで満たすと共に以前に記憶されていたデータに関連していたデッドラインと同一のデッドラインを維持するために、データが破棄された該メモリバッファ１１４のアドレスを適当な記憶スレッド２０１に送る。
【００８０】
記憶スレッドの処理
記憶スレッド２０１は、中央制御モジュール１１０のスタートアップ時に作成され、記憶装置１３１に対するアクセスを管理する。ここで再び図４を参照する。各記憶装置１３１に対するアクセスは、各記憶装置１３１に関連するリンクリスト（要求リスト２４１及び自由リスト２４０）によって制御される。各記憶装置１３１を管理する記憶スレッド２０１の数は、コンフィギュレーションファイル２３７を読み出すことにより決定される。各記憶装置１３１毎に１つ以上の記憶スレッド２０１が作成される場合には、要求リスト２４１及び自由リスト２４０とアクセスするためにロック機構（ｍｕｔｅｘ  ｌｏｃｋ２４３）が用いられる。
【００８１】
図７は、各記憶スレッド２０１により行われるメッセージ待ち行列処理４００を示すフローチャートである。記憶スレッド２０１は、記憶装置１３１に関連する２つ以上の記憶スレッド２０１が存在するか否かを判定することにより処理を開始する。記憶装置１３１に関連する２つ以上の記憶スレッド２０１が存在する場合には、現在の記憶スレッド２０１が、記憶装置１３１に関連するｍｕｔｅｘ  ｌｏｃｋ２４３を得て、リンクリスト２４２（要求リスト２４１及び自由リスト２４０）をロックする（ステップ４０１）。
【００８２】
ｍｕｔｅｘ  ｌｏｃｋ２４３が固定されると（及びリンクリスト２４２がロックされると）、記憶スレッド２０１がメッセージを処理する。記憶スレッド２０１は、次に自由リスト２４０からメッセージ記憶要素をリムーブする（アンリンクする）。次いで、記憶スレッド２０１は、取り出されたメッセージをアンリンクされたメッセージ記憶要素に記憶させ（ステップ４０３）、該メッセージをそれに関連するデッドラインに従って要求リスト２４１に挿入する（ステップ４０４）。詳細には、挿入されるメッセージ（新たなメッセージ）が非ゼロのデッドラインを有している場合には、記憶スレッド２０１は、要求リスト２４１のサーチをその後端から開始し（即ち、該後端が最も緊急性の低い非ゼロのデッドラインを有している）、新たなメッセージを、該新たなメッセージよりも早いデッドラインを有する最初のメッセージの直後で要求リスト２４１に挿入する。要求リスト２４１中のメッセージで該新たなメッセージよりも早いデッドラインを有するものが１つも存在しない場合には、該新たなメッセージは要求リスト２４１の最初に挿入される。
【００８３】
しかしながら、新たなメッセージがゼロのデッドラインを有している場合には、記憶スレッド２０１は、要求リスト２４１のサーチをその前端から開始し（即ち、該前端が最も緊急性の高いデッドラインを有している）、新たなメッセージを、非ゼロのデッドラインを有する最初のメッセージの直前で要求リスト２４１に挿入する。要求リスト２４１中のメッセージで非ゼロのデッドラインを有するものが１つも存在しない場合には、該新たなメッセージは要求リスト２４１の最後に挿入される。新たなメッセージが要求リスト２４１に挿入された後、記憶スレッド２０１は、次いでｍｕｔｅｘ  ｌｏｃｋ２４３を解放してリンクリスト２４２をアンロックする（ステップ４０５）。記憶スレッド２０１は、メッセージ待ち行列２４３が空になるまでメッセージ待ち行列処理４００を繰り返す。次いで、記憶スレッド２０１は、要求リスト２４１中の優先順位付けされたメッセージの処理へと進む。
【００８４】
図８は、要求リスト２４１中の優先順位付けされたメッセージの記憶スレッド２０１による処理５００を示すフローチャートである。
【００８５】
記憶装置１３１に対して２つ以上の記憶スレッド２０１が存在する場合、現在の記憶スレッド２０１は、該記憶装置１３１に関連するｍｕｔｅｘ  ｌｏｃｋ２４３を得て、リンクリストデータ構造２４２（自由リスト２４０及び要求リスト２４１）をロックする（ステップ５０１）。
【００８６】
該データ構造をロックした後、記憶スレッド２０１が、非ゼロのデッドラインのメッセージにそれらのデッドラインを逸させることなく要求リスト２４１中のゼロのデッドラインのメッセージをサービスするだけの十分な時間があるか否かを判定する。記憶スレッド２０１は、要求リスト２４１中の非ゼロのデッドラインのメッセージの操作についての最も最近の開始時間を計算する（ステップ５０３）ことによりこの決定を行う。該最も最近の開始時間は、緊急性の最も低い非ゼロのデッドラインを有する要求リスト２４１の終わりから開始して、各メッセージ毎に、以前のメッセージ及び現在のメッセージに関連する該メッセージのデッドラインについて計算された最も最近の開始時間のうち一層小さいものから、期待されるディスクアクセス（ディスク入出力）時間を減算することで最も最近の開始時間を計算することにより、繰り返し計算される。
【００８７】
最も最近の開始時間を計算する場合、該最も最近の開始時間は、最初に、最も最近の開始時間により表現可能な最大整数値へと初期化される（ステップ５０２）。更に、ディスクアクセス時間は、要求リスト２４１に関連する特定の記憶装置１３１から１つのデータブロック（１２８ｋｂｙｔｅのデータ）を読み出すのに要する時間に相当する。
【００８８】
次に、記憶スレッド２０１は、ステップ５０４の比較を行い、計算された最も最近の開始時間が与えられた場合にゼロのデッドラインのメッセージを操作するのに十分な時間が存在するか否かを判定する。この判定は、現在の時間と、最も最近の開始時間及び特定の記憶装置１３１からの期待されるディスクアクセス時間（１データブロック（１２８ｋｂｙｔｅのデータ）の読み出しに要する時間）の差とを比較することにより行われる（ステップ５０４）。
【００８９】
現在の時間が、最も最近の開始時間及び期待されるディスクアクセス時間の差よりも小さい場合には、ゼロのデッドラインのメッセージを操作すると共に最も最近の開始時間の要件を依然として満たすだけの十分な時間が存在する。従って、かかる場合には、要求リスト２４１中の最初のメッセージが処理のためにリムーブされる（ステップ５０６）。この最初のメッセージは、ゼロのデッドラインのメッセージ又は最も緊急性の高い（即ち最小デッドラインの）メッセージとなる。
【００９０】
しかしながら、現在の時間が、最も最近の開始時間及び期待されるディスクアクセス時間の差よりも大きい場合には、ゼロのデッドラインのメッセージを操作すると共に最も最近の開始時間の要件を依然として満たすだけの十分な時間が存在しない。従って、かかる場合には、要求リスト２４１中の最初の非ゼロのデッドラインのメッセージが処理のためにリムーブされる（ステップ５０５）。
【００９１】
処理のためにメッセージをリムーブした（ステップ５０５又は５０６）後、記憶スレッド２０１は、リンクリストデータ構造２４２をアンロックし（ステップ５０７）、次いで該メッセージを処理する（ステップ５０８）。この処理の後、記憶スレッド２０１は次いでリンクリストデータ構造２４２をロックし（ステップ５０９）、ステップ５０８で処理されたメッセージにより占有されたメッセージ記憶要素を自由リスト２４０に挿入する（ステップ５１０）。この挿入の後、リンクリストデータ構造２４２はアンロックされる（ステップ５１１）。
【００９２】
記憶スレッド処理５００の完了後、記憶スレッド２０１は、記憶スレッド処理５００が開始してからメッセージ待ち行列２３３に書き込まれたメッセージを取り出すために、図７に示したメッセージ待ち行列処理４００へと処理を戻す。
【００９３】
記憶モジュールのデータ構造及びアクセス機構
ＶＯＤシステム１００は、ビデオオブジェクトの記憶を管理するためにハイブリッドファイル管理機構を用いる。該ハイブリッドファイル管理機構は、多数の名称付きビデオオブジェクト（即ちビデオファイル）の管理タスクを簡素化すると共に生（ｒａｗ）ディスクドライブの最大性能の帯域幅を完全に利用するために、中央制御モジュール１１０上で実行されるオペレーティングシステムによって提供されるファイルシステムサービスと生ディスクアクセス法との両方を含むものである。
【００９４】
一般に、ビデオオブジェクト自体のサイズは、該ビデオオブジェクトに関する制御情報（例えば、ビデオ属性、作成日時、及び記憶マップ等）に比べて極めて大きなものである。典型的には、ビデオオブジェクトのサイズはＧｂｙｔｅ、その制御情報のサイズはｋｂｙｔｅ又はそれ未満といったものである。更に、ビデオオブジェクトについての入出力動作の回数はその制御情報についての入出力動作の回数を大きく上回るものである。ＶＯＤシステム１００は、ビデオオブジェクト自体について記憶及びアクセスを行うための生ディスク法を用いる。このため、オペレーティングシステムのファイルシステムに関連する空間上及び性能上のオーバーヘッドを回避する（バイパスする）ことにより、空間的な要件が最小限となり、性能が最適化される。
【００９５】
しかしながら、ＶＯＤシステム１００は、各ビデオオブジェクトに関連する制御情報を記憶するためにオペレーティングシステムのファイルシステムを使用する。かかるファイルシステムを使用することにより、ビデオオブジェクトの名称空間マッピング（ｎａｍｅ  ｓｐａｃｅ  ｍａｐｐｉｎｇ）の管理、ディレクトリ情報の維持、及び制御情報のための記憶空間の動的な割り当て及び割り当て解除を行うという複雑性が排除される。その上、ソフトウェアのテスト、システムのメンテナンス、及び将来のアップグレードに対する備えが簡単になる。同時に、記憶スペース及び性能に関するオーバーヘッドにより生じる不利益が最小限となる。これは、ビデオオブジェクトと比較して制御データの方がサイズが比較的小さく、及び入出力要求の数が比較的少ないことによる。
【００９６】
ここで再び図２を参照する。中央制御モジュール１１０中のシステムディスク２３５は、ビデオカタログサブディレクトリ２３６及びサーバコンフィギュレーションファイル２３７を含んでいる。
【００９７】
ビデオカタログサブディレクトリ２３６はディレクトリ（例えば”／ｓｖｓｄｒｉｖｅ／ｃａｔ”）であり、複数の名称付きファイルを有している。この場合、各々の名称付きファイルは、記憶モジュール１３０に記憶されている同じ名称のビデオオブジェクトに対応するものである。かかる名称付きファイルは、ビデオ属性、再生データ速度、及び同時に発生する最大ユーザ数等の制御情報を含んでいる。
【００９８】
また、サーバコンフィギュレーションファイル２３７（例えば”ｄｒｉｖｅ−ｃｏｎｆｕｇｕｒａｔｉｏｎ”）は、記憶モジュール１３０における記憶装置１３１の記憶上の割り当てに関する情報を含んでいる。かかる情報には、例えば、生装置名称、ストライプセグメントサイズ、及び冗長性に関する情報等が含まれる。サーバコンフィギュレーションファイル２３７は、システムのスタートアップ時に読み出され、ＶＯＤシステム１００を構成するために使用される。
【００９９】
更に、システムディスク２３５は、記憶モジュール１３０における記憶装置１３１の数と同数の多くのマウントポイントを有している。通常の動作中に、各記憶装置１３１３の制御区画が該マウントポイントのうちの１つにマウントされる。
【０１００】
ＶＯＤシステム１００の構成中に、各記憶装置１３１は、２つの区画、即ち制御区画及びデータ区画へとフォーマットされる。
【０１０１】
記憶装置１３１のフォーマット中に、各制御区画にファイルシステムが作成される。各制御区画は、対応するデータ区画についてセグメントの利用可能性を指定する自由スペースビットマップを含んでいる。
【０１０２】
制御区画はまた、多数の名称付きファイルを含んでおり、該名称付きファイルの各々は、ビデオオブジェクトのストライプのスペースマップを１つずつ含んでいる。１つのスペースマップは、１つのビデオストライプに含まれている１２８ｋｂｙｔｅのデータブロックの各々に関するアドレス情報のマッピングを行う。従って、スペースマップは、記憶装置１３１上のビデオストライプの１２８ｋｂｙｔｅのデータブロックの各々の位置を定めるために使用される。一層詳細には、スペースマップは、ビデオオブジェクトのストライプ内の論理ブロック番号を、同じ記憶装置１３１上のデータ区画内の物理セグメント番号に変換する。スペースマップファイルの名称は、対応するビデオオブジェクトの名称にストライプ番号を付加することにより形成される。
【０１０３】
各記憶装置１３１のデータ区画は、生ディスク区画として形成される（即ち、如何なるオペレーションシステム情報も伴わずにディスクがフォーマットされる）。データ区画に対するアクセス及び記憶管理は、完全に中央制御モジュール１１０の制御の下で行われる。より詳細には、記憶スレッド２０１がデータ区画のアクセス及び記憶管理を制御する。
【０１０４】
記憶モジュールにおける記憶装置のフォーマッティング
記憶装置１３１は複数のグループ（ストライプグループと呼ばれる）に編成され、該各グループには番号（ストライプグループ番号と呼ばれる）が１つずつ割り当てられる。１つのビデオオブジェクトが複数のビデオストライプへと分割される際、それらのビデオストライプは特定のストライプグループに割り当てられる。ビデオオブジェクト内の各ビデオストライプは、該割り当てられたストライプグループ内で別個の記憶装置１３１に記憶される。記憶モジュール１３０における各記憶装置１３１は、特にＶＯＤシステム１００のためにフォーマットされる。
【０１０５】
該フォーマット処理の際に、ユーザは、ストライプグループ番号、ストライプ番号、生装置アドレス、ストライプセグメントサイズ、及びフォーマットすべきディスクに関する一次／二次標識等の記憶情報を指定する。ユーザはまた、例えばストライプグループ２及びストライプ４のディスクを”／ｓｖｓｄｒｉｖｅ／Ｇ２／４”とするといった、所望の名称付け上の約束を用いてマウントポイントを作成する。
【０１０６】
次に、”／ｓｖｓｄｒｉｖｅ／ｄｒｉｖｅ−ｃｏｎｆｉｇｕｒａｔｉｏｎ”サーバコンフィギュレーションファイル２３７がオープンされる。サーバコンフィギュレーションファイル２３７が存在しない場合には、新たなサーバコンフィギュレーションファイル２３７が作成される。ユーザにより指定された記憶フォーマット情報は、サーバコンフィギュレーションファイル２３７に対する妥当性の検査が行われる。該妥当性検査の後、新たなドライブ名及び情報がサーバコンフィギュレーションファイル２３７に追加される。
【０１０７】
次に、ディスクが２つの区画にフォーマットされる。区画０（制御区画）は、マウント可能なものとして規定され、該区画０にファイルシステムが作成される。区画１（データ区画）は、マウント不能なものとして規定される。
【０１０８】
次に、区画０が、以前に生成されたマウントポイントにマウントされる。従って、”ｆｒｅｅｓｐａｃｅ．ｍａｐ”等のファイルが、自由スペースビットマップとして区画０に作成される。該ファイルは次いで、区画１における全てのセグメントが利用可能である（未割り当てである）ことを示すよう初期化される（但し、セグメント０を除く）。次いで、区画０がマウント解除される。
【０１０９】
次に、区画１がオープンされて、ストライプグループ番号、ストライプ番号、ストライプ用のマウントポイント、一次／二次フラグ、活動ディスクフラグ、一次ディスクのための生装置名称、及び二次ディスクのための生装置名称等の情報が、セグメント０に書き込まれる。
【０１１０】
セグメント０への書き込み後、区画１及びコンフィギュレーションファイルがクローズされる。
【０１１１】
記憶モジュールのスタートアップ処理
記憶装置１３１のフォーマット後、ＶＯＤシステム１００をスタートアップさせることが可能になる。該スタートアップ処理は、サーバコンフィギュレーションファイル２３７”／ｓｖｓｄｒｉｖｅ／ｄｒｉｖｅ−ｃｏｎｆｉｇｕｒａｔｉｏｎ”をＤＲＡＭ２３２に読み込み、次いで、該サーバコンフィギュレーションファイル２３７中のコンフィギュレーション情報を実際のハードウェア構成と比較することにより妥当性検査を行うことを含む。
【０１１２】
サーバコンフィギュレーションファイル２３７の妥当性検査の後、各ディスクが次の処理によって初期化される。
【０１１３】
（ｉ）  ディスクの制御区画（区画０）をその対応するマウントポイント（例えば、”／ｓｖｓｄｒｉｖｅ／Ｇ３／２”）にマウントし、
（ｉｉ）  制御区画からメモリに自由スペースビットマップファイルを読み込み、通常の動作時にスペースの割り当て及び割り当て解除のために該ファイルに対して効率的にアクセス及び更新を行うことができるようにし、
（ｉｉｉ）  ディスク上のビデオオブジェクトのストライプに対する後続の通常のアクセスのために該ディスクのデータ区画（区画１）をオープンする。
【０１１４】
ビデオオブジェクトのオープン
ＶＯＤシステム１００は、スタートアップ処理を完了すると、クライアントプログラム２０６がビデオオブジェクトを作成するためにＦｉｌｅＯｐｅｎ（）ファンクションコールを行うまで待機する。例えば、クライアントプログラム２０６は、”ｘｙｚ”と呼ばれるビデオオブジェクトを作成するためにＦｉｌｅＯｐｅｎ（）ファンクションをコールすることができる（ステップ６２０）。
【０１１５】
ＦｉｌｅＯｐｅｎ（）コールに応じて、ＶＯＤシステム１００は、図９にフローチャートで示すビデオオープン処理を行って、記憶モジュール１３０上のビデオオブジェクトをオープンする。
【０１１６】
該ビデオオープン処理は、ビデオカタログディレクトリ２３６（例えばディレクトリ”／ｓｖｓｄｒｉｖｅ／ｃａｔ”）中のビデオカタログファイル”ｘｙｚ”を作成する（ステップ６０１）ことにより開始する。ＶＯＤシステム１００は次いで、ビデオ属性、データ速度、ビデオ長、及び作成日時等の制御情報を、ビデオカタログファイル”ｘｙｚ”に書き込む（ステップ６０２）。
【０１１７】
次に、外処理は、ストライプグループ内の各記憶装置１３１毎にスペースマップを生成する（ステップ６０３）。該スペースマップは、特定のビデオストライプの各データブロックを記憶装置１３１上のアドレスに変換するものである。該スペースマップは、各記憶装置１３１の制御区画（即ち区画０）に存在する。該スペースマップファイルの名称は、好適には、ストライプの総数及び特定のストライプ番号をビデオオブジェクト名に付加することにより生成される。例えば、ビデオ”ｘｙｚ”に６つのストライプが存在する場合、該ビデオオブジェクトのストライプ３に関連するスペースマップファイルに”ｘｙｚ６−３”という名称を付けることができる。該スペースマップ生成プロセス６０３は、ビデオオブジェクトの各ストライプ毎に繰り返される。次いで、それらのスペースマップファイルが書き込み動作のためにオープンされる。
【０１１８】
次いで、作成されてオープンされた各スペースマップファイル毎に、ＶＯＤシステム１００は、記憶装置１３１に対応するファイル制御ブロックチェーンに制御ブロックを挿入する（ステップ６０５）。各記憶装置１３１は、ファイル制御ブロックチェーンを１つずつ有している。ファイル制御ブロックチェーンは、一連の制御ブロックであり、ＤＲＡＭ２３２中で共有される。制御ブロックは、各ビデオストライプに関連する制御情報のコピーであり、特に、記憶装置１３１の制御区画に記憶されているスペースマップのコピーを含んでいる。ファイル制御ブロックチェーンにおける制御ブロックがＤＲＡＭ２３２に記憶されているため、該制御ブロック中のスペースマップは、各制御区画で共有される実際のスペースマップよりも速いアクセス時間を有するものとなる。
【０１１９】
次いで、クライアントプログラム２０６が、ビデオオブジェクトデータの書き込みのためにＦｉｌｅＷｒｉｔｅ（）ファンクションをコールし（ステップ６２１）、ＶＯＤシステム１００は、各データブロック毎に、データブロックを記憶するための特定のストライプグループ中の記憶装置１３１を選択する（ステップ６０７）。記憶装置１３１を選択した後、ＶＯＤシステム１００は、利用可能なスペースを求めて対応する自由スペースピットマップをサーチすることにより、データブロックのためのメモリの割り当てを行う（ステップ６０８）。
【０１２０】
ビデオオブジェクトデータを記憶するためのメモリが割り当てられた後、中央制御モジュール１１０が、ビデオオブジェクトの各ストライプ毎にファイル制御ブロックを更新し（ステップ６０９）、また記憶割り当てを反映するよう自由スペースビットマップを更新する（ステップ６０９）。次に、中央制御モジュール１１０は、スペースマップに従ってストライプグループ中に存在する各記憶装置１３１の区画１にビデオオブジェクトデータを書き込むために、生ディスク書き込み動作を生成する（ステップ６１０）。全てのデータブロックの書き込み後、クライアントプログラム２０６は、ＦｉｌｅＣｌｏｓｅ（）ファンクションをコールする。該ＦｉｌｅＣｌｏｓｅ（）ファンクションを受信した際に、ＶＯＤシステム１００は、各記憶装置１３１に記憶されているスペースマップを更新する。
【０１２１】
ビデオオブジェクトの再生
ビデオオブジェクトの再生は、クライアントプログラム２０６が、ＳｔｒｅａｍＯｐｅｎ（）次いでＳｔｒｅａｍＰｌａｙ（）ファンクションコールを生成することにより開始される。クライアントプログラム２０６は、例えば、ＳｔｒｅａｍＯｐｅｎ（）及びＳｔｒｅａｍＰｌａｙｂａｃｋ（）ファンクションをコールして、”ｘｙｚ”という名称が付けられたビデオオブジェクトの再生を開始させることができる。図１０は、再生のためにビデオオブジェクトをオープンする処理を示すフローチャートである。
【０１２２】
ＳｔｒｅａｍＯｐｅｎ（）ファンクションがコールされると（ステップ７２０）、プログラムコード２３１は、ビデオカタログファイル２３７（例えば”ｓｖｓｄｒｉｖｅ／ｃａｔ／ｘｙｚ”）をオープンし（ステップ７０１）、そのコンテンツ（即ち内容）を読み出す。ビデオカタログファイル２３７から読み出された情報（ストリームデータ速度、ビデオオブジェクトサイズ等）は、ビデオオブジェクトの再生を制御するために使用される。
【０１２３】
次いで、ビデオオブジェクトの各ストライプ毎に、プログラムコード２３１は、（特定のビデオストライプに割り当てられた記憶装置１３１に記憶されている）スペースマップファイルを読み出して（ステップ７０２）、制御ブロックを生成する。次いで、プログラムコード２３１は、ビデオストライプが割り当てられている記憶装置１３１に関連する制御ブロックチェーンのサーチを行う（ステップ７０３）。ビデオストライプに関する制御ブロックが制御ブロックチェーン中に既に存在する場合には、プログラムコード２３１は使用カウントをインクリメントする（ステップ７０４）。また、該制御ブロックが制御ブロックチェーン中に既に存在しない場合には、プログラムコード２３１は、該制御ブロックチェーンに該制御ブロックを追加して（ステップ７０５）、使用カウントを１にセットする。
【０１２４】
前記サーチ７０３を行った後、プログラムコード２３１は、次いで制御ブロックに記憶されているスペースマップ情報を使用して、記憶装置１３１の区画１に対して生ディスク読み出し動作を行って（ステップ７０６）、該ビデオオブジェクトデータをメモリバッファ１１４に読み込む。
【０１２５】
続いてクライアントプログラム２０６によってＳｔｒｅａｍＰｌａｙ（）ファンクションがコールされると（ステップ７２１）、中央制御モジュール１１０は、ビデオオブジェクトデータを、その処理のためにメモリバッファ１１４から分配モジュール１２０へと送る。プログラムコード２３１は、ビデオオブジェクトの終わりに達するまで、又はユーザにより指定された終了条件（例えば時間制限）等の阻止条件が発生するまで、生ディスク読み出し動作を続行する（ステップ７０８）。次いで、プログラムコード２３１は、コールバックファンクションによってクライアントをコールして、再生の終了をクライアントプログラム２０６に知らせる。
【０１２６】
次いで、クライアントプログラム２０６はＳｔｒｅａｍＣｌｏｓｅ（）ファンクションをコールする。プログラムコード２３１は、次いで、ＳｔｒｅａｍＣｌｏｓｅ（）ファンクションコールに応じてビデオオブジェクトの各ストライプ毎にクローズ処理を行う。
【０１２７】
該クローズ処理には、制御ブロックチェーン中のスペースマップファイルに関する使用カウントを判定することが含まれる。該判定後、使用カウントがゼロである場合、制御ブロックチェーンから該制御ブロックが削除される。
【０１２８】
該判定後、プログラムコード２３１は、ビデオオブジェクトのストライプに関するスペースマップファイルをクローズする。
【０１２９】
最終的に、プログラムコード２３１は、ビデオオブジェクトに関するビデオカタログファイル２３７（例えば”／ｓｖｓｄｒｉｖｅ／ｃａｔ／ｘｙｚ”）をクローズする。
【０１３０】
ディスクロード平衡化（スケジューリング）
マルチストリームＶＯＤシステム１００において、各ビデオ再生ストリームの開始時間が調整されない場合には、読み出しを要求するあまりに多数のメッセージを同時に受けることによって１つ又は２つ以上の記憶装置１３１がオーバーロードされる可能性がある。かかる事態が発生すると、連続するストリーム再生に関する時間要件を満たすよう適時に操作されないメッセージが生じる可能性がある。これは、ビデオ再生に望ましくない欠陥を生じさせるものとなる。ＶＯＤシステム１００は、好適には、データストライプスキームを用いて多数の記憶装置１３１へのビデオオブジェクトの記憶をインターリーブさせ、更に、スケジューリング法を用いて各ビデオストリームの開始時間を調整し、これにより複数の記憶装置１３１の何れもオーバーロードされることがないようにする。該スケジューリング法はまた、ストリームの開始前の時間遅延を最小限にする。
【０１３１】
好適には、該スケジューリング法は、ストライプグループ中のディスクの各組毎に個別に用いられる。
【０１３２】
時間帯を用いてビデオストリームの再生の開始を分配し、これによりディスクアクセスの集中（オーバーロード）を回避する。各ビデオストリームは、特定の時間帯で開始するようにスケジューリングされる（割り当てられる）。該スケジューリング法によれば、Ｍ個の時間帯が存在する（ここで、Ｍはストライプグループ中の記憶装置１３１の数である）。該Ｍ個の時間帯は、Ｚ１…Ｚｍと表される。
【０１３３】
下記の表１は、１ストライプグループにつき４つの記憶装置１３１を有するシステムにおける好適な時間帯ローテーションを示すものである。
【０１３４】
【表１】
0003560211.tif 000002
【０１３５】
時間は、タイムスロット（Ｔｎ）と呼ばれる所定の固定長の時間間隔で測定される。例えば、タイムスロットＴ１中に、ディスク１が、時間帯Ｚ１に割り当てられたビデオストリームのみを開始させ、ディスク２が、時間帯Ｚ２に割り当てられたビデオストリームのみを開始させる（以下同様）。同様に、タイムスロットＴ２中には、ディスク１が、時間帯Ｚ２に割り当てられたビデオストリームのみを開始させ、ディスク２が、時間帯Ｚ３に割り当てられたビデオストリームのみを開始させる（以下同様）。従来の方法で行われていたように各ビデオオブジェクトを所定の一定の時間帯（Ｚｉ）に割り当てるのではなく、ビデオストリームが開始することになる記憶装置１３１に関連する最も早い利用可能な時間帯（Ｚｉ）にビデオオブジェクトの再生開始が割り当てられる。最も早い利用可能な時間帯（Ｚｉ）とは、時間帯Ｚｉに現在割り当てられているビデオストリームに欠陥を決して生じさせることなく再生を操作するのに十分な容量を有する次の時間帯（Ｚｉ）である。
【０１３６】
一好適実施例では、Ｍ＝６である。別の実施例では、異なる数の記憶装置１３１が特定のストライプグループに割り当てられている。
【０１３７】
図１１は、１ストライプグループ中にＭ個の記憶装置１３１を有するＶＯＤシステムによるスケジューリング法８００を示すフローチャートである。
【０１３８】
該スケジューリング法８００は、ビデオストリームの再生を開始させるためのＳｔｒｅａｍＰｌａｙメッセージ８２０をストリームスレッド２０４が受信した際に開始する。次いで、ストリームスレッド２０４は、読み出すべき最初のデータブロックを記憶している記憶装置１３１のディスク番号ｎを判定する（ステップ８０１）。次いで、ストリームスレッド２０４は、現在の時間（ｔ）を獲得する（ステップ８０２）。
【０１３９】
次いで、記憶スレッド２０１は、現在の時間帯を表すインデックス値（Ｃ）を計算する（ステップ８０３）。該インデックス値（Ｃ）は次の式に従って計算される。
【０１４０】
Ｃ＝（ｆｌｏｏｒ（ｔ／Ｔ）−ｎ）ｍｏｄＭ
ここで、
ｔ＝現在の時間
Ｔ＝データブロックを再生するための時間間隔
（即ち、Ｚ＝データブロックサイズ／ストリーム再生データ速度）
ｎ＝ストライプグループ中の記憶装置の番号
Ｍ＝ストライプグループ中の記憶装置の総数
Ｆｌｏｏｒ＝整数値を返すように変数の切り捨てを行って返す関数
該スケジューリング法８００は、Ｍ個の要素を有する時間帯使用列Ｚ［１…Ｍ］を用いる。該Ｍ個の要素は、それぞれ、最初はゼロにセットされ、対応するＭ個の時間帯の各々に割り当てられた活動再生ストリームの数を表す。
【０１４１】
ステップ８０３でインデックス値Ｃを計算した後に、ストリームスレッド２０４が、インデックスＩにＣをセットする。ストリームスレッド２０４は次いで、時間帯使用列ＺのＩ番目の要素の値を、１つの時間帯に割り当て可能な最大ストリーム数と比較する（ステップ８０４）。１つの時間帯についての最大ストリーム数は、特定の記憶装置１３１に関するアクセス時間によって決まる。該比較ステップ８０４が、時間帯が一杯である（即ち、既に最大ストリーム数を有している）ことを示す結果を返した場合には、該方法は、次の式に従ってインデックス値Ｉを更新する（ステップ８０５）。
【０１４２】
Ｉ＝（Ｉ＋１）Ｍｏｄ  Ｍ
ステップ８０５でインデックス値を更新した後、該方法は比較ステップ８０４に戻る。
【０１４３】
しかしながら、比較ステップ８０４が、時間帯が一杯でないことを示す結果を返した場合には、時間帯使用列Ｚが更新され（ステップ８０６）、ビデオストリームが時間帯Ｔｉに割り当てられる（ステップ８０７）。
【０１４４】
ビデオストリームが時間帯Ｔｉに割り当てられた後、該ビデオストリームは、次の式による時間遅延の後に再生を開始する。
【０１４５】
時間遅延＝（（Ｉ＋Ｍ＋Ｃ）  ｍｏｄ  Ｍ）＋Ｔ
この時間遅延は、所望の（選択された）時間スロットで再生を開始するように導入される。
【０１４６】
ストリームスレッド２０４は、ＳｔｒｅａｍＰａｕｓｅ（）コールを受信した場合、又はストリームの再生を完了した場合には、該再生ストリームに関する使用値Ｚ１をデクリメントする。
【０１４７】
ＲＡＩＤシステム及び方法
ＶＯＤシステム１００は、本発明による安価なディスクからなる冗長ディスクアレイ（ＲＡＩＤ）システム及び方法を用いる。本発明によれば、記憶モジュール１３０は、複数の記憶装置１３１を使用して複数のビデオオブジェクトを記憶する。本発明によるＲＡＩＤシステム及び方法は、ビデオサーバ用途に限定されるものではなく、記憶装置のアレイを使用するあらゆるコンピュータシステム又は構成で有用なものとなる、ということが理解されよう。
【０１４８】
本発明によるＲＡＩＤシステム及び方法は、多数のディスクから構成された記憶サブシステム（記憶モジュール１３０）が、データアクセスに関して高いスループットを達成すること、及び、１つ又は２つ以上のディスクが故障した際に失ったデータを動的に再構成する際の性能上の不利益を制限することを可能にする。該システム及び方法は、更に、Ｎ個のディスクからなるディスクアレイ中のＮ／（Ｍ＋１）又はそれ未満の個数の記憶装置１３１（ディスク）が故障した場合における動的なデータ再構成を達成することにより連続的な動作を可能にする。ここで、（１）Ｍは、データオブジェクトがディスクアレイに記憶される際に該データオブジェクトのクリエータにより指定された（又はデフォルト値として割り当てられた）冗長ファクタであり、（２）故障した２つのディスクの距離は、Ｍよりも大きい。
【０１４９】
該システム及び方法は、Ｎ個のディスクへのデータオブジェクトの記憶をインターリーブさせるものである。ここで、Ｎは、多数の並列ディスク動作を可能にすることにより高性能を得るように、また、Ｍ個のデータブロック毎にパリティブロックを作成するために、所望するだけ大きくすることが可能である。なお、Ｍは、Ｎよりも小さい整数であり、動的データ再構成時における性能上の不利益を制限するために所望するだけ小さくして（Ｍ＝１と選択した場合には、ＲＡＩＤレベル１ミラーと等価になる）、全ての状況で性能レベルが保証されるようにすることができる。Ｍが小さいということは、冗長データに関する記憶オーバーヘッドが大きいことを意味する。
【０１５０】
本発明の典型的な用途は、マルチストリームＶＯＤシステム１００であり、この場合、総ディスクスループットは、数十Ｍｂｙｔｅ／ｓｅｃから数百又は数千Ｍｂｙｔｅ／ｓｅｃの範囲のものとなる。ビデオサーバ１０５に記憶されている１つのビデオオブジェクトは、数十、数百、又は数千ものユーザにより同時に要求される可能性がある。従って、多数のディスクに対するビデオオブジェクトのストライプ処理が可能であることは必須であり、例えば、２０個のディスクに対してビデオオブジェクトのストライプ処理を行い、２０個のディスク全てが並列動作を行って数百のユーザの要求を満たすようにする。この場合、ビデオオブジェクトに関する冗長ファクタＭは、例えば、ディスクが故障した際に失ったデータブロックを再構成するために４個の並列ディスク読み出ししか必要としないように４と選択することが可能である。これは、かかる場合の応答時間を保証するだけでなく、システム全体の作業負荷を殆ど増大させないものとなる。その理由は、それらの４つのディスク読み出しが、失ったデータに密接したものであり、及び通常のビデオ再生中にどうしても必要とされるものであり、従ってそれらは（通常のアクセスと比べて）特別なディスク動作ではない、ということにある。この説明のため、アレイ中にＮ個のディスク（０〜Ｎと番号付けされたもの）が存在するものと仮定する。また、好適には、（ビデオオブジェクト等の）データオブジェクトが作成される際に、ストライプブロックサイズで連続的にデータが分配される（データブロックは０，１，２…と番号付けされている）。
【０１５１】
図１２は、本発明に従ってビデオオブジェクトを記憶するＲＡＩＤ方法９００を示すフローチャートである。該方法は、最初にセットアップ処理９０１を行う。セットアップ処理９０１では、ビデオオブジェクトのクリエータ（例えば、コンピュータプログラム又はユーザ）が該ビデオオブジェクトに関する冗長ファクタＭを指定する。Ｍは、１〜Ｎ−１の整数である。ここで、Ｎは、記憶モジュール１３０中の記憶装置１３１の個数である。
【０１５２】
次いで、セットアップ処理９０１中に、該方法は、ビデオオブジェクトの属性として冗長ファクタＭを記憶する。該方法は更に、インデックス（Ｉ）をゼロに初期化し、及びＤＲＡＭ２３２上のパリティバッファを規定し初期化する。
【０１５３】
次いで、該システムは、ビデオオブジェクトに書き込まれるべきデータブロックを取り出す（ステップ９０２）。各データブロック毎に、該方法は、パリティバッファに対してＩ番目のデータブロックの排他ＯＲ演算を行う（ステップ９０３）。該方法９００は次いで、Ｉ番目のデータブロックをＪ番目のディスクに書き込む（ステップ９０４）。ここで、
Ｊ＝｛ｆｌｏｏｒ（Ｉ／Ｍ）・（Ｍ＋１）＋（Ｉ  ｍｏｄ  Ｍ）｝  ｍｏｄ  Ｎ
である。
【０１５４】
更に、Ｉ番目のデータブロックは、Ｊ番目のディスク上のビデオオブジェクトのストライプのＫ番目のブロックとして書き込まれる。ここで、
Ｋ＝  ｆｌｏｏｒ（｛ｆｌｏｏｒ（Ｉ／Ｍ）・（Ｍ＋１）＋（Ｉ  ｍｏｄ  Ｍ）｝／Ｎ）
である。
【０１５５】
該方法は次いで、現在のデータブロック（Ｉ番目のデータブロック）が冗長グループ中の最後のデータブロックであるか否かを判定するためのテストを行う（ステップ９０５）。該テスト９０５では下記の判定が行われる。
【０１５６】
（ｉ）Ｉが（Ｍ−１）以上であるか。
【０１５７】
（ｉｉ）（（Ｉ＋１）  ｍｏｄ  Ｍ）＝０であるか。
【０１５８】
かかる条件が満たされる場合には、該方法９００は、Ｊ番目のディスクにパリティバッファを書き込む（ステップ９０６）。ここで、
Ｊ＝｛（Ｉ＋１）／Ｍ・（Ｍ＋１）−１｝  ｍｏｄ  Ｎ
である。
【０１５９】
パリティバッファは、Ｊ番目のディスク上のデータオブジェクトのストライプのＫ番目のブロックとして書き込まれる（ステップ９０６）。ここで、
Ｋ＝  ｆｌｏｏｒ（｛（Ｉ＋１）／Ｍ・（Ｍ＋１）−１｝／Ｎ）
である。
【０１６０】
Ｊ番目のディスクにパリティバッファを書き込んだ後、該パリティバッファがクリアされる（再び初期化される）（ステップ９０７）。
【０１６１】
次いで該方法９００は、インデックス（Ｉ）を１だけインクリメントする（ステップ９０８）。該方法９００は、次いで、ビデオオブジェクトの最後のデータブロックのディスクへの書き込みが完了しているか否かを判定するためのテストを行う（ステップ９０９）。最後のデータブロックの書き込みが完了していない（即ち、書き込むべきデータブロックが更に存在する）場合には、該方法９００は、ステップ９０２に戻って、ビデオオブジェクトに書き込むべき次のデータブロックを取り出し、該方法９００を続行する。また、最後のデータブロックの書き込みが完了している場合には、該方法９００は、現在のデータブロック（Ｉ番目のデータブロック）が冗長グループ中の最後のデータブロックであるか否かを判定するためのテストへと進む（ステップ９１０）。該テスト９１０は、（Ｉｍｏｄ  Ｍ）を計算することにより行われる。（Ｉｍｏｄ  Ｍ）がゼロでない場合には、冗長グループはＭ個未満のデータブロックを有しており、従って、該方法９００は、ステップ９１１へと進んで、全てゼロで満たされた１つのデータブロックをＪ番目のディスクに書き込む。ここで、
Ｊ＝｛ｆｌｏｏｒ（Ｉ／Ｍ）・（Ｍ＋１）＋（Ｉ  ｍｏｄ  Ｍ）｝  ｍｏｄ  Ｎ
である。
【０１６２】
ステップ９１１で、Ｉ番目のデータブロックは、Ｊ番目のディスク上のデータオブジェクトのストライプのＫ番目のブロックとして書き込まれる。ここで、
Ｋ＝  ｆｌｏｏｒ（｛ｆｌｏｏｒ（Ｉ／Ｍ）・（Ｍ＋１）＋（Ｉ  ｍｏｄ  Ｍ）｝／Ｎ）
である。
【０１６３】
次いで、該方法９００は、Ｉ番目のデータブロックが冗長グループ中の最後のデータブロックであるか否かを判定するためのテストを行う（ステップ９１２）。次の場合に条件が満たされることになる。
【０１６４】
（ｉ）Ｉが（Ｍ−１）以上である。
【０１６５】
（ｉｉ）（（Ｉ＋１）  ｍｏｄ  Ｍ）＝０である。
【０１６６】
該条件が満たされる場合には、該方法９００は、Ｊ番目のディスクにパリティバッファを書き込む（ステップ９１３）。ここで、
Ｊ＝｛（Ｉ＋１）／Ｍ・（Ｍ＋１）−１｝  ｍｏｄ  Ｎ
である。
【０１６７】
更に、パリティバッファは、Ｊ番目のディスク上のデータオブジェクトのストライプのＫ番目のブロックとして書き込まれる（ステップ９１３）。ここで、
Ｋ＝  ｆｌｏｏｒ（｛（Ｉ＋１）／Ｍ・（Ｍ＋１）−１｝／Ｎ）
である。
【０１６８】
該方法９００は次いでパリティバッファをクリアし（ステップ９１６）、次いで該データオブジェクトに関するＮ個全てのストライプをクローズする（ステップ９１５）。一方、テスト９１２において条件が満たされなかった場合には、該方法９００は次いでＩをインクリメントし（ステップ９１４）、次いでステップ９１０に戻って、現在のデータブロック（Ｉ番目のデータブロック）が冗長グループ中の最後のデータブロックであるか否かを判定する。
【０１６９】
図１３は、本発明に従ってビデオオブジェクトにアクセスするＲＡＩＤ方法１０００を示すフローチャートである。該方法１０００は、Ｊ番目のディスクに記憶されているビデオオブジェクトからＩ番目のデータブロックを読み出すことをストリームスレッド２０４が要求した（ステップ１００１）際に開始する。該読み出し要求を受けると、該方法１０００は、ビデオオブジェクトに関する冗長ファクタＭを読み出す（ステップ１００２）。次いで、該方法１０００は、故障状態を判定するためのテストを行う（ステップ１００３）。故障が生じなかったことを該テスト１００３が示す場合には、該方法１０００は、適当なディスク（Ｊ番目のディスク）からデータブロックを取り出す。しかしながら、該テスト１００３が故障が生じたと判定した場合には、該方法１０００は、データ再構成バッファを全てゼロに初期化する（ステップ１００４）。次いで、該方法１０００は、インデックスＰをゼロに初期化する（ステップ１００５）。Ｐをゼロに初期化することにより、Ｐは、冗長グループ中の最初のデータブロックを指すように初期化される。
【０１７０】
次いで、該方法１０００は、故障したディスクにＰ番目のデータブロックが記憶されていないか判定するためのテストを行う（ステップ１００６）。故障したディスクにＰ番目のデータブロックが記憶されていると判定された場合には、該方法１０００は、Ｌ番目の記憶装置上のストライプのＫ番目のデータブロックの読み出しへと処理を進める。ここで、
Ｌ＝｛Ｊ＋Ｎ−（Ｉｍｏｄ  Ｍ）＋Ｐ｝  ｍｏｄ  Ｎ
Ｊ＝｛ｆｌｏｏｒ（Ｉ／Ｍ）・（Ｍ＋１）＋（Ｉｍｏｄ  Ｍ）｝  ｍｏｄ  Ｎ
Ｋ＝ｆｌｏｏｒ（｛ｆｌｏｏｒ（Ｉ／Ｍ）・（Ｍ＋１）＋（Ｐ  ｍｏｄ  Ｍ）｝／Ｎ）
である。
【０１７１】
次いで、該方法は、取り出したデータ及び再構成バッファ中に記憶されているデータの排他ＯＲ演算を行う（ステップ１００８）。次いで該方法は、ステップ１００９に進んでインデックスＰをインクリメントする。該インクリメントの後、該方法１０００は、再構成が完了したか否か（即ち、Ｐ＞Ｍか否か）を判定するためのテストを行う（ステップ１０１０）。再構成が完了している場合には、該方法１０００は、再構成バッファ中のデータをストリームスレッド２０４に返す。また、再構成が完了していない場合には、該方法１０００はステップ１００６に戻る。
【０１７２】
上記の説明は、本発明の方法及び実施例の単なる典型例を示すものである。当業者であれば理解されるように、本発明は、その思想及び本質的な特徴から逸脱することなく別の特定形態で実施可能なものである。従って、本発明の開示は、その例示を目的としたものであり、特許請求の範囲に記載の本発明の範囲を限定するものではない。
【図面の簡単な説明】
【図１】本発明によるビデオオンデマンドシステムを示すブロック図である。
【図２】図１のビデオオンデマンドシステムで使用されるプログラムモジュール（処理スレッド）を含む中央制御モジュールを示すブロック図である。
【図３】図２に示す中央制御モジュールで使用される処理スレッドの対話を示す状態図である。
【図４】記憶装置とのアクセスに使用されるデータ構造及びプログラムモジュールを示すフローチャートである。
【図５】図４に示す「要求リスト」の説明図である。
【図６】本発明による図３に示すストリームスレッドの処理状態を示す状態図である。
【図７】各記憶スレッドにより行われるメッセージキュー処理を示すフローチャートである。
【図８】「要求リスト」中のメッセージの記憶スレッドによる処理を示すフローチャートである。
【図９】図１に示す記憶モジュールへの記憶のためのビデオオブジェクトオープン処理を示すフローチャートである。
【図１０】再生のためのビデオオブジェクトオープン処理を示すフローチャートである。
【図１１】図１に示す複数の記憶装置にわたるアクセス負荷の時間的平衡化のためのスケジューリング方法を示すフローチャートである。
【図１２】Ｍ個のデータブロック毎にパリティコードを生成するように冗長ファクタ（Ｍ）を用いてディスクドライブアレイにビデオオブジェクトを記憶させる方法を示すフローチャートである。
【図１３】
図１２に示す方法に従って記憶されたデータブロックを取り出す処理を示すフローチャートである。
【符号の説明】
１００        ＶＯＤシステム
１０１        ビデオクライアント
１０５        ビデオサーバ
１１０        中央制御モジュール
１２０        分配モジュール
１３０        記憶モジュール
１５０        制御入力ソース
【図１】
0003560211.tif 000003
【図２】
0003560211.tif 000004
【図３】
0003560211.tif 000005
【図４】
0003560211.tif 000006
【図５】
0003560211.tif 000007
【図６】
0003560211.tif 000008
【図７】
0003560211.tif 000009
【図８】
0003560211.tif 000010
【図９】
0003560211.tif 000011
【図１０】
0003560211.tif 000012
【図１１】
0003560211.tif 000013
【図１２】
0003560211.tif 000014
【図１３】
0003560211.tif 000015