JP3560211B2 - ディジタルデータをオンデマンドで分配するシステム及び方法 - Google Patents
ディジタルデータをオンデマンドで分配するシステム及び方法 Download PDFInfo
- Publication number
- JP3560211B2 JP3560211B2 JP21525897A JP21525897A JP3560211B2 JP 3560211 B2 JP3560211 B2 JP 3560211B2 JP 21525897 A JP21525897 A JP 21525897A JP 21525897 A JP21525897 A JP 21525897A JP 3560211 B2 JP3560211 B2 JP 3560211B2
- Authority
- JP
- Japan
- Prior art keywords
- video
- data
- module
- thread
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/16—Analogue secrecy systems; Analogue subscription systems
- H04N7/173—Analogue secrecy systems; Analogue subscription systems with two-way working, e.g. subscriber sending a programme selection signal
- H04N7/17309—Transmission or handling of upstream communications
- H04N7/17336—Handling of requests in head-ends
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Television Signal Processing For Recording (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Bus Control (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Detection And Correction Of Errors (AREA)
Description
【0001】
【発明の属する技術分野】
本発明は、一般にリアルタイムサーバシステム及びプロセスに関し、特に、クライアントロケーションにビデオストリームを分配するシステム及びプロセスに関する。
【0002】
【従来の技術】
データの記憶、読み出し及び圧縮技術の改善に伴い、一般にはリアルタイムサーバシステムの使用が、特にビデオオンデマンドシステムの使用が、広く普及してきている。ビデオオンデマンド用途には、歓待施設(即ち、ホテル、モーテル、コンドミニアム、及び病院)、カラオケ(一般に音声記録の再生を伴うものであり、画像情報の再生を伴うものもある)及びインフォメーションセンターにおけるコンテンツ(即ち内容)の分配が含まれる。ビデオオンデマンドシステムは、選択されたビデオファイルを記憶し(一般に各ビデオファイルは映画、簡単な情報表示、又は他の種類のビデオコンテンツに相当する)、ユーザによる制御の下で選択されたビデオファイルを読み出す(即ち再生する)。従って、ビデオオンデマンドシステムを使用する場合、一人又は複数のユーザは、クライアントネットワークを介してビデオファイルを選択しアクセス(即ち再生)する。更に、従来のビデオオンデマンドシステムは、一般に、再生、停止、一時停止、巻戻し、及び早送り等の従来のビデオカセットレコーダ(VCR)に見られるような様々な制御機能をユーザに提供する。ここで、「ビデオ」という用語は、音声部分及び画像部分を有するコンテンツ、又は音声のみのコンテンツ、又は画像のみのコンテンツ、又はその他の種類のディジタルコンテンツを含むものである、ということが理解されよう。
【0003】
【発明が解決しようとする課題】
ビデオオンデマンドシステムに関するチャネル要件(即ち、サーバにより分配されるビデオストリームの数)は、各々の特定のビデオオンデマンドシステムによって異なる。例えば、大きなホテルは、小さなホテルよりも多数のチャネルを必要とし、インフォメーションセンターは、そのインフォメーションセンターの場所及び提供する情報の種類に基づき、サービス対象となるクライアントの数が多かったり少なかったりする。更に、ビデオオンデマンドシステムは、始終大きなチャネル容量が要求される場所に設置される場合がある。例えば、歓待施設(即ち、ホテル、モーテル、コンドミニアム、及び病院)に設置されたシステムは、初期は少数の部屋または装置に対してサービスを行うことになるが、設備のサイズが大きくなると、または該サービスに気づいて消費者が増大すると、システムの需要が増大することになる。この問題は、おそらく、付加的なクライアントロケーションを提供するために必要とされる物理的なインフラを回避することができないインフォメーションセンター等の用途においては更に深刻なものとなる。
【0004】
更に、ビデオオンデマンドシステムのビデオ記憶要件は、特定の用途によって異なるものとなる。例えば、歓待施設は、長編ビデオ映画を多数の選択を提供することを所望し、従って、かなり大容量の記憶要件を有することになる。一方、インフォメーションセンターは、それよりもはるかに小さな記憶要件を有する傾向にあり、情報コンテンツが長編映画と比較して小さい場合には特にそうである。
【0005】
従来の多くのビデオオンデマンドシステムは一定の高いコストアーキテクチャを有するものである。特に、従来の幾つかのビデオオンデマンドシステムは、多数のビデオストリームのリアルタイム分配を行うために、ハイエンドワークステーション又は特に高速のコンピュータを使用している。その他の従来のビデオオンデマンドシステムでは、多数のビデオストリームを分配するための処理要求に合わせるために、イベントのマルチタスク処理用の多数のプロセッサを備えたコンピュータを用いている。従来のビデオオンデマンドシステムは、ハイエンドの及び/又は特殊なハードウェアを使用するため、一般に極めて高コストのものとなる。かかる従来のビデオオンデマンドシステムは、指定された最大数のビデオストリームに適応するように一般に設計され、従って、その容量を越えて容易に拡張させることはできない、という欠点を更に有するものである。
【0006】
様々なビデオオンデマンド用途の異なる要件に合わせて調整可能であり、個々のサーバロケーションの要求の増大に合わせて拡張可能である、単一の低コストのビデオオンデマンドシステムを提供することが望ましい。
【0007】
従って、多数のビデオストリームやその他のディジタルデータストリームを並行して分配するための、調整可能及び拡張可能でコスト効率の良好な方法及びプロセスが必要とされている。
【0008】
更に、一般にコンピュータシステムの重要な部分、特にビデオオンデマンドシステムの重要な部分は、その大容量記憶装置部分である。ビデオサーバ(ビデオオンデマンド)に関して言えば、大容量記憶装置部分は、ビデオコンテンツを記憶する。別の種類のコンピュータシステムの場合、大容量記憶装置部分は、他の種類のディジタルコンテンツ、例えば、コンピュータプログラム、データベース、画像、データ等を記憶する。特定の用途がビデオオンデマンドシステムにおけるものであろうとそれ以外の種類のコンピュータシステムにおけるものであろうと、大容量記憶装置のサイズ、処理速度、及びコストは、システムの仕様、性能、及びコストに影響を及ぼすものとなる。
【0009】
従来の大容量記憶アーキテクチャには、安価なディスクドライブからなる冗長ディスクドライブアレイ(RAID)を用いるものがある。従来、かかるアーキテクチャは、典型的には、従来入手可能な高性能で大きくて高コストのディスクドライブよりも小さくて安価で信頼性のあるドライブからなるドライブアレイを用いている。これらの従来のRAIDシステムの中にはストライピングを用いたものがあり、この場合には、データオブジェクトが「複数のデータストライプ」へと分割され、次いでそれらのデータストライプが、並列ディスク動作によって性能の改善を達成するためにディスクアレイ上にインターリーブされる。また、各データストライプは、ディスクアクセスを促進させるだけのサイズのデータブロックへと更に副分割される場合もある。一般に、従来のディスクアレイは、信頼性を増大させるために、ミラー又はパリティベースの機構といった形の冗長性を取り入れたものとなる。
【0010】
詳細には、従来のRAIDレベル1はミラー処理を用いており、その他の一層高レベルの従来のRAIDシステムは、エラー訂正用のパリティブロックを用いている。従来、このパリティブロックは、1つのストライプスライスにわたる(即ち、ディスクアレイにわたる)データブロックの排他ORをとることによって生成される。従来、各パリティブロックは、その関連するデータストライプとは異なるディスクに記憶される。従って、ディスクの故障が生じた場合には、その故障したディスクに記憶されているデータブロックは、そのパリティブロックを使用して(そのデータストライプスライス内の他の全てのデータブロックに対応するパリティブロックの排他OR演算を行うことにより)再構成される。
【0011】
従って、N個のディスクを備えたRAIDシステムにおいて、ディスクが故障した場合には、失われた1つのデータブロックを再構成するために(N−1)個のディスクから(N−1)個のデータブロックを読み出す必要がある。(N−1)個のディスクについての読み出し動作は、サブシステムのロード性能が許容するのであれば応答時間の低減のために並列に行われるが、かかる故障発生時にはやはりかなり大きな負荷がロード性能に課されることになる。システムのディスク数(N)が増えるにつれ、故障モードにおける性能上の不利益が悪化する。従って、性能上の不利益を制限するために、ディスク数(N)を比較的小さい値に制限することが望ましい。
【0012】
一方、RAIDシステムの高いスループットを得るために、通常のデータアクセス時には多数(N個)のディスクを有して、多数のディスク動作を並列に行うことができるようにすることが望ましい。この側面は、故障モードで少数のNが望ましいことと矛盾する。従って、故障モードで許容不能な大きな性能上の不利益を伴うことなくシステムの信頼性及び性能を向上させるRAIDシステム及び方法が必要とされている。
【0013】
【課題を解決するための手段】
本発明によれば、従来の低コストの構成要素を用いて多数のビデオストリームをリアルタイムで分配する、調整可能で拡張可能なビデオサーバシステムが提供される。このシステムは、1つ又は2つ以上の中央制御モジュール(CCM)と、1つ又は2つ以上の分配モジュール(DM)と、1つ又は2つ以上の記憶モジュール(SM)とを備えている。各中央制御モジュールは、従来の2つのスモールコンピュータシリアルインターフェイス(SCSI)コントローラカードを備えた従来のコンピュータであり、その各SCSIコントローラカードは、「開始(initiator)」モードで動作して、1つ又は2つ以上の分配モジュール及び記憶モジュールとのインターフェイスをとる。各中央制御モジュールはまたローカルメモリを備えており、このローカルメモリは、分配モジュールへの分配に先立って記憶モジュールから取り出されたデータを記憶するための中間バッファメモリとして使用される。各中央制御モジュールは更に、1つのユーザ(クライアント)または1つのクライアントネットワークとの結合を行うための通信インターフェイスを備えている。各中央制御モジュールは、クライアントから受信したコマンドを処理し、多数のビデオストリームの再生に関するスケジューリングを行い、ビデオファイル構造を管理し、1つ又は複数の分配モジュールへのビデオデータの流れを制御して、リアルタイム再生を確実にする。
【0014】
また、各分配モジュールは、「ターゲット」モードで動作する従来のSCSIコントローラカードを備えた従来のコンピュータである。SCSIコントローラカードを備えていることに加え、各分配モジュールは、クライアントへの分配に先立ってビデオストリームの処理を行う1つ又は2つ以上の処理モジュールを備えている。一実施例では、該処理モジュールはビデオデコーダであり、その各々は、ビデオデータストリームの解凍のためのものである。この実施例の場合、該ビデオデコーダは、従来のMPEG−1又はMPEG−2デコーダである。
【0015】
別の実施例では、該処理モジュールは、従来のネットワークインターフェイスカードであり、該カードは、ビデオデータストリームのフォーマッティングや、イーサネット、ATM、又はPSTNネットワーク等を介したクライアントへのビデオデータストリームの供給を行うものである。更に、各分配モジュールは、分配モジュール上での処理に先立ってビデオデータを記憶するためのビデオバッファとして使用されるローカルメモリを備えている。
【0016】
各記憶モジュールは大容量記憶媒体であり、該大容量記憶媒体は、ビデオデータ等のディジタル情報を記憶するよう構成されたものであり、標準的なSCSIプロトコルを用いて中央制御モジュールによってアクセスされる。各記憶モジュールは、例えば、ハードディスク、又はCD−ROMドライブ、又はハードディスク列(bank)、又はCD−ROM列、又はその他の種類の大容量記憶媒体である。
【0017】
更に、本発明によれば、中央制御モジュールは、ハイブリッドファイル管理スキームを用いて、データアクセス性能の向上及びメモリ利用の改善を達成する。該ハイブリッドファイル管理スキームは、中央制御モジュール上で動作する従来のオペレーティングシステムと、記憶装置に記憶されている未処理ビデオデータの制御及びアクセスを直接行うための、従来のファイルマネージャをバイパスするカスタマイズされたファイル管理ソフトウェアとの両方を用いるものである。このハイブリッドスキームは、未処理のビデオデータ並びにビデオ記憶マップに関する制御情報を管理するためにオペレーティングシステムのファイル管理サービスを利用するビデオデータに対するアクセスタイムを最適化する。
【0018】
本発明の別の側面によれば、中央制御モジュールは、優先順位法(prioritization method)を実施して、サーバシステムにより生成される複数のビデオデータストリームの間で、各記憶モジュールに含まれる記憶装置のアクセスの優先順位付けを行う。複数のビデオデータストリームによって複数の読み出し要求が生成される度に、優先順位法は、その読み出し要求(読み出しメッセージ)が緊急のものか非緊急のものかを各読み出し要求ごとに決定する。所定時間内に要求のサービスを行えなかったことによりビデオデータストリームの再生に問題が生じる場合には、該要求は緊急のものである。また、同様の場合に問題が生じないのであれば、該要求は非緊急のものである。好適には、メッセージが緊急であるか非緊急であるかは、ビデオデータストリームの現在の状態によって決定される。例えば、ビデオデータストリームが現在一時停止されており、要求がその再生を再開させるものである場合には、その要求は非緊急のものである。しかしながら、ビデオデータストリームが再生状態にある場合の要求は緊急のものである。優先順位法は、次いで、各緊急メッセージ毎の最終デッドラインを計算する。優先順位法は、次いで、如何なる緊急メッセージもその最終デッドラインを逸することなく非緊急の要求のサービスを行うのに十分な時間が存在するか否かを判定する。該条件が満たされる場合には、システムは非緊急の要求を取り扱い、該条件が満たされない場合には、緊急の要求が次に処理される。
【0019】
本発明の別の側面によれば、サーバシステム及び方法は、ディスクロード平衡化法を用いて、特定のビデオデータストリームの再生の開始のスケジューリングを行う。該ディスクロード平衡化法は、複数の時間帯を規定する。ここで、好適には、該時間帯の数は記憶装置の数に対応する。該ディスクロード平衡化法は、各ビデオデータストリームを各時間帯に1つずつ割り当てて、ビデオデータストリームの処理を分配する。該ディスクロード平衡化法は、かかる割り当てを、先ず、ビデオデータストリームを提供することになる記憶装置を識別し、次いで、その記憶装置によりサービスされることになる次に「利用可能な」時間帯を判定することにより行う。更なるビデオデータストリームを扱う容量(帯域幅)を有する場合には、該時間帯は「利用可能な」ものとみなされる。該ディスクロード平衡化法は次いで、その「利用可能な」時間帯を新規に開始されるビデオデータストリームに割り当てる。
【0020】
本発明の更に別の側面によれば、サーバシステム及び方法は、別個のディスクからなる冗長ディスクアレイ(RAID)システム及び方法を用いてビデオオブジェクトの記憶を行う。該RAIDシステム及び方法は、ビデオオブジェクトを複数のデータブロックへと分割し、それらのデータブロックを、ストライピング処理を用いて(ストライプ化された構成で)複数の記憶装置にわたって(即ち、N個の記憶装置にわたって)記憶する。該システム及び方法によれば、冗長ファクタ(M)が選択される。該冗長ファクタMは、信頼性、及びシステム動作中の故障モードでのサービス時間を決定する。Mは、N未満の整数となるように選択される。本発明のこの側面によれば、M個のデータブロックが記憶される度に、エラー回復ブロックが計算される。好適には、該エラー回復ブロックは、該M個のデータブロックについて排他OR演算を行うことにより生成されたパリティコードとなる。Mに比べてNが大きいと、ディスクの故障に遭遇した際に、エラー回復処理が、冗長ファクタMによって、必要とされる記憶装置のアクセスコールの数に好適に制限される。一実施例では、エラー回復ブロックは、データブロックとインターリーブされて記憶されるが、それに関連するデータは、その記憶装置とは異なる記憶装置に記憶される。かかる本発明の特徴は、ビデオデータ以外のディジタルデータを記憶するためのシステム及び方法に適用可能なものであり、また、サーバシステム以外の記憶システムにも適用可能なものである、ということが理解されよう。
【0021】
本発明の更に別の側面によれば、中央制御モジュール、分配モジュール、及び記憶モジュールは、システムの柔軟性及び拡張性を向上させるためにラックマウント(rack mounted)システムにおけるラックマウント(rack mounting)にもそれぞれ適用可能である。
【0022】
本明細書に記載の特徴及び利点は、その全てを含むものではなく、当業者であれば、図面、発明の詳細な説明及び特許請求の範囲を参照することにより、更に多くの特徴及び利点が自明であろう。更に、本書で使用する用語は、基本的に、読み易さ及び本発明の例示を目的として選択されたものであって、本発明の要旨に制限を加えるために選択されたものではなく、かかる本発明の要旨は特許請求の範囲に基づいて決定されるべきである、ということに留意されたい。
【0023】
【発明の実施の形態】
図1は、本発明によるビデオオンデマンド(VOD)システム100を示すブロック図である。VODシステム100は、制御入力ソース150及びビデオサーバ105を備えている。ビデオサーバ105は、1つ又は2つ以上の中央制御モジュール110と、1つ又は2つ以上の分配モジュール120と、1つ又は2つ以上の記憶モジュール130とを備えている。該VODシステム100が調整可能及び拡張可能なものであるため、特定用途で使用される中央制御モジュール110、分配モジュール120、及び記憶モジュール130の数は、分配すべきストリームの数や特定用途におけるビデオ記憶要件等のファクタによって決まる。一好適実施例では、ビデオサーバ105は、1つの中央制御モジュール110と、1つの分配モジュール120と、1つの記憶モジュール130とを備えている。更に、調整性及びシステムの拡張性を促進させるために、ビデオサーバ105は好適にはラックマウントシステムとする。この場合、各サブコンポーネント(中央制御モジュール110、分配モジュール120、及び記憶モジュール130)はラックマウント用に適応される。
【0024】
制御入力ソース150は、記憶されているビデオ情報(ビデオデータ)の取り出し及び表示を制御するための制御信号を生成する任意の入力ソースである。典型的な制御入力ソース150は、キーボード、遠隔制御装置、マウス、完全なコンピュータシステム、又はビデオサーバ105に連結されたクライアントコンピュータのネットワークを備えるものとなる。本好適実施例では、制御入力ソース150は、ビデオサーバ105に連結されたビデオクライアント101のネットワークである。各ビデオクライアント101は、ビデオ制御信号を生成するコンピュータである。従って、ビデオクライアント101は、ビデオサーバ105に接続されたビデオ要求信号及び制御信号を生成することによって、VODシステム100により提供される複数のビデオのうちの1つのビデオの選択及びその再生の制御を行うために使用される。ビデオクライアント101は、好適にはイーサネットネットワークを使用してビデオサーバ105に接続される。しかしながら、本発明によれば、ビデオクライアント101をビデオサーバ105に接続する他の手段を使用することも可能である、ということが理解されよう。例えば、ビデオクライアント101は、ローカルエリアネットワーク、無線通信リンク、光リンク、又は他の通信手段を使用してビデオサーバ105に接続することが可能である。
【0025】
ここで再び図1を参照する。記憶モジュール130は、1つ又は2つ以上の記憶装置131を備えている。該記憶装置131の各々は、好適には、従来のハードディスクドライブ、CD−ROMドライブ、又はテープドライブ等の大容量記憶装置である。この好適実施例では、記憶装置131は、Seagate, Inc.によって製造された大容量(4〜9GByte)ディスクドライブである。記憶モジュール130は、複数のビデオオブジェクト(ビデオシーケンス)を記憶する。一実施例では、ビデオオブジェクトの各々は長編のビデオ映画である。別の実施例では、ビデオオブジェクトは別の形態のビデオコンテンツである。ここで、「ビデオ」という用語は、音声部分及び画像部分を有するコンテンツ、又は音声のみのコンテンツ、又は画像のみのコンテンツ、又はその他の種類のディジタルコンテンツを含むものである、ということが理解されよう。従って、用語「ビデオ」は、ディジタル音楽記録、音声記録、無声画像セグメント等も含むものである。
【0026】
本発明の好適実施例は、「ストライピング」を用いた本発明のRAID技術に従って各ビデオオブジェクトを記憶するものであり、これについては後述する。
【0027】
ストライピングを用いて、各ビデオオブジェクトが複数の「ビデオストライプ」へと分割され、それら各ビデオストライプが異なる記憶装置131に記憶される。更に、各ビデオストライプが「データブロック」と呼ばれる複数の128kbyteのデータチャンク(chunk:塊)へと副分割される。
【0028】
中央制御モジュール110は、重いマルチスレッドのオペレーティングシステム(好適にはSun MicrosystemsのオペレーティングシステムSOLARIS)をCPU112(好適にはIntel Corporationにより製造されたPENTIUMプロセッサ)上で実行する高性能パーソナルコンピュータ用マザーボードである。該マザーボードは、ASUSTek Computer Inc.により製造されたものであり、MiTAC Industrial Corporationにより製造されたラックマウント式シャシにマウントされる。該マザーボードはまた、SCSIコントローラ及びイーサネットコントローラ等の周辺装置との接続のためのペリフェラルコントロールインターフェイス(PCI)バスを備えている。
【0029】
各中央制御モジュール110は、中央制御モジュール110と記憶モジュール130との間、及び中央制御モジュール110と分配モジュール120との間との通信を促進させるためにイニシエータ111,113を備えている。イニシエータ111,113は、Adaptec, Inc.(Milpitas,California)により製造された従来のSCSIコントローラカードであり、PCIバスを用いてCPU112に接続される。メモリバッファ114は、CPU112に直接接続されたダイナミックランダムアクセスメモリ(DRAM232(図2参照))内に割り当てられたメモリ空間である。好適には、メモリバッファ114はそれぞれ128kbyteのメモリであり、従って、各メモリバッファ114は1データブロック全体を記憶する大きさとなっている。
【0030】
また、分配モジュール120は好適には、Tyan Computer Corporationにより製造された高性能パーソナルコンピュータ用マザーボードである。該マザーボードは、MiTAC Industrial Corporationにより製造されたラックマウント式シャシにマウントされる。該マザーボードは更に、従来のペリフェラルコントロールインターフェイス(PCI)バスを備えている。各分配モジュール120は、ターゲット124、CPU125、複数のビデオプロセッサ121、及びメモリバッファ126を備えている。CPU125は、好適には、Intel Corporationにより製造されたPENTIUMプロセッサである。ターゲット124は、Advansys,Inc.(San Jose,California)により製造されたモデルABP−940SCSIコントローラ等の従来の「ターゲットモードが可能な」SCSIコントローラカードであり、PCIバスを用いてCPU125に接続される。ここで、「ターゲットモードが可能な」とは、イニシエータモードで動作しているSCSIコントローラからデータを受信するためにターゲットモードで動作するように適応させることが可能なことを意味している。中央制御モジュール110と分配モジュール120とのインターフェイスをとるために従来のSCSIコントローラカードを使用することにより、中央制御モジュール110が従来のディスクドライブに対して書込みを行っている際に、その中央制御モジュール110が分配モジュール120にデータを書き込むことが可能になり、これにより、システムのコスト及び複雑さが低減され、システムの信頼性が向上する。
【0031】
ビデオプロセッサ121は、CPU125の制御の下でメモリバッファ126から(ビデオストリームを形成する)ビデオデータを受信し、次いで、クライアント101に分配するために各ビデオストリームを処理する。一好適実施例では、ビデオプロセッサ121は、Zoran Corporation(Santa Clara, California)により製造された従来のMPEG−1デコーダやMatrox Electronic Systems, LTD(Canada)により製造された従来のMPEG−2デコーダ等の従来のモーションピクチャエキスパートグループ(MPEG)デコーダである。MPEG−1デコーダ又はMPEG−2デコーダの選択は、記憶モジュール130に記憶されるビデオデータの圧縮に使用される圧縮技術によって決定される。
【0032】
本発明の一好適実施例は、分配モジュール120に12個のビデオプロセッサ121を有している。好適には、各ビデオプロセッサ121が、それぞれ1つのビデオストリームについて動作する。更に、該好適実施例では、各ビデオプロセッサ121の出力は、NTSC規格及びPAL規格の何れにも互換性を有する(クライアント101の)ビデオモニタに直接接続するためのNTSC/PAL複合信号である。
【0033】
別の実施例では、ビデオプロセッサ121はMPEG解凍は行わないが、その代わりに他の種類の解凍を行う。更に別の実施例では、ビデオプロセッサ121は、イーサネット、ATM、PSTNネットワーク等のネットワークとのインターフェイスをとるように、又は別のクライアント分配手段とのインターフェイスをとるように、ビデオストリームの処理を行う。これらの実施例において、もし必要であれば、ビデオ解凍は、クライアントのロケーションにおいて分配モジュール120上で、又はビデオストリーム経路に沿った別のポイントで行われる。
【0034】
中央制御モジュール110は、SCSIバス141により記憶モジュール130と接続される。同様に、中央制御モジュール110は、SCSIバス142により各分配モジュール120と接続される。該SCSI通信は、中央制御モジュール110に配設されたイニシエータ111,113、並びに記憶モジュール130及び分配モジュール120の一部をなす対応するSCSIコントローラ(分配モジュール120ではターゲット124、記憶モジュール130ではSCSI回路(図示せず))によって操作される。記憶モジュール130及び分配モジュール120上のSCSIコントローラは、「ターゲット」モードで動作する。分配モジュール120のSCSIインターフェイスは、コスト効率の良いインターフェイス機構であり、これにより、各中央制御モジュール110が、あたかもハードディスクドライブ又はその他の従来のSCSI互換装置にデータを書き込んでいるかのように分配モジュール120にデータを分配することが可能になる。
【0035】
本好適実施例では、記憶モジュール130との通信を行うために単一のイニシエータ113を使用したが、別の実施例では、VODシステム100において一層多数の記憶モジュール130が使用される場合のインターフェイス要件を満たすように、複数のイニシエータ113を用いることが可能である。同様に、本好適実施例では、分配モジュール120との通信を行うために単一のイニシエータ111を使用したが、別の実施例では、VODシステム100において一層多数の分配モジュール120が使用される場合のインターフェイス要件を満たすように複数のイニシエータ111を用いることが可能である。
【0036】
本好適実施例では単一の中央制御モジュール110を使用したが、本発明の原理は、多数の中央制御モジュール110を備えたVODシステム100にも適用することができる。ビデオサーバ105中に多数の中央制御モジュール110を配設することにより、冗長動作を行うようにVODシステム100を構成することが可能となり、これにより、システムの信頼性及び故障に対する許容性が改善される。更に、多数の中央制御モジュール110を備えた構成はシステムの帯域幅を増大させるものとなり、これにより、VODシステム100によって生成される最大ビデオストリーム数が増大する。
【0037】
好適なシステム構成の1つは、9個の分配モジュール120のサービスを行う単一の中央制御モジュール110を備えたものとなり、この場合、各分配モジュール120は、12個のビデオプロセッサ121を有している。従って、この好適な構成は、最大108のビデオストリームを同時に生成するものとなる。別の構成では、12個ではなく8個のビデオプロセッサ121を用いており、従って、最大96のビデオストリームを分配する。
【0038】
各中央制御モジュール110は、1つ又は2つ以上のクライアント101からのビデオ制御コマンドを受信して処理する。このビデオ制御コマンドには、例えば、再生、記憶、一時停止、早送り、巻戻し、ビデオ選択等が含まれる。より詳細に言えば、中央制御モジュール110上のCPU112は、受信したビデオ制御コマンドをデコードし、そのデコードされたコマンドを実行するために記憶モジュール130及び分配モジュール120を制御する。中央制御モジュール110は、メモリバッファ114に対して出入りするビデオデータの非同期の伝送の管理及びスケジューリング等の機能を行う。
【0039】
従来、ビデオサーバシステム(即ち、ビデオオンデマンドシステム)は、2つのカテゴリー、即ち、ストリーミングシステム及び非ストリーミングシステムのうちの1つに含まれる。ストリーミングシステムは、再生要求に応じて明らかに連続するビデオストリームを分配し、これは、再生を変更する(即ち、一時停止や停止等)ための別のユーザコマンドが受信されるまで、またはファイルの終わりに達するまで行われる。また、非ストリーミングシステムでは、ビデオサーバは、進行中のビデオストリームを分配することはなく、その代わりにクライアントの要求に応じてビデオチャンク又はビデオセグメントを分配する。好適には、クライアント101からの要求は、ユーザのための明らかに連続する「リアルタイムの」ビデオストリームを生成するように十分頻繁に発生するものであり十分に迅速なものでなければならない。VODシステムの好適実施態様は、ストリーミングタイプのビデオサーバである。ストリーミングタイプのビデオサーバは、非ストリーミングタイプのビデオサーバと比べてクライアント101とビデオサーバ105との間で必要となる対話が少ないという利点を有するものである。従って、ストリーミングタイプのビデオサーバは、エラーの生じる傾向が低く、多数のチャネルに適応することができ、及びクライアント101で必要とする複雑性が低いものとなる。
【0040】
VODシステム100は、多数のバッファ機構を使用してリアルタイムのビデオストリームを分配する。CPU112の制御下で、データが記憶モジュール130からメモリバッファ114へ(好適には128kbyteのチャンクで)伝送される。このデータが次いで、やはりCPU112の制御下で一層小さなチャンク(好適には32kbyte)で分配モジュール120のメモリバッファ126へと伝送される。ここで、CPU125の制御下でデータが一層小さなチャンク(好適には32kbyte)で各ビデオプロセッサ121へ伝送される。各ビデオプロセッサ121は、32kbyteのデータチャンクを処理して、クライアントロケーションに分配するためのビデオストリームを生成する。
【0041】
好適には、記憶モジュール130と中央制御モジュール110との間、及び中央制御モジュール110と分配モジュール120との間のデータ伝送は、高速のメモリ伝送を得るために、及び該伝送中におけるCPUを用いた動作を回避するために、ダイレクトメモリアクセス(DMA)伝送モードを用いて実行される。
【0042】
好適には、分配モジュール120は、ターゲットモードで(ターゲットモードでSCSIインターフェイスを使用して)中央制御モジュール110とのインターフェイスをとるので、ビデオデータ及びそれに伴う制御コマンドがアドレススキームを用いて分配モジュール120に送られる。各ビデオストリームは、分配モジュール120上の指定されたアドレス範囲に割り当てられる。従って、中央制御モジュール110が特定のビデオストリームについてビデオデータの書き込みを行っている場合には、特定のデータストリームを固有に指定するために分配モジュール120上の宛先アドレスが使用される。同様に、各ビデオストリームに関する進行、エンコード終了、及び一時停止等の制御情報は、特定のビデオストリームに対して各々マッピングされた特定の事前指定されたアドレスに書き込まれる。各々のビデオストリーム及びそれに関連する制御情報のアドレスマッピングは、予め規定される。代替的には、各ビデオストリームのデータと各ビデオストリームに関する制御情報とのマッピングを行うアドレスマップが、システムのスタートアップ中に分配モジュール120から受信され、次いで中央制御モジュール110で記憶される。
【0043】
図2は、本発明による中央制御モジュール110を示すブロック図である。複数のクライアント101から受信される制御コマンドのサービスを行うために、中央制御モジュール110は、CPU112に接続されたDRAM232に記憶されているプログラムコード231を使用してマルチタスク処理を行う。DRAM232はまた、メモリバッファ114(図1にも示されている)を形成する。DRAM232は、中央制御モジュール110に含まれる従来のコンピュータ用マザーボード上に配設されたメモリ拡張スロットに取り付けられたDRAMである。プログラムコード231は、CPU112によって実行されるマルチプロセシングスレッド210〜205を含んでいる。マルチプロセシングスレッド210〜205は、リモートプロシージャコール(RPC)スレッド202、コールバックスレッド203、ストリームスレッド204、記憶スレッド201、及びファイルスレッド205を備えている。各スレッドは、CPU112により実行されるコンピュータプログラムを介したアクティブパスである。
【0044】
図2において、中央制御モジュール110はまた、該中央制御モジュール110に固有のシステムハードディスク235を備えている。該システムハードディスク235は、DRAM232にロードするためのプログラムコード231を記憶する。該システムハードディスク235は、更に、サーバコンフィギュレーションファイル237、及びビデオカタログサブディレクトリ236を記憶する。
【0045】
図3は、マルチプロセシングスレッド201〜205間の関係を示す状態図である。マルチプロセシングスレッド201〜205は、クライアント101により要求された際に多数のビデオストリームを再生し及び様々な制御コマンド(即ち、一時停止、停止、巻戻し等)を実行するために、(クライアント101上で実行される)クライアントプログラム206により生成されるファンクションコールを受信して処理する。
【0046】
リモートプロシージャコール(RPC)スレッド202は、クライアントプログラム206に対してアプリケーションプログラムインターフェイス(API)を提供し、よって、クライアントプログラム206から受ける制御入力(ファンクションコール)の受信を操作する。中央制御モジュール110は、ビデオサーバ105とクライアント101との間のインターフェイスを管理するために、単一のRPCスレッド202を生成(実行)する。
【0047】
中央制御モジュール110は、各出力ビデオストリーム毎にストリームスレッド204を(CPU112上で)生成し実行する。各ストリームスレッド204は、1つのビデオストリームの再生を管理する。
【0048】
コールバックスレッド203は、CPU112によって実行され、ストリームスレッド204により生成されるメッセージを操作する。該メッセージは、「ファイルの終わり」またはエラー状態が生じた結果として生成されるものである。
【0049】
ファイルスレッド205は、CPU112によって実行され、ビデオオブジェクトの作成、削除、書き込み、及び読み出しを含むファイル管理を操作する。中央制御モジュール110は、多数のファイルスレッド205を有している。
【0050】
各記憶装置131は、1つ又は2つ以上の記憶スレッド201によって管理される。記憶スレッド201は、ストリームスレッド204、ファイルスレッド205、及びRPCスレッド202からのメッセージ要求を受信し、次いで適当なディスクアクセス機能及びデータ取り出し機能を行うことにより、そのメッセージ要求のサービスを行う。所与の記憶装置131を管理する記憶スレッド201の数は、サーバコンフィギュレーションファイル237で指定される。好適には、2つの記憶スレッド201が各記憶装置131を管理する。
【0051】
ここで、図2を再び参照する。各記憶装置131は、関連するメッセージ待ち行列233をそれぞれ1つずつ有している。該メッセージ待ち行列233は、ディスク入出力要求メッセージを記憶するためのファーストインファーストアウト(FIFO)メッセージパイプ(待ち行列)である。ストリームスレッド204は、特定の記憶装置131からのビデオデータの読み出しを必要とする場合に、(ディスク入出力を要求する)(ディスクアクセス)メッセージを、適当な記憶装置131に対応するメッセージ待ち行列233に送る。各メッセージは、該メッセージを生成したストリームスレッド204により算出されたデッドラインフィールドを含んでいる。
【0052】
図4は、記憶装置へのアクセス時に使用されるデータ構造及びプログラムモジュール232を示すフローチャートである。プログラムコード232は、1組のリンクリスト(linked list)データ構造242を含んでいる。該リンクリストデータ構造242は、自由リスト240及び要求リスト241を有している。1つの自由リスト240及び1つの要求リスト241が各記憶装置131毎に作成される。自由リスト240は、自由メッセージ記憶要素の未ソートのリンクリストであり、要求リスト241は、各メッセージに関するデッドラインフィールドに従ってソートされたメッセージのリンクリストである。各記憶スレッド201は、最初に自由リスト240から記憶要素を取り出すことにより、メッセージの処理を行う。記憶スレッド201は、次にメッセージ待ち行列233からメッセージを取り出し、その取り出したメッセージを記憶要素に記憶させる。記憶スレッド201は次いでそのメッセージを、それに関するデッドラインフィールドに従って要求リスト241中にリンクさせる。
【0053】
図5は、本発明による要求リスト241を示す説明図である。要求リスト241は、その要求リスト241の前端がゼロのデッドラインのメッセージ244を有するように構成されたメッセージ244のリンクリストである。ゼロのデッドラインのメッセージ244の後に非ゼロのデッドラインのメッセージ244が記憶され、この非ゼロのデッドラインのメッセージ244が緊急時に伝わり、緊急性の最も低い非ゼロのデッドラインのメッセージ244が要求リスト241の後端で共有されるようになる。
【0054】
要求リスト241及び自由リスト240は共に相互排他ロック243を有しており、これにより、要求リスト241及び自由リスト240へのアクセスが連続的なものとなる。相互排他ロック243は、オペレーティングシステムにより提供される従来のロック機構である。
【0055】
処理スレッドの説明
ここで再び図3を参照する。中央制御モジュール110は、RPCスレッド202がクライアントプログラム206からStreamOpen()コールを受信するまでアイドル状態となる。StreamOpen()コールは、再生用の新たなビデオストリームをオープンするための要求である。RPCスレッド202は、StreamOpen()コールを受信すると、ストリームスレッド204にStreamOpenメッセージを送る。次いで、ストリームスレッド204は、オープンされたビデオストリームの再生を操作する。
【0056】
StreamOpenメッセージを操作する際に、ストリームスレッド204は、再生すべきビデオオブジェクトの最初の3つのデータブロックを記憶する記憶装置131に対応する3つの記憶スレッドのメッセージ待ち行列233の各々にReadBlockメッセージを送る。好適実施例では、3つのメモリバッファ114が各再生ストリーム用にリザーブされ、従って、StreamOpenメッセージのサービスを行うことによって、新たにオープンされた再生ストリームに関連するメモリバッファ114が満たされることになる。
【0057】
各記憶スレッド201は、そのメッセージ待ち行列233からReadBlockメッセージを非同期で取り出し、そのメッセージを処理用に優先順位付けする。最終的に処理されると、記憶スレッド201は、要求されたデータブロック(好適なブロックサイズは128byte)を特定のディスクから読み出して、割り当てられたメモリバッファ114に該データブロックを書き込むことにより、ReadBlockメッセージを処理する。ReadBlockメッセージのサービスを行った後、記憶スレッド201は、前記ReadBlockメッセージを発したストリームスレッド204にREAD−RESPメッセージを送る。
【0058】
次いで、記憶スレッド201は、そのメッセージ待ち行列233における次に最も時間的に決定的な(時間クリティカル)メッセージを処理する。しかしながら、そのメッセージ待ち行列233が空である場合には、記憶スレッド201は、そのメッセージ待ち行列233にメッセージが送られてくるまでアイドル状態となる。
【0059】
図6は、図3に示したストリームスレッド204の状態図である。ストリームスレッド204は、StreamOpenメッセージを受信するまでIDLE状態307となる。
【0060】
メッセージ待ち行列にReadBlockメッセージを送った後、ストリームスレッド204は、PRIMING状態301に移行する。ストリームスレッド204は、PRIMING状態301にあるとき、ReadBlockメッセージが送られた各記憶スレッド201からREAD−RESPメッセージを受信するまで待機する。記憶スレッド201により送られたREAD−RESPメッセージは、記憶スレッド201がReadBlock要求を処理したことを示すものである。READ−RESPメッセージが受信されると、ストリームスレッド204はPRIMED状態302に移行する。
【0061】
ここで再び図3を参照する。RPCスレッド202は、クライアントプログラム206からStreamPlay()コールを非同期で受信する。次いで、RPCスレッド202は、StreamPlayメッセージをストリームスレッド204に送る。次いで、ストリームスレッド204は、該ストリームの再生を操作する。
【0062】
ここで再び図6を参照する。ストリームスレッド204がPRIMED状態302にあるとき、該ストリームスレッド204は、RPCスレッド202からStreamPlayメッセージが受信されるまで待機する。ストリームスレッド204は、好適には以下で説明するスケジューリングプロトコルに従って、該ストリーム用の開始時間帯を選択することにより、StreamPlayメッセージを操作する。開始時間帯の選択後、メモリバッファ114からビデオデータの第1のサブブロック(32kbyte)を取り出し、宛先出力ポートを含む分配モジュール120に該サブブロックを送ることにより、再生が開始される。サブブロックの送信後、ストリームスレッド204は、PLAYWAIT状態303に移行する。
【0063】
PLAYWAIT状態303にあるとき、ストリームスレッド204は、RPCスレッド202又は記憶スレッド201の何れかから新たなメッセージが到着したか否かを判定し、受信したメッセージを処理する。受信する可能性のあるメッセージとしては、StreamPauseメッセージ、StreamJumpメッセージ、及びREAD−RESPメッセージが挙げられる。各々のメッセージは次のように操作される。
【0064】
(i)StreamPauseメッセージがRPCスレッド202から送られた場合、ストリームスレッド204は、PAUSED状態304に移行する。
【0065】
(ii)StreamJumpメッセージがRPCスレッド202から送られた場合、ストリームスレッド204は、まだ分配モジュール120に送られていないメモリバッファ114中のデータブロックを破棄する。次に、新たな位置へのジャンプによって取り出されたビデオデータ(データブロック)を記憶するために、ストリームスレッド204による使用のために割り当てられていなかったメモリバッファ114が記憶スレッド201による使用のために割り当てられる。StreamJumpメッセージの処理後、ストリームスレッド204は、PLAYWAIT状態303でループして次のメッセージの受信を待つ。
【0066】
(iii)READ−RESPメッセージが記憶スレッド201から送られた場合、及び、ReadBlockメッセージがエラーを伴うことなく操作されたことをREAD−RESPメッセージが示す場合には、ストリームスレッド204は、対応するメモリバッファ114をレディ状態にマークし、次いでPLAYWAIT状態303でループする。
【0067】
(iv) READ−RESPメッセージが記憶スレッド201から送られた場合、及び、ReadBlockメッセージがエラーに遭遇したことをREAD−RESPメッセージが示す場合には、ストリームスレッド204は、コールバックスレッド203にErrorPlayDoneメッセージを送り、ABEND状態305に移行する。次いで、コールバックスレッド203は、ErrorPlayDoneメッセージの受信時に、ビデオコマンドを発したクライアントプログラム206にコールバックを行って、ビデオストリーム中でエラーに遭遇したことをクライアントプログラム206に知らせる。
【0068】
PLAYWAIT状態303では、ストリームスレッド204は、等時性のビデオストリームを維持するためにタイマによって更に制御される。「等時性」とは、非破裂性又は「ほぼ一定速度」を意味するものである。等時性のビデオストリームを維持するために、各々が32kbyteのデータサブブロックが所定時間内に分配モジュール120に送られる。各々のデータサブブロックを分配モジュール120に送る際に、ストリームスレッド204は、該データサブブロックがメモリバッファ114中の最後のサブブロックであったか否かを判定する。該データサブブロックが最後のサブブロックであった場合には、ストリームスレッド204は、メモリバッファ114を「利用可能」とマークし、記憶装置131からの更なるビデオデータ(128kbyteのデータブロック)の取り出しを開始させるために適当な記憶スレッド201にReadBlockメッセージを送る。ストリームスレッド204は更に、ビデオファイルの終わりに達したか否かを判定する。ビデオファイルの終わりに遭遇した場合には、ストリームスレッド204は、コールバックスレッド203にNormalPlayDoneメッセージを送り、DONE状態306に移行する。次いで、コールバックスレッド203は、ビデオコマンドを発したクライアントプログラム206にコールバックを送って、ビデオストリームが正常終了したことをクライアントプログラム206に知らせる。しかしながら、ビデオファイルの終わりに達していなかった場合には、ストリームスレッド204は、PLAYWAIT状態303でループする。
【0069】
DONE状態306にあるとき、ストリームスレッド204は、RPCスレッド202から受信したメッセージを処理する。(クライアントプログラム206からStreamJump()コールを受信した結果として)RPCスレッド202からStreamJumpメッセージが送られた場合には、ストリームスレッド204は、記憶されているビデオファイル上の新たなジャンプ先位置からビデオデータを取り出すために、メモリバッファ114のアドレスを記憶スレッド201に送る。メモリバッファ114のアドレスの送信後、ストリームスレッド204はPRIMING状態301に移行する。(クライアントプログラム206からのStreamClose()コールの結果として)RPCスレッド202によりStreamCloseメッセージが送られた場合には、ストリームスレッド204は、該ストリームに関連する分配モジュール120にストリームの再生のクローズを知らせるコマンドを送出する。次いでストリームスレッド204はIDLE状態307に移行する。
【0070】
PAUSED状態304にあるとき、ストリームスレッド204は、RPCスレッド202により送られたメッセージを処理する。(クライアントプログラム206により送られたStreamJump()コールの結果として)RPCスレッド202からStreamJumpメッセージが送られた場合には、ストリームスレッド204は、メモリバッファ114中のあやゆるデータを破棄し、ビデオファイル中の新たなジャンプ先位置で始まるビデオデータを取り出すために、その解放されたメモリ空間を対応する記憶スレッド201に割り当てる。ストリームスレッド204は、次いでPRIMING状態301に移行する。
【0071】
(クライアントプログラム206からのStreamClose()コールの結果として)RPCスレッド202からStreamCloseメッセージが送られた場合には、ストリームスレッド204は、該ストリームに関連する分配モジュール120にストリームの再生のクローズを知らせる。次いでストリームスレッド204はIDLE状態307に移行する。
【0072】
(クライアントプログラム206からのStreamPlay()コールの結果として)RPCスレッド202からStreamPlayメッセージが送られた場合には、ストリームスレッド204は、当該ビデオストリームに関する開始時間スロットを選択し、該開始時間スロットに達した後、ビデオディスクの32kbyteのカレントブロックを、(中央制御モジュール110上の)メモリバッファ114から、該ビデオストリームのための宛先ポートを含む分配モジュール120に送る。ストリームスレッド204は、次いでPLAYWAIT状態303に移行する。
【0073】
ABEND状態305にあるとき、ストリームスレッド204は、RPCスレッドからのStreamCloseメッセージを処理する。(クライアントプログラム206からのStreamClose()コールの結果として)RPCスレッド202からStreamCloseメッセージが送られた場合には、ストリームスレッド204は、ストリームの再生がクローズされたことを該ストリームに関連する分配モジュール120に知らせる。ストリームスレッド204は次いでIDLE状態307に移行する。
【0074】
ストリームスレッドによるメッセージ要求の優先順位付け
VODシステム100は、優先順位スキームを用いて、多数のストリームスレッド204から各記憶スレッド201に送られるディスク入出力要求を要求するメッセージの操作のスケジューリングを行う。該優先順位スキームは、好適には、要求を行っている全てのストリームスレッド204がそれぞれのビデオストリームの連続的な再生を維持することができるように全てのメッセージを確実に完了させる(操作する)ものとなる。
【0075】
該優先順位スキームによれば、各メッセージはそれに関するデッドラインフィールドを有している。ストリームスレッド204が、中央制御モジュール110のバッファを満たすために、ディスク入出力を要求するメッセージ(ReadBlockメッセージ)を記憶スレッド201に送ると、ストリームスレッド204は、該メッセージについてのデッドラインを計算し、その該デッドラインを該メッセージと共に記憶スレッド201に送る。該デッドラインは、ストリームスレッド204の現在の状態によって決まる。該デッドラインは、0から最大値までの整数である。デッドラインを有さないメッセージには「ゼロ」のデッドライン値が与えられ、デッドラインを有するメッセージにはその緊急性に対応したデッドライン値が割り当てられ、この場合、大きなデッドライン値を有するメッセージほど緊急性が低く、小さなデッドライン値を有するメッセージほど緊急性が高いものである。
【0076】
通常の再生時、即ち、PLAYWAIT状態303にある場合には、デッドラインの計算は、ストリームスレッド204による分配モジュール120に対するもっとも最近のデータ書き込みに関する開始時間に、ストリームに関する全てのメモリバッファ114中のデータ消費時間(即ち、ビデオデータの再生に要する時間)を加えることにより行われる。好適には、該データ消費時間は、各メモリバッファ114のサイズに、ビデオストリームに関するメモリバッファ114の数を乗算し、次いでその積を出力データ速度で除算すること(即ち、バッファサイズ×バッファ数÷データ速度)により算出される。
【0077】
ストリームの再生が開始する前のバッファの初期プライミング時に(即ち、PRIMING状態301にある際に)及びPRIMED状態302にある際に、デッドラインがゼロにセットされる。この「ゼロ」は、メッセージが絶対的なデッドラインを有さないこと、及び、かかるサービスによりメッセージ待ち行列233中の他のメッセージがそれらのデッドラインを逸さないこととなる場合に該メッセージがサービスされるべきであることを示すものである。
【0078】
ストリームスレッド204がPAUSED状態304にあり、該ストリームスレッド204によりStreamJump()メッセージが受信された場合、ストリームスレッド204は、該ストリームスレッド204に関するメモリバッファ114中のデータを破棄する。次いでストリームスレッド204は、記憶されているビデオオブジェクト中の新たな(ジャンプ先)位置から取り出されたデータで満たすためにメモリバッファ114のアドレスを適当な記憶スレッド201に送る。StreamJump()メッセージに関するデッドラインは、該メッセージが絶対的なデッドラインを有さないこと、及び、かかるサービスによりメッセージ待ち行列233中の他のメッセージがそれらのデッドラインを逸さないこととなる場合に該メッセージがサービスされるべきであることを示す「ゼロ」である。
【0079】
ストリームスレッド204が通常再生モードにある際、即ち、PLYWAIT状態303にある際に、該ストリームスレッド204によってStreamJump()メッセージが受信された場合、該ストリームスレッド204は、該ストリームスレッド204に関連すると共に現在の時間に記憶スレッド201の応答時間を加算したものよりも遅いデッドラインを有するデータを有するメモリバッファ114中のデータを破棄する。次いでストリームスレッド204は、新たなビデオ位置(即ち、ビデオファイル中のジャンプ先位置)から取り出されたデータで満たすと共に以前に記憶されていたデータに関連していたデッドラインと同一のデッドラインを維持するために、データが破棄された該メモリバッファ114のアドレスを適当な記憶スレッド201に送る。
【0080】
記憶スレッドの処理
記憶スレッド201は、中央制御モジュール110のスタートアップ時に作成され、記憶装置131に対するアクセスを管理する。ここで再び図4を参照する。各記憶装置131に対するアクセスは、各記憶装置131に関連するリンクリスト(要求リスト241及び自由リスト240)によって制御される。各記憶装置131を管理する記憶スレッド201の数は、コンフィギュレーションファイル237を読み出すことにより決定される。各記憶装置131毎に1つ以上の記憶スレッド201が作成される場合には、要求リスト241及び自由リスト240とアクセスするためにロック機構(mutex lock243)が用いられる。
【0081】
図7は、各記憶スレッド201により行われるメッセージ待ち行列処理400を示すフローチャートである。記憶スレッド201は、記憶装置131に関連する2つ以上の記憶スレッド201が存在するか否かを判定することにより処理を開始する。記憶装置131に関連する2つ以上の記憶スレッド201が存在する場合には、現在の記憶スレッド201が、記憶装置131に関連するmutex lock243を得て、リンクリスト242(要求リスト241及び自由リスト240)をロックする(ステップ401)。
【0082】
mutex lock243が固定されると(及びリンクリスト242がロックされると)、記憶スレッド201がメッセージを処理する。記憶スレッド201は、次に自由リスト240からメッセージ記憶要素をリムーブする(アンリンクする)。次いで、記憶スレッド201は、取り出されたメッセージをアンリンクされたメッセージ記憶要素に記憶させ(ステップ403)、該メッセージをそれに関連するデッドラインに従って要求リスト241に挿入する(ステップ404)。詳細には、挿入されるメッセージ(新たなメッセージ)が非ゼロのデッドラインを有している場合には、記憶スレッド201は、要求リスト241のサーチをその後端から開始し(即ち、該後端が最も緊急性の低い非ゼロのデッドラインを有している)、新たなメッセージを、該新たなメッセージよりも早いデッドラインを有する最初のメッセージの直後で要求リスト241に挿入する。要求リスト241中のメッセージで該新たなメッセージよりも早いデッドラインを有するものが1つも存在しない場合には、該新たなメッセージは要求リスト241の最初に挿入される。
【0083】
しかしながら、新たなメッセージがゼロのデッドラインを有している場合には、記憶スレッド201は、要求リスト241のサーチをその前端から開始し(即ち、該前端が最も緊急性の高いデッドラインを有している)、新たなメッセージを、非ゼロのデッドラインを有する最初のメッセージの直前で要求リスト241に挿入する。要求リスト241中のメッセージで非ゼロのデッドラインを有するものが1つも存在しない場合には、該新たなメッセージは要求リスト241の最後に挿入される。新たなメッセージが要求リスト241に挿入された後、記憶スレッド201は、次いでmutex lock243を解放してリンクリスト242をアンロックする(ステップ405)。記憶スレッド201は、メッセージ待ち行列243が空になるまでメッセージ待ち行列処理400を繰り返す。次いで、記憶スレッド201は、要求リスト241中の優先順位付けされたメッセージの処理へと進む。
【0084】
図8は、要求リスト241中の優先順位付けされたメッセージの記憶スレッド201による処理500を示すフローチャートである。
【0085】
記憶装置131に対して2つ以上の記憶スレッド201が存在する場合、現在の記憶スレッド201は、該記憶装置131に関連するmutex lock243を得て、リンクリストデータ構造242(自由リスト240及び要求リスト241)をロックする(ステップ501)。
【0086】
該データ構造をロックした後、記憶スレッド201が、非ゼロのデッドラインのメッセージにそれらのデッドラインを逸させることなく要求リスト241中のゼロのデッドラインのメッセージをサービスするだけの十分な時間があるか否かを判定する。記憶スレッド201は、要求リスト241中の非ゼロのデッドラインのメッセージの操作についての最も最近の開始時間を計算する(ステップ503)ことによりこの決定を行う。該最も最近の開始時間は、緊急性の最も低い非ゼロのデッドラインを有する要求リスト241の終わりから開始して、各メッセージ毎に、以前のメッセージ及び現在のメッセージに関連する該メッセージのデッドラインについて計算された最も最近の開始時間のうち一層小さいものから、期待されるディスクアクセス(ディスク入出力)時間を減算することで最も最近の開始時間を計算することにより、繰り返し計算される。
【0087】
最も最近の開始時間を計算する場合、該最も最近の開始時間は、最初に、最も最近の開始時間により表現可能な最大整数値へと初期化される(ステップ502)。更に、ディスクアクセス時間は、要求リスト241に関連する特定の記憶装置131から1つのデータブロック(128kbyteのデータ)を読み出すのに要する時間に相当する。
【0088】
次に、記憶スレッド201は、ステップ504の比較を行い、計算された最も最近の開始時間が与えられた場合にゼロのデッドラインのメッセージを操作するのに十分な時間が存在するか否かを判定する。この判定は、現在の時間と、最も最近の開始時間及び特定の記憶装置131からの期待されるディスクアクセス時間(1データブロック(128kbyteのデータ)の読み出しに要する時間)の差とを比較することにより行われる(ステップ504)。
【0089】
現在の時間が、最も最近の開始時間及び期待されるディスクアクセス時間の差よりも小さい場合には、ゼロのデッドラインのメッセージを操作すると共に最も最近の開始時間の要件を依然として満たすだけの十分な時間が存在する。従って、かかる場合には、要求リスト241中の最初のメッセージが処理のためにリムーブされる(ステップ506)。この最初のメッセージは、ゼロのデッドラインのメッセージ又は最も緊急性の高い(即ち最小デッドラインの)メッセージとなる。
【0090】
しかしながら、現在の時間が、最も最近の開始時間及び期待されるディスクアクセス時間の差よりも大きい場合には、ゼロのデッドラインのメッセージを操作すると共に最も最近の開始時間の要件を依然として満たすだけの十分な時間が存在しない。従って、かかる場合には、要求リスト241中の最初の非ゼロのデッドラインのメッセージが処理のためにリムーブされる(ステップ505)。
【0091】
処理のためにメッセージをリムーブした(ステップ505又は506)後、記憶スレッド201は、リンクリストデータ構造242をアンロックし(ステップ507)、次いで該メッセージを処理する(ステップ508)。この処理の後、記憶スレッド201は次いでリンクリストデータ構造242をロックし(ステップ509)、ステップ508で処理されたメッセージにより占有されたメッセージ記憶要素を自由リスト240に挿入する(ステップ510)。この挿入の後、リンクリストデータ構造242はアンロックされる(ステップ511)。
【0092】
記憶スレッド処理500の完了後、記憶スレッド201は、記憶スレッド処理500が開始してからメッセージ待ち行列233に書き込まれたメッセージを取り出すために、図7に示したメッセージ待ち行列処理400へと処理を戻す。
【0093】
記憶モジュールのデータ構造及びアクセス機構
VODシステム100は、ビデオオブジェクトの記憶を管理するためにハイブリッドファイル管理機構を用いる。該ハイブリッドファイル管理機構は、多数の名称付きビデオオブジェクト(即ちビデオファイル)の管理タスクを簡素化すると共に生(raw)ディスクドライブの最大性能の帯域幅を完全に利用するために、中央制御モジュール110上で実行されるオペレーティングシステムによって提供されるファイルシステムサービスと生ディスクアクセス法との両方を含むものである。
【0094】
一般に、ビデオオブジェクト自体のサイズは、該ビデオオブジェクトに関する制御情報(例えば、ビデオ属性、作成日時、及び記憶マップ等)に比べて極めて大きなものである。典型的には、ビデオオブジェクトのサイズはGbyte、その制御情報のサイズはkbyte又はそれ未満といったものである。更に、ビデオオブジェクトについての入出力動作の回数はその制御情報についての入出力動作の回数を大きく上回るものである。VODシステム100は、ビデオオブジェクト自体について記憶及びアクセスを行うための生ディスク法を用いる。このため、オペレーティングシステムのファイルシステムに関連する空間上及び性能上のオーバーヘッドを回避する(バイパスする)ことにより、空間的な要件が最小限となり、性能が最適化される。
【0095】
しかしながら、VODシステム100は、各ビデオオブジェクトに関連する制御情報を記憶するためにオペレーティングシステムのファイルシステムを使用する。かかるファイルシステムを使用することにより、ビデオオブジェクトの名称空間マッピング(name space mapping)の管理、ディレクトリ情報の維持、及び制御情報のための記憶空間の動的な割り当て及び割り当て解除を行うという複雑性が排除される。その上、ソフトウェアのテスト、システムのメンテナンス、及び将来のアップグレードに対する備えが簡単になる。同時に、記憶スペース及び性能に関するオーバーヘッドにより生じる不利益が最小限となる。これは、ビデオオブジェクトと比較して制御データの方がサイズが比較的小さく、及び入出力要求の数が比較的少ないことによる。
【0096】
ここで再び図2を参照する。中央制御モジュール110中のシステムディスク235は、ビデオカタログサブディレクトリ236及びサーバコンフィギュレーションファイル237を含んでいる。
【0097】
ビデオカタログサブディレクトリ236はディレクトリ(例えば”/svsdrive/cat”)であり、複数の名称付きファイルを有している。この場合、各々の名称付きファイルは、記憶モジュール130に記憶されている同じ名称のビデオオブジェクトに対応するものである。かかる名称付きファイルは、ビデオ属性、再生データ速度、及び同時に発生する最大ユーザ数等の制御情報を含んでいる。
【0098】
また、サーバコンフィギュレーションファイル237(例えば”drive−confuguration”)は、記憶モジュール130における記憶装置131の記憶上の割り当てに関する情報を含んでいる。かかる情報には、例えば、生装置名称、ストライプセグメントサイズ、及び冗長性に関する情報等が含まれる。サーバコンフィギュレーションファイル237は、システムのスタートアップ時に読み出され、VODシステム100を構成するために使用される。
【0099】
更に、システムディスク235は、記憶モジュール130における記憶装置131の数と同数の多くのマウントポイントを有している。通常の動作中に、各記憶装置1313の制御区画が該マウントポイントのうちの1つにマウントされる。
【0100】
VODシステム100の構成中に、各記憶装置131は、2つの区画、即ち制御区画及びデータ区画へとフォーマットされる。
【0101】
記憶装置131のフォーマット中に、各制御区画にファイルシステムが作成される。各制御区画は、対応するデータ区画についてセグメントの利用可能性を指定する自由スペースビットマップを含んでいる。
【0102】
制御区画はまた、多数の名称付きファイルを含んでおり、該名称付きファイルの各々は、ビデオオブジェクトのストライプのスペースマップを1つずつ含んでいる。1つのスペースマップは、1つのビデオストライプに含まれている128kbyteのデータブロックの各々に関するアドレス情報のマッピングを行う。従って、スペースマップは、記憶装置131上のビデオストライプの128kbyteのデータブロックの各々の位置を定めるために使用される。一層詳細には、スペースマップは、ビデオオブジェクトのストライプ内の論理ブロック番号を、同じ記憶装置131上のデータ区画内の物理セグメント番号に変換する。スペースマップファイルの名称は、対応するビデオオブジェクトの名称にストライプ番号を付加することにより形成される。
【0103】
各記憶装置131のデータ区画は、生ディスク区画として形成される(即ち、如何なるオペレーションシステム情報も伴わずにディスクがフォーマットされる)。データ区画に対するアクセス及び記憶管理は、完全に中央制御モジュール110の制御の下で行われる。より詳細には、記憶スレッド201がデータ区画のアクセス及び記憶管理を制御する。
【0104】
記憶モジュールにおける記憶装置のフォーマッティング
記憶装置131は複数のグループ(ストライプグループと呼ばれる)に編成され、該各グループには番号(ストライプグループ番号と呼ばれる)が1つずつ割り当てられる。1つのビデオオブジェクトが複数のビデオストライプへと分割される際、それらのビデオストライプは特定のストライプグループに割り当てられる。ビデオオブジェクト内の各ビデオストライプは、該割り当てられたストライプグループ内で別個の記憶装置131に記憶される。記憶モジュール130における各記憶装置131は、特にVODシステム100のためにフォーマットされる。
【0105】
該フォーマット処理の際に、ユーザは、ストライプグループ番号、ストライプ番号、生装置アドレス、ストライプセグメントサイズ、及びフォーマットすべきディスクに関する一次/二次標識等の記憶情報を指定する。ユーザはまた、例えばストライプグループ2及びストライプ4のディスクを”/svsdrive/G2/4”とするといった、所望の名称付け上の約束を用いてマウントポイントを作成する。
【0106】
次に、”/svsdrive/drive−configuration”サーバコンフィギュレーションファイル237がオープンされる。サーバコンフィギュレーションファイル237が存在しない場合には、新たなサーバコンフィギュレーションファイル237が作成される。ユーザにより指定された記憶フォーマット情報は、サーバコンフィギュレーションファイル237に対する妥当性の検査が行われる。該妥当性検査の後、新たなドライブ名及び情報がサーバコンフィギュレーションファイル237に追加される。
【0107】
次に、ディスクが2つの区画にフォーマットされる。区画0(制御区画)は、マウント可能なものとして規定され、該区画0にファイルシステムが作成される。区画1(データ区画)は、マウント不能なものとして規定される。
【0108】
次に、区画0が、以前に生成されたマウントポイントにマウントされる。従って、”freespace.map”等のファイルが、自由スペースビットマップとして区画0に作成される。該ファイルは次いで、区画1における全てのセグメントが利用可能である(未割り当てである)ことを示すよう初期化される(但し、セグメント0を除く)。次いで、区画0がマウント解除される。
【0109】
次に、区画1がオープンされて、ストライプグループ番号、ストライプ番号、ストライプ用のマウントポイント、一次/二次フラグ、活動ディスクフラグ、一次ディスクのための生装置名称、及び二次ディスクのための生装置名称等の情報が、セグメント0に書き込まれる。
【0110】
セグメント0への書き込み後、区画1及びコンフィギュレーションファイルがクローズされる。
【0111】
記憶モジュールのスタートアップ処理
記憶装置131のフォーマット後、VODシステム100をスタートアップさせることが可能になる。該スタートアップ処理は、サーバコンフィギュレーションファイル237”/svsdrive/drive−configuration”をDRAM232に読み込み、次いで、該サーバコンフィギュレーションファイル237中のコンフィギュレーション情報を実際のハードウェア構成と比較することにより妥当性検査を行うことを含む。
【0112】
サーバコンフィギュレーションファイル237の妥当性検査の後、各ディスクが次の処理によって初期化される。
【0113】
(i) ディスクの制御区画(区画0)をその対応するマウントポイント(例えば、”/svsdrive/G3/2”)にマウントし、
(ii) 制御区画からメモリに自由スペースビットマップファイルを読み込み、通常の動作時にスペースの割り当て及び割り当て解除のために該ファイルに対して効率的にアクセス及び更新を行うことができるようにし、
(iii) ディスク上のビデオオブジェクトのストライプに対する後続の通常のアクセスのために該ディスクのデータ区画(区画1)をオープンする。
【0114】
ビデオオブジェクトのオープン
VODシステム100は、スタートアップ処理を完了すると、クライアントプログラム206がビデオオブジェクトを作成するためにFileOpen()ファンクションコールを行うまで待機する。例えば、クライアントプログラム206は、”xyz”と呼ばれるビデオオブジェクトを作成するためにFileOpen()ファンクションをコールすることができる(ステップ620)。
【0115】
FileOpen()コールに応じて、VODシステム100は、図9にフローチャートで示すビデオオープン処理を行って、記憶モジュール130上のビデオオブジェクトをオープンする。
【0116】
該ビデオオープン処理は、ビデオカタログディレクトリ236(例えばディレクトリ”/svsdrive/cat”)中のビデオカタログファイル”xyz”を作成する(ステップ601)ことにより開始する。VODシステム100は次いで、ビデオ属性、データ速度、ビデオ長、及び作成日時等の制御情報を、ビデオカタログファイル”xyz”に書き込む(ステップ602)。
【0117】
次に、外処理は、ストライプグループ内の各記憶装置131毎にスペースマップを生成する(ステップ603)。該スペースマップは、特定のビデオストライプの各データブロックを記憶装置131上のアドレスに変換するものである。該スペースマップは、各記憶装置131の制御区画(即ち区画0)に存在する。該スペースマップファイルの名称は、好適には、ストライプの総数及び特定のストライプ番号をビデオオブジェクト名に付加することにより生成される。例えば、ビデオ”xyz”に6つのストライプが存在する場合、該ビデオオブジェクトのストライプ3に関連するスペースマップファイルに”xyz6−3”という名称を付けることができる。該スペースマップ生成プロセス603は、ビデオオブジェクトの各ストライプ毎に繰り返される。次いで、それらのスペースマップファイルが書き込み動作のためにオープンされる。
【0118】
次いで、作成されてオープンされた各スペースマップファイル毎に、VODシステム100は、記憶装置131に対応するファイル制御ブロックチェーンに制御ブロックを挿入する(ステップ605)。各記憶装置131は、ファイル制御ブロックチェーンを1つずつ有している。ファイル制御ブロックチェーンは、一連の制御ブロックであり、DRAM232中で共有される。制御ブロックは、各ビデオストライプに関連する制御情報のコピーであり、特に、記憶装置131の制御区画に記憶されているスペースマップのコピーを含んでいる。ファイル制御ブロックチェーンにおける制御ブロックがDRAM232に記憶されているため、該制御ブロック中のスペースマップは、各制御区画で共有される実際のスペースマップよりも速いアクセス時間を有するものとなる。
【0119】
次いで、クライアントプログラム206が、ビデオオブジェクトデータの書き込みのためにFileWrite()ファンクションをコールし(ステップ621)、VODシステム100は、各データブロック毎に、データブロックを記憶するための特定のストライプグループ中の記憶装置131を選択する(ステップ607)。記憶装置131を選択した後、VODシステム100は、利用可能なスペースを求めて対応する自由スペースピットマップをサーチすることにより、データブロックのためのメモリの割り当てを行う(ステップ608)。
【0120】
ビデオオブジェクトデータを記憶するためのメモリが割り当てられた後、中央制御モジュール110が、ビデオオブジェクトの各ストライプ毎にファイル制御ブロックを更新し(ステップ609)、また記憶割り当てを反映するよう自由スペースビットマップを更新する(ステップ609)。次に、中央制御モジュール110は、スペースマップに従ってストライプグループ中に存在する各記憶装置131の区画1にビデオオブジェクトデータを書き込むために、生ディスク書き込み動作を生成する(ステップ610)。全てのデータブロックの書き込み後、クライアントプログラム206は、FileClose()ファンクションをコールする。該FileClose()ファンクションを受信した際に、VODシステム100は、各記憶装置131に記憶されているスペースマップを更新する。
【0121】
ビデオオブジェクトの再生
ビデオオブジェクトの再生は、クライアントプログラム206が、StreamOpen()次いでStreamPlay()ファンクションコールを生成することにより開始される。クライアントプログラム206は、例えば、StreamOpen()及びStreamPlayback()ファンクションをコールして、”xyz”という名称が付けられたビデオオブジェクトの再生を開始させることができる。図10は、再生のためにビデオオブジェクトをオープンする処理を示すフローチャートである。
【0122】
StreamOpen()ファンクションがコールされると(ステップ720)、プログラムコード231は、ビデオカタログファイル237(例えば”svsdrive/cat/xyz”)をオープンし(ステップ701)、そのコンテンツ(即ち内容)を読み出す。ビデオカタログファイル237から読み出された情報(ストリームデータ速度、ビデオオブジェクトサイズ等)は、ビデオオブジェクトの再生を制御するために使用される。
【0123】
次いで、ビデオオブジェクトの各ストライプ毎に、プログラムコード231は、(特定のビデオストライプに割り当てられた記憶装置131に記憶されている)スペースマップファイルを読み出して(ステップ702)、制御ブロックを生成する。次いで、プログラムコード231は、ビデオストライプが割り当てられている記憶装置131に関連する制御ブロックチェーンのサーチを行う(ステップ703)。ビデオストライプに関する制御ブロックが制御ブロックチェーン中に既に存在する場合には、プログラムコード231は使用カウントをインクリメントする(ステップ704)。また、該制御ブロックが制御ブロックチェーン中に既に存在しない場合には、プログラムコード231は、該制御ブロックチェーンに該制御ブロックを追加して(ステップ705)、使用カウントを1にセットする。
【0124】
前記サーチ703を行った後、プログラムコード231は、次いで制御ブロックに記憶されているスペースマップ情報を使用して、記憶装置131の区画1に対して生ディスク読み出し動作を行って(ステップ706)、該ビデオオブジェクトデータをメモリバッファ114に読み込む。
【0125】
続いてクライアントプログラム206によってStreamPlay()ファンクションがコールされると(ステップ721)、中央制御モジュール110は、ビデオオブジェクトデータを、その処理のためにメモリバッファ114から分配モジュール120へと送る。プログラムコード231は、ビデオオブジェクトの終わりに達するまで、又はユーザにより指定された終了条件(例えば時間制限)等の阻止条件が発生するまで、生ディスク読み出し動作を続行する(ステップ708)。次いで、プログラムコード231は、コールバックファンクションによってクライアントをコールして、再生の終了をクライアントプログラム206に知らせる。
【0126】
次いで、クライアントプログラム206はStreamClose()ファンクションをコールする。プログラムコード231は、次いで、StreamClose()ファンクションコールに応じてビデオオブジェクトの各ストライプ毎にクローズ処理を行う。
【0127】
該クローズ処理には、制御ブロックチェーン中のスペースマップファイルに関する使用カウントを判定することが含まれる。該判定後、使用カウントがゼロである場合、制御ブロックチェーンから該制御ブロックが削除される。
【0128】
該判定後、プログラムコード231は、ビデオオブジェクトのストライプに関するスペースマップファイルをクローズする。
【0129】
最終的に、プログラムコード231は、ビデオオブジェクトに関するビデオカタログファイル237(例えば”/svsdrive/cat/xyz”)をクローズする。
【0130】
ディスクロード平衡化(スケジューリング)
マルチストリームVODシステム100において、各ビデオ再生ストリームの開始時間が調整されない場合には、読み出しを要求するあまりに多数のメッセージを同時に受けることによって1つ又は2つ以上の記憶装置131がオーバーロードされる可能性がある。かかる事態が発生すると、連続するストリーム再生に関する時間要件を満たすよう適時に操作されないメッセージが生じる可能性がある。これは、ビデオ再生に望ましくない欠陥を生じさせるものとなる。VODシステム100は、好適には、データストライプスキームを用いて多数の記憶装置131へのビデオオブジェクトの記憶をインターリーブさせ、更に、スケジューリング法を用いて各ビデオストリームの開始時間を調整し、これにより複数の記憶装置131の何れもオーバーロードされることがないようにする。該スケジューリング法はまた、ストリームの開始前の時間遅延を最小限にする。
【0131】
好適には、該スケジューリング法は、ストライプグループ中のディスクの各組毎に個別に用いられる。
【0132】
時間帯を用いてビデオストリームの再生の開始を分配し、これによりディスクアクセスの集中(オーバーロード)を回避する。各ビデオストリームは、特定の時間帯で開始するようにスケジューリングされる(割り当てられる)。該スケジューリング法によれば、M個の時間帯が存在する(ここで、Mはストライプグループ中の記憶装置131の数である)。該M個の時間帯は、Z1…Zmと表される。
【0133】
下記の表1は、1ストライプグループにつき4つの記憶装置131を有するシステムにおける好適な時間帯ローテーションを示すものである。
【0134】
【表1】
【0135】
時間は、タイムスロット(Tn)と呼ばれる所定の固定長の時間間隔で測定される。例えば、タイムスロットT1中に、ディスク1が、時間帯Z1に割り当てられたビデオストリームのみを開始させ、ディスク2が、時間帯Z2に割り当てられたビデオストリームのみを開始させる(以下同様)。同様に、タイムスロットT2中には、ディスク1が、時間帯Z2に割り当てられたビデオストリームのみを開始させ、ディスク2が、時間帯Z3に割り当てられたビデオストリームのみを開始させる(以下同様)。従来の方法で行われていたように各ビデオオブジェクトを所定の一定の時間帯(Zi)に割り当てるのではなく、ビデオストリームが開始することになる記憶装置131に関連する最も早い利用可能な時間帯(Zi)にビデオオブジェクトの再生開始が割り当てられる。最も早い利用可能な時間帯(Zi)とは、時間帯Ziに現在割り当てられているビデオストリームに欠陥を決して生じさせることなく再生を操作するのに十分な容量を有する次の時間帯(Zi)である。
【0136】
一好適実施例では、M=6である。別の実施例では、異なる数の記憶装置131が特定のストライプグループに割り当てられている。
【0137】
図11は、1ストライプグループ中にM個の記憶装置131を有するVODシステムによるスケジューリング法800を示すフローチャートである。
【0138】
該スケジューリング法800は、ビデオストリームの再生を開始させるためのStreamPlayメッセージ820をストリームスレッド204が受信した際に開始する。次いで、ストリームスレッド204は、読み出すべき最初のデータブロックを記憶している記憶装置131のディスク番号nを判定する(ステップ801)。次いで、ストリームスレッド204は、現在の時間(t)を獲得する(ステップ802)。
【0139】
次いで、記憶スレッド201は、現在の時間帯を表すインデックス値(C)を計算する(ステップ803)。該インデックス値(C)は次の式に従って計算される。
【0140】
C=(floor(t/T)−n)modM
ここで、
t=現在の時間
T=データブロックを再生するための時間間隔
(即ち、Z=データブロックサイズ/ストリーム再生データ速度)
n=ストライプグループ中の記憶装置の番号
M=ストライプグループ中の記憶装置の総数
Floor=整数値を返すように変数の切り捨てを行って返す関数
該スケジューリング法800は、M個の要素を有する時間帯使用列Z[1…M]を用いる。該M個の要素は、それぞれ、最初はゼロにセットされ、対応するM個の時間帯の各々に割り当てられた活動再生ストリームの数を表す。
【0141】
ステップ803でインデックス値Cを計算した後に、ストリームスレッド204が、インデックスIにCをセットする。ストリームスレッド204は次いで、時間帯使用列ZのI番目の要素の値を、1つの時間帯に割り当て可能な最大ストリーム数と比較する(ステップ804)。1つの時間帯についての最大ストリーム数は、特定の記憶装置131に関するアクセス時間によって決まる。該比較ステップ804が、時間帯が一杯である(即ち、既に最大ストリーム数を有している)ことを示す結果を返した場合には、該方法は、次の式に従ってインデックス値Iを更新する(ステップ805)。
【0142】
I=(I+1)Mod M
ステップ805でインデックス値を更新した後、該方法は比較ステップ804に戻る。
【0143】
しかしながら、比較ステップ804が、時間帯が一杯でないことを示す結果を返した場合には、時間帯使用列Zが更新され(ステップ806)、ビデオストリームが時間帯Tiに割り当てられる(ステップ807)。
【0144】
ビデオストリームが時間帯Tiに割り当てられた後、該ビデオストリームは、次の式による時間遅延の後に再生を開始する。
【0145】
時間遅延=((I+M+C) mod M)+T
この時間遅延は、所望の(選択された)時間スロットで再生を開始するように導入される。
【0146】
ストリームスレッド204は、StreamPause()コールを受信した場合、又はストリームの再生を完了した場合には、該再生ストリームに関する使用値Z1をデクリメントする。
【0147】
RAIDシステム及び方法
VODシステム100は、本発明による安価なディスクからなる冗長ディスクアレイ(RAID)システム及び方法を用いる。本発明によれば、記憶モジュール130は、複数の記憶装置131を使用して複数のビデオオブジェクトを記憶する。本発明によるRAIDシステム及び方法は、ビデオサーバ用途に限定されるものではなく、記憶装置のアレイを使用するあらゆるコンピュータシステム又は構成で有用なものとなる、ということが理解されよう。
【0148】
本発明によるRAIDシステム及び方法は、多数のディスクから構成された記憶サブシステム(記憶モジュール130)が、データアクセスに関して高いスループットを達成すること、及び、1つ又は2つ以上のディスクが故障した際に失ったデータを動的に再構成する際の性能上の不利益を制限することを可能にする。該システム及び方法は、更に、N個のディスクからなるディスクアレイ中のN/(M+1)又はそれ未満の個数の記憶装置131(ディスク)が故障した場合における動的なデータ再構成を達成することにより連続的な動作を可能にする。ここで、(1)Mは、データオブジェクトがディスクアレイに記憶される際に該データオブジェクトのクリエータにより指定された(又はデフォルト値として割り当てられた)冗長ファクタであり、(2)故障した2つのディスクの距離は、Mよりも大きい。
【0149】
該システム及び方法は、N個のディスクへのデータオブジェクトの記憶をインターリーブさせるものである。ここで、Nは、多数の並列ディスク動作を可能にすることにより高性能を得るように、また、M個のデータブロック毎にパリティブロックを作成するために、所望するだけ大きくすることが可能である。なお、Mは、Nよりも小さい整数であり、動的データ再構成時における性能上の不利益を制限するために所望するだけ小さくして(M=1と選択した場合には、RAIDレベル1ミラーと等価になる)、全ての状況で性能レベルが保証されるようにすることができる。Mが小さいということは、冗長データに関する記憶オーバーヘッドが大きいことを意味する。
【0150】
本発明の典型的な用途は、マルチストリームVODシステム100であり、この場合、総ディスクスループットは、数十Mbyte/secから数百又は数千Mbyte/secの範囲のものとなる。ビデオサーバ105に記憶されている1つのビデオオブジェクトは、数十、数百、又は数千ものユーザにより同時に要求される可能性がある。従って、多数のディスクに対するビデオオブジェクトのストライプ処理が可能であることは必須であり、例えば、20個のディスクに対してビデオオブジェクトのストライプ処理を行い、20個のディスク全てが並列動作を行って数百のユーザの要求を満たすようにする。この場合、ビデオオブジェクトに関する冗長ファクタMは、例えば、ディスクが故障した際に失ったデータブロックを再構成するために4個の並列ディスク読み出ししか必要としないように4と選択することが可能である。これは、かかる場合の応答時間を保証するだけでなく、システム全体の作業負荷を殆ど増大させないものとなる。その理由は、それらの4つのディスク読み出しが、失ったデータに密接したものであり、及び通常のビデオ再生中にどうしても必要とされるものであり、従ってそれらは(通常のアクセスと比べて)特別なディスク動作ではない、ということにある。この説明のため、アレイ中にN個のディスク(0〜Nと番号付けされたもの)が存在するものと仮定する。また、好適には、(ビデオオブジェクト等の)データオブジェクトが作成される際に、ストライプブロックサイズで連続的にデータが分配される(データブロックは0,1,2…と番号付けされている)。
【0151】
図12は、本発明に従ってビデオオブジェクトを記憶するRAID方法900を示すフローチャートである。該方法は、最初にセットアップ処理901を行う。セットアップ処理901では、ビデオオブジェクトのクリエータ(例えば、コンピュータプログラム又はユーザ)が該ビデオオブジェクトに関する冗長ファクタMを指定する。Mは、1〜N−1の整数である。ここで、Nは、記憶モジュール130中の記憶装置131の個数である。
【0152】
次いで、セットアップ処理901中に、該方法は、ビデオオブジェクトの属性として冗長ファクタMを記憶する。該方法は更に、インデックス(I)をゼロに初期化し、及びDRAM232上のパリティバッファを規定し初期化する。
【0153】
次いで、該システムは、ビデオオブジェクトに書き込まれるべきデータブロックを取り出す(ステップ902)。各データブロック毎に、該方法は、パリティバッファに対してI番目のデータブロックの排他OR演算を行う(ステップ903)。該方法900は次いで、I番目のデータブロックをJ番目のディスクに書き込む(ステップ904)。ここで、
J={floor(I/M)・(M+1)+(I mod M)} mod N
である。
【0154】
更に、I番目のデータブロックは、J番目のディスク上のビデオオブジェクトのストライプのK番目のブロックとして書き込まれる。ここで、
K= floor({floor(I/M)・(M+1)+(I mod M)}/N)
である。
【0155】
該方法は次いで、現在のデータブロック(I番目のデータブロック)が冗長グループ中の最後のデータブロックであるか否かを判定するためのテストを行う(ステップ905)。該テスト905では下記の判定が行われる。
【0156】
(i)Iが(M−1)以上であるか。
【0157】
(ii)((I+1) mod M)=0であるか。
【0158】
かかる条件が満たされる場合には、該方法900は、J番目のディスクにパリティバッファを書き込む(ステップ906)。ここで、
J={(I+1)/M・(M+1)−1} mod N
である。
【0159】
パリティバッファは、J番目のディスク上のデータオブジェクトのストライプのK番目のブロックとして書き込まれる(ステップ906)。ここで、
K= floor({(I+1)/M・(M+1)−1}/N)
である。
【0160】
J番目のディスクにパリティバッファを書き込んだ後、該パリティバッファがクリアされる(再び初期化される)(ステップ907)。
【0161】
次いで該方法900は、インデックス(I)を1だけインクリメントする(ステップ908)。該方法900は、次いで、ビデオオブジェクトの最後のデータブロックのディスクへの書き込みが完了しているか否かを判定するためのテストを行う(ステップ909)。最後のデータブロックの書き込みが完了していない(即ち、書き込むべきデータブロックが更に存在する)場合には、該方法900は、ステップ902に戻って、ビデオオブジェクトに書き込むべき次のデータブロックを取り出し、該方法900を続行する。また、最後のデータブロックの書き込みが完了している場合には、該方法900は、現在のデータブロック(I番目のデータブロック)が冗長グループ中の最後のデータブロックであるか否かを判定するためのテストへと進む(ステップ910)。該テスト910は、(Imod M)を計算することにより行われる。(Imod M)がゼロでない場合には、冗長グループはM個未満のデータブロックを有しており、従って、該方法900は、ステップ911へと進んで、全てゼロで満たされた1つのデータブロックをJ番目のディスクに書き込む。ここで、
J={floor(I/M)・(M+1)+(I mod M)} mod N
である。
【0162】
ステップ911で、I番目のデータブロックは、J番目のディスク上のデータオブジェクトのストライプのK番目のブロックとして書き込まれる。ここで、
K= floor({floor(I/M)・(M+1)+(I mod M)}/N)
である。
【0163】
次いで、該方法900は、I番目のデータブロックが冗長グループ中の最後のデータブロックであるか否かを判定するためのテストを行う(ステップ912)。次の場合に条件が満たされることになる。
【0164】
(i)Iが(M−1)以上である。
【0165】
(ii)((I+1) mod M)=0である。
【0166】
該条件が満たされる場合には、該方法900は、J番目のディスクにパリティバッファを書き込む(ステップ913)。ここで、
J={(I+1)/M・(M+1)−1} mod N
である。
【0167】
更に、パリティバッファは、J番目のディスク上のデータオブジェクトのストライプのK番目のブロックとして書き込まれる(ステップ913)。ここで、
K= floor({(I+1)/M・(M+1)−1}/N)
である。
【0168】
該方法900は次いでパリティバッファをクリアし(ステップ916)、次いで該データオブジェクトに関するN個全てのストライプをクローズする(ステップ915)。一方、テスト912において条件が満たされなかった場合には、該方法900は次いでIをインクリメントし(ステップ914)、次いでステップ910に戻って、現在のデータブロック(I番目のデータブロック)が冗長グループ中の最後のデータブロックであるか否かを判定する。
【0169】
図13は、本発明に従ってビデオオブジェクトにアクセスするRAID方法1000を示すフローチャートである。該方法1000は、J番目のディスクに記憶されているビデオオブジェクトからI番目のデータブロックを読み出すことをストリームスレッド204が要求した(ステップ1001)際に開始する。該読み出し要求を受けると、該方法1000は、ビデオオブジェクトに関する冗長ファクタMを読み出す(ステップ1002)。次いで、該方法1000は、故障状態を判定するためのテストを行う(ステップ1003)。故障が生じなかったことを該テスト1003が示す場合には、該方法1000は、適当なディスク(J番目のディスク)からデータブロックを取り出す。しかしながら、該テスト1003が故障が生じたと判定した場合には、該方法1000は、データ再構成バッファを全てゼロに初期化する(ステップ1004)。次いで、該方法1000は、インデックスPをゼロに初期化する(ステップ1005)。Pをゼロに初期化することにより、Pは、冗長グループ中の最初のデータブロックを指すように初期化される。
【0170】
次いで、該方法1000は、故障したディスクにP番目のデータブロックが記憶されていないか判定するためのテストを行う(ステップ1006)。故障したディスクにP番目のデータブロックが記憶されていると判定された場合には、該方法1000は、L番目の記憶装置上のストライプのK番目のデータブロックの読み出しへと処理を進める。ここで、
L={J+N−(Imod M)+P} mod N
J={floor(I/M)・(M+1)+(Imod M)} mod N
K=floor({floor(I/M)・(M+1)+(P mod M)}/N)
である。
【0171】
次いで、該方法は、取り出したデータ及び再構成バッファ中に記憶されているデータの排他OR演算を行う(ステップ1008)。次いで該方法は、ステップ1009に進んでインデックスPをインクリメントする。該インクリメントの後、該方法1000は、再構成が完了したか否か(即ち、P>Mか否か)を判定するためのテストを行う(ステップ1010)。再構成が完了している場合には、該方法1000は、再構成バッファ中のデータをストリームスレッド204に返す。また、再構成が完了していない場合には、該方法1000はステップ1006に戻る。
【0172】
上記の説明は、本発明の方法及び実施例の単なる典型例を示すものである。当業者であれば理解されるように、本発明は、その思想及び本質的な特徴から逸脱することなく別の特定形態で実施可能なものである。従って、本発明の開示は、その例示を目的としたものであり、特許請求の範囲に記載の本発明の範囲を限定するものではない。
【図面の簡単な説明】
【図1】本発明によるビデオオンデマンドシステムを示すブロック図である。
【図2】図1のビデオオンデマンドシステムで使用されるプログラムモジュール(処理スレッド)を含む中央制御モジュールを示すブロック図である。
【図3】図2に示す中央制御モジュールで使用される処理スレッドの対話を示す状態図である。
【図4】記憶装置とのアクセスに使用されるデータ構造及びプログラムモジュールを示すフローチャートである。
【図5】図4に示す「要求リスト」の説明図である。
【図6】本発明による図3に示すストリームスレッドの処理状態を示す状態図である。
【図7】各記憶スレッドにより行われるメッセージキュー処理を示すフローチャートである。
【図8】「要求リスト」中のメッセージの記憶スレッドによる処理を示すフローチャートである。
【図9】図1に示す記憶モジュールへの記憶のためのビデオオブジェクトオープン処理を示すフローチャートである。
【図10】再生のためのビデオオブジェクトオープン処理を示すフローチャートである。
【図11】図1に示す複数の記憶装置にわたるアクセス負荷の時間的平衡化のためのスケジューリング方法を示すフローチャートである。
【図12】M個のデータブロック毎にパリティコードを生成するように冗長ファクタ(M)を用いてディスクドライブアレイにビデオオブジェクトを記憶させる方法を示すフローチャートである。
【図13】
図12に示す方法に従って記憶されたデータブロックを取り出す処理を示すフローチャートである。
【符号の説明】
100 VODシステム
101 ビデオクライアント
105 ビデオサーバ
110 中央制御モジュール
120 分配モジュール
130 記憶モジュール
150 制御入力ソース
【発明の属する技術分野】
本発明は、一般にリアルタイムサーバシステム及びプロセスに関し、特に、クライアントロケーションにビデオストリームを分配するシステム及びプロセスに関する。
【0002】
【従来の技術】
データの記憶、読み出し及び圧縮技術の改善に伴い、一般にはリアルタイムサーバシステムの使用が、特にビデオオンデマンドシステムの使用が、広く普及してきている。ビデオオンデマンド用途には、歓待施設(即ち、ホテル、モーテル、コンドミニアム、及び病院)、カラオケ(一般に音声記録の再生を伴うものであり、画像情報の再生を伴うものもある)及びインフォメーションセンターにおけるコンテンツ(即ち内容)の分配が含まれる。ビデオオンデマンドシステムは、選択されたビデオファイルを記憶し(一般に各ビデオファイルは映画、簡単な情報表示、又は他の種類のビデオコンテンツに相当する)、ユーザによる制御の下で選択されたビデオファイルを読み出す(即ち再生する)。従って、ビデオオンデマンドシステムを使用する場合、一人又は複数のユーザは、クライアントネットワークを介してビデオファイルを選択しアクセス(即ち再生)する。更に、従来のビデオオンデマンドシステムは、一般に、再生、停止、一時停止、巻戻し、及び早送り等の従来のビデオカセットレコーダ(VCR)に見られるような様々な制御機能をユーザに提供する。ここで、「ビデオ」という用語は、音声部分及び画像部分を有するコンテンツ、又は音声のみのコンテンツ、又は画像のみのコンテンツ、又はその他の種類のディジタルコンテンツを含むものである、ということが理解されよう。
【0003】
【発明が解決しようとする課題】
ビデオオンデマンドシステムに関するチャネル要件(即ち、サーバにより分配されるビデオストリームの数)は、各々の特定のビデオオンデマンドシステムによって異なる。例えば、大きなホテルは、小さなホテルよりも多数のチャネルを必要とし、インフォメーションセンターは、そのインフォメーションセンターの場所及び提供する情報の種類に基づき、サービス対象となるクライアントの数が多かったり少なかったりする。更に、ビデオオンデマンドシステムは、始終大きなチャネル容量が要求される場所に設置される場合がある。例えば、歓待施設(即ち、ホテル、モーテル、コンドミニアム、及び病院)に設置されたシステムは、初期は少数の部屋または装置に対してサービスを行うことになるが、設備のサイズが大きくなると、または該サービスに気づいて消費者が増大すると、システムの需要が増大することになる。この問題は、おそらく、付加的なクライアントロケーションを提供するために必要とされる物理的なインフラを回避することができないインフォメーションセンター等の用途においては更に深刻なものとなる。
【0004】
更に、ビデオオンデマンドシステムのビデオ記憶要件は、特定の用途によって異なるものとなる。例えば、歓待施設は、長編ビデオ映画を多数の選択を提供することを所望し、従って、かなり大容量の記憶要件を有することになる。一方、インフォメーションセンターは、それよりもはるかに小さな記憶要件を有する傾向にあり、情報コンテンツが長編映画と比較して小さい場合には特にそうである。
【0005】
従来の多くのビデオオンデマンドシステムは一定の高いコストアーキテクチャを有するものである。特に、従来の幾つかのビデオオンデマンドシステムは、多数のビデオストリームのリアルタイム分配を行うために、ハイエンドワークステーション又は特に高速のコンピュータを使用している。その他の従来のビデオオンデマンドシステムでは、多数のビデオストリームを分配するための処理要求に合わせるために、イベントのマルチタスク処理用の多数のプロセッサを備えたコンピュータを用いている。従来のビデオオンデマンドシステムは、ハイエンドの及び/又は特殊なハードウェアを使用するため、一般に極めて高コストのものとなる。かかる従来のビデオオンデマンドシステムは、指定された最大数のビデオストリームに適応するように一般に設計され、従って、その容量を越えて容易に拡張させることはできない、という欠点を更に有するものである。
【0006】
様々なビデオオンデマンド用途の異なる要件に合わせて調整可能であり、個々のサーバロケーションの要求の増大に合わせて拡張可能である、単一の低コストのビデオオンデマンドシステムを提供することが望ましい。
【0007】
従って、多数のビデオストリームやその他のディジタルデータストリームを並行して分配するための、調整可能及び拡張可能でコスト効率の良好な方法及びプロセスが必要とされている。
【0008】
更に、一般にコンピュータシステムの重要な部分、特にビデオオンデマンドシステムの重要な部分は、その大容量記憶装置部分である。ビデオサーバ(ビデオオンデマンド)に関して言えば、大容量記憶装置部分は、ビデオコンテンツを記憶する。別の種類のコンピュータシステムの場合、大容量記憶装置部分は、他の種類のディジタルコンテンツ、例えば、コンピュータプログラム、データベース、画像、データ等を記憶する。特定の用途がビデオオンデマンドシステムにおけるものであろうとそれ以外の種類のコンピュータシステムにおけるものであろうと、大容量記憶装置のサイズ、処理速度、及びコストは、システムの仕様、性能、及びコストに影響を及ぼすものとなる。
【0009】
従来の大容量記憶アーキテクチャには、安価なディスクドライブからなる冗長ディスクドライブアレイ(RAID)を用いるものがある。従来、かかるアーキテクチャは、典型的には、従来入手可能な高性能で大きくて高コストのディスクドライブよりも小さくて安価で信頼性のあるドライブからなるドライブアレイを用いている。これらの従来のRAIDシステムの中にはストライピングを用いたものがあり、この場合には、データオブジェクトが「複数のデータストライプ」へと分割され、次いでそれらのデータストライプが、並列ディスク動作によって性能の改善を達成するためにディスクアレイ上にインターリーブされる。また、各データストライプは、ディスクアクセスを促進させるだけのサイズのデータブロックへと更に副分割される場合もある。一般に、従来のディスクアレイは、信頼性を増大させるために、ミラー又はパリティベースの機構といった形の冗長性を取り入れたものとなる。
【0010】
詳細には、従来のRAIDレベル1はミラー処理を用いており、その他の一層高レベルの従来のRAIDシステムは、エラー訂正用のパリティブロックを用いている。従来、このパリティブロックは、1つのストライプスライスにわたる(即ち、ディスクアレイにわたる)データブロックの排他ORをとることによって生成される。従来、各パリティブロックは、その関連するデータストライプとは異なるディスクに記憶される。従って、ディスクの故障が生じた場合には、その故障したディスクに記憶されているデータブロックは、そのパリティブロックを使用して(そのデータストライプスライス内の他の全てのデータブロックに対応するパリティブロックの排他OR演算を行うことにより)再構成される。
【0011】
従って、N個のディスクを備えたRAIDシステムにおいて、ディスクが故障した場合には、失われた1つのデータブロックを再構成するために(N−1)個のディスクから(N−1)個のデータブロックを読み出す必要がある。(N−1)個のディスクについての読み出し動作は、サブシステムのロード性能が許容するのであれば応答時間の低減のために並列に行われるが、かかる故障発生時にはやはりかなり大きな負荷がロード性能に課されることになる。システムのディスク数(N)が増えるにつれ、故障モードにおける性能上の不利益が悪化する。従って、性能上の不利益を制限するために、ディスク数(N)を比較的小さい値に制限することが望ましい。
【0012】
一方、RAIDシステムの高いスループットを得るために、通常のデータアクセス時には多数(N個)のディスクを有して、多数のディスク動作を並列に行うことができるようにすることが望ましい。この側面は、故障モードで少数のNが望ましいことと矛盾する。従って、故障モードで許容不能な大きな性能上の不利益を伴うことなくシステムの信頼性及び性能を向上させるRAIDシステム及び方法が必要とされている。
【0013】
【課題を解決するための手段】
本発明によれば、従来の低コストの構成要素を用いて多数のビデオストリームをリアルタイムで分配する、調整可能で拡張可能なビデオサーバシステムが提供される。このシステムは、1つ又は2つ以上の中央制御モジュール(CCM)と、1つ又は2つ以上の分配モジュール(DM)と、1つ又は2つ以上の記憶モジュール(SM)とを備えている。各中央制御モジュールは、従来の2つのスモールコンピュータシリアルインターフェイス(SCSI)コントローラカードを備えた従来のコンピュータであり、その各SCSIコントローラカードは、「開始(initiator)」モードで動作して、1つ又は2つ以上の分配モジュール及び記憶モジュールとのインターフェイスをとる。各中央制御モジュールはまたローカルメモリを備えており、このローカルメモリは、分配モジュールへの分配に先立って記憶モジュールから取り出されたデータを記憶するための中間バッファメモリとして使用される。各中央制御モジュールは更に、1つのユーザ(クライアント)または1つのクライアントネットワークとの結合を行うための通信インターフェイスを備えている。各中央制御モジュールは、クライアントから受信したコマンドを処理し、多数のビデオストリームの再生に関するスケジューリングを行い、ビデオファイル構造を管理し、1つ又は複数の分配モジュールへのビデオデータの流れを制御して、リアルタイム再生を確実にする。
【0014】
また、各分配モジュールは、「ターゲット」モードで動作する従来のSCSIコントローラカードを備えた従来のコンピュータである。SCSIコントローラカードを備えていることに加え、各分配モジュールは、クライアントへの分配に先立ってビデオストリームの処理を行う1つ又は2つ以上の処理モジュールを備えている。一実施例では、該処理モジュールはビデオデコーダであり、その各々は、ビデオデータストリームの解凍のためのものである。この実施例の場合、該ビデオデコーダは、従来のMPEG−1又はMPEG−2デコーダである。
【0015】
別の実施例では、該処理モジュールは、従来のネットワークインターフェイスカードであり、該カードは、ビデオデータストリームのフォーマッティングや、イーサネット、ATM、又はPSTNネットワーク等を介したクライアントへのビデオデータストリームの供給を行うものである。更に、各分配モジュールは、分配モジュール上での処理に先立ってビデオデータを記憶するためのビデオバッファとして使用されるローカルメモリを備えている。
【0016】
各記憶モジュールは大容量記憶媒体であり、該大容量記憶媒体は、ビデオデータ等のディジタル情報を記憶するよう構成されたものであり、標準的なSCSIプロトコルを用いて中央制御モジュールによってアクセスされる。各記憶モジュールは、例えば、ハードディスク、又はCD−ROMドライブ、又はハードディスク列(bank)、又はCD−ROM列、又はその他の種類の大容量記憶媒体である。
【0017】
更に、本発明によれば、中央制御モジュールは、ハイブリッドファイル管理スキームを用いて、データアクセス性能の向上及びメモリ利用の改善を達成する。該ハイブリッドファイル管理スキームは、中央制御モジュール上で動作する従来のオペレーティングシステムと、記憶装置に記憶されている未処理ビデオデータの制御及びアクセスを直接行うための、従来のファイルマネージャをバイパスするカスタマイズされたファイル管理ソフトウェアとの両方を用いるものである。このハイブリッドスキームは、未処理のビデオデータ並びにビデオ記憶マップに関する制御情報を管理するためにオペレーティングシステムのファイル管理サービスを利用するビデオデータに対するアクセスタイムを最適化する。
【0018】
本発明の別の側面によれば、中央制御モジュールは、優先順位法(prioritization method)を実施して、サーバシステムにより生成される複数のビデオデータストリームの間で、各記憶モジュールに含まれる記憶装置のアクセスの優先順位付けを行う。複数のビデオデータストリームによって複数の読み出し要求が生成される度に、優先順位法は、その読み出し要求(読み出しメッセージ)が緊急のものか非緊急のものかを各読み出し要求ごとに決定する。所定時間内に要求のサービスを行えなかったことによりビデオデータストリームの再生に問題が生じる場合には、該要求は緊急のものである。また、同様の場合に問題が生じないのであれば、該要求は非緊急のものである。好適には、メッセージが緊急であるか非緊急であるかは、ビデオデータストリームの現在の状態によって決定される。例えば、ビデオデータストリームが現在一時停止されており、要求がその再生を再開させるものである場合には、その要求は非緊急のものである。しかしながら、ビデオデータストリームが再生状態にある場合の要求は緊急のものである。優先順位法は、次いで、各緊急メッセージ毎の最終デッドラインを計算する。優先順位法は、次いで、如何なる緊急メッセージもその最終デッドラインを逸することなく非緊急の要求のサービスを行うのに十分な時間が存在するか否かを判定する。該条件が満たされる場合には、システムは非緊急の要求を取り扱い、該条件が満たされない場合には、緊急の要求が次に処理される。
【0019】
本発明の別の側面によれば、サーバシステム及び方法は、ディスクロード平衡化法を用いて、特定のビデオデータストリームの再生の開始のスケジューリングを行う。該ディスクロード平衡化法は、複数の時間帯を規定する。ここで、好適には、該時間帯の数は記憶装置の数に対応する。該ディスクロード平衡化法は、各ビデオデータストリームを各時間帯に1つずつ割り当てて、ビデオデータストリームの処理を分配する。該ディスクロード平衡化法は、かかる割り当てを、先ず、ビデオデータストリームを提供することになる記憶装置を識別し、次いで、その記憶装置によりサービスされることになる次に「利用可能な」時間帯を判定することにより行う。更なるビデオデータストリームを扱う容量(帯域幅)を有する場合には、該時間帯は「利用可能な」ものとみなされる。該ディスクロード平衡化法は次いで、その「利用可能な」時間帯を新規に開始されるビデオデータストリームに割り当てる。
【0020】
本発明の更に別の側面によれば、サーバシステム及び方法は、別個のディスクからなる冗長ディスクアレイ(RAID)システム及び方法を用いてビデオオブジェクトの記憶を行う。該RAIDシステム及び方法は、ビデオオブジェクトを複数のデータブロックへと分割し、それらのデータブロックを、ストライピング処理を用いて(ストライプ化された構成で)複数の記憶装置にわたって(即ち、N個の記憶装置にわたって)記憶する。該システム及び方法によれば、冗長ファクタ(M)が選択される。該冗長ファクタMは、信頼性、及びシステム動作中の故障モードでのサービス時間を決定する。Mは、N未満の整数となるように選択される。本発明のこの側面によれば、M個のデータブロックが記憶される度に、エラー回復ブロックが計算される。好適には、該エラー回復ブロックは、該M個のデータブロックについて排他OR演算を行うことにより生成されたパリティコードとなる。Mに比べてNが大きいと、ディスクの故障に遭遇した際に、エラー回復処理が、冗長ファクタMによって、必要とされる記憶装置のアクセスコールの数に好適に制限される。一実施例では、エラー回復ブロックは、データブロックとインターリーブされて記憶されるが、それに関連するデータは、その記憶装置とは異なる記憶装置に記憶される。かかる本発明の特徴は、ビデオデータ以外のディジタルデータを記憶するためのシステム及び方法に適用可能なものであり、また、サーバシステム以外の記憶システムにも適用可能なものである、ということが理解されよう。
【0021】
本発明の更に別の側面によれば、中央制御モジュール、分配モジュール、及び記憶モジュールは、システムの柔軟性及び拡張性を向上させるためにラックマウント(rack mounted)システムにおけるラックマウント(rack mounting)にもそれぞれ適用可能である。
【0022】
本明細書に記載の特徴及び利点は、その全てを含むものではなく、当業者であれば、図面、発明の詳細な説明及び特許請求の範囲を参照することにより、更に多くの特徴及び利点が自明であろう。更に、本書で使用する用語は、基本的に、読み易さ及び本発明の例示を目的として選択されたものであって、本発明の要旨に制限を加えるために選択されたものではなく、かかる本発明の要旨は特許請求の範囲に基づいて決定されるべきである、ということに留意されたい。
【0023】
【発明の実施の形態】
図1は、本発明によるビデオオンデマンド(VOD)システム100を示すブロック図である。VODシステム100は、制御入力ソース150及びビデオサーバ105を備えている。ビデオサーバ105は、1つ又は2つ以上の中央制御モジュール110と、1つ又は2つ以上の分配モジュール120と、1つ又は2つ以上の記憶モジュール130とを備えている。該VODシステム100が調整可能及び拡張可能なものであるため、特定用途で使用される中央制御モジュール110、分配モジュール120、及び記憶モジュール130の数は、分配すべきストリームの数や特定用途におけるビデオ記憶要件等のファクタによって決まる。一好適実施例では、ビデオサーバ105は、1つの中央制御モジュール110と、1つの分配モジュール120と、1つの記憶モジュール130とを備えている。更に、調整性及びシステムの拡張性を促進させるために、ビデオサーバ105は好適にはラックマウントシステムとする。この場合、各サブコンポーネント(中央制御モジュール110、分配モジュール120、及び記憶モジュール130)はラックマウント用に適応される。
【0024】
制御入力ソース150は、記憶されているビデオ情報(ビデオデータ)の取り出し及び表示を制御するための制御信号を生成する任意の入力ソースである。典型的な制御入力ソース150は、キーボード、遠隔制御装置、マウス、完全なコンピュータシステム、又はビデオサーバ105に連結されたクライアントコンピュータのネットワークを備えるものとなる。本好適実施例では、制御入力ソース150は、ビデオサーバ105に連結されたビデオクライアント101のネットワークである。各ビデオクライアント101は、ビデオ制御信号を生成するコンピュータである。従って、ビデオクライアント101は、ビデオサーバ105に接続されたビデオ要求信号及び制御信号を生成することによって、VODシステム100により提供される複数のビデオのうちの1つのビデオの選択及びその再生の制御を行うために使用される。ビデオクライアント101は、好適にはイーサネットネットワークを使用してビデオサーバ105に接続される。しかしながら、本発明によれば、ビデオクライアント101をビデオサーバ105に接続する他の手段を使用することも可能である、ということが理解されよう。例えば、ビデオクライアント101は、ローカルエリアネットワーク、無線通信リンク、光リンク、又は他の通信手段を使用してビデオサーバ105に接続することが可能である。
【0025】
ここで再び図1を参照する。記憶モジュール130は、1つ又は2つ以上の記憶装置131を備えている。該記憶装置131の各々は、好適には、従来のハードディスクドライブ、CD−ROMドライブ、又はテープドライブ等の大容量記憶装置である。この好適実施例では、記憶装置131は、Seagate, Inc.によって製造された大容量(4〜9GByte)ディスクドライブである。記憶モジュール130は、複数のビデオオブジェクト(ビデオシーケンス)を記憶する。一実施例では、ビデオオブジェクトの各々は長編のビデオ映画である。別の実施例では、ビデオオブジェクトは別の形態のビデオコンテンツである。ここで、「ビデオ」という用語は、音声部分及び画像部分を有するコンテンツ、又は音声のみのコンテンツ、又は画像のみのコンテンツ、又はその他の種類のディジタルコンテンツを含むものである、ということが理解されよう。従って、用語「ビデオ」は、ディジタル音楽記録、音声記録、無声画像セグメント等も含むものである。
【0026】
本発明の好適実施例は、「ストライピング」を用いた本発明のRAID技術に従って各ビデオオブジェクトを記憶するものであり、これについては後述する。
【0027】
ストライピングを用いて、各ビデオオブジェクトが複数の「ビデオストライプ」へと分割され、それら各ビデオストライプが異なる記憶装置131に記憶される。更に、各ビデオストライプが「データブロック」と呼ばれる複数の128kbyteのデータチャンク(chunk:塊)へと副分割される。
【0028】
中央制御モジュール110は、重いマルチスレッドのオペレーティングシステム(好適にはSun MicrosystemsのオペレーティングシステムSOLARIS)をCPU112(好適にはIntel Corporationにより製造されたPENTIUMプロセッサ)上で実行する高性能パーソナルコンピュータ用マザーボードである。該マザーボードは、ASUSTek Computer Inc.により製造されたものであり、MiTAC Industrial Corporationにより製造されたラックマウント式シャシにマウントされる。該マザーボードはまた、SCSIコントローラ及びイーサネットコントローラ等の周辺装置との接続のためのペリフェラルコントロールインターフェイス(PCI)バスを備えている。
【0029】
各中央制御モジュール110は、中央制御モジュール110と記憶モジュール130との間、及び中央制御モジュール110と分配モジュール120との間との通信を促進させるためにイニシエータ111,113を備えている。イニシエータ111,113は、Adaptec, Inc.(Milpitas,California)により製造された従来のSCSIコントローラカードであり、PCIバスを用いてCPU112に接続される。メモリバッファ114は、CPU112に直接接続されたダイナミックランダムアクセスメモリ(DRAM232(図2参照))内に割り当てられたメモリ空間である。好適には、メモリバッファ114はそれぞれ128kbyteのメモリであり、従って、各メモリバッファ114は1データブロック全体を記憶する大きさとなっている。
【0030】
また、分配モジュール120は好適には、Tyan Computer Corporationにより製造された高性能パーソナルコンピュータ用マザーボードである。該マザーボードは、MiTAC Industrial Corporationにより製造されたラックマウント式シャシにマウントされる。該マザーボードは更に、従来のペリフェラルコントロールインターフェイス(PCI)バスを備えている。各分配モジュール120は、ターゲット124、CPU125、複数のビデオプロセッサ121、及びメモリバッファ126を備えている。CPU125は、好適には、Intel Corporationにより製造されたPENTIUMプロセッサである。ターゲット124は、Advansys,Inc.(San Jose,California)により製造されたモデルABP−940SCSIコントローラ等の従来の「ターゲットモードが可能な」SCSIコントローラカードであり、PCIバスを用いてCPU125に接続される。ここで、「ターゲットモードが可能な」とは、イニシエータモードで動作しているSCSIコントローラからデータを受信するためにターゲットモードで動作するように適応させることが可能なことを意味している。中央制御モジュール110と分配モジュール120とのインターフェイスをとるために従来のSCSIコントローラカードを使用することにより、中央制御モジュール110が従来のディスクドライブに対して書込みを行っている際に、その中央制御モジュール110が分配モジュール120にデータを書き込むことが可能になり、これにより、システムのコスト及び複雑さが低減され、システムの信頼性が向上する。
【0031】
ビデオプロセッサ121は、CPU125の制御の下でメモリバッファ126から(ビデオストリームを形成する)ビデオデータを受信し、次いで、クライアント101に分配するために各ビデオストリームを処理する。一好適実施例では、ビデオプロセッサ121は、Zoran Corporation(Santa Clara, California)により製造された従来のMPEG−1デコーダやMatrox Electronic Systems, LTD(Canada)により製造された従来のMPEG−2デコーダ等の従来のモーションピクチャエキスパートグループ(MPEG)デコーダである。MPEG−1デコーダ又はMPEG−2デコーダの選択は、記憶モジュール130に記憶されるビデオデータの圧縮に使用される圧縮技術によって決定される。
【0032】
本発明の一好適実施例は、分配モジュール120に12個のビデオプロセッサ121を有している。好適には、各ビデオプロセッサ121が、それぞれ1つのビデオストリームについて動作する。更に、該好適実施例では、各ビデオプロセッサ121の出力は、NTSC規格及びPAL規格の何れにも互換性を有する(クライアント101の)ビデオモニタに直接接続するためのNTSC/PAL複合信号である。
【0033】
別の実施例では、ビデオプロセッサ121はMPEG解凍は行わないが、その代わりに他の種類の解凍を行う。更に別の実施例では、ビデオプロセッサ121は、イーサネット、ATM、PSTNネットワーク等のネットワークとのインターフェイスをとるように、又は別のクライアント分配手段とのインターフェイスをとるように、ビデオストリームの処理を行う。これらの実施例において、もし必要であれば、ビデオ解凍は、クライアントのロケーションにおいて分配モジュール120上で、又はビデオストリーム経路に沿った別のポイントで行われる。
【0034】
中央制御モジュール110は、SCSIバス141により記憶モジュール130と接続される。同様に、中央制御モジュール110は、SCSIバス142により各分配モジュール120と接続される。該SCSI通信は、中央制御モジュール110に配設されたイニシエータ111,113、並びに記憶モジュール130及び分配モジュール120の一部をなす対応するSCSIコントローラ(分配モジュール120ではターゲット124、記憶モジュール130ではSCSI回路(図示せず))によって操作される。記憶モジュール130及び分配モジュール120上のSCSIコントローラは、「ターゲット」モードで動作する。分配モジュール120のSCSIインターフェイスは、コスト効率の良いインターフェイス機構であり、これにより、各中央制御モジュール110が、あたかもハードディスクドライブ又はその他の従来のSCSI互換装置にデータを書き込んでいるかのように分配モジュール120にデータを分配することが可能になる。
【0035】
本好適実施例では、記憶モジュール130との通信を行うために単一のイニシエータ113を使用したが、別の実施例では、VODシステム100において一層多数の記憶モジュール130が使用される場合のインターフェイス要件を満たすように、複数のイニシエータ113を用いることが可能である。同様に、本好適実施例では、分配モジュール120との通信を行うために単一のイニシエータ111を使用したが、別の実施例では、VODシステム100において一層多数の分配モジュール120が使用される場合のインターフェイス要件を満たすように複数のイニシエータ111を用いることが可能である。
【0036】
本好適実施例では単一の中央制御モジュール110を使用したが、本発明の原理は、多数の中央制御モジュール110を備えたVODシステム100にも適用することができる。ビデオサーバ105中に多数の中央制御モジュール110を配設することにより、冗長動作を行うようにVODシステム100を構成することが可能となり、これにより、システムの信頼性及び故障に対する許容性が改善される。更に、多数の中央制御モジュール110を備えた構成はシステムの帯域幅を増大させるものとなり、これにより、VODシステム100によって生成される最大ビデオストリーム数が増大する。
【0037】
好適なシステム構成の1つは、9個の分配モジュール120のサービスを行う単一の中央制御モジュール110を備えたものとなり、この場合、各分配モジュール120は、12個のビデオプロセッサ121を有している。従って、この好適な構成は、最大108のビデオストリームを同時に生成するものとなる。別の構成では、12個ではなく8個のビデオプロセッサ121を用いており、従って、最大96のビデオストリームを分配する。
【0038】
各中央制御モジュール110は、1つ又は2つ以上のクライアント101からのビデオ制御コマンドを受信して処理する。このビデオ制御コマンドには、例えば、再生、記憶、一時停止、早送り、巻戻し、ビデオ選択等が含まれる。より詳細に言えば、中央制御モジュール110上のCPU112は、受信したビデオ制御コマンドをデコードし、そのデコードされたコマンドを実行するために記憶モジュール130及び分配モジュール120を制御する。中央制御モジュール110は、メモリバッファ114に対して出入りするビデオデータの非同期の伝送の管理及びスケジューリング等の機能を行う。
【0039】
従来、ビデオサーバシステム(即ち、ビデオオンデマンドシステム)は、2つのカテゴリー、即ち、ストリーミングシステム及び非ストリーミングシステムのうちの1つに含まれる。ストリーミングシステムは、再生要求に応じて明らかに連続するビデオストリームを分配し、これは、再生を変更する(即ち、一時停止や停止等)ための別のユーザコマンドが受信されるまで、またはファイルの終わりに達するまで行われる。また、非ストリーミングシステムでは、ビデオサーバは、進行中のビデオストリームを分配することはなく、その代わりにクライアントの要求に応じてビデオチャンク又はビデオセグメントを分配する。好適には、クライアント101からの要求は、ユーザのための明らかに連続する「リアルタイムの」ビデオストリームを生成するように十分頻繁に発生するものであり十分に迅速なものでなければならない。VODシステムの好適実施態様は、ストリーミングタイプのビデオサーバである。ストリーミングタイプのビデオサーバは、非ストリーミングタイプのビデオサーバと比べてクライアント101とビデオサーバ105との間で必要となる対話が少ないという利点を有するものである。従って、ストリーミングタイプのビデオサーバは、エラーの生じる傾向が低く、多数のチャネルに適応することができ、及びクライアント101で必要とする複雑性が低いものとなる。
【0040】
VODシステム100は、多数のバッファ機構を使用してリアルタイムのビデオストリームを分配する。CPU112の制御下で、データが記憶モジュール130からメモリバッファ114へ(好適には128kbyteのチャンクで)伝送される。このデータが次いで、やはりCPU112の制御下で一層小さなチャンク(好適には32kbyte)で分配モジュール120のメモリバッファ126へと伝送される。ここで、CPU125の制御下でデータが一層小さなチャンク(好適には32kbyte)で各ビデオプロセッサ121へ伝送される。各ビデオプロセッサ121は、32kbyteのデータチャンクを処理して、クライアントロケーションに分配するためのビデオストリームを生成する。
【0041】
好適には、記憶モジュール130と中央制御モジュール110との間、及び中央制御モジュール110と分配モジュール120との間のデータ伝送は、高速のメモリ伝送を得るために、及び該伝送中におけるCPUを用いた動作を回避するために、ダイレクトメモリアクセス(DMA)伝送モードを用いて実行される。
【0042】
好適には、分配モジュール120は、ターゲットモードで(ターゲットモードでSCSIインターフェイスを使用して)中央制御モジュール110とのインターフェイスをとるので、ビデオデータ及びそれに伴う制御コマンドがアドレススキームを用いて分配モジュール120に送られる。各ビデオストリームは、分配モジュール120上の指定されたアドレス範囲に割り当てられる。従って、中央制御モジュール110が特定のビデオストリームについてビデオデータの書き込みを行っている場合には、特定のデータストリームを固有に指定するために分配モジュール120上の宛先アドレスが使用される。同様に、各ビデオストリームに関する進行、エンコード終了、及び一時停止等の制御情報は、特定のビデオストリームに対して各々マッピングされた特定の事前指定されたアドレスに書き込まれる。各々のビデオストリーム及びそれに関連する制御情報のアドレスマッピングは、予め規定される。代替的には、各ビデオストリームのデータと各ビデオストリームに関する制御情報とのマッピングを行うアドレスマップが、システムのスタートアップ中に分配モジュール120から受信され、次いで中央制御モジュール110で記憶される。
【0043】
図2は、本発明による中央制御モジュール110を示すブロック図である。複数のクライアント101から受信される制御コマンドのサービスを行うために、中央制御モジュール110は、CPU112に接続されたDRAM232に記憶されているプログラムコード231を使用してマルチタスク処理を行う。DRAM232はまた、メモリバッファ114(図1にも示されている)を形成する。DRAM232は、中央制御モジュール110に含まれる従来のコンピュータ用マザーボード上に配設されたメモリ拡張スロットに取り付けられたDRAMである。プログラムコード231は、CPU112によって実行されるマルチプロセシングスレッド210〜205を含んでいる。マルチプロセシングスレッド210〜205は、リモートプロシージャコール(RPC)スレッド202、コールバックスレッド203、ストリームスレッド204、記憶スレッド201、及びファイルスレッド205を備えている。各スレッドは、CPU112により実行されるコンピュータプログラムを介したアクティブパスである。
【0044】
図2において、中央制御モジュール110はまた、該中央制御モジュール110に固有のシステムハードディスク235を備えている。該システムハードディスク235は、DRAM232にロードするためのプログラムコード231を記憶する。該システムハードディスク235は、更に、サーバコンフィギュレーションファイル237、及びビデオカタログサブディレクトリ236を記憶する。
【0045】
図3は、マルチプロセシングスレッド201〜205間の関係を示す状態図である。マルチプロセシングスレッド201〜205は、クライアント101により要求された際に多数のビデオストリームを再生し及び様々な制御コマンド(即ち、一時停止、停止、巻戻し等)を実行するために、(クライアント101上で実行される)クライアントプログラム206により生成されるファンクションコールを受信して処理する。
【0046】
リモートプロシージャコール(RPC)スレッド202は、クライアントプログラム206に対してアプリケーションプログラムインターフェイス(API)を提供し、よって、クライアントプログラム206から受ける制御入力(ファンクションコール)の受信を操作する。中央制御モジュール110は、ビデオサーバ105とクライアント101との間のインターフェイスを管理するために、単一のRPCスレッド202を生成(実行)する。
【0047】
中央制御モジュール110は、各出力ビデオストリーム毎にストリームスレッド204を(CPU112上で)生成し実行する。各ストリームスレッド204は、1つのビデオストリームの再生を管理する。
【0048】
コールバックスレッド203は、CPU112によって実行され、ストリームスレッド204により生成されるメッセージを操作する。該メッセージは、「ファイルの終わり」またはエラー状態が生じた結果として生成されるものである。
【0049】
ファイルスレッド205は、CPU112によって実行され、ビデオオブジェクトの作成、削除、書き込み、及び読み出しを含むファイル管理を操作する。中央制御モジュール110は、多数のファイルスレッド205を有している。
【0050】
各記憶装置131は、1つ又は2つ以上の記憶スレッド201によって管理される。記憶スレッド201は、ストリームスレッド204、ファイルスレッド205、及びRPCスレッド202からのメッセージ要求を受信し、次いで適当なディスクアクセス機能及びデータ取り出し機能を行うことにより、そのメッセージ要求のサービスを行う。所与の記憶装置131を管理する記憶スレッド201の数は、サーバコンフィギュレーションファイル237で指定される。好適には、2つの記憶スレッド201が各記憶装置131を管理する。
【0051】
ここで、図2を再び参照する。各記憶装置131は、関連するメッセージ待ち行列233をそれぞれ1つずつ有している。該メッセージ待ち行列233は、ディスク入出力要求メッセージを記憶するためのファーストインファーストアウト(FIFO)メッセージパイプ(待ち行列)である。ストリームスレッド204は、特定の記憶装置131からのビデオデータの読み出しを必要とする場合に、(ディスク入出力を要求する)(ディスクアクセス)メッセージを、適当な記憶装置131に対応するメッセージ待ち行列233に送る。各メッセージは、該メッセージを生成したストリームスレッド204により算出されたデッドラインフィールドを含んでいる。
【0052】
図4は、記憶装置へのアクセス時に使用されるデータ構造及びプログラムモジュール232を示すフローチャートである。プログラムコード232は、1組のリンクリスト(linked list)データ構造242を含んでいる。該リンクリストデータ構造242は、自由リスト240及び要求リスト241を有している。1つの自由リスト240及び1つの要求リスト241が各記憶装置131毎に作成される。自由リスト240は、自由メッセージ記憶要素の未ソートのリンクリストであり、要求リスト241は、各メッセージに関するデッドラインフィールドに従ってソートされたメッセージのリンクリストである。各記憶スレッド201は、最初に自由リスト240から記憶要素を取り出すことにより、メッセージの処理を行う。記憶スレッド201は、次にメッセージ待ち行列233からメッセージを取り出し、その取り出したメッセージを記憶要素に記憶させる。記憶スレッド201は次いでそのメッセージを、それに関するデッドラインフィールドに従って要求リスト241中にリンクさせる。
【0053】
図5は、本発明による要求リスト241を示す説明図である。要求リスト241は、その要求リスト241の前端がゼロのデッドラインのメッセージ244を有するように構成されたメッセージ244のリンクリストである。ゼロのデッドラインのメッセージ244の後に非ゼロのデッドラインのメッセージ244が記憶され、この非ゼロのデッドラインのメッセージ244が緊急時に伝わり、緊急性の最も低い非ゼロのデッドラインのメッセージ244が要求リスト241の後端で共有されるようになる。
【0054】
要求リスト241及び自由リスト240は共に相互排他ロック243を有しており、これにより、要求リスト241及び自由リスト240へのアクセスが連続的なものとなる。相互排他ロック243は、オペレーティングシステムにより提供される従来のロック機構である。
【0055】
処理スレッドの説明
ここで再び図3を参照する。中央制御モジュール110は、RPCスレッド202がクライアントプログラム206からStreamOpen()コールを受信するまでアイドル状態となる。StreamOpen()コールは、再生用の新たなビデオストリームをオープンするための要求である。RPCスレッド202は、StreamOpen()コールを受信すると、ストリームスレッド204にStreamOpenメッセージを送る。次いで、ストリームスレッド204は、オープンされたビデオストリームの再生を操作する。
【0056】
StreamOpenメッセージを操作する際に、ストリームスレッド204は、再生すべきビデオオブジェクトの最初の3つのデータブロックを記憶する記憶装置131に対応する3つの記憶スレッドのメッセージ待ち行列233の各々にReadBlockメッセージを送る。好適実施例では、3つのメモリバッファ114が各再生ストリーム用にリザーブされ、従って、StreamOpenメッセージのサービスを行うことによって、新たにオープンされた再生ストリームに関連するメモリバッファ114が満たされることになる。
【0057】
各記憶スレッド201は、そのメッセージ待ち行列233からReadBlockメッセージを非同期で取り出し、そのメッセージを処理用に優先順位付けする。最終的に処理されると、記憶スレッド201は、要求されたデータブロック(好適なブロックサイズは128byte)を特定のディスクから読み出して、割り当てられたメモリバッファ114に該データブロックを書き込むことにより、ReadBlockメッセージを処理する。ReadBlockメッセージのサービスを行った後、記憶スレッド201は、前記ReadBlockメッセージを発したストリームスレッド204にREAD−RESPメッセージを送る。
【0058】
次いで、記憶スレッド201は、そのメッセージ待ち行列233における次に最も時間的に決定的な(時間クリティカル)メッセージを処理する。しかしながら、そのメッセージ待ち行列233が空である場合には、記憶スレッド201は、そのメッセージ待ち行列233にメッセージが送られてくるまでアイドル状態となる。
【0059】
図6は、図3に示したストリームスレッド204の状態図である。ストリームスレッド204は、StreamOpenメッセージを受信するまでIDLE状態307となる。
【0060】
メッセージ待ち行列にReadBlockメッセージを送った後、ストリームスレッド204は、PRIMING状態301に移行する。ストリームスレッド204は、PRIMING状態301にあるとき、ReadBlockメッセージが送られた各記憶スレッド201からREAD−RESPメッセージを受信するまで待機する。記憶スレッド201により送られたREAD−RESPメッセージは、記憶スレッド201がReadBlock要求を処理したことを示すものである。READ−RESPメッセージが受信されると、ストリームスレッド204はPRIMED状態302に移行する。
【0061】
ここで再び図3を参照する。RPCスレッド202は、クライアントプログラム206からStreamPlay()コールを非同期で受信する。次いで、RPCスレッド202は、StreamPlayメッセージをストリームスレッド204に送る。次いで、ストリームスレッド204は、該ストリームの再生を操作する。
【0062】
ここで再び図6を参照する。ストリームスレッド204がPRIMED状態302にあるとき、該ストリームスレッド204は、RPCスレッド202からStreamPlayメッセージが受信されるまで待機する。ストリームスレッド204は、好適には以下で説明するスケジューリングプロトコルに従って、該ストリーム用の開始時間帯を選択することにより、StreamPlayメッセージを操作する。開始時間帯の選択後、メモリバッファ114からビデオデータの第1のサブブロック(32kbyte)を取り出し、宛先出力ポートを含む分配モジュール120に該サブブロックを送ることにより、再生が開始される。サブブロックの送信後、ストリームスレッド204は、PLAYWAIT状態303に移行する。
【0063】
PLAYWAIT状態303にあるとき、ストリームスレッド204は、RPCスレッド202又は記憶スレッド201の何れかから新たなメッセージが到着したか否かを判定し、受信したメッセージを処理する。受信する可能性のあるメッセージとしては、StreamPauseメッセージ、StreamJumpメッセージ、及びREAD−RESPメッセージが挙げられる。各々のメッセージは次のように操作される。
【0064】
(i)StreamPauseメッセージがRPCスレッド202から送られた場合、ストリームスレッド204は、PAUSED状態304に移行する。
【0065】
(ii)StreamJumpメッセージがRPCスレッド202から送られた場合、ストリームスレッド204は、まだ分配モジュール120に送られていないメモリバッファ114中のデータブロックを破棄する。次に、新たな位置へのジャンプによって取り出されたビデオデータ(データブロック)を記憶するために、ストリームスレッド204による使用のために割り当てられていなかったメモリバッファ114が記憶スレッド201による使用のために割り当てられる。StreamJumpメッセージの処理後、ストリームスレッド204は、PLAYWAIT状態303でループして次のメッセージの受信を待つ。
【0066】
(iii)READ−RESPメッセージが記憶スレッド201から送られた場合、及び、ReadBlockメッセージがエラーを伴うことなく操作されたことをREAD−RESPメッセージが示す場合には、ストリームスレッド204は、対応するメモリバッファ114をレディ状態にマークし、次いでPLAYWAIT状態303でループする。
【0067】
(iv) READ−RESPメッセージが記憶スレッド201から送られた場合、及び、ReadBlockメッセージがエラーに遭遇したことをREAD−RESPメッセージが示す場合には、ストリームスレッド204は、コールバックスレッド203にErrorPlayDoneメッセージを送り、ABEND状態305に移行する。次いで、コールバックスレッド203は、ErrorPlayDoneメッセージの受信時に、ビデオコマンドを発したクライアントプログラム206にコールバックを行って、ビデオストリーム中でエラーに遭遇したことをクライアントプログラム206に知らせる。
【0068】
PLAYWAIT状態303では、ストリームスレッド204は、等時性のビデオストリームを維持するためにタイマによって更に制御される。「等時性」とは、非破裂性又は「ほぼ一定速度」を意味するものである。等時性のビデオストリームを維持するために、各々が32kbyteのデータサブブロックが所定時間内に分配モジュール120に送られる。各々のデータサブブロックを分配モジュール120に送る際に、ストリームスレッド204は、該データサブブロックがメモリバッファ114中の最後のサブブロックであったか否かを判定する。該データサブブロックが最後のサブブロックであった場合には、ストリームスレッド204は、メモリバッファ114を「利用可能」とマークし、記憶装置131からの更なるビデオデータ(128kbyteのデータブロック)の取り出しを開始させるために適当な記憶スレッド201にReadBlockメッセージを送る。ストリームスレッド204は更に、ビデオファイルの終わりに達したか否かを判定する。ビデオファイルの終わりに遭遇した場合には、ストリームスレッド204は、コールバックスレッド203にNormalPlayDoneメッセージを送り、DONE状態306に移行する。次いで、コールバックスレッド203は、ビデオコマンドを発したクライアントプログラム206にコールバックを送って、ビデオストリームが正常終了したことをクライアントプログラム206に知らせる。しかしながら、ビデオファイルの終わりに達していなかった場合には、ストリームスレッド204は、PLAYWAIT状態303でループする。
【0069】
DONE状態306にあるとき、ストリームスレッド204は、RPCスレッド202から受信したメッセージを処理する。(クライアントプログラム206からStreamJump()コールを受信した結果として)RPCスレッド202からStreamJumpメッセージが送られた場合には、ストリームスレッド204は、記憶されているビデオファイル上の新たなジャンプ先位置からビデオデータを取り出すために、メモリバッファ114のアドレスを記憶スレッド201に送る。メモリバッファ114のアドレスの送信後、ストリームスレッド204はPRIMING状態301に移行する。(クライアントプログラム206からのStreamClose()コールの結果として)RPCスレッド202によりStreamCloseメッセージが送られた場合には、ストリームスレッド204は、該ストリームに関連する分配モジュール120にストリームの再生のクローズを知らせるコマンドを送出する。次いでストリームスレッド204はIDLE状態307に移行する。
【0070】
PAUSED状態304にあるとき、ストリームスレッド204は、RPCスレッド202により送られたメッセージを処理する。(クライアントプログラム206により送られたStreamJump()コールの結果として)RPCスレッド202からStreamJumpメッセージが送られた場合には、ストリームスレッド204は、メモリバッファ114中のあやゆるデータを破棄し、ビデオファイル中の新たなジャンプ先位置で始まるビデオデータを取り出すために、その解放されたメモリ空間を対応する記憶スレッド201に割り当てる。ストリームスレッド204は、次いでPRIMING状態301に移行する。
【0071】
(クライアントプログラム206からのStreamClose()コールの結果として)RPCスレッド202からStreamCloseメッセージが送られた場合には、ストリームスレッド204は、該ストリームに関連する分配モジュール120にストリームの再生のクローズを知らせる。次いでストリームスレッド204はIDLE状態307に移行する。
【0072】
(クライアントプログラム206からのStreamPlay()コールの結果として)RPCスレッド202からStreamPlayメッセージが送られた場合には、ストリームスレッド204は、当該ビデオストリームに関する開始時間スロットを選択し、該開始時間スロットに達した後、ビデオディスクの32kbyteのカレントブロックを、(中央制御モジュール110上の)メモリバッファ114から、該ビデオストリームのための宛先ポートを含む分配モジュール120に送る。ストリームスレッド204は、次いでPLAYWAIT状態303に移行する。
【0073】
ABEND状態305にあるとき、ストリームスレッド204は、RPCスレッドからのStreamCloseメッセージを処理する。(クライアントプログラム206からのStreamClose()コールの結果として)RPCスレッド202からStreamCloseメッセージが送られた場合には、ストリームスレッド204は、ストリームの再生がクローズされたことを該ストリームに関連する分配モジュール120に知らせる。ストリームスレッド204は次いでIDLE状態307に移行する。
【0074】
ストリームスレッドによるメッセージ要求の優先順位付け
VODシステム100は、優先順位スキームを用いて、多数のストリームスレッド204から各記憶スレッド201に送られるディスク入出力要求を要求するメッセージの操作のスケジューリングを行う。該優先順位スキームは、好適には、要求を行っている全てのストリームスレッド204がそれぞれのビデオストリームの連続的な再生を維持することができるように全てのメッセージを確実に完了させる(操作する)ものとなる。
【0075】
該優先順位スキームによれば、各メッセージはそれに関するデッドラインフィールドを有している。ストリームスレッド204が、中央制御モジュール110のバッファを満たすために、ディスク入出力を要求するメッセージ(ReadBlockメッセージ)を記憶スレッド201に送ると、ストリームスレッド204は、該メッセージについてのデッドラインを計算し、その該デッドラインを該メッセージと共に記憶スレッド201に送る。該デッドラインは、ストリームスレッド204の現在の状態によって決まる。該デッドラインは、0から最大値までの整数である。デッドラインを有さないメッセージには「ゼロ」のデッドライン値が与えられ、デッドラインを有するメッセージにはその緊急性に対応したデッドライン値が割り当てられ、この場合、大きなデッドライン値を有するメッセージほど緊急性が低く、小さなデッドライン値を有するメッセージほど緊急性が高いものである。
【0076】
通常の再生時、即ち、PLAYWAIT状態303にある場合には、デッドラインの計算は、ストリームスレッド204による分配モジュール120に対するもっとも最近のデータ書き込みに関する開始時間に、ストリームに関する全てのメモリバッファ114中のデータ消費時間(即ち、ビデオデータの再生に要する時間)を加えることにより行われる。好適には、該データ消費時間は、各メモリバッファ114のサイズに、ビデオストリームに関するメモリバッファ114の数を乗算し、次いでその積を出力データ速度で除算すること(即ち、バッファサイズ×バッファ数÷データ速度)により算出される。
【0077】
ストリームの再生が開始する前のバッファの初期プライミング時に(即ち、PRIMING状態301にある際に)及びPRIMED状態302にある際に、デッドラインがゼロにセットされる。この「ゼロ」は、メッセージが絶対的なデッドラインを有さないこと、及び、かかるサービスによりメッセージ待ち行列233中の他のメッセージがそれらのデッドラインを逸さないこととなる場合に該メッセージがサービスされるべきであることを示すものである。
【0078】
ストリームスレッド204がPAUSED状態304にあり、該ストリームスレッド204によりStreamJump()メッセージが受信された場合、ストリームスレッド204は、該ストリームスレッド204に関するメモリバッファ114中のデータを破棄する。次いでストリームスレッド204は、記憶されているビデオオブジェクト中の新たな(ジャンプ先)位置から取り出されたデータで満たすためにメモリバッファ114のアドレスを適当な記憶スレッド201に送る。StreamJump()メッセージに関するデッドラインは、該メッセージが絶対的なデッドラインを有さないこと、及び、かかるサービスによりメッセージ待ち行列233中の他のメッセージがそれらのデッドラインを逸さないこととなる場合に該メッセージがサービスされるべきであることを示す「ゼロ」である。
【0079】
ストリームスレッド204が通常再生モードにある際、即ち、PLYWAIT状態303にある際に、該ストリームスレッド204によってStreamJump()メッセージが受信された場合、該ストリームスレッド204は、該ストリームスレッド204に関連すると共に現在の時間に記憶スレッド201の応答時間を加算したものよりも遅いデッドラインを有するデータを有するメモリバッファ114中のデータを破棄する。次いでストリームスレッド204は、新たなビデオ位置(即ち、ビデオファイル中のジャンプ先位置)から取り出されたデータで満たすと共に以前に記憶されていたデータに関連していたデッドラインと同一のデッドラインを維持するために、データが破棄された該メモリバッファ114のアドレスを適当な記憶スレッド201に送る。
【0080】
記憶スレッドの処理
記憶スレッド201は、中央制御モジュール110のスタートアップ時に作成され、記憶装置131に対するアクセスを管理する。ここで再び図4を参照する。各記憶装置131に対するアクセスは、各記憶装置131に関連するリンクリスト(要求リスト241及び自由リスト240)によって制御される。各記憶装置131を管理する記憶スレッド201の数は、コンフィギュレーションファイル237を読み出すことにより決定される。各記憶装置131毎に1つ以上の記憶スレッド201が作成される場合には、要求リスト241及び自由リスト240とアクセスするためにロック機構(mutex lock243)が用いられる。
【0081】
図7は、各記憶スレッド201により行われるメッセージ待ち行列処理400を示すフローチャートである。記憶スレッド201は、記憶装置131に関連する2つ以上の記憶スレッド201が存在するか否かを判定することにより処理を開始する。記憶装置131に関連する2つ以上の記憶スレッド201が存在する場合には、現在の記憶スレッド201が、記憶装置131に関連するmutex lock243を得て、リンクリスト242(要求リスト241及び自由リスト240)をロックする(ステップ401)。
【0082】
mutex lock243が固定されると(及びリンクリスト242がロックされると)、記憶スレッド201がメッセージを処理する。記憶スレッド201は、次に自由リスト240からメッセージ記憶要素をリムーブする(アンリンクする)。次いで、記憶スレッド201は、取り出されたメッセージをアンリンクされたメッセージ記憶要素に記憶させ(ステップ403)、該メッセージをそれに関連するデッドラインに従って要求リスト241に挿入する(ステップ404)。詳細には、挿入されるメッセージ(新たなメッセージ)が非ゼロのデッドラインを有している場合には、記憶スレッド201は、要求リスト241のサーチをその後端から開始し(即ち、該後端が最も緊急性の低い非ゼロのデッドラインを有している)、新たなメッセージを、該新たなメッセージよりも早いデッドラインを有する最初のメッセージの直後で要求リスト241に挿入する。要求リスト241中のメッセージで該新たなメッセージよりも早いデッドラインを有するものが1つも存在しない場合には、該新たなメッセージは要求リスト241の最初に挿入される。
【0083】
しかしながら、新たなメッセージがゼロのデッドラインを有している場合には、記憶スレッド201は、要求リスト241のサーチをその前端から開始し(即ち、該前端が最も緊急性の高いデッドラインを有している)、新たなメッセージを、非ゼロのデッドラインを有する最初のメッセージの直前で要求リスト241に挿入する。要求リスト241中のメッセージで非ゼロのデッドラインを有するものが1つも存在しない場合には、該新たなメッセージは要求リスト241の最後に挿入される。新たなメッセージが要求リスト241に挿入された後、記憶スレッド201は、次いでmutex lock243を解放してリンクリスト242をアンロックする(ステップ405)。記憶スレッド201は、メッセージ待ち行列243が空になるまでメッセージ待ち行列処理400を繰り返す。次いで、記憶スレッド201は、要求リスト241中の優先順位付けされたメッセージの処理へと進む。
【0084】
図8は、要求リスト241中の優先順位付けされたメッセージの記憶スレッド201による処理500を示すフローチャートである。
【0085】
記憶装置131に対して2つ以上の記憶スレッド201が存在する場合、現在の記憶スレッド201は、該記憶装置131に関連するmutex lock243を得て、リンクリストデータ構造242(自由リスト240及び要求リスト241)をロックする(ステップ501)。
【0086】
該データ構造をロックした後、記憶スレッド201が、非ゼロのデッドラインのメッセージにそれらのデッドラインを逸させることなく要求リスト241中のゼロのデッドラインのメッセージをサービスするだけの十分な時間があるか否かを判定する。記憶スレッド201は、要求リスト241中の非ゼロのデッドラインのメッセージの操作についての最も最近の開始時間を計算する(ステップ503)ことによりこの決定を行う。該最も最近の開始時間は、緊急性の最も低い非ゼロのデッドラインを有する要求リスト241の終わりから開始して、各メッセージ毎に、以前のメッセージ及び現在のメッセージに関連する該メッセージのデッドラインについて計算された最も最近の開始時間のうち一層小さいものから、期待されるディスクアクセス(ディスク入出力)時間を減算することで最も最近の開始時間を計算することにより、繰り返し計算される。
【0087】
最も最近の開始時間を計算する場合、該最も最近の開始時間は、最初に、最も最近の開始時間により表現可能な最大整数値へと初期化される(ステップ502)。更に、ディスクアクセス時間は、要求リスト241に関連する特定の記憶装置131から1つのデータブロック(128kbyteのデータ)を読み出すのに要する時間に相当する。
【0088】
次に、記憶スレッド201は、ステップ504の比較を行い、計算された最も最近の開始時間が与えられた場合にゼロのデッドラインのメッセージを操作するのに十分な時間が存在するか否かを判定する。この判定は、現在の時間と、最も最近の開始時間及び特定の記憶装置131からの期待されるディスクアクセス時間(1データブロック(128kbyteのデータ)の読み出しに要する時間)の差とを比較することにより行われる(ステップ504)。
【0089】
現在の時間が、最も最近の開始時間及び期待されるディスクアクセス時間の差よりも小さい場合には、ゼロのデッドラインのメッセージを操作すると共に最も最近の開始時間の要件を依然として満たすだけの十分な時間が存在する。従って、かかる場合には、要求リスト241中の最初のメッセージが処理のためにリムーブされる(ステップ506)。この最初のメッセージは、ゼロのデッドラインのメッセージ又は最も緊急性の高い(即ち最小デッドラインの)メッセージとなる。
【0090】
しかしながら、現在の時間が、最も最近の開始時間及び期待されるディスクアクセス時間の差よりも大きい場合には、ゼロのデッドラインのメッセージを操作すると共に最も最近の開始時間の要件を依然として満たすだけの十分な時間が存在しない。従って、かかる場合には、要求リスト241中の最初の非ゼロのデッドラインのメッセージが処理のためにリムーブされる(ステップ505)。
【0091】
処理のためにメッセージをリムーブした(ステップ505又は506)後、記憶スレッド201は、リンクリストデータ構造242をアンロックし(ステップ507)、次いで該メッセージを処理する(ステップ508)。この処理の後、記憶スレッド201は次いでリンクリストデータ構造242をロックし(ステップ509)、ステップ508で処理されたメッセージにより占有されたメッセージ記憶要素を自由リスト240に挿入する(ステップ510)。この挿入の後、リンクリストデータ構造242はアンロックされる(ステップ511)。
【0092】
記憶スレッド処理500の完了後、記憶スレッド201は、記憶スレッド処理500が開始してからメッセージ待ち行列233に書き込まれたメッセージを取り出すために、図7に示したメッセージ待ち行列処理400へと処理を戻す。
【0093】
記憶モジュールのデータ構造及びアクセス機構
VODシステム100は、ビデオオブジェクトの記憶を管理するためにハイブリッドファイル管理機構を用いる。該ハイブリッドファイル管理機構は、多数の名称付きビデオオブジェクト(即ちビデオファイル)の管理タスクを簡素化すると共に生(raw)ディスクドライブの最大性能の帯域幅を完全に利用するために、中央制御モジュール110上で実行されるオペレーティングシステムによって提供されるファイルシステムサービスと生ディスクアクセス法との両方を含むものである。
【0094】
一般に、ビデオオブジェクト自体のサイズは、該ビデオオブジェクトに関する制御情報(例えば、ビデオ属性、作成日時、及び記憶マップ等)に比べて極めて大きなものである。典型的には、ビデオオブジェクトのサイズはGbyte、その制御情報のサイズはkbyte又はそれ未満といったものである。更に、ビデオオブジェクトについての入出力動作の回数はその制御情報についての入出力動作の回数を大きく上回るものである。VODシステム100は、ビデオオブジェクト自体について記憶及びアクセスを行うための生ディスク法を用いる。このため、オペレーティングシステムのファイルシステムに関連する空間上及び性能上のオーバーヘッドを回避する(バイパスする)ことにより、空間的な要件が最小限となり、性能が最適化される。
【0095】
しかしながら、VODシステム100は、各ビデオオブジェクトに関連する制御情報を記憶するためにオペレーティングシステムのファイルシステムを使用する。かかるファイルシステムを使用することにより、ビデオオブジェクトの名称空間マッピング(name space mapping)の管理、ディレクトリ情報の維持、及び制御情報のための記憶空間の動的な割り当て及び割り当て解除を行うという複雑性が排除される。その上、ソフトウェアのテスト、システムのメンテナンス、及び将来のアップグレードに対する備えが簡単になる。同時に、記憶スペース及び性能に関するオーバーヘッドにより生じる不利益が最小限となる。これは、ビデオオブジェクトと比較して制御データの方がサイズが比較的小さく、及び入出力要求の数が比較的少ないことによる。
【0096】
ここで再び図2を参照する。中央制御モジュール110中のシステムディスク235は、ビデオカタログサブディレクトリ236及びサーバコンフィギュレーションファイル237を含んでいる。
【0097】
ビデオカタログサブディレクトリ236はディレクトリ(例えば”/svsdrive/cat”)であり、複数の名称付きファイルを有している。この場合、各々の名称付きファイルは、記憶モジュール130に記憶されている同じ名称のビデオオブジェクトに対応するものである。かかる名称付きファイルは、ビデオ属性、再生データ速度、及び同時に発生する最大ユーザ数等の制御情報を含んでいる。
【0098】
また、サーバコンフィギュレーションファイル237(例えば”drive−confuguration”)は、記憶モジュール130における記憶装置131の記憶上の割り当てに関する情報を含んでいる。かかる情報には、例えば、生装置名称、ストライプセグメントサイズ、及び冗長性に関する情報等が含まれる。サーバコンフィギュレーションファイル237は、システムのスタートアップ時に読み出され、VODシステム100を構成するために使用される。
【0099】
更に、システムディスク235は、記憶モジュール130における記憶装置131の数と同数の多くのマウントポイントを有している。通常の動作中に、各記憶装置1313の制御区画が該マウントポイントのうちの1つにマウントされる。
【0100】
VODシステム100の構成中に、各記憶装置131は、2つの区画、即ち制御区画及びデータ区画へとフォーマットされる。
【0101】
記憶装置131のフォーマット中に、各制御区画にファイルシステムが作成される。各制御区画は、対応するデータ区画についてセグメントの利用可能性を指定する自由スペースビットマップを含んでいる。
【0102】
制御区画はまた、多数の名称付きファイルを含んでおり、該名称付きファイルの各々は、ビデオオブジェクトのストライプのスペースマップを1つずつ含んでいる。1つのスペースマップは、1つのビデオストライプに含まれている128kbyteのデータブロックの各々に関するアドレス情報のマッピングを行う。従って、スペースマップは、記憶装置131上のビデオストライプの128kbyteのデータブロックの各々の位置を定めるために使用される。一層詳細には、スペースマップは、ビデオオブジェクトのストライプ内の論理ブロック番号を、同じ記憶装置131上のデータ区画内の物理セグメント番号に変換する。スペースマップファイルの名称は、対応するビデオオブジェクトの名称にストライプ番号を付加することにより形成される。
【0103】
各記憶装置131のデータ区画は、生ディスク区画として形成される(即ち、如何なるオペレーションシステム情報も伴わずにディスクがフォーマットされる)。データ区画に対するアクセス及び記憶管理は、完全に中央制御モジュール110の制御の下で行われる。より詳細には、記憶スレッド201がデータ区画のアクセス及び記憶管理を制御する。
【0104】
記憶モジュールにおける記憶装置のフォーマッティング
記憶装置131は複数のグループ(ストライプグループと呼ばれる)に編成され、該各グループには番号(ストライプグループ番号と呼ばれる)が1つずつ割り当てられる。1つのビデオオブジェクトが複数のビデオストライプへと分割される際、それらのビデオストライプは特定のストライプグループに割り当てられる。ビデオオブジェクト内の各ビデオストライプは、該割り当てられたストライプグループ内で別個の記憶装置131に記憶される。記憶モジュール130における各記憶装置131は、特にVODシステム100のためにフォーマットされる。
【0105】
該フォーマット処理の際に、ユーザは、ストライプグループ番号、ストライプ番号、生装置アドレス、ストライプセグメントサイズ、及びフォーマットすべきディスクに関する一次/二次標識等の記憶情報を指定する。ユーザはまた、例えばストライプグループ2及びストライプ4のディスクを”/svsdrive/G2/4”とするといった、所望の名称付け上の約束を用いてマウントポイントを作成する。
【0106】
次に、”/svsdrive/drive−configuration”サーバコンフィギュレーションファイル237がオープンされる。サーバコンフィギュレーションファイル237が存在しない場合には、新たなサーバコンフィギュレーションファイル237が作成される。ユーザにより指定された記憶フォーマット情報は、サーバコンフィギュレーションファイル237に対する妥当性の検査が行われる。該妥当性検査の後、新たなドライブ名及び情報がサーバコンフィギュレーションファイル237に追加される。
【0107】
次に、ディスクが2つの区画にフォーマットされる。区画0(制御区画)は、マウント可能なものとして規定され、該区画0にファイルシステムが作成される。区画1(データ区画)は、マウント不能なものとして規定される。
【0108】
次に、区画0が、以前に生成されたマウントポイントにマウントされる。従って、”freespace.map”等のファイルが、自由スペースビットマップとして区画0に作成される。該ファイルは次いで、区画1における全てのセグメントが利用可能である(未割り当てである)ことを示すよう初期化される(但し、セグメント0を除く)。次いで、区画0がマウント解除される。
【0109】
次に、区画1がオープンされて、ストライプグループ番号、ストライプ番号、ストライプ用のマウントポイント、一次/二次フラグ、活動ディスクフラグ、一次ディスクのための生装置名称、及び二次ディスクのための生装置名称等の情報が、セグメント0に書き込まれる。
【0110】
セグメント0への書き込み後、区画1及びコンフィギュレーションファイルがクローズされる。
【0111】
記憶モジュールのスタートアップ処理
記憶装置131のフォーマット後、VODシステム100をスタートアップさせることが可能になる。該スタートアップ処理は、サーバコンフィギュレーションファイル237”/svsdrive/drive−configuration”をDRAM232に読み込み、次いで、該サーバコンフィギュレーションファイル237中のコンフィギュレーション情報を実際のハードウェア構成と比較することにより妥当性検査を行うことを含む。
【0112】
サーバコンフィギュレーションファイル237の妥当性検査の後、各ディスクが次の処理によって初期化される。
【0113】
(i) ディスクの制御区画(区画0)をその対応するマウントポイント(例えば、”/svsdrive/G3/2”)にマウントし、
(ii) 制御区画からメモリに自由スペースビットマップファイルを読み込み、通常の動作時にスペースの割り当て及び割り当て解除のために該ファイルに対して効率的にアクセス及び更新を行うことができるようにし、
(iii) ディスク上のビデオオブジェクトのストライプに対する後続の通常のアクセスのために該ディスクのデータ区画(区画1)をオープンする。
【0114】
ビデオオブジェクトのオープン
VODシステム100は、スタートアップ処理を完了すると、クライアントプログラム206がビデオオブジェクトを作成するためにFileOpen()ファンクションコールを行うまで待機する。例えば、クライアントプログラム206は、”xyz”と呼ばれるビデオオブジェクトを作成するためにFileOpen()ファンクションをコールすることができる(ステップ620)。
【0115】
FileOpen()コールに応じて、VODシステム100は、図9にフローチャートで示すビデオオープン処理を行って、記憶モジュール130上のビデオオブジェクトをオープンする。
【0116】
該ビデオオープン処理は、ビデオカタログディレクトリ236(例えばディレクトリ”/svsdrive/cat”)中のビデオカタログファイル”xyz”を作成する(ステップ601)ことにより開始する。VODシステム100は次いで、ビデオ属性、データ速度、ビデオ長、及び作成日時等の制御情報を、ビデオカタログファイル”xyz”に書き込む(ステップ602)。
【0117】
次に、外処理は、ストライプグループ内の各記憶装置131毎にスペースマップを生成する(ステップ603)。該スペースマップは、特定のビデオストライプの各データブロックを記憶装置131上のアドレスに変換するものである。該スペースマップは、各記憶装置131の制御区画(即ち区画0)に存在する。該スペースマップファイルの名称は、好適には、ストライプの総数及び特定のストライプ番号をビデオオブジェクト名に付加することにより生成される。例えば、ビデオ”xyz”に6つのストライプが存在する場合、該ビデオオブジェクトのストライプ3に関連するスペースマップファイルに”xyz6−3”という名称を付けることができる。該スペースマップ生成プロセス603は、ビデオオブジェクトの各ストライプ毎に繰り返される。次いで、それらのスペースマップファイルが書き込み動作のためにオープンされる。
【0118】
次いで、作成されてオープンされた各スペースマップファイル毎に、VODシステム100は、記憶装置131に対応するファイル制御ブロックチェーンに制御ブロックを挿入する(ステップ605)。各記憶装置131は、ファイル制御ブロックチェーンを1つずつ有している。ファイル制御ブロックチェーンは、一連の制御ブロックであり、DRAM232中で共有される。制御ブロックは、各ビデオストライプに関連する制御情報のコピーであり、特に、記憶装置131の制御区画に記憶されているスペースマップのコピーを含んでいる。ファイル制御ブロックチェーンにおける制御ブロックがDRAM232に記憶されているため、該制御ブロック中のスペースマップは、各制御区画で共有される実際のスペースマップよりも速いアクセス時間を有するものとなる。
【0119】
次いで、クライアントプログラム206が、ビデオオブジェクトデータの書き込みのためにFileWrite()ファンクションをコールし(ステップ621)、VODシステム100は、各データブロック毎に、データブロックを記憶するための特定のストライプグループ中の記憶装置131を選択する(ステップ607)。記憶装置131を選択した後、VODシステム100は、利用可能なスペースを求めて対応する自由スペースピットマップをサーチすることにより、データブロックのためのメモリの割り当てを行う(ステップ608)。
【0120】
ビデオオブジェクトデータを記憶するためのメモリが割り当てられた後、中央制御モジュール110が、ビデオオブジェクトの各ストライプ毎にファイル制御ブロックを更新し(ステップ609)、また記憶割り当てを反映するよう自由スペースビットマップを更新する(ステップ609)。次に、中央制御モジュール110は、スペースマップに従ってストライプグループ中に存在する各記憶装置131の区画1にビデオオブジェクトデータを書き込むために、生ディスク書き込み動作を生成する(ステップ610)。全てのデータブロックの書き込み後、クライアントプログラム206は、FileClose()ファンクションをコールする。該FileClose()ファンクションを受信した際に、VODシステム100は、各記憶装置131に記憶されているスペースマップを更新する。
【0121】
ビデオオブジェクトの再生
ビデオオブジェクトの再生は、クライアントプログラム206が、StreamOpen()次いでStreamPlay()ファンクションコールを生成することにより開始される。クライアントプログラム206は、例えば、StreamOpen()及びStreamPlayback()ファンクションをコールして、”xyz”という名称が付けられたビデオオブジェクトの再生を開始させることができる。図10は、再生のためにビデオオブジェクトをオープンする処理を示すフローチャートである。
【0122】
StreamOpen()ファンクションがコールされると(ステップ720)、プログラムコード231は、ビデオカタログファイル237(例えば”svsdrive/cat/xyz”)をオープンし(ステップ701)、そのコンテンツ(即ち内容)を読み出す。ビデオカタログファイル237から読み出された情報(ストリームデータ速度、ビデオオブジェクトサイズ等)は、ビデオオブジェクトの再生を制御するために使用される。
【0123】
次いで、ビデオオブジェクトの各ストライプ毎に、プログラムコード231は、(特定のビデオストライプに割り当てられた記憶装置131に記憶されている)スペースマップファイルを読み出して(ステップ702)、制御ブロックを生成する。次いで、プログラムコード231は、ビデオストライプが割り当てられている記憶装置131に関連する制御ブロックチェーンのサーチを行う(ステップ703)。ビデオストライプに関する制御ブロックが制御ブロックチェーン中に既に存在する場合には、プログラムコード231は使用カウントをインクリメントする(ステップ704)。また、該制御ブロックが制御ブロックチェーン中に既に存在しない場合には、プログラムコード231は、該制御ブロックチェーンに該制御ブロックを追加して(ステップ705)、使用カウントを1にセットする。
【0124】
前記サーチ703を行った後、プログラムコード231は、次いで制御ブロックに記憶されているスペースマップ情報を使用して、記憶装置131の区画1に対して生ディスク読み出し動作を行って(ステップ706)、該ビデオオブジェクトデータをメモリバッファ114に読み込む。
【0125】
続いてクライアントプログラム206によってStreamPlay()ファンクションがコールされると(ステップ721)、中央制御モジュール110は、ビデオオブジェクトデータを、その処理のためにメモリバッファ114から分配モジュール120へと送る。プログラムコード231は、ビデオオブジェクトの終わりに達するまで、又はユーザにより指定された終了条件(例えば時間制限)等の阻止条件が発生するまで、生ディスク読み出し動作を続行する(ステップ708)。次いで、プログラムコード231は、コールバックファンクションによってクライアントをコールして、再生の終了をクライアントプログラム206に知らせる。
【0126】
次いで、クライアントプログラム206はStreamClose()ファンクションをコールする。プログラムコード231は、次いで、StreamClose()ファンクションコールに応じてビデオオブジェクトの各ストライプ毎にクローズ処理を行う。
【0127】
該クローズ処理には、制御ブロックチェーン中のスペースマップファイルに関する使用カウントを判定することが含まれる。該判定後、使用カウントがゼロである場合、制御ブロックチェーンから該制御ブロックが削除される。
【0128】
該判定後、プログラムコード231は、ビデオオブジェクトのストライプに関するスペースマップファイルをクローズする。
【0129】
最終的に、プログラムコード231は、ビデオオブジェクトに関するビデオカタログファイル237(例えば”/svsdrive/cat/xyz”)をクローズする。
【0130】
ディスクロード平衡化(スケジューリング)
マルチストリームVODシステム100において、各ビデオ再生ストリームの開始時間が調整されない場合には、読み出しを要求するあまりに多数のメッセージを同時に受けることによって1つ又は2つ以上の記憶装置131がオーバーロードされる可能性がある。かかる事態が発生すると、連続するストリーム再生に関する時間要件を満たすよう適時に操作されないメッセージが生じる可能性がある。これは、ビデオ再生に望ましくない欠陥を生じさせるものとなる。VODシステム100は、好適には、データストライプスキームを用いて多数の記憶装置131へのビデオオブジェクトの記憶をインターリーブさせ、更に、スケジューリング法を用いて各ビデオストリームの開始時間を調整し、これにより複数の記憶装置131の何れもオーバーロードされることがないようにする。該スケジューリング法はまた、ストリームの開始前の時間遅延を最小限にする。
【0131】
好適には、該スケジューリング法は、ストライプグループ中のディスクの各組毎に個別に用いられる。
【0132】
時間帯を用いてビデオストリームの再生の開始を分配し、これによりディスクアクセスの集中(オーバーロード)を回避する。各ビデオストリームは、特定の時間帯で開始するようにスケジューリングされる(割り当てられる)。該スケジューリング法によれば、M個の時間帯が存在する(ここで、Mはストライプグループ中の記憶装置131の数である)。該M個の時間帯は、Z1…Zmと表される。
【0133】
下記の表1は、1ストライプグループにつき4つの記憶装置131を有するシステムにおける好適な時間帯ローテーションを示すものである。
【0134】
【表1】
【0135】
時間は、タイムスロット(Tn)と呼ばれる所定の固定長の時間間隔で測定される。例えば、タイムスロットT1中に、ディスク1が、時間帯Z1に割り当てられたビデオストリームのみを開始させ、ディスク2が、時間帯Z2に割り当てられたビデオストリームのみを開始させる(以下同様)。同様に、タイムスロットT2中には、ディスク1が、時間帯Z2に割り当てられたビデオストリームのみを開始させ、ディスク2が、時間帯Z3に割り当てられたビデオストリームのみを開始させる(以下同様)。従来の方法で行われていたように各ビデオオブジェクトを所定の一定の時間帯(Zi)に割り当てるのではなく、ビデオストリームが開始することになる記憶装置131に関連する最も早い利用可能な時間帯(Zi)にビデオオブジェクトの再生開始が割り当てられる。最も早い利用可能な時間帯(Zi)とは、時間帯Ziに現在割り当てられているビデオストリームに欠陥を決して生じさせることなく再生を操作するのに十分な容量を有する次の時間帯(Zi)である。
【0136】
一好適実施例では、M=6である。別の実施例では、異なる数の記憶装置131が特定のストライプグループに割り当てられている。
【0137】
図11は、1ストライプグループ中にM個の記憶装置131を有するVODシステムによるスケジューリング法800を示すフローチャートである。
【0138】
該スケジューリング法800は、ビデオストリームの再生を開始させるためのStreamPlayメッセージ820をストリームスレッド204が受信した際に開始する。次いで、ストリームスレッド204は、読み出すべき最初のデータブロックを記憶している記憶装置131のディスク番号nを判定する(ステップ801)。次いで、ストリームスレッド204は、現在の時間(t)を獲得する(ステップ802)。
【0139】
次いで、記憶スレッド201は、現在の時間帯を表すインデックス値(C)を計算する(ステップ803)。該インデックス値(C)は次の式に従って計算される。
【0140】
C=(floor(t/T)−n)modM
ここで、
t=現在の時間
T=データブロックを再生するための時間間隔
(即ち、Z=データブロックサイズ/ストリーム再生データ速度)
n=ストライプグループ中の記憶装置の番号
M=ストライプグループ中の記憶装置の総数
Floor=整数値を返すように変数の切り捨てを行って返す関数
該スケジューリング法800は、M個の要素を有する時間帯使用列Z[1…M]を用いる。該M個の要素は、それぞれ、最初はゼロにセットされ、対応するM個の時間帯の各々に割り当てられた活動再生ストリームの数を表す。
【0141】
ステップ803でインデックス値Cを計算した後に、ストリームスレッド204が、インデックスIにCをセットする。ストリームスレッド204は次いで、時間帯使用列ZのI番目の要素の値を、1つの時間帯に割り当て可能な最大ストリーム数と比較する(ステップ804)。1つの時間帯についての最大ストリーム数は、特定の記憶装置131に関するアクセス時間によって決まる。該比較ステップ804が、時間帯が一杯である(即ち、既に最大ストリーム数を有している)ことを示す結果を返した場合には、該方法は、次の式に従ってインデックス値Iを更新する(ステップ805)。
【0142】
I=(I+1)Mod M
ステップ805でインデックス値を更新した後、該方法は比較ステップ804に戻る。
【0143】
しかしながら、比較ステップ804が、時間帯が一杯でないことを示す結果を返した場合には、時間帯使用列Zが更新され(ステップ806)、ビデオストリームが時間帯Tiに割り当てられる(ステップ807)。
【0144】
ビデオストリームが時間帯Tiに割り当てられた後、該ビデオストリームは、次の式による時間遅延の後に再生を開始する。
【0145】
時間遅延=((I+M+C) mod M)+T
この時間遅延は、所望の(選択された)時間スロットで再生を開始するように導入される。
【0146】
ストリームスレッド204は、StreamPause()コールを受信した場合、又はストリームの再生を完了した場合には、該再生ストリームに関する使用値Z1をデクリメントする。
【0147】
RAIDシステム及び方法
VODシステム100は、本発明による安価なディスクからなる冗長ディスクアレイ(RAID)システム及び方法を用いる。本発明によれば、記憶モジュール130は、複数の記憶装置131を使用して複数のビデオオブジェクトを記憶する。本発明によるRAIDシステム及び方法は、ビデオサーバ用途に限定されるものではなく、記憶装置のアレイを使用するあらゆるコンピュータシステム又は構成で有用なものとなる、ということが理解されよう。
【0148】
本発明によるRAIDシステム及び方法は、多数のディスクから構成された記憶サブシステム(記憶モジュール130)が、データアクセスに関して高いスループットを達成すること、及び、1つ又は2つ以上のディスクが故障した際に失ったデータを動的に再構成する際の性能上の不利益を制限することを可能にする。該システム及び方法は、更に、N個のディスクからなるディスクアレイ中のN/(M+1)又はそれ未満の個数の記憶装置131(ディスク)が故障した場合における動的なデータ再構成を達成することにより連続的な動作を可能にする。ここで、(1)Mは、データオブジェクトがディスクアレイに記憶される際に該データオブジェクトのクリエータにより指定された(又はデフォルト値として割り当てられた)冗長ファクタであり、(2)故障した2つのディスクの距離は、Mよりも大きい。
【0149】
該システム及び方法は、N個のディスクへのデータオブジェクトの記憶をインターリーブさせるものである。ここで、Nは、多数の並列ディスク動作を可能にすることにより高性能を得るように、また、M個のデータブロック毎にパリティブロックを作成するために、所望するだけ大きくすることが可能である。なお、Mは、Nよりも小さい整数であり、動的データ再構成時における性能上の不利益を制限するために所望するだけ小さくして(M=1と選択した場合には、RAIDレベル1ミラーと等価になる)、全ての状況で性能レベルが保証されるようにすることができる。Mが小さいということは、冗長データに関する記憶オーバーヘッドが大きいことを意味する。
【0150】
本発明の典型的な用途は、マルチストリームVODシステム100であり、この場合、総ディスクスループットは、数十Mbyte/secから数百又は数千Mbyte/secの範囲のものとなる。ビデオサーバ105に記憶されている1つのビデオオブジェクトは、数十、数百、又は数千ものユーザにより同時に要求される可能性がある。従って、多数のディスクに対するビデオオブジェクトのストライプ処理が可能であることは必須であり、例えば、20個のディスクに対してビデオオブジェクトのストライプ処理を行い、20個のディスク全てが並列動作を行って数百のユーザの要求を満たすようにする。この場合、ビデオオブジェクトに関する冗長ファクタMは、例えば、ディスクが故障した際に失ったデータブロックを再構成するために4個の並列ディスク読み出ししか必要としないように4と選択することが可能である。これは、かかる場合の応答時間を保証するだけでなく、システム全体の作業負荷を殆ど増大させないものとなる。その理由は、それらの4つのディスク読み出しが、失ったデータに密接したものであり、及び通常のビデオ再生中にどうしても必要とされるものであり、従ってそれらは(通常のアクセスと比べて)特別なディスク動作ではない、ということにある。この説明のため、アレイ中にN個のディスク(0〜Nと番号付けされたもの)が存在するものと仮定する。また、好適には、(ビデオオブジェクト等の)データオブジェクトが作成される際に、ストライプブロックサイズで連続的にデータが分配される(データブロックは0,1,2…と番号付けされている)。
【0151】
図12は、本発明に従ってビデオオブジェクトを記憶するRAID方法900を示すフローチャートである。該方法は、最初にセットアップ処理901を行う。セットアップ処理901では、ビデオオブジェクトのクリエータ(例えば、コンピュータプログラム又はユーザ)が該ビデオオブジェクトに関する冗長ファクタMを指定する。Mは、1〜N−1の整数である。ここで、Nは、記憶モジュール130中の記憶装置131の個数である。
【0152】
次いで、セットアップ処理901中に、該方法は、ビデオオブジェクトの属性として冗長ファクタMを記憶する。該方法は更に、インデックス(I)をゼロに初期化し、及びDRAM232上のパリティバッファを規定し初期化する。
【0153】
次いで、該システムは、ビデオオブジェクトに書き込まれるべきデータブロックを取り出す(ステップ902)。各データブロック毎に、該方法は、パリティバッファに対してI番目のデータブロックの排他OR演算を行う(ステップ903)。該方法900は次いで、I番目のデータブロックをJ番目のディスクに書き込む(ステップ904)。ここで、
J={floor(I/M)・(M+1)+(I mod M)} mod N
である。
【0154】
更に、I番目のデータブロックは、J番目のディスク上のビデオオブジェクトのストライプのK番目のブロックとして書き込まれる。ここで、
K= floor({floor(I/M)・(M+1)+(I mod M)}/N)
である。
【0155】
該方法は次いで、現在のデータブロック(I番目のデータブロック)が冗長グループ中の最後のデータブロックであるか否かを判定するためのテストを行う(ステップ905)。該テスト905では下記の判定が行われる。
【0156】
(i)Iが(M−1)以上であるか。
【0157】
(ii)((I+1) mod M)=0であるか。
【0158】
かかる条件が満たされる場合には、該方法900は、J番目のディスクにパリティバッファを書き込む(ステップ906)。ここで、
J={(I+1)/M・(M+1)−1} mod N
である。
【0159】
パリティバッファは、J番目のディスク上のデータオブジェクトのストライプのK番目のブロックとして書き込まれる(ステップ906)。ここで、
K= floor({(I+1)/M・(M+1)−1}/N)
である。
【0160】
J番目のディスクにパリティバッファを書き込んだ後、該パリティバッファがクリアされる(再び初期化される)(ステップ907)。
【0161】
次いで該方法900は、インデックス(I)を1だけインクリメントする(ステップ908)。該方法900は、次いで、ビデオオブジェクトの最後のデータブロックのディスクへの書き込みが完了しているか否かを判定するためのテストを行う(ステップ909)。最後のデータブロックの書き込みが完了していない(即ち、書き込むべきデータブロックが更に存在する)場合には、該方法900は、ステップ902に戻って、ビデオオブジェクトに書き込むべき次のデータブロックを取り出し、該方法900を続行する。また、最後のデータブロックの書き込みが完了している場合には、該方法900は、現在のデータブロック(I番目のデータブロック)が冗長グループ中の最後のデータブロックであるか否かを判定するためのテストへと進む(ステップ910)。該テスト910は、(Imod M)を計算することにより行われる。(Imod M)がゼロでない場合には、冗長グループはM個未満のデータブロックを有しており、従って、該方法900は、ステップ911へと進んで、全てゼロで満たされた1つのデータブロックをJ番目のディスクに書き込む。ここで、
J={floor(I/M)・(M+1)+(I mod M)} mod N
である。
【0162】
ステップ911で、I番目のデータブロックは、J番目のディスク上のデータオブジェクトのストライプのK番目のブロックとして書き込まれる。ここで、
K= floor({floor(I/M)・(M+1)+(I mod M)}/N)
である。
【0163】
次いで、該方法900は、I番目のデータブロックが冗長グループ中の最後のデータブロックであるか否かを判定するためのテストを行う(ステップ912)。次の場合に条件が満たされることになる。
【0164】
(i)Iが(M−1)以上である。
【0165】
(ii)((I+1) mod M)=0である。
【0166】
該条件が満たされる場合には、該方法900は、J番目のディスクにパリティバッファを書き込む(ステップ913)。ここで、
J={(I+1)/M・(M+1)−1} mod N
である。
【0167】
更に、パリティバッファは、J番目のディスク上のデータオブジェクトのストライプのK番目のブロックとして書き込まれる(ステップ913)。ここで、
K= floor({(I+1)/M・(M+1)−1}/N)
である。
【0168】
該方法900は次いでパリティバッファをクリアし(ステップ916)、次いで該データオブジェクトに関するN個全てのストライプをクローズする(ステップ915)。一方、テスト912において条件が満たされなかった場合には、該方法900は次いでIをインクリメントし(ステップ914)、次いでステップ910に戻って、現在のデータブロック(I番目のデータブロック)が冗長グループ中の最後のデータブロックであるか否かを判定する。
【0169】
図13は、本発明に従ってビデオオブジェクトにアクセスするRAID方法1000を示すフローチャートである。該方法1000は、J番目のディスクに記憶されているビデオオブジェクトからI番目のデータブロックを読み出すことをストリームスレッド204が要求した(ステップ1001)際に開始する。該読み出し要求を受けると、該方法1000は、ビデオオブジェクトに関する冗長ファクタMを読み出す(ステップ1002)。次いで、該方法1000は、故障状態を判定するためのテストを行う(ステップ1003)。故障が生じなかったことを該テスト1003が示す場合には、該方法1000は、適当なディスク(J番目のディスク)からデータブロックを取り出す。しかしながら、該テスト1003が故障が生じたと判定した場合には、該方法1000は、データ再構成バッファを全てゼロに初期化する(ステップ1004)。次いで、該方法1000は、インデックスPをゼロに初期化する(ステップ1005)。Pをゼロに初期化することにより、Pは、冗長グループ中の最初のデータブロックを指すように初期化される。
【0170】
次いで、該方法1000は、故障したディスクにP番目のデータブロックが記憶されていないか判定するためのテストを行う(ステップ1006)。故障したディスクにP番目のデータブロックが記憶されていると判定された場合には、該方法1000は、L番目の記憶装置上のストライプのK番目のデータブロックの読み出しへと処理を進める。ここで、
L={J+N−(Imod M)+P} mod N
J={floor(I/M)・(M+1)+(Imod M)} mod N
K=floor({floor(I/M)・(M+1)+(P mod M)}/N)
である。
【0171】
次いで、該方法は、取り出したデータ及び再構成バッファ中に記憶されているデータの排他OR演算を行う(ステップ1008)。次いで該方法は、ステップ1009に進んでインデックスPをインクリメントする。該インクリメントの後、該方法1000は、再構成が完了したか否か(即ち、P>Mか否か)を判定するためのテストを行う(ステップ1010)。再構成が完了している場合には、該方法1000は、再構成バッファ中のデータをストリームスレッド204に返す。また、再構成が完了していない場合には、該方法1000はステップ1006に戻る。
【0172】
上記の説明は、本発明の方法及び実施例の単なる典型例を示すものである。当業者であれば理解されるように、本発明は、その思想及び本質的な特徴から逸脱することなく別の特定形態で実施可能なものである。従って、本発明の開示は、その例示を目的としたものであり、特許請求の範囲に記載の本発明の範囲を限定するものではない。
【図面の簡単な説明】
【図1】本発明によるビデオオンデマンドシステムを示すブロック図である。
【図2】図1のビデオオンデマンドシステムで使用されるプログラムモジュール(処理スレッド)を含む中央制御モジュールを示すブロック図である。
【図3】図2に示す中央制御モジュールで使用される処理スレッドの対話を示す状態図である。
【図4】記憶装置とのアクセスに使用されるデータ構造及びプログラムモジュールを示すフローチャートである。
【図5】図4に示す「要求リスト」の説明図である。
【図6】本発明による図3に示すストリームスレッドの処理状態を示す状態図である。
【図7】各記憶スレッドにより行われるメッセージキュー処理を示すフローチャートである。
【図8】「要求リスト」中のメッセージの記憶スレッドによる処理を示すフローチャートである。
【図9】図1に示す記憶モジュールへの記憶のためのビデオオブジェクトオープン処理を示すフローチャートである。
【図10】再生のためのビデオオブジェクトオープン処理を示すフローチャートである。
【図11】図1に示す複数の記憶装置にわたるアクセス負荷の時間的平衡化のためのスケジューリング方法を示すフローチャートである。
【図12】M個のデータブロック毎にパリティコードを生成するように冗長ファクタ(M)を用いてディスクドライブアレイにビデオオブジェクトを記憶させる方法を示すフローチャートである。
【図13】
図12に示す方法に従って記憶されたデータブロックを取り出す処理を示すフローチャートである。
【符号の説明】
100 VODシステム
101 ビデオクライアント
105 ビデオサーバ
110 中央制御モジュール
120 分配モジュール
130 記憶モジュール
150 制御入力ソース
Claims (14)
- ビデオクライアントのサービスを行うためのビデオサーバシステムであって、
複数のビデオセレクションを記憶するための大容量記憶モジュールと、
ターゲットモードで動作することによりSCSI装置をエミュレートするSCSIインターフェイスを有する分配モジュールであって、1つ又は2つ以上の処理モジュールを有しており、その各処理モジュールが、ビデオクライアントに分配するためのビデオデータを処理するためのものであり、前記分配モジュールが、前記SCSIインターフェイスを介してビデオデータを受信し、該受信したビデオデータをバッファリングし、及び該バッファリングされたビデオデータをクライアントに分配するようにプログラムされている、分配モジュールと、
該分配モジュールに更に含まれる第1のプロセッサであって、前記1つ又は2つ以上の処理モジュールに対するビデオデータの送信を制御する、第1のプロセッサと、
前記大容量記憶モジュールに接続された第1のSCSIインターフェイスと、前記分配モジュールに接続された第2のSCSIインターフェイスとを有する中央制御モジュールであって、クライアントからビデオ制御コマンドを受信し、及び該受信したビデオ制御コマンドに応じて前記ビデオセレクションの再生を制御するようにプログラムされている、中央制御モジュールとを備えており、
該中央制御モジュールが更に、前記大容量記憶モジュールからビデオデータを受信し、及び該ビデオデータを前記分配モジュールへの送信に先立ってバッファリングする、少なくとも1つのメモリバッファと、前記大容量記憶モジュールから前記少なくとも1つのメモリバッファへ、及び該少なくとも1つのメモリバッファから前記分配モジュールへのビデオデータの送信を制御する第2のプロセッサとを備えている、ビデオサーバシステム。 - 前記分配モジュールに含まれる少なくとも1つの前記処理モジュールが、圧縮されたビデオデータの圧縮解除を行うためのビデオデータ圧縮解除手段である、請求項1に記載のビデオサーバシステム。
- 前記ビデオデータ圧縮解除手段が、モーションピクチャエキスパートグループ(MPEG)規格に従ってデータの圧縮解除を行う、請求項2に記載のビデオサーバシステム。
- 前記分配モジュールが、ラックマウント可能なシャシにマウントされたコンピュータ・マザーボードであり、前記中央制御モジュールが、ラックマウント可能なシャシにマウントされたコンピュータ・マザーボードである、請求項1に記載のビデオサーバシステム。
- 前記分配モジュールに含まれる少なくとも1つの前記処理モジュールが、イーサネットネットワークを介した分配用にビデオデータをフォーマットするイーサネットフォーマットモジュールである、請求項1に記載のビデオサーバシステム。
- 前記分配モジュールに含まれる少なくとも1つの前記処理モジュールが、ATMネットワークを介した分配用にビデオデータをフォーマットする非同期伝送モード(ATM)モジュールである、請求項1に記載のビデオサーバシステム。
- 1つ又は2つ以上の付加的な分配モジュールを更に備えており、
前記大容量記憶モジュールが複数のSCSI互換の記憶装置を備えており、
前記中央制御モジュールが、前記大容量記憶装置に接続された第1の複数のSCSIインターフェイスと、1つ又は2つ以上の前記分配モジュールに各々接続された第2の複数のSCSIインターフェイスとを有している、請求項1に記載のビデオサーバシステム。 - 前記中央制御モジュールが、前記大容量記憶装置に記憶されているビデオデータを読み出すための複数の読み出し要求を生成し、
該読み出し要求を記憶するためのメッセージ待ち行列と、
前記メッセージ待ち行列に接続されて前記読み出し要求の優先順位付けを行う優先順位付け手段とを更に備えている、請求項1に記載のビデオサーバシステム。 - 前記優先順位付け手段が、
各読み出し要求が緊急の読み出し要求であるか否かを判定し、
緊急の各読み出し要求毎にデッドラインを計算し、
非緊急の読み出し要求をサービスすることにより緊急の読み出し要求がそのデッドラインを逸することになるか否かを判定し、
非緊急の読み出し要求をサービスすることにより緊急の読み出し要求がそのデッドラインを逸することにならないとの判定に応じて非緊急の読み出し要求をサービスし、
非緊急の読み出し要求をサービスすることにより緊急の読み出し要求がそのデッドラインを逸することになるとの判定に応じて緊急のデッドラインを有する読み出し要求をサービスする、
という各ステップからなる方法を実施するものである、請求項10に記載のビデオサーバシステム。 - 前記大容量記憶モジュールが複数の記憶装置を備えており、
前記複数の記憶装置にわたってストライプ構成で複数の前記ビデオセレクションが記憶されており、
受信した制御コマンドに応じたビデオセレクションの再生の制御が、
複数の時間スロットを規定し、
前記複数の記憶装置のうち再生が開始されることになる記憶装置を識別し、該識別された記憶装置に関する第1の利用可能な時間スロット内にビデオセレクションの再生をスケジューリングし、各記憶装置が複数の時間スロットのサービスをローテーションで行う、
という各ステップからなる、請求項1に記載のビデオサーバシステム。 - 前記大容量記憶モジュールが複数の記憶装置を備えており、
少なくとも1つのビデオセレクションが、複数のデータブロックを含んでおり、及び前記複数の記憶装置にわたってストライプ構成で記憶されており、
該ビデオサーバシステムが、M個の各データブロック毎に計算されるエラーブロックを更に有しており、該Mが、前記ストライプ構成に使用される前記記憶装置の数よりも小さい整数の冗長ファクタである、請求項1に記載のビデオサーバシステム。 - ビデオクライアントのサービスを行うためのビデオサーバシステムであって、
複数のビデオセレクションを記憶するよう構成された大容量記憶モジュールと、
ターゲットモードで動作することによりSCSI装置をエミュレートするSCSIインターフェイスを有する分配モジュールであって、1つ又は2つ以上の処理モジュールを有しており、その各処理モジュールが、ビデオクライアントに分配するためのビデオデータを処理するためのものであり、前記分配モジュールが、前記SCSIインターフェイスを介してビデオデータを受信し、該受信したビデオデータをバッファリングし、及び該バッファリングされたビデオデータをクライアントに分配するようにプログラムされている、分配モジュールと、
前記大容量記憶モジュールに接続された第1のSCSIインターフェイスと、前記分配モジュールに接続された第2のSCSIインターフェイスとを有する中央制御モジュールであって、クライアントからビデオ制御コマンドを受信し、及び該受信したビデオ制御コマンドに応じて前記ビデオセレクションの再生を制御するようにプログラムされている、中央制御モジュールとを備えており、
前記大容量記憶モジュールが複数の記憶装置を備えており、
少なくとも1つのビデオセレクションが、複数のデータブロックを含んでおり、及び前記複数の記憶装置にわたってストライプ構成で記憶されており、
該ビデオサーバシステムが更に、M個の各データブロック毎に計算されるエラーブロックを有しており、該Mが、前記ストライプ構成に使用される前記記憶装置の数よりも小さい整数の冗長ファクタである、ビデオサーバシステム。 - 前記中央制御モジュールにより生成され実行される複数のスレッドを更に含み、該複数のスレッドが、
該ビデオサーバシステムとビデオクライアントとの間のインターフェイスを管理するためのリモートプロシージャコールスレッドと、
ビデオデータにより形成される単一のビデオストリームの再生を管理するための少なくとも1つのストリームスレッドと、
該少なくとも1つのストリームスレッドにより生成されたメッセージであってエラー条件を示し又はビデオデータを含むビデオファイルの終わりを示すメッセージを操作するためのコールバックスレッドと、
前記大容量記憶モジュールに関するアクセス機能及びデータ読出機能を実行するための複数の記憶スレッドと、
ファイル管理機能を操作するためのファイルスレッドと
を含む、請求項1に記載のビデオサーバシステム。 - 前記大容量記憶モジュールと前記中央制御モジュール内の前記第1のSCSIインターフェイスとの間に接続された第1のデータバスと、
前記中央制御モジュール内の前記第2のSCSIインターフェイスと前記分配モジュールとの間に接続された第2のデータバスと
を更に備えている、請求項1に記載のビデオサーバシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US692697 | 1996-08-08 | ||
US08/692,697 US5928327A (en) | 1996-08-08 | 1996-08-08 | System and process for delivering digital data on demand |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003389400A Division JP2004199853A (ja) | 1996-08-08 | 2003-11-19 | ディジタルデータを確実に分配するための方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1093924A JPH1093924A (ja) | 1998-04-10 |
JP3560211B2 true JP3560211B2 (ja) | 2004-09-02 |
Family
ID=24781644
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP21525897A Expired - Fee Related JP3560211B2 (ja) | 1996-08-08 | 1997-08-08 | ディジタルデータをオンデマンドで分配するシステム及び方法 |
JP2003389400A Pending JP2004199853A (ja) | 1996-08-08 | 2003-11-19 | ディジタルデータを確実に分配するための方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003389400A Pending JP2004199853A (ja) | 1996-08-08 | 2003-11-19 | ディジタルデータを確実に分配するための方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US5928327A (ja) |
JP (2) | JP3560211B2 (ja) |
TW (1) | TW364267B (ja) |
Families Citing this family (188)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11506575A (ja) * | 1995-03-07 | 1999-06-08 | インターバル リサーチ コーポレイション | 情報の選択記憶システム及び方法 |
US6769128B1 (en) | 1995-06-07 | 2004-07-27 | United Video Properties, Inc. | Electronic television program guide schedule system and method with data feed access |
US5862312A (en) * | 1995-10-24 | 1999-01-19 | Seachange Technology, Inc. | Loosely coupled mass storage computer cluster |
US6449730B2 (en) * | 1995-10-24 | 2002-09-10 | Seachange Technology, Inc. | Loosely coupled mass storage computer cluster |
US6567926B2 (en) * | 1995-10-24 | 2003-05-20 | Seachange International, Inc. | Loosely coupled mass storage computer cluster |
US6469753B1 (en) | 1996-05-03 | 2002-10-22 | Starsight Telecast, Inc. | Information system |
US5893062A (en) | 1996-12-05 | 1999-04-06 | Interval Research Corporation | Variable rate video playback with synchronized audio |
US6263507B1 (en) * | 1996-12-05 | 2001-07-17 | Interval Research Corporation | Browser for use in navigating a body of information, with particular application to browsing information represented by audiovisual data |
US6711622B1 (en) | 1997-12-31 | 2004-03-23 | Broadware Technologies, Inc. | Video and audio streaming for multiple users |
US6732183B1 (en) | 1996-12-31 | 2004-05-04 | Broadware Technologies, Inc. | Video and audio streaming for multiple users |
US7069575B1 (en) * | 1997-01-13 | 2006-06-27 | Sedna Patent Services, Llc | System for interactively distributing information services |
US20030192053A1 (en) * | 1997-02-19 | 2003-10-09 | Next Level Communications, Inc. | Method and apparatus for transmitting wireless signals over media |
JPH10285510A (ja) * | 1997-04-04 | 1998-10-23 | Sony Corp | 映像送信方法 |
US9113122B2 (en) | 1997-04-21 | 2015-08-18 | Rovi Guides, Inc. | Method and apparatus for time-shifting video and text in a text-enhanced television program |
MX340336B (es) | 1997-07-21 | 2016-07-06 | Gemstar Dev Corp | Metodo para navegar a traves de una guia de programas de television. |
US7024681B1 (en) * | 1997-12-04 | 2006-04-04 | Verizon Laboratories Inc. | Method and apparatus for near video on demand |
JPH11234627A (ja) * | 1998-02-17 | 1999-08-27 | Sony Corp | データ再生装置及び方法 |
WO1999060471A1 (fr) * | 1998-05-18 | 1999-11-25 | Hitachi, Ltd. | Controleur de pile de disques |
WO1999067713A1 (en) | 1998-06-22 | 1999-12-29 | Colin Constable | Virtual data storage (vds) system |
US6182197B1 (en) * | 1998-07-10 | 2001-01-30 | International Business Machines Corporation | Real-time shared disk system for computer clusters |
CN1867068A (zh) | 1998-07-14 | 2006-11-22 | 联合视频制品公司 | 交互式电视节目导视系统及其方法 |
US6898762B2 (en) | 1998-08-21 | 2005-05-24 | United Video Properties, Inc. | Client-server electronic program guide |
US6317779B1 (en) * | 1998-09-03 | 2001-11-13 | Hewlett-Packard Company | Audio/video from internet direct to compact disc through web browser |
TW425509B (en) * | 1998-09-11 | 2001-03-11 | Mentor Data System Inc | Hierarchical peripheral component interconnect bus system |
US6097422A (en) * | 1998-10-05 | 2000-08-01 | Panasonic Technologies, Inc. | Algorithm for fast forward and fast rewind of MPEG streams |
GB9821768D0 (en) * | 1998-10-06 | 1998-12-02 | Sgs Thomson Microelectronics | Data transfer |
TW511034B (en) * | 1998-11-09 | 2002-11-21 | Intel Corp | Scheduling requests in a system |
US6859799B1 (en) | 1998-11-30 | 2005-02-22 | Gemstar Development Corporation | Search engine for video and graphics |
US7492393B2 (en) * | 1999-02-12 | 2009-02-17 | Sony Corporation | Method of and apparatus for generating a precise frame rate in digital video transmission from a computer system to a digital video device |
JP3347684B2 (ja) * | 1999-03-01 | 2002-11-20 | 株式会社九州エレクトロニクスシステム | リアルタイム動画転送方法 |
US6535550B1 (en) | 1999-03-02 | 2003-03-18 | Legerity, Inc. | Transceiver with variable width cyclic prefix |
US6691208B2 (en) | 1999-03-12 | 2004-02-10 | Diva Systems Corp. | Queuing architecture including a plurality of queues and associated method for controlling admission for disk access requests for video content |
US6378036B2 (en) * | 1999-03-12 | 2002-04-23 | Diva Systems Corporation | Queuing architecture including a plurality of queues and associated method for scheduling disk access requests for video content |
US6792469B1 (en) * | 1999-03-22 | 2004-09-14 | General Electric Company | System and method for monitoring and controlling the production of audio and video streams |
US8763053B1 (en) * | 1999-04-01 | 2014-06-24 | Cox Communications, Inc. | File system for a file server of a video-on-demand system |
US8245260B1 (en) * | 1999-05-04 | 2012-08-14 | Unisys Corporation | Video server |
KR100624865B1 (ko) * | 1999-06-02 | 2006-09-18 | 엘지전자 주식회사 | 사용자 프로파일을 이용한 비디오 분할 시청 시스템 |
US6341375B1 (en) | 1999-07-14 | 2002-01-22 | Lsi Logic Corporation | Video on demand DVD system |
US6385673B1 (en) | 1999-10-06 | 2002-05-07 | Sun Microsystems, Inc. | System and method for adjusting performance of a media storage by decreasing a maximum throughput by a primary derate parameter to specify available & guaranteed rate parameters and determining ring buffer sizes for streams |
US6721789B1 (en) * | 1999-10-06 | 2004-04-13 | Sun Microsystems, Inc. | Scheduling storage accesses for rate-guaranteed and non-rate-guaranteed requests |
US6438630B1 (en) | 1999-10-06 | 2002-08-20 | Sun Microsystems, Inc. | Scheduling storage accesses for multiple continuous media streams |
US7155735B1 (en) | 1999-10-08 | 2006-12-26 | Vulcan Patents Llc | System and method for the broadcast dissemination of time-ordered data |
US6487613B1 (en) * | 1999-10-14 | 2002-11-26 | Dell Products L.P. | System for indicating channel availability by having a light emitting diode operative to signal of connection of a data storage device to an internal connector |
US6738360B1 (en) * | 1999-10-22 | 2004-05-18 | Verizon Laboratories Inc. | System and method for reliable video transmission in wireless Asynchronous Transfer Mode networks with fading |
US6757682B1 (en) | 2000-01-28 | 2004-06-29 | Interval Research Corporation | Alerting users to items of current interest |
US7113998B1 (en) * | 2000-02-03 | 2006-09-26 | International Business Machines Corporation | System and method for grouping recipients of streaming data |
US6477610B1 (en) * | 2000-02-04 | 2002-11-05 | International Business Machines Corporation | Reordering responses on a data bus based on size of response |
US6754907B1 (en) * | 2000-02-09 | 2004-06-22 | Sprint Communications Company, L.P. | Remote control of video-on-demand system |
US6757907B1 (en) * | 2000-02-09 | 2004-06-29 | Sprint Communications Company, L.P. | Display selection in a video-on-demand system |
WO2001069912A2 (en) * | 2000-03-13 | 2001-09-20 | Media Arts & Images Corporation | Video data management, transmission, and control system and method employing distributed video segments microcasting |
US8312490B2 (en) | 2000-03-23 | 2012-11-13 | The Directv Group, Inc. | DVR with enhanced functionality |
US20070127887A1 (en) * | 2000-03-23 | 2007-06-07 | Adrian Yap | Digital video recorder enhanced features |
EP2285104A1 (en) | 2000-03-31 | 2011-02-16 | United Video Properties, Inc. | System and method for reducing cut-offs in program recording |
US7266771B1 (en) * | 2000-04-21 | 2007-09-04 | Vulcan Patents Llc | Video stream representation and navigation using inherent data |
US6763439B1 (en) * | 2000-05-01 | 2004-07-13 | Microsoft Corporation | Disk throttling and priority queuing for streaming I/O |
US20030115294A1 (en) * | 2000-05-31 | 2003-06-19 | Khoi Hoang | Selective access digital data broadcast system |
US8131867B1 (en) | 2000-06-01 | 2012-03-06 | Qualcomm Incorporated | Dynamic layer congestion control for multicast transport |
US6766376B2 (en) | 2000-09-12 | 2004-07-20 | Sn Acquisition, L.L.C | Streaming media buffering system |
US6486803B1 (en) | 2000-09-22 | 2002-11-26 | Digital Fountain, Inc. | On demand encoding with a window |
US7103906B1 (en) | 2000-09-29 | 2006-09-05 | International Business Machines Corporation | User controlled multi-device media-on-demand system |
KR100971696B1 (ko) | 2000-10-11 | 2010-07-22 | 유나이티드 비디오 프로퍼티즈, 인크. | 데이터의 기억 장치를 주문형 매체 배달 시스템의 서버에 제공하기 위한 시스템 및 방법 |
CA2938250C (en) | 2000-10-11 | 2020-01-14 | Rovi Guides, Inc. | Systems and methods for caching data in media-on-demand systems |
US6411223B1 (en) * | 2000-10-18 | 2002-06-25 | Digital Fountain, Inc. | Generating high weight encoding symbols using a basis |
US20020101932A1 (en) * | 2000-11-29 | 2002-08-01 | Montgomery Dennis L. | Method and apparatus for encoding information using multiple passes and decoding in a single pass |
US6978047B2 (en) * | 2000-11-29 | 2005-12-20 | Etreppid Technologies Llc | Method and apparatus for storing digital video content provided from a plurality of cameras |
US7305560B2 (en) * | 2000-12-27 | 2007-12-04 | Proxense, Llc | Digital content security system |
US9613483B2 (en) * | 2000-12-27 | 2017-04-04 | Proxense, Llc | Personal digital key and receiver/decoder circuit system and method |
US20030115351A1 (en) * | 2001-12-14 | 2003-06-19 | Giobbi John J. | Digital content distribution system and method |
US6973576B2 (en) * | 2000-12-27 | 2005-12-06 | Margent Development, Llc | Digital content security system |
US7472280B2 (en) * | 2000-12-27 | 2008-12-30 | Proxense, Llc | Digital rights management |
US6973666B1 (en) * | 2001-02-28 | 2005-12-06 | Unisys Corporation | Method of moving video data thru a video-on-demand system which avoids paging by an operating system |
US6941252B2 (en) * | 2001-03-14 | 2005-09-06 | Mcdata Corporation | Striping data frames across parallel fibre channel links |
US20020184638A1 (en) * | 2001-05-29 | 2002-12-05 | Koninklijke Philips Electronics N.V. | Video playback device capable of sharing resources and method of operation |
KR100431734B1 (ko) * | 2001-06-09 | 2004-05-17 | 왕영국 | 멀티 펌핑을 이용한 동영상 동시 제공방법 |
US6977693B2 (en) * | 2001-06-11 | 2005-12-20 | Sun Microsystems, Inc. | Networked video projector apparatus and method of projecting a video frame on a video projector |
US7318146B2 (en) * | 2001-06-19 | 2008-01-08 | Micron Technology, Inc. | Peripheral device with hardware linked list |
US20030009765A1 (en) * | 2001-06-22 | 2003-01-09 | Linden Thomas M. | Multiple program burst broadcast |
US6950966B2 (en) * | 2001-07-17 | 2005-09-27 | Seachange International, Inc. | Data transmission from raid services |
US6810523B2 (en) * | 2001-07-31 | 2004-10-26 | International Business Machines Corporation | Efficient thread programming using a single callback function |
AU2002337702A1 (en) * | 2001-09-26 | 2003-04-07 | General Atomics | Method and apparatus for data transfer using a time division multiple frequency scheme |
US8116612B2 (en) * | 2001-10-05 | 2012-02-14 | Ucentric Systems, Inc. | Centralized digital video recording and playback system accessible to multiple reproduction and control units via a home area network |
US6996670B2 (en) * | 2001-10-05 | 2006-02-07 | International Business Machines Corporation | Storage area network methods and apparatus with file system extension |
US6738980B2 (en) | 2001-11-15 | 2004-05-18 | Industrial Technology Research Institute | Methods and systems for video streaming with VCR functionality |
EP1461686B1 (en) | 2001-12-06 | 2011-01-26 | Toyota Motor Sales, U.S.A., Inc. | Vehicle player system |
FI116167B (fi) * | 2001-12-18 | 2005-09-30 | Valtion Teknillinen | Arkistoiva tiedostopalvelin |
US20060098880A1 (en) * | 2002-02-22 | 2006-05-11 | Montgomery Dennis L | Method and apparatus for storing digital video content provided from a plurality of cameras |
US7421726B1 (en) * | 2002-03-27 | 2008-09-02 | Unisys Corporation | Method of seamlessly replacing disc-based video streams with memory-based video streams in a video-on-demand system |
US7337232B2 (en) * | 2002-03-28 | 2008-02-26 | Sony Corporation | Method and system for providing and controlling sub-burst data transfers |
US6915354B1 (en) * | 2002-04-30 | 2005-07-05 | Intransa, Inc. | Distributed iSCSI and SCSI targets |
US20030233651A1 (en) * | 2002-06-18 | 2003-12-18 | Farley Elisha Rawle Edwin | System and method for parental control of digital display media |
US7899879B2 (en) | 2002-09-06 | 2011-03-01 | Oracle International Corporation | Method and apparatus for a report cache in a near real-time business intelligence system |
US7941542B2 (en) | 2002-09-06 | 2011-05-10 | Oracle International Corporation | Methods and apparatus for maintaining application execution over an intermittent network connection |
US7412481B2 (en) | 2002-09-16 | 2008-08-12 | Oracle International Corporation | Method and apparatus for distributed rule evaluation in a near real-time business intelligence system |
US7454423B2 (en) | 2002-09-06 | 2008-11-18 | Oracle International Corporation | Enterprise link for a software database |
US8165993B2 (en) | 2002-09-06 | 2012-04-24 | Oracle International Corporation | Business intelligence system with interface that provides for immediate user action |
US7945846B2 (en) | 2002-09-06 | 2011-05-17 | Oracle International Corporation | Application-specific personalization for data display |
US7912899B2 (en) | 2002-09-06 | 2011-03-22 | Oracle International Corporation | Method for selectively sending a notification to an instant messaging device |
US8255454B2 (en) | 2002-09-06 | 2012-08-28 | Oracle International Corporation | Method and apparatus for a multiplexed active data window in a near real-time business intelligence system |
US7668917B2 (en) | 2002-09-16 | 2010-02-23 | Oracle International Corporation | Method and apparatus for ensuring accountability in the examination of a set of data elements by a user |
US7401158B2 (en) | 2002-09-16 | 2008-07-15 | Oracle International Corporation | Apparatus and method for instant messaging collaboration |
US7426059B2 (en) | 2002-09-16 | 2008-09-16 | Oracle International Corporation | Data presentation methods and apparatus to facilitate printing and reviewing |
US20040153787A1 (en) * | 2002-10-11 | 2004-08-05 | Eric Zucker | Process for managing messages between a set of decoders and a system of conditional access control |
WO2004054265A1 (en) * | 2002-12-12 | 2004-06-24 | Koninklijke Philips Electronics N.V. | Intermediate storage of a/v data at the internet |
US20040143850A1 (en) * | 2003-01-16 | 2004-07-22 | Pierre Costa | Video Content distribution architecture |
JP4274523B2 (ja) * | 2003-01-24 | 2009-06-10 | 株式会社日立製作所 | 記憶装置システム、及び記憶装置システムの起動方法 |
US7493646B2 (en) | 2003-01-30 | 2009-02-17 | United Video Properties, Inc. | Interactive television systems with digital video recording and adjustable reminders |
US20040267384A1 (en) * | 2003-02-07 | 2004-12-30 | Broadon Communications, Inc. | Integrated console and controller |
US7322042B2 (en) | 2003-02-07 | 2008-01-22 | Broadon Communications Corp. | Secure and backward-compatible processor and secure software execution thereon |
US7779482B1 (en) | 2003-02-07 | 2010-08-17 | iGware Inc | Delivery of license information using a short messaging system protocol in a closed content distribution system |
US20100017627A1 (en) | 2003-02-07 | 2010-01-21 | Broadon Communications Corp. | Ensuring authenticity in a closed content distribution system |
US8131649B2 (en) * | 2003-02-07 | 2012-03-06 | Igware, Inc. | Static-or-dynamic and limited-or-unlimited content rights |
US7904823B2 (en) | 2003-03-17 | 2011-03-08 | Oracle International Corporation | Transparent windows methods and apparatus therefor |
US20060051059A1 (en) | 2004-09-08 | 2006-03-09 | Krakirian Haig H | Video recorder having user extended and automatically extended time slots |
US7351217B2 (en) * | 2003-05-23 | 2008-04-01 | Yvette Scherpenborg | Thermal compressive aerating bandage and methods of use relating to same |
US7593336B2 (en) | 2003-10-31 | 2009-09-22 | Brocade Communications Systems, Inc. | Logical ports in trunking |
US7619974B2 (en) * | 2003-10-31 | 2009-11-17 | Brocade Communication Systems, Inc. | Frame traffic balancing across trunk groups |
WO2005086802A2 (en) | 2004-03-08 | 2005-09-22 | Proxense, Llc | Linked account system using personal digital key (pdk-las) |
JP2005303975A (ja) * | 2004-03-19 | 2005-10-27 | Onkyo Corp | ネットワークavシステム、コントローラ及びその動作プログラム |
JP4321340B2 (ja) * | 2004-04-22 | 2009-08-26 | ソニー株式会社 | 再生装置 |
US20060031916A1 (en) * | 2004-04-30 | 2006-02-09 | Vulcan Inc. | Management and non-linear presentation of broadcasted or streamed multimedia content |
US20060031879A1 (en) * | 2004-04-30 | 2006-02-09 | Vulcan Inc. | Management and non-linear presentation of news-related broadcasted or streamed multimedia content |
US20060031885A1 (en) * | 2004-04-30 | 2006-02-09 | Vulcan Inc. | Management and non-linear presentation of music-related broadcasted or streamed multimedia content |
US8108429B2 (en) | 2004-05-07 | 2012-01-31 | Quest Software, Inc. | System for moving real-time data events across a plurality of devices in a network for simultaneous data protection, replication, and access services |
US7565661B2 (en) | 2004-05-10 | 2009-07-21 | Siew Yong Sim-Tang | Method and system for real-time event journaling to provide enterprise data services |
US7680834B1 (en) | 2004-06-08 | 2010-03-16 | Bakbone Software, Inc. | Method and system for no downtime resychronization for real-time, continuous data protection |
US7979404B2 (en) | 2004-09-17 | 2011-07-12 | Quest Software, Inc. | Extracting data changes and storing data history to allow for instantaneous access to and reconstruction of any point-in-time data |
US8086575B2 (en) | 2004-09-23 | 2011-12-27 | Rovi Solutions Corporation | Methods and apparatus for integrating disparate media formats in a networked media system |
US7904913B2 (en) | 2004-11-02 | 2011-03-08 | Bakbone Software, Inc. | Management interface for a system that provides automated, real-time, continuous data protection |
US8352730B2 (en) | 2004-12-20 | 2013-01-08 | Proxense, Llc | Biometric personal data key (PDK) authentication |
CN1310512C (zh) * | 2004-12-29 | 2007-04-11 | 国家广播电影电视总局广播科学研究院 | 基于数据/视频系统的服务器扩容方法 |
US9973817B1 (en) | 2005-04-08 | 2018-05-15 | Rovi Guides, Inc. | System and method for providing a list of video-on-demand programs |
US7689602B1 (en) | 2005-07-20 | 2010-03-30 | Bakbone Software, Inc. | Method of creating hierarchical indices for a distributed object system |
US7788521B1 (en) | 2005-07-20 | 2010-08-31 | Bakbone Software, Inc. | Method and system for virtual on-demand recovery for real-time, continuous data protection |
US20070079342A1 (en) | 2005-09-30 | 2007-04-05 | Guideworks, Llc | Systems and methods for managing local storage of on-demand content |
US9681105B2 (en) | 2005-12-29 | 2017-06-13 | Rovi Guides, Inc. | Interactive media guidance system having multiple devices |
US8607287B2 (en) | 2005-12-29 | 2013-12-10 | United Video Properties, Inc. | Interactive media guidance system having multiple devices |
US11206664B2 (en) | 2006-01-06 | 2021-12-21 | Proxense, Llc | Wireless network synchronization of cells and client devices on a network |
US8219129B2 (en) | 2006-01-06 | 2012-07-10 | Proxense, Llc | Dynamic real-time tiered client access |
US20070214105A1 (en) * | 2006-03-08 | 2007-09-13 | Omneon Video Networks | Network topology for a scalable data storage system |
US20070226224A1 (en) * | 2006-03-08 | 2007-09-27 | Omneon Video Networks | Data storage system |
US20070294565A1 (en) * | 2006-04-28 | 2007-12-20 | Network Appliance, Inc. | Simplified parity disk generation in a redundant array of inexpensive disks |
US20070255659A1 (en) * | 2006-05-01 | 2007-11-01 | Wei Yen | System and method for DRM translation |
WO2007130554A2 (en) | 2006-05-02 | 2007-11-15 | Broadon Communications Corp. | Content management system and method |
US8412949B2 (en) | 2006-05-05 | 2013-04-02 | Proxense, Llc | Personal digital key initialization and registration for secure transactions |
US7624276B2 (en) * | 2006-10-16 | 2009-11-24 | Broadon Communications Corp. | Secure device authentication system and method |
US7613915B2 (en) * | 2006-11-09 | 2009-11-03 | BroadOn Communications Corp | Method for programming on-chip non-volatile memory in a secure processor, and a device so programmed |
US7883003B2 (en) | 2006-11-13 | 2011-02-08 | Proxense, Llc | Tracking system using personal digital key groups |
US9269221B2 (en) | 2006-11-13 | 2016-02-23 | John J. Gobbi | Configuration of interfaces for a location detection system and application |
US8200961B2 (en) * | 2006-11-19 | 2012-06-12 | Igware, Inc. | Securing a flash memory block in a secure device system and method |
US7801888B2 (en) | 2007-03-09 | 2010-09-21 | Microsoft Corporation | Media content search results ranked by popularity |
US8131723B2 (en) | 2007-03-30 | 2012-03-06 | Quest Software, Inc. | Recovering a file system to any point-in-time in the past with guaranteed structure, content consistency and integrity |
US8364648B1 (en) | 2007-04-09 | 2013-01-29 | Quest Software, Inc. | Recovering a database to any point-in-time in the past with guaranteed data consistency |
US20090019492A1 (en) | 2007-07-11 | 2009-01-15 | United Video Properties, Inc. | Systems and methods for mirroring and transcoding media content |
WO2009062194A1 (en) | 2007-11-09 | 2009-05-14 | Proxense, Llc | Proximity-sensor supporting multiple application services |
US8171528B1 (en) | 2007-12-06 | 2012-05-01 | Proxense, Llc | Hybrid device having a personal digital key and receiver-decoder circuit and methods of use |
US20090157891A1 (en) * | 2007-12-13 | 2009-06-18 | General Instrument Corporation | Method and Apparatus for Inserting Time-Variant Data into a Media Stream |
US9251332B2 (en) | 2007-12-19 | 2016-02-02 | Proxense, Llc | Security system and method for controlling access to computing resources |
US8508336B2 (en) | 2008-02-14 | 2013-08-13 | Proxense, Llc | Proximity-based healthcare management system with automatic access to private information |
US8103775B2 (en) * | 2008-03-13 | 2012-01-24 | Harris Corporation | System and method for distributing a client load from a failed server among remaining servers in a storage area network (SAN) |
US11120449B2 (en) | 2008-04-08 | 2021-09-14 | Proxense, Llc | Automated service-based order processing |
US9172900B2 (en) * | 2008-04-09 | 2015-10-27 | Imagine Communications Corp. | Video multiviewer system with switcher and distributed scaling and related methods |
US8103628B2 (en) | 2008-04-09 | 2012-01-24 | Harmonic Inc. | Directed placement of data in a redundant data storage system |
US8717435B2 (en) * | 2008-04-09 | 2014-05-06 | Hbc Solutions, Inc. | Video monitoring device providing parametric signal curve display features and related methods |
US9716854B2 (en) * | 2008-04-09 | 2017-07-25 | Imagine Communications Corp. | Video multiviewer system with distributed scaling and related methods |
US8773469B2 (en) * | 2008-04-09 | 2014-07-08 | Imagine Communications Corp. | Video multiviewer system with serial digital interface and related methods |
US9124847B2 (en) * | 2008-04-10 | 2015-09-01 | Imagine Communications Corp. | Video multiviewer system for generating video data based upon multiple video inputs with added graphic content and related methods |
US8811499B2 (en) | 2008-04-10 | 2014-08-19 | Imagine Communications Corp. | Video multiviewer system permitting scrolling of multiple video windows and related methods |
US9615049B2 (en) * | 2008-04-10 | 2017-04-04 | Imagine Communications Corp. | Video multiviewer system providing direct video data transfer to graphics processing unit (GPU) memory and related methods |
US8151008B2 (en) | 2008-07-02 | 2012-04-03 | Cradle Ip, Llc | Method and system for performing DMA in a multi-core system-on-chip using deadline-based scheduling |
US8925025B2 (en) * | 2008-08-22 | 2014-12-30 | At&T Intellectual Property I, L.P. | System and method of providing access to content of an interrupted digital broadcast signal |
US10063934B2 (en) | 2008-11-25 | 2018-08-28 | Rovi Technologies Corporation | Reducing unicast session duration with restart TV |
US8392530B1 (en) * | 2008-12-18 | 2013-03-05 | Adobe Systems Incorporated | Media streaming in a multi-tier client-server architecture |
JP5146548B2 (ja) * | 2009-02-06 | 2013-02-20 | 富士通株式会社 | パケットバッファ装置及びパケット廃棄方法 |
US9166714B2 (en) | 2009-09-11 | 2015-10-20 | Veveo, Inc. | Method of and system for presenting enriched video viewing analytics |
US9014546B2 (en) | 2009-09-23 | 2015-04-21 | Rovi Guides, Inc. | Systems and methods for automatically detecting users within detection regions of media devices |
US9418205B2 (en) | 2010-03-15 | 2016-08-16 | Proxense, Llc | Proximity-based system for automatic application or data access and item tracking |
JP5573943B2 (ja) * | 2010-03-24 | 2014-08-20 | 富士通株式会社 | データ転送装置およびデータ転送方法 |
US8918854B1 (en) | 2010-07-15 | 2014-12-23 | Proxense, Llc | Proximity-based system for automatic application initialization |
US9265450B1 (en) | 2011-02-21 | 2016-02-23 | Proxense, Llc | Proximity-based system for object tracking and automatic application initialization |
US8713405B2 (en) * | 2011-11-22 | 2014-04-29 | Simplivity Corporation | Method and apparatus for allocating erasure coded data to disk storage |
US8805418B2 (en) | 2011-12-23 | 2014-08-12 | United Video Properties, Inc. | Methods and systems for performing actions based on location-based rules |
US8627097B2 (en) | 2012-03-27 | 2014-01-07 | Igt | System and method enabling parallel processing of hash functions using authentication checkpoint hashes |
US9405898B2 (en) | 2013-05-10 | 2016-08-02 | Proxense, Llc | Secure element as a digital pocket |
US9674563B2 (en) | 2013-11-04 | 2017-06-06 | Rovi Guides, Inc. | Systems and methods for recommending content |
US9466964B1 (en) * | 2015-06-08 | 2016-10-11 | Amazon Technologies, Inc. | Multilevel cable management system |
US10158611B2 (en) | 2016-11-17 | 2018-12-18 | Bank Of America Corporation | System for multiplexing and demultiplexing blockchain ledgers via a cryptographic hash |
US10701462B2 (en) | 2018-04-12 | 2020-06-30 | International Business Machines Corporation | Generating video montage of an event |
CN114564144B (zh) * | 2020-11-27 | 2024-04-19 | 伊姆西Ip控股有限责任公司 | 在存储系统中创建区块阵列的方法、设备和程序产品 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5508732A (en) * | 1993-03-22 | 1996-04-16 | International Business Machines Corporation | Data server, control server and gateway architecture system and method for broadcasting digital video on demand |
DE69319327T2 (de) * | 1993-05-19 | 1998-10-29 | Alsthom Cge Alcatel | Videoserver |
US5442390A (en) * | 1993-07-07 | 1995-08-15 | Digital Equipment Corporation | Video on demand with memory accessing and or like functions |
US5440336A (en) * | 1993-07-23 | 1995-08-08 | Electronic Data Systems Corporation | System and method for storing and forwarding audio and/or visual information on demand |
US5583876A (en) * | 1993-10-05 | 1996-12-10 | Hitachi, Ltd. | Disk array device and method of updating error correction codes by collectively writing new error correction code at sequentially accessible locations |
US5473362A (en) * | 1993-11-30 | 1995-12-05 | Microsoft Corporation | Video on demand system comprising stripped data across plural storable devices with time multiplex scheduling |
AU2123995A (en) * | 1994-03-18 | 1995-10-09 | Micropolis Corporation | On-demand video server system |
EP0707423B1 (en) * | 1994-04-25 | 2000-06-28 | Sony Corporation | Video signal reproducing device |
US5521631A (en) * | 1994-05-25 | 1996-05-28 | Spectravision, Inc. | Interactive digital video services system with store and forward capabilities |
US5519435A (en) * | 1994-09-01 | 1996-05-21 | Micropolis Corporation | Multi-user, on-demand video storage and retrieval system including video signature computation for preventing excessive instantaneous server data rate |
US5623595A (en) * | 1994-09-26 | 1997-04-22 | Oracle Corporation | Method and apparatus for transparent, real time reconstruction of corrupted data in a redundant array data storage system |
US5533021A (en) * | 1995-02-03 | 1996-07-02 | International Business Machines Corporation | Apparatus and method for segmentation and time synchronization of the transmission of multimedia data |
JP3358687B2 (ja) * | 1995-03-13 | 2002-12-24 | 株式会社日立製作所 | ディスクアレイ装置 |
US5719983A (en) * | 1995-12-18 | 1998-02-17 | Symbios Logic Inc. | Method and apparatus for placement of video data based on disk zones |
US5832196A (en) * | 1996-06-28 | 1998-11-03 | Mci Communications Corporation | Dynamic restoration process for a telecommunications network |
-
1996
- 1996-08-08 US US08/692,697 patent/US5928327A/en not_active Expired - Lifetime
-
1997
- 1997-08-05 TW TW086111195A patent/TW364267B/zh not_active IP Right Cessation
- 1997-08-08 JP JP21525897A patent/JP3560211B2/ja not_active Expired - Fee Related
-
1999
- 1999-05-25 US US09/318,524 patent/US6212657B1/en not_active Expired - Lifetime
-
2003
- 2003-11-19 JP JP2003389400A patent/JP2004199853A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
JPH1093924A (ja) | 1998-04-10 |
TW364267B (en) | 1999-07-11 |
US6212657B1 (en) | 2001-04-03 |
JP2004199853A (ja) | 2004-07-15 |
US5928327A (en) | 1999-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3560211B2 (ja) | ディジタルデータをオンデマンドで分配するシステム及び方法 | |
US9432460B2 (en) | Computer system and process for transferring multiple high bandwidth streams of data between multiple storage units and multiple applications in a scalable and reliable manner | |
US6785768B2 (en) | Computer system and process for transferring streams of data between multiple storage units and multiple applications in a scalable and reliable manner | |
Lougher et al. | The design of a storage server for continuous media | |
Yu et al. | Grouped sweeping scheduling for DASD-based multimedia storage management | |
JP3136269B2 (ja) | ビデオサービス提供方法及びビデオサーバ | |
US5974503A (en) | Storage and access of continuous media files indexed as lists of raid stripe sets associated with file names | |
US5987621A (en) | Hardware and software failover services for a file server | |
EP1040419B1 (en) | Computer system for transferring multiple high bandwidth streams of data between multiple storage units and multiple applications in a scalable and reliable manner | |
JPH0887385A (ja) | キャッシュ管理を有するビデオ用に最適化された媒体ストリーマ | |
JPH08130714A (ja) | ビデオ用に最適化された媒体ストリーマ・ユーザ・インタフェース | |
JP2003525486A (ja) | 有限要求リオーダを用いるディスク・スケジューリング・システム | |
Lougher et al. | The design and implementation of a continuous media storage server | |
Anastasiadis | Supporting Variable Bit-Rate Streams in a Scalable Continuous Media Server | |
Özden et al. | Architecture issues in multimedia storage systems | |
Vin et al. | Storage Architectures for Digital Imagery | |
Jin et al. | Multimedia storage server |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040420 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040520 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080604 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |