JPH07225714A - キャッシュ装置、および複数の光ディスクから受取られたデータを不揮発性キャッシュメモリにストアするための方法 - Google Patents

キャッシュ装置、および複数の光ディスクから受取られたデータを不揮発性キャッシュメモリにストアするための方法

Info

Publication number
JPH07225714A
JPH07225714A JP6307611A JP30761194A JPH07225714A JP H07225714 A JPH07225714 A JP H07225714A JP 6307611 A JP6307611 A JP 6307611A JP 30761194 A JP30761194 A JP 30761194A JP H07225714 A JPH07225714 A JP H07225714A
Authority
JP
Japan
Prior art keywords
data
cache
optical disc
data request
current
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.)
Granted
Application number
JP6307611A
Other languages
English (en)
Other versions
JP2711387B2 (ja
Inventor
Clinton L Ballard
クリントン・エル・バラード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ballard Synergy Corp
Original Assignee
Ballard Synergy Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US08/194,104 external-priority patent/US5584007A/en
Application filed by Ballard Synergy Corp filed Critical Ballard Synergy Corp
Publication of JPH07225714A publication Critical patent/JPH07225714A/ja
Application granted granted Critical
Publication of JP2711387B2 publication Critical patent/JP2711387B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/311In host system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/312In storage controller

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 【目的】 光学媒体へのアクセスを向上するためのキャ
ッシュを提供する。 【構成】 このキャッシュ(100)は、RAM(8
8)を備える一次キャッシュ(102)と、ハードディ
スクメモリ(60)の一部分を備える二次キャッシュ
(104)とを含む。本発明の局面を以下に規定する。
(1)データをキャッシュ化するべきでないときを判断
する(ある条件下ではデータのキャッシングはアクセス
時間を向上させにくいため)。(2)二次キャッシュへ
のアクセス時間を光学媒体へのアクセス時間よりも速く
し続けるために二次キャッシュの細分化を最少にする。
(3)実施例に応じて一次、二次キャッシュに連続的ま
たは並列にキャッシュ更新を行なう。(4)不揮発性二
次キャッシュにストアされるデータの保全性は、電力異
常やシャットダウンや媒体のスワッピングがあっても二
次キャッシュのかなりの部分に関して維持される。

Description

【発明の詳細な説明】
【0001】
【発明の背景】この発明は大容量記憶装置に記憶された
データへのアクセスを向上するためのキャッシュサブシ
ステムに関する。より特定的には、この発明は光記憶装
置にストアされた情報に対する「アクセス時間」を向上
するための、ハードディスクドライブを含むキャッシュ
サブシステムに関する。
【0002】マイクロコンピュータメモリ処理に関して
のアクセス時間とは、アドレスが選択された後にメモリ
システムがマイクロプロセッサに情報を与えるのにかか
る時間のことである。キャッシュとは、主または「大容
量」メモリにストアされたデータへのアクセス時間を向
上するためのメモリサブシステムである。キャッシュサ
ブシステムは特徴的に、主メモリよりも速いアクセス時
間を有するメモリを含む。このようなデータに対するア
クセス時間の向上は、頻繁にアクセスされる主メモリデ
ータ値をキャッシュメモリに複製することによる。
【0003】従来のマイクロコンピュータにおける主メ
モリ源にはいくつかのタイプがある。これらはフロッピ
ーディスク、ハードディスクおよび光記憶媒体を含む。
このようなディスクまたは媒体にストアされたデータへ
のアクセス時間を向上するためのランダムアクセスメモ
リ(RAM)を含むキャッシュが一般的である。RAM
は約150ナノ秒(ns)のアクセス時間を有する。こ
れは大容量記憶装置へのアクセス時間よりもはるかに速
い。たとえば、従来のPCフロッピーディスクドライブ
に対するアクセス時間は数秒のオーダであり、従来のP
Cハードドライブに対するアクセス時間は約12−60
ミリ秒(ms)である。光記憶媒体の形態の1つである
コンパクトディスクリードオンリーメモリ(CD−RO
M)は、約680メガバイトの記憶容量および約300
−1000msのアクセス時間を有する。最良のCD−
ROMドライブではアクセス時間を265msと宣伝し
ている。
【0004】RAMの価格がかなり下がると考えられれ
ば、チップ製造業者はRAMを含む主メモリシステムを
検討するであろうが、このような価格の低下は起こって
いない。逆に、RAMはその相対的費用のためにコンピ
ュータにおいて貴重な資源となっている。現在のとこ
ろ、数十メガバイトのRAMを高容量キャッシュ専用と
して機能させるのは実現不可能である。しかしながら、
この発明に従い、CD−ROMまたは他の高容量光学媒
体に対するアクセス時間を向上するための高容量キャッ
シュを規定することが望ましい。
【0005】プログラマーは典型的には現在のCD−R
OMアクセス時間を達成するのにCD−ROM上の情報
レイアウトを最適化していする。ビデオ再生またはオー
ディオ再生中等の光学媒体の連続したシーケンシャルな
アクセスは、典型的には所望の仕様内で起こり、ユーザ
に視覚的および音的に許容できる質を提供する。しかし
ながら、フルモーションビデオおよび/またはサウンド
でランダムなシークが散在していれば、性能(すなわち
平均アクセス時間)は低下する。典型的なマルチメディ
アおよびハイパメディアの応用では、オーディオ/ビデ
オデータにプログラムおよび/または図形データが散在
している。従来のCD−ROM百科事典の応用では、ユ
ーザがプログラムおよび図形データにアクセスするのに
費やす時間が90%で、オーディオ−ビデオまたはアニ
メーションデータにアクセスするのに費やす時間は10
%にすぎないこともある。(CD−ROM自体は、ビデ
オ/オーディオの記憶集中により、50%のデータおよ
び50%のビデオ/オーディオを有し得る。マルチメデ
ィアの仕様を満たす従来のCD−ROMドライブは、1
50KB/秒の維持されたスループットレートを必要と
する。問題が起こるのは、典型的にはフルモーションビ
デオまたはアニメーションのランダムなシークが散在す
るときである。約256KBの従来のRAMキャッシュ
を用いると、キャッシュはすぐにオーディオ−ビデオデ
ータで充満されてしまう。オペレーティングシステムに
よって既にRAM資源に対するかなりの競合があるの
で、利用可能なキャッシュのすべてをフルモーションビ
デオの維持に用いることは許容できないであろう。した
がって、より大きい高容量キャッシュが必要である。
【0006】RAMのコストは1994年現在約80ド
ル/MBなので、高容量キャッシュの実現は、たった2
0MB高容量キャッシュで約1600ドルとなってしま
い、このような実現は不可能である。したがって、CD
−ROMキャッシュを実現するための別の構造が必要で
ある。特に、よりコスト効率がよく、技術的に効果的な
高容量キャッシュ構造が必要である。
【0007】従来のマイクロコンピュータの動作条件の
下では、キャッシュがアクセス時間を向上することもあ
る。重要なのは、キャッシュがマイクロプロセッサの性
能を向上しない過渡期間があることである。これは、従
来のキャッシュ実現方法が実質的にすべてのデータ転送
のキャッシュ化を要求するからであり、非効率である。
計算時間の80−90%がコード/データの10−20
%を処理するのに費やされ、残りの10−20%の時間
がコード/データの残りの80−90%を処理するのに
費やされることが一般に認められている。キャッシュが
性能を向上させるのは頻繁に実行される、コード/デー
タの10−20%についてである。残りのコード/デー
タのキャッシュ化は、性能を向上させるとしても、ごく
わずかである。しかしながら、CD−ROMの応用で
は、この残りの90%のコード/データのキャッシュ化
がキャッシュ資源のかなりの部分を消費してしまう。高
容量キャッシュにおいて、頻繁にはアクセスされないこ
の80−90%のコード/データに数十メガバイトの空
間を割当てるのはコストが高すぎる。したがって、キャ
ッシュ使用を最適化する、より効果的なキャッシュ実現
法に対する必要性がある。
【0008】発明の概要および詳細な説明に述べられる
ように、出願人のキャッシュは、いくつかの実施例に従
えば、ハードディスクメモリの一部を含む。ハードディ
スクドライブは、CD−ROMアクセス時間より一般に
10倍速いアクセス時間を与える。しかしながら、ハー
ドディスクにストアされたデータファイルが細分化され
ると、ハードドライブアクセスの性能は低下する。この
低下によってCD−ROMに対するアクセスよりもアク
セスが速くなくなれば、ハードディスクをキャッシュと
して用いる意味がない。したがって、キャッシュのため
に使用されるハードディスク領域の細分化を最小にする
ことが望ましい。
【0009】高容量キャッシュは充満するのにかなりの
時間がかかるので、媒体の変化(たとえばCD−ROM
の変化)および電源のシャットダウンの際にはキャッシ
ュの内容を守ることが望ましい。したがって、不揮発性
キャッシュに対する必要、およびストアされたデータを
特定のCD−ROMに関連付ける必要がある。
【0010】
【発明の概要】この発明に従えば、光学媒体へのアクセ
スを向上するためのキャッシュは、一次キャッシュおよ
び二次キャッシュを含み、一次キャッシュはRAMによ
って形成され、二次キャッシュはハードディスクメモリ
の一部(すなわちすべての空間またはそれを下回る)に
よって形成される。
【0011】この発明の1局面に従えば、光学媒体デー
タがキャッシュ化されるべきではないときを判断するた
めの識別方法が実現される。ある状況下では、データ転
送のキャッシュ化は光学媒体データへのアクセスを向上
しない。たとえば、CD−ROMからのデータ転送が臨
界維持スループットレート(critical sustained throu
ghput rate)を超えれば、キャッシュ化がアクセス時間
を向上しそうにはない。したがって、このような転送は
キャッシュ化されない。別の状況下で、光学媒体データ
リクエストを完了する推定時間がハードドライブディス
クリクエストを完了する推定時間の特定の割合内であれ
ば、その利点は大きくないので、このようなリクエスト
もやはりキャッシュ化されない。
【0012】この発明の別の局面に従えば、キャッシュ
のハードディスク部分にストアされたデータの細分化
は、ストアの制約を課すことによって最小にされる。細
分化はハードドライブアクセス時間を悪化させるので、
細分化は最小にされ、避けられる。このために、CD−
ROMリクエスト全体がハードディスクドライブ上の連
続するセクタにストアされる。さらに、CD−ROMの
隣接するセクタへのシーケンシャルなCD−ROMリク
エストはハードドライブ上で連結され、そのため複数の
CD−ROMリクエストがハードドライブの連続するセ
クタにストアされる。キャッシュにおけるデータ冗長性
さえも、これが細分化を避けることに繋がるので許容さ
れる。冗長データは、重なる(すなわち2つ以上のスト
アされたリクエストにある)、整列されない(すなわち
重なるリクエストのいずれとも異なる位置で始まる)ス
トアリクエストの間でデータがキャッシュに既に存在す
ると、ストアされる。従来の廃棄方式の現れである細分
化の助長は、キャッシュ位置を上書きするための先入れ
先出し基準を実現することで避けられる。
【0013】この発明の別の局面に従えば、キャッシュ
更新は一次および二次キャッシュの両方で並列して実行
される。
【0014】この発明の別の局面に従えば、キャッシュ
にストアされたデータは特定の光ディスクと関連付けら
れ、光ディスクが変化され、再び変化されるときにデー
タを無効にするのを避ける。具体的には、キャッシュに
ストアされた光ディスクの各セクタについてタグが規定
される。タグはデータの光ディスクセクタ番号を割当て
られた光ディスク番号に対応するインデックスと組合せ
ることによって形成される。光ディスク番号は、光ディ
スクに対して一意的なヘッダ情報およびルートディレク
トリから割当てられる。
【0015】この発明の別の局面に従えば、不揮発性二
次キャッシュにストアされたデータの保全性が電源異常
およびシャットダウンの際にも維持される。好ましい実
施例に従えば、不揮発性メモリ内のキャッシュ化された
データはすべて、比較的小さい部分(たとえば20MB
またはそれより大きなキャッシュファイルのうちの25
4KB)を除いて、リカバリの際に有効である。
【0016】この発明の代替実施例に従えば、好ましい
RAMおよびハードディスク構造以外の技術が、一次キ
ャッシュおよび二次キャッシュについて用いられる。構
造に関する技術を規定する上での制約は、一次キャッシ
ュが二次キャッシュと同じか、それよりも速いアクセス
時間を有し、二次キャッシュが光記憶装置よりも速いア
クセス時間またはより速い転送速度の定格の両方、また
はいずれか1つを有することである。たとえば、フラッ
シュメモリまたはバブルメモリが一次キャッシュのため
に用いられてもよく、フラッシュメモリ、バブルメモリ
またはより高速の読出−書込光ドライブを二次キャッシ
ュのために用いてもよい。別の実施例に従えば、単一レ
ベル高容量キャッシュ(たとえばハードディスクドライ
ブの一部)が光学媒体にアクセスするために実現され
る。
【0017】この発明のある利点は、光学媒体に対する
平均データアクセス時間を、多くのマイクロコンピュー
タマルチメディア、ハイパメディア、アニメーションお
よび他のビデオ、オーディオ−ビデオおよび図形の応用
について向上できることである。別の利点は、システム
RAMの一部およびユーザのハードドライブの一部を割
当てることによってマイクロプロセッサにおける既存の
資源でキャッシュ構造が実現できることである。キャッ
シュ実現ソフトウェアはキャッシュ構造を規定し、動作
を制御する。数時間または数週間の期間にわたって充満
される高容量キャッシュを実現し、シャットダウンおよ
びCD−ROMスワッピングの際にもキャッシュデータ
の保全性を維持することによって、(「パワーオン」ま
たは「媒体スワッピング」の度に使用の待ち時間がある
のではなく)、長期にわたって性能の向上が維持され
る。したがって、光記憶媒体に対するアクセス時間を向
上するためのコスト効率のよい、技術的に効果的なキャ
ッシュが実現される。
【0018】本発明、その局面および利点は、添付の図
面に関連して以下の詳細な説明を参照することにより、
よりよく理解されるであろう。
【0019】
【具体的な実施例の説明】光学媒体キャッシュに関する例示的な環境 図1は、この発明の光学媒体キャッシュから利点を受け
るであろうマイクロコンピュータシステムアーキテクチ
ャ10を示す。マイクロコンピュータ10は、中央処理
装置20、システムメモリ(たとえば22、24)、マ
ルチ通信バス12、14、16、18、およびいくつか
のシステム構成要素および周辺装置を含む。マイクロコ
ンピュータ10はワークステーション、パーソナルコン
ピュータ、または他のいくつかの標準化された、および
独占の汎用または組込マイクロコンピュータの何らかの
ものであってもよい。通信バス、システムの構成要素お
よび周辺装置の数およびタイプはさまざまであり得る。
図示されるマイクロコンピュータ10に関しては、マイ
クロプロセッサバス12と、ローカルバス14と、I/
Oバス16と、拡張バス18とがある。CPU20、外
部キャッシュ22およびシステムRAM24はプロセッ
サバス上に設けられる。I/Oバス16はI/Oポート
にインタフェースするためにプロセッサバス12に連結
される。プリンタ26およびポインティングデバイス2
8(たとえばマウス)は、典型的にはI/Oポート(図
示せず)を介してI/Oバス16に結合される。
【0020】ローカルバス14はローカルバスインタフ
ェース30を介してマイクロプロセッサバス12に連結
される。例示的なローカルバスは、ビデオローカル(V
L)またはVESA標準バス、周辺構成要素インタフェ
ース(PCI)バスおよびNU−BUSバスである。た
とえば、PCIバスは10個までの周辺装置を結合し得
る。図示されるのは、図形コントローラ32、ビデオプ
ロセッサ34、ビデオキャプチャ/出力カード36およ
びサウンドカード38である。これらの周辺装置はマル
チメディアおよびオーディオ−ビデオプロダクションシ
ステムで使用される。スピーカ40およびマイク42が
サウンドカードに連結される。カメラ44(たとえばカ
ムコーダ)、VCR46およびTV48がビデオキャプ
チャ/出力カード36に結合される。ビデオサブシステ
ム32、34、36は、典型的にはローカルメモリ資源
(すなわちフレームバッファまたはビデオRAM)50
を共有する。情報はビデオサブシステムおよび共有メモ
リ50からディスプレイ52にビデオDAC54を介し
て渡される。
【0021】拡張バス18が、ローカルバス14および
拡張バスインタフェース56を介してプロセッサバス1
2に連結される。周辺装置、システム構成要素および大
容量記憶装置は、典型的には拡張バス18に結合され
る。図示されるのは、ハードディスクドライブ60およ
びフロッピーディスクドライブ62に結合するドライブ
コントローラ58と、テープドライブ66に結合するテ
ープコントローラ64と、光学記憶装置70または他の
SCSI周辺装置に結合するSCSIコントローラ68
と、ファックス/モデム72とである。SCSIコント
ローラ68の代わりに、何らかの独占コントローラが光
記憶装置70に結合してもよい。他のアーキテクチャに
従えば、ハードドライブ60および/または光記憶装置
70(たとえばCD−ROM)ならびにそのそれぞれの
コントローラがローカルバス14に結合され得る。
【0022】要約すれば、この発明の光学媒体キャッシ
ュは、独占ワークステーション、パーソナルコンピュー
タ、ペンティアム(PENTIUM )マシン、アップルマッキ
ントッシュ(APPLE MACINTOSH )マシン、ならびにイン
テル(Intel )80X86アーキテクチャ、モトローラ
(Motorola)68XXXアーキテクチャ、他のCISC
プロセッサアーキテクチャ、および将来のRISCプロ
セッサやマルチプロセッサアーキテクチャに基づく現在
利用可能な、または将来のマシンを含む多くの単一また
は複数マイクロプロセッサベースアーキテクチャ10に
利点を与えるであろう。
【0023】メモリサブシステムおよび光学媒体キャッ
シュ 図2は、アーキテクチャ10のCPU20をサポートす
る例示的なメモリサブシステム80を示す。一実施例に
おいて、CPU20は処理装置82、レジスタ84、メ
モリ管理ユニット86、および内部キャッシュ87を含
む。メモリサブシステムはシステムRAM88、外部キ
ャッシュ90、および大容量記憶装置92を含む。図示
される大容量記憶装置92はCD−ROM70、ハード
ディスクドライブ60およびフロッピーディスクドライ
ブ62を含む。データへのアクセス時間は以下の記憶機
構、すなわちレジスタ84、内部キャッシュ86、外部
キャッシュ90、およびRAM88、ハードドライブ6
0、CD−ROM70、ならびにフロッピードライブ6
2の順に増大する。したがって、大容量記憶装置92か
らのデータは、典型的には、プロセッサ82によるアク
セスのためにRAM88または外部キャッシュ90に転
送され、次に内部キャッシュ87およびレジスタ84に
転送される。より具体的には、高いスループットの処理
は、プロセッサ82が必要とするときにデータを既に内
部キャッシュ87、外部キャッシュ90またはRAM8
8に有しておくことによって最良に達成される。
【0024】一実施例に従えば、この発明の光学媒体キ
ャッシュ100は、RAM88(および/または外部キ
ャッシュ90)およびハードディスクドライブ60を用
いて実現される。図3に示されるように、RAM88の
一部が一次キャッシュ102として機能するように割当
てられ、ハードディスクドライブ60の一部が二次キャ
ッシュ104として機能するように割当てられる。光学
媒体キャッシュ100の機能は、CD−ROMまたは他
の光学媒体データ源70にストアされたデータに対する
アクセス時間を向上することである。
【0025】光学媒体キャッシュの代替実施例に従え
ば、好ましいRAM88(および/または外部キャッシ
ュ90)およびハードディスクドライブ60の構造以外
の技術も、一次キャッシュ102および二次キャッシュ
104について用いることができる。キャッシュレベル
を規定する制約は、一次キャッシュ102が二次キャッ
シュ104と同じかまたはそれよりも速いアクセス時間
を有し、かつ二次キャッシュ104が光学媒体70より
も速いアクセス時間を有することである。たとえば、フ
ラッシュメモリまたはバブルメモリを一次キャッシュ1
02のために用いてもよく、一方フラッシュメモリ、バ
ブルメモリまたはより高速の読出−書込光ドライブを二
次メモリ104のために用いてもよい。さらに別の実施
例に従えば、単一レベル高容量キャッシュ構造の代わり
により小さい一次キャッシュが省かれてもよい。
【0026】好ましい実施例に従えば、一次キャッシュ
102は0.5MBないし2MBのストアを与え、一方
二次キャッシュ104は少なくとも10MB(たとえば
20MBないし140MB)のストアを与える。図3の
構造では、二次キャッシュ104はハードドライブ60
の領域から形成される。DOSベースのマシンでは、こ
のような領域はDOSファイルまたはDOSパーティシ
ョンとして形成される。他のオペレーティングシステム
に従えば、この領域はファイル、オブジェクト、または
アドレス空間を二次キャッシュ104専用とするための
他のオペレーティングシステムまたはユーザ機構によっ
て形成され得る。オペレーティングシステムにかかわら
ず、可能な場合には、キャッシュ実現ソフトウェアがス
トアされるデータの細分化を避けるように、物理アドレ
ス空間が二次キャッシュ104として割当てられること
が好ましい。
【0027】対処される問題および解決される点 光学媒体キャッシュを用いることによって、マルチメデ
ィア、ハイパメディア、ビデオおよびアニメーションの
応用で増大するニーズを受けて光学媒体の平均アクセス
時間がいかに向上されるか等のいくつかの問題が対処さ
れる。この発明に従えば、アクセス時間はキャッシュ構
造を実現することによって向上される。RAMの費用お
よびハードドライブのコスト効果のために、より小さい
一次RAMキャッシュおよびより大きい二次ハードドラ
イブキャッシュを含むデュアルレベルキャッシュ構造が
好ましい。大まかな指針として90/10または80/
20の割合を用いて、90%(80%)の時間が10%
(20%)のデータを用いるのに費やされる。したがっ
て、680MBのCD−ROMについては、68MBま
たは136MBが十分なキャッシュ容量として機能する
と期待される。約100MBの二次キャッシュの容量が
好ましい(またはより一般的には、20MBないし14
0MBの容量が好ましい)。
【0028】高容量ハードドライブキャッシュの実現に
おけるいくつかの問題がこの発明によって対処される。
性能を最適化するために、頻繁にアクセスされるデータ
のみをキャッシュ化することが有用であろう。さらに、
ハードディスクドライブがキャッシュとして効果的であ
るには、光学媒体よりも速いアクセス時間を維持する必
要がある。ハードディスクに対するアクセスを向上する
ために用いられる従来のキャッシュに従えば、すべての
データ転送がキャッシュ化される。結果として、従来の
キャッシュは時折性能を向上させるにすぎない。すべて
のCD−ROM転送がキャッシュ化されれば、一次キャ
ッシュ、および二次キャッシュさえもが(平均して)1
0%(20%)の頻度でしかアクセスされない90%
(80%)のデータのいくつかのために乱れることとな
ってしまう。このような実現例は、二次キャッシュが一
旦充満されて上書きされれば性能が低下するのか、さら
に光学媒体キャッシュの費用が実現例を最適にすること
を妨げるのかという点について懸念を生む。これらの懸
念は、ハードドライブがキャッシュとしていかに効果的
態様で実現されるかという問題に対処することで処理
される。対処される別の問題は、CD−ROMのアクセ
ス時間を長い使用期間にわたっていかに向上できるかと
いう点である。
【0029】ハードドライブをキャッシュとして効率的
な態様で実現するために、データ識別方法が採用され
る。具体的には、光学媒体データ転送リクエストをキャ
ッシュ化すべきでないときを判断するために条件が規定
される。簡単にいえば、キャッシュ化によって性能が向
上しないときには転送をキャッシュ化しないことが意図
される。理想的には、キャッシュ化されないデータと
は、10%(20%)の時間しかアクセスされないデー
タであろう。
【0030】ハードドライブを長い使用期間にわたって
CD−ROMよりも速いアクセス時間および/または転
送レートで維持するために、ストアに関する制約が規定
される。具体的には、ハードドライブにおけるストアを
細分化することには問題がある。キャッシュ化されたデ
ータが細分化されると、このようなデータへのアクセス
時間は増大する。ハードドライブが10:1のアクセス
時間で有利であったものが1:1を下回る点までアクセ
ス時間が増大する(すなわちハードドライブへのアクセ
スがCD−ROMへのアクセスと同じであるか、または
それより遅くなる)。したがって、ハードドライブは好
ましくはハードドライブ物理アドレス空間の連続する領
域として実現される。さらに、CD−ROMデータリク
エストからのデータは、細分化を避けるためにハードド
ライブ上の連続するセクタにストアされる。
【0031】高容量キャッシュでの別の問題は、性能の
向上が実現されるまでの待ち時間である。たとえば、6
80MBのCD−ROMでは、キャッシュのかなりの部
分が充満されるまでに数時間の使用を必要とする場合が
ある。パワーアップまたは光学媒体のスワッピングのた
びにこのような待ち時間を受けることは非効率的であ
る。媒体スワッピングの問題に対処するために、光学デ
ィスク情報を用いてタグが規定される。さらに、複数光
学ディスクのためのデータのディレクトリがキャッシュ
内で維持される。タグは、関連するデータがそこから得
られるCD−ROMまたは他の光学媒体ディスクに対し
て一意的な識別子を含む。CD−ROMがスワッピング
され、次に再びスワッピングされるとき、元のデータは
まだキャッシュ内にあり、有効である。一実施例に従え
ば、キャッシュを充満するFIFO方法が実現される。
【0032】電源シャットダウンの問題に対処するため
に、二次(不揮発性)キャッシュ内のディレクトリ情報
は定期的に更新されて一次キャッシュの何らかの活性部
分を識別する。電源異常またはシャットダウンの際に
も、不揮発性二次キャッシュにストアされたデータは有
効なままである。
【0033】電源異常/シャットダウンから回復するた
めに、キャッシュファイルが調べられて制御変数を再構
築する。キャッシュ化されたデータはグループでキャッ
シュファイルにストアされる。パワーオンの際に、最後
の活性グループが識別される。最後の活性グループを見
出すことによってデータがFIFOの態様でキャッシュ
ファイルに書込まれると、新しいデータのロードを開始
すべき場所が見出される。したがって、迅速で効果的な
リカバリ方式が実現される。最大でも1つのデータグル
ープ(すなわち最後の活性グループ)しか失われない。
【0034】キャッシュ実現例 〔概説〕好ましい実施例に従うCD−ROM70のため
の光学媒体キャッシュ100が実現される。図4はCD
−ROMキャッシュ100を実現するマイクロコンピュ
ータシステムの部分的なブロック図を示す。CD−RO
M70からデータを要求するアプリケーションプログラ
ムがCPU20によって実行される。CPU20は、ビ
デオデータをビデオプロセッサ34に送り、オーディオ
データをサウンドカード38に送り、かつ図形データを
図形コントローラ32に送ることによって、データの流
れを制御する。典型的には、CPU20は従来のプログ
ラムデータを処理する。したがって、4つのデータスト
リーム(すなわちプログラムデータ、ビデオデータ、オ
ーディオデータおよび図形データ)が存在し得る。たと
えばフルモーションビデオは1秒に付き30フレーム
(fps)での更新および24ビットカラー、2.3M
B/フレーム(圧縮なし)でのアプリケーションでは1
秒に付き30−60MBのスループットを要求し得る。
典型的には、ビデオデータは鮮明なフルモーションビデ
オに必要な維持されたスループットを達成するために圧
縮される。サウンドは圧縮前に1秒に付き10MBのス
ループットをさらに必要とし得る。必要である維持され
たスループットを達成するために、企業は多くの領域で
性能を最適化している。図5は従来のCD−ROM10
6のレイアウトを示す。記憶トランジスタ108はディ
スクの中央に向かってその周りを螺旋状に取り巻いてい
る。性能を最適化するために、プログラマーは頻繁にア
クセスされる部分を推定し、それをディスク106の中
央付近にストアする。中央付近のデータは外縁のデータ
よりも速くアクセスできる。さらに、ビデオ画像または
オーディオサウンドクリップのために必要なデータを少
なくするためにビデオ圧縮およびオーディオ圧縮技術が
頻繁に用いられる。この発明は、頻繁にアクセスされる
データをより高速の記憶媒体にストアするための光学媒
体キャッシュを提供することに寄与する。
【0035】図6は、この発明の一実施例に従うCD−
ROMリクエスト112を処理するためのフローチャー
トを示す。CD−ROM70からデータを必要とするア
プリケーションプログラムは、CD−ROMにストアさ
れたデータのアクセスを可能にするCD−ROMリクエ
ストをトリガする。このようなデータはCD−ROM7
0にあるか、またはCD−ROMキャッシュ100に既
にストアされているかもしれない。ユーティリティープ
ログラムまたはオペレーティングシステムサービス11
0(すなわちキャッシュ実現ソフトウェア)が実行され
て、CD−ROMリクエスト112を実現する。典型的
には、単一のCD−ROMリクエストで全部で1のCD
−ROMセクタにアクセスできる。図6の実施例に従え
ば、データ識別処理はステップ114で行なわれて、ス
テップ116でCD−ROMリクエストがCD−ROM
キャッシュを用いるべきかどうかを判断する。別の実施
例に従えば、キャッシュ100は、(1)前のタイムウ
ィンドウ(たとえば1秒)の際に起こった転送が臨界維
持スループットレート(たとえば40KB/秒)を超え
るレートで起こったとき、または(2)CD−ROMデ
ータリクエストを完了する推定時間が、ハードドライブ
ディスクリクエストを完了する推測時間の特定の割合
(たとえば25%)以内にあるときには、用いられな
い。
【0036】キャッシュ100がこのデータ転送のため
に用いられない場合には、ステップ118でデータがC
D−ROMからRAM24に、または処理のための処理
装置(たとえばCPU20、図形プロセッサ32、ビデ
オプロセッサ34またはオーディオプロセッサ38)に
転送される。ステップ120でリクエストは完了する。
【0037】キャッシュ100がこのデータ転送のため
に用いられれば、ルックアップキーがステップ122で
導出される。キーはインデックスおよびセクタ番号から
形成される。インデックスは特定のCD−ROMを特定
するディレクトリテーブル内のエントリを指す。一実施
例では、ディレクトリテーブルは255までのCD−R
OMディスクの値を保持する。このような値は対応する
CD−ROMディスクに対して一意的なデータから形成
される。したがって、キーはデータリクエストによって
リクエストされたデータのセクタおよびCD−ROMデ
ィスクを識別する。データが既にCD−ROMキャッシ
ュに存在すれば、キーは従来のハッシング表技術を用い
て一次および/または二次キャッシュ内の開始位置に変
換する。具体的には、ステップ124で一次キャッシュ
はすべての所望のCD−ROMデータが既に一次キャッ
シュ102にあるかどうかを見るためにテストされる。
もしあれば、ステップ126でデータは一次キャッシュ
102から読出され、ステップ120でリクエストを完
了する。データのいくつかしか見つからなければ、一実
施例ではリクエストはデータの残りをリクエストするよ
うに変更される。その代わりに、全データリクエストが
二次キャッシュ104をチェックするために渡される。
すべてのデータが一次キャッシュ102に存在しなけれ
ば、二次キャッシュがステップ128でテストされて、
すべてまたは残りのデータが二次キャッシュにあるかど
うかを判断する。もしあれば、ステップ130でこのよ
うなデータは二次キャッシュ104から読出される。ス
テップ132で二次キャッシュ104からのデータは、
もしあれば一次キャッシュ102からのデータと組合さ
れる。リクエストはステップ120で完了する。
【0038】一実施例においては、部分的なヒットがサ
ポートされる。このような場合には、もしあればデータ
リクエストの残りが、ステップ134でCD−ROM7
0から残りのデータにアクセスするように処理される。
ステップ136でこのようなデータは、もしあれば二次
キャッシュ104および一次キャッシュ102からのデ
ータと組合される。部分的なヒットがサポートされなけ
れば、全データリクエストが渡されて二次キャッシュ1
04またはCD−ROM70をチェックし、リクエスト
を完了する。キャッシュ100は次にステップ138で
データリクエストをストアするように更新される。好ま
しい実施例に従えば、一次および二次キャッシュ10
2、104は並列して更新される。従来のハッシング
表、二分木またはバランス木がCD−ROMおよびキャ
ッシュ位置間の相互参照を維持する代替的な方法であ
る。好ましい実施例に従えば、キャッシュ102または
104が充満すると、データはそれぞれのキャッシュか
ら先入れ先出しの基準を用いて廃棄される。代替的に、
リースト・リーセントリー・ユーズド(least-recently
-used )またはユーセージ・カウント(usage count )
基準が、代わりに実現される。ステップ120でリクエ
ストは完了される。
【0039】以下はデータ判別処理(ステップ11
4)、キープロトコル(ステップ122)、およびキャ
ッシュ更新処理(ステップ138)に関するさらなる詳
細である。
【0040】[データ判別処理(ステップ114)]図
7−9は3つの代替的な判別処理の実施例のフローチャ
ートである。図7を参照して、データ判別処理実施例A
が示される。ステップ150でデータリクエストは、デ
ータが前のリクエストからのデータと連続しているかど
うかを判断するように分析される。データは、前のデー
タリクエストからの最後のセクタに隣接するCD−RO
Mセクタにあれば連続している。連続していなければ、
ステップ152で示されるようにデータはキャッシュ化
される。連続していれば、ステップ154でソフトウェ
アは、データが臨界維持スループットを超えるレートで
転送されているかどうかをチェックする。もしそうであ
れば、ステップ156によって示されるように、キャッ
シュ化が性能を向上しそうにはないのでリクエストがキ
ャッシュ化されない。もしそうでなければ、ステップ1
52によって示されるようにリクエストはキャッシュ化
される。
【0041】図8を参照して、データ判別処理実施例B
が示される。ステップ160で、CD−ROMアクセス
時間が、前のリクエストおよび現在のリクエストのそれ
ぞれのセクタ位置に基づいて推定される。ステップ16
2で推定アクセス時間が、ハードディスクアクセス時間
の特定の割合(たとえば25%)以内にあるかどうかを
判断するために、テストされる。このような割合の範囲
内になければ、リクエストはステップ164によって示
されるようにキャッシュ化される。この範囲内であれ
ば、ステップ166によって示されるようにリクエスト
はキャッシュ化されない
【0042】図9を参照して、データ判別処理実施例C
が示される。ステップ170で、現在のリクエストで特
定されたデータのCD−ROMセクタが前のリクエスト
のセクタ位置と比較されて、リクエストが短いシーク時
間を有するかどうかを判断する。十分に近くなければ、
リクエストはステップ172によって示されるようにキ
ャッシュ化される。十分に近ければ、ステップ174で
データ転送レートがテストされて、十分なデータがタイ
ムウィンドウ(たとえば1秒)内で転送されて臨界維持
スループットを超えたかどうかを判断する。臨界維持ス
ループットを超えていなければ、リクエストはステップ
172で示されるようにキャッシュ化される。臨界維持
スループットを超えていれば、ステップ176で示され
るようにリクエストはキャッシュ化されない
【0043】[転送キー導出(ステップ122)]キャ
ッシュ100内のデータのアクセスはルックアップキー
180を介して行なわれる。データは電源異常、電力シ
ャットダウンおよび媒体変化の際にも保存されるべきな
ので、キーはデータリクエストが向けられる特定のCD
−ROMディスクおよびセクタに関する情報を含む。キ
ー自体は32ビット変数である。図10を参照して、一
実施例では8つの上位ビットが、不揮発性二次キャッシ
ュ104に位置されるCD−ROMディレクトリ184
へのインデックス182として機能する。残りの24ビ
ット186はリクエストが送られるCD−ROMセクタ
188を示す。ビットの数および割当ては、さらなるC
D−ROMをサポートするように変えられる。
【0044】8ビットインデックス部分は256エント
リディレクトリ184内のエントリを指す。256エン
トリディレクトリはキャッシュ100が255までのC
D−ROMディスクのデータをストアすることを可能に
する。1つのエントリ188(たとえば最後のエント
リ)は、CD−ROMドライブが空であるかまたは識別
不能なディスクを含むかを示すように確保される。他の
エントリは一意的なCD−ROMディスクを識別するた
めのCD−ROM識別コードを与える。ディレクトリに
ストアされた各識別コードは64バイト長である。最初
の60バイトはCD−ROMディスクの特定のセクタ内
の最初の60バイトと考えられる(たとえばセクタ16
−典型的なヘッダまたはディレクトリセクタ)。最後の
4つのバイトはこのようなセクタのチェックサムを表わ
す。
【0045】キーインデックス182は現在のディスク
のためのCD−ROM識別コードを指す。インデックス
が最後のエントリ(すなわちディスクがないことまたは
識別されないディスクを表わすエントリ位置)を指せ
ば、キャッシュ100は不能化される。
【0046】キャッシュ100が活性であるCD−RO
Mリクエストの際に、ルックアップキーが導出される。
上位8ビットが現在のインデックスによって決定され
る。このようなインデックスはCD−ROMが変わると
常に変化する。下位24ビットはデータリクエスト内の
セクタアドレスから決定される。次にリクエストされた
データが一次キャッシュ102または二次キャッシュ1
04に既にあるかどうかを判断するためにキーが用いら
れる。一実施例では従来のハッシング表190が、ルッ
クアップキーを対応するキャッシュ100内の位置に変
換するために用いられる。他の実施例では二分木または
バランス木が用いられる。
【0047】[キャッシュ更新処理(ステップ13
8)]図11および12は、代替的なキャッシュ更新処
理138の実施例のフローチャートである。図11は並
列更新処理200についてであり、図12は2段階更新
処理202についてである。図11を参照して、一次お
よび二次キャッシュ102、104は並列して更新され
る。2つの分岐204、206が並列更新処理の間に実
行される。一次キャッシュ処理分岐204を参照して、
一次キャッシュルックアップテーブルがステップ208
でテストされて、一次キャッシュ102内にデータリク
エストをストアするのに十分な余地があるかどうかを判
断する。もしなければ、ステップ210でデータは廃棄
される。ステップ212でルックアップテーブル(たと
えばハッシング表)が更新される。キャッシュ102内
に余地があれば、ルックアップテーブルがステップ21
2で更新される。一次キャッシュ更新分岐204の処理
はこれで完了する。ステップ214で、二次キャッシュ
処理分岐206がもし完了していなければそれを待つ。
【0048】二次キャッシュ処理分岐206を参照し
て、二次キャッシュルックアップテーブルがステップ2
16でテストされて、二次キャッシュ104内にデータ
リクエストをストアする余地があるかどうかを判断す
る。もしなければ、データはステップ218で廃棄され
る。その後、または二次キャッシュ104内に十分な空
間があれば直接、リクエストがステップ220でテスト
されて、更新可能な領域を超えるかどうかを判断する。
更新可能な領域を超えれば、ステップ222でリクエス
トが新しい区域で不揮発性ディレクトリを更新するよう
に待ち行列にされる。その後、またはリクエストが更新
可能な領域を超えていなければ直接、データ構造(たと
えばハッシング表)がステップ224で更新され、その
ためこのリクエストはその後のアクセスの際に見出すこ
とができる。さらに、データはそれが前から存在したデ
ータに隣接しているかどうかを見るためにチェックされ
る。そうであれば、新しいデータが前から存在するデー
タと連結される。一実施例では、データはハードドライ
ブ二次キャッシュの物理セクタに書込まれる。細分化を
許容する別の実施例では、従来のファイルシステムが、
キャッシュにデータを書込み、これを構成するために用
いられる。二次キャッシュ更新分岐206の処理はこれ
で完了する。ステップ214で、一次キャッシュ分岐2
04の処理が完了していなければこれを待つ。両方の分
岐204、206が完了すれば、キャッシュ更新処理は
ステップ226に戻る。
【0049】図12は2段階更新処理の実施例を示す。
ステップ230で一次キャッシュルックアップテーブル
がテストされて、一次キャッシュ102内にデータリク
エストをストアする十分な余地があるかどうかを判断す
る。もしあれば(すなわちイエス)、ステップ232で
ルックアップテーブル(たとえばハッシング表)構造が
更新されてそのデータへの将来のアクセスを可能にす
る。もしなければ(すなわちノー)、ステップ234で
一次キャッシュ102内の何らかのデータがリクエスト
のための空間をあけるように廃棄される。代替実施例に
従えば、先入れ先出し、リースト・リーセントリー・ユ
ーズドまたはユーセージ・カウントの基準がどのデータ
を廃棄するべきかを決定するのに用いられる。次にステ
ップ236で二次キャッシュルックアップテーブル(た
とえばハッシング表)がテストされて、二次キャッシュ
104内にリクエストをストアする余地があるかどうか
を判断する。もしなければ(すなわちノー)、ステップ
238で何らかのデータが二次キャッシュ104から廃
棄されて空間をあける。代替実施例に従っても、先入れ
先出し、リースト・リーセントリー・ユーズドまたはユ
ーセージ・カウントの基準がどのデータを廃棄すべきか
を決定するのに用いられる。データが廃棄された(ステ
ップ238)後、または二次キャッシュにおける空間の
利用可能性をテストした(ステップ236でイエスとな
った)後直接、リクエストはステップ240でテストさ
れて、リクエストが更新可能な領域を超えるかどうか
(すなわち書込保護領域に入るか)を判断する。もし超
えれば(すなわちイエスであれば)、ステップ242で
リクエストは待ち行列にされて不揮発性ディレクトリ
(たとえばルックアップテーブル構造の一部)を新しい
区域(すなわち更新可能領域と書込保護領域との境界)
で更新する。待ち行列に入れた(ステップ242)後、
またはテストの後(すなわちステップ240でノーと答
えた後)直接、二次キャッシュデータ構造はステップ2
44で更新されて、そのデータへの将来のアクセスを可
能にする。次にステップ232で一次キャッシュルック
アップデータ構造が更新されてそのデータへの将来のア
クセスを可能にする。データリクエストに関するキャッ
シュ更新処理はステップ246で完了する。
【0050】[データ保全性処理]上述のように、好ま
しい実施例に従えばキャッシュ100は不揮発性メモリ
空間を含む。したがって、このような空間の内容は電源
異常または電源シャットダウンの後も失われない。この
発明の1局面に従えば、このような電源異常またはシャ
ットダウンの後にもデータを有効に維持するためのステ
ップが取られる。特に、好ましい実施例では、二次キャ
ッシュは一次キャッシュが更新されると必ず更新され
る。さらに、キャッシュのためのディレクトリテーブル
は定期的に一次キャッシュから二次キャッシュにコピー
されて、少なくとも、二次キャッシュ104へのこのよ
うな情報の最後のコピーの有効データを確保する。一実
施例に従えば、このコピーはキャッシュ更新プロセス2
00、202内でステップ220、222またはステッ
プ240、242で必要に応じて行なわれる。好ましい
実施例に従えば、ディレクトリ情報(すなわちDIRECTOR
Y SECTORS )が、CD−ROMセクタの特定された番号
(たとえば127)のグループが二次キャッシュ104
に書込まれるたびに、二次キャッシュにコピーされる。
【0051】データ保全性ステップはまた、媒体変化の
際にも有効キャッシュ化データを維持するように取られ
る。上述のように、CD−ROM識別コードのディレク
トリは二次キャッシュ104内にストアされる。255
までのCD−ROMのデータが維持される。現在のCD
−ROMを示す変数が、もしあればこの表へのインデッ
クスのために維持される。CD−ROMが除去されれば
必ず、割込ルーチンが現在のCD−ROM変数を変えて
CD−ROMが存在しないことを示す。CD−ROMが
挿入されると必ず、割込ルーチンはCD−ROMに関す
る情報からCD−ROM識別コードを計算し、ディレク
トリをスキャンしてコードが既に二次キャッシュ104
に存在するかどうかを見る。存在すれば、コードへのイ
ンデックスが見出され、将来のデータリクエストの間に
キー変数を導出するために用いられる。存在しなけれ
ば、識別コードは次に利用可能なインデックス番号でデ
ィレクトリにストアされる。
【0052】[二次キャッシュ104内の細分化の回
避]好ましくは、キャッシュアクセス時間を最適化する
ように二次キャッシュ104内ですべての細分化が避け
られる。RAMベースの一次キャッシュ102における
細分化には大きな時間のペナルティがないので、従来の
ストア機構が一次キャッシュ102に対しては用いられ
る。
【0053】商業的な実施例では、二次キャッシュ10
4はDOSオペレーティングシステムによってDOSフ
ァイルとして割当てられる。DOSはファイルをいくつ
かの連続しない物理アドレス領域として割当てる可能性
が高い。したがって、ファイルは既に開始時に細分化さ
れている。この発明の1局面は、オペレーティングシス
テムによる細分化を最小にして、細分化を進める方式を
避けることである。オペレーティングシステムが初期の
細分化を助長することを避けるために、キャッシュファ
イルは書込保護隠しファイルとして規定される。このよ
うな属性を備えて、DOSはファイルが物理アドレス空
間で動くことを許可しない。
【0054】通常の動作の間の細分化を避けるために、
制御が実現される。まず、キャッシュ104にデータを
ストアするとき、先のデータリクエストCD−ROMセ
クタが追跡されて、現在のリクエストがキャッシュファ
イルの活性グループ内の先行のリクエストからのデータ
に隣接するデータに対してであるかを判断する。そうで
あれば、これはデータがキャッシュファイル内の物理ア
ドレス空間において連続するように先行のデータと連結
される。さらに、後続のデータリクエストが共通の開始
セクタを共有することなく2つのデータリクエストを重
ねるデータに対するものであれば、リクエストされたデ
ータはキャッシュファイル内の物理アドレスにおいてと
もにストアされる。既存のデータはキャッシュ内に留ま
り、有効である。したがって、キャッシュファイルのあ
る部分が冗長データを含み得る。このようにして(部分
ヒットではなく)キャッシュ内で完全なヒットを有する
確率を高くすることによって平均アクセス時間を向上す
る。
【0055】タイムベースの廃棄方式を用いて起こるよ
うなさらなる細分化を避けるために、変更された先入れ
先出し(FIFO)廃棄方法がキャッシュファイルを更
新するために用いられる。完全に連続したキャッシュフ
ァイルに関しては、最初に書込まれたデータはキャッシ
ュファイルが充満すると廃棄される最初のデータとな
る。しかしながら、最初に細分化されているキャッシュ
ファイル(すなわちDOSファイル)については、FI
FO方式はデータリクエストが物理アドレス空間の連続
しない2つの領域間で細分化されないように変更され
る。たとえば、キャッシュファイルが3つの別個の物理
アドレス空間によって形成されていれば、データリクエ
ストは2つ以上のこのような領域にストアするように分
割されない。第1の領域が上書きされて、第1の領域の
残りの空間に適合しないデータリクエストが起これば、
データリクエスト全体が第2の領域の始めに書込まれ
る。このFIFO方式は、後続のデータリクエストが第
1のデータ領域の残りの部分に適合できるかどうかを判
断するためにテストされるので、「変更された」FIF
O方式と考えられる。もし適合すれば、そこにストアさ
れる。もししなければ、これはFIFO基準に基づいて
次の部分を上書きして第2の領域内にストアされる。
【0056】キャッシュ実現ソフトウェア キャッシュ実現ソフトウェアの部分に関する擬似コード
は付録Aとして含まれる。キャッシュ実現ソフトウェア
はCD−ROMキャッシュ100を形成し、維持するた
めのシステムサービスユーティリティである。付録は4
つの部分を含む。第1部はハードトランジスタ60上に
位置されるキャッシュ100のDOSファイル実施例の
ためのデータ構造を規定する擬似コードである。この構
造は、電源異常/シャットダウンおよびスタートアップ
の後のリカバリを含む初期化の際に規定される。第2部
はマルチCD−ROMのためのサポートを規定する擬似
コードである。第3部はデータリクエストにサービスす
るための擬似コードエントリである。第4部は細分化を
避ける態様でキャッシュを更新することに関するデータ
リクエストサービスの部分に関する擬似コードである。
好ましい実施例において、キャッシュ実現ソフトウェア
は、DOSデバイスドライバ設計の分野の当業者である
プログラマによって認められるように、速く効率的なデ
バイスドライバコードを与えるような態様でインライン
アセンブリコードを有するC言語で書込まれる。
【0057】[初期化/リカバリ(付録第1部参照)]
パワーアップの際に、初期化ルーチンはDOSキャッシ
ュファイルが前に規定されているかどうかを判断するた
めにチェックする。もしされていなければ、ファイルが
形成され、パラメータが初期値に設定される。ファイル
が既に存在すれば、これは電源異常または電源シャット
ダウンに続くエントリである。図13は、キャッシュ1
00または二次キャッシュ104として機能するキャッ
シュファイル250の論理図である。ファイルはキャッ
シュ化データ領域252、ヘッダ254、CD−ROM
のディレクトリ184(図10も参照されたい)、およ
びCD−ROMセクタのディレクトリ256を含む。
【0058】ヘッダ254は変数MAX_DISC、D
ISCSECTORS、NEXTSECTORおよびN
EXTMARKERを含む。MAX_DISCはCD−
ROMディレクトリ184において割当てるべき次のイ
ンデックス値である。DISCSECTORSはキャッ
シュ化データ領域252において用いられる論理ディス
クセクタの番号である。NEXTSECTORはデータ
をストアするためのキャッシュ化データ領域252内の
次の論理セクタである。NEXTMARKERはCD−
ROMセクタのディレクトリ256にエントリを付加す
るためのマーカーとして用いる次の値である。
【0059】CD−ROMのディレクトリ184は付録
の第2部に関して説明され、既に「転送キーの導出」
(図10)のセクションで説明した。
【0060】CD−ROMセクタのディレクトリ256
は、キャッシュ化されたデータをCD−ROMセクタア
ドレスに相関させ、電源異常または電源シャットダウン
の後に不揮発性キャッシュ内容を回復させるための機構
である。キャッシュ化データ領域252は一度に単一の
127セクタ領域を活性にするように管理される。この
領域は活性グループと称される。この領域は127のC
D−ROMセクタのサイズに対応する。活性グループが
充満されると、マーカーが計算され、127セクタの各
々に関する転送キーがセクタのディレクトリ256にコ
ピーされる。領域が充満する前に電源異常/シャットダ
ウンが起これば、活性領域内のデータはリカバリの際に
無効である。結果として、電源異常またはスタートアッ
プの後に失われるのはキャッシュの僅かな部分だけであ
る。この損失は速度とのトレードオフと考えられる。セ
クタのディレクトリ256はキャッシュデータ領域25
2への各セクタ書込で更新され得る。しかしながら、こ
れは作業を2倍にして、実行を遅くするであろう。望ま
しい速度を達成するために、セクタ転送キーは活性領域
が充満した後のみにディレクトリ256に書込まれる。
このようなときに、マーカーはヘッダ184からのNE
XTMARKER値を用いて計算され、次に後続のアク
セスに関するNEXTMARKER値を増分する。
【0061】ファイル250がストアされるハードドラ
イブが不揮発性であるので、ファイルの内容は電力が失
われても残る。しかしながら、上述のように、領域25
2内の活性グループはリカバリの際に無効である。これ
は、領域252の更新のたびに値がディレクトリ256
にストアされるわけではないためである。ヘッダ254
における変数はまた最後の活性グループの閉鎖の前に変
わっているかもしれないので、ヘッダ254のMAX_
DISC値のみが有効と考えられる。したがって、DI
SCSECTORS、NEXTSECTORおよびNE
XTMARKERはリカバリの際に導出される。導出さ
れれば、このような情報は一次キャッシュ102にスト
アするためのハッシング表または他の相互参照ルックア
ップテーブルを導出するのに用いられる。
【0062】DISCSECTORSに関する値は、キ
ャッシュファイルサイズを決定するためにDOS FA
Tテーブルを割当て、次にDIRECTROY SEC
TORサイズを減じ、CD−ROM DIRECTOR
YおよびHEADER空間について訂正することによっ
て導出される。NEXTMARKERは、入れられた最
後のグループを見出すようにCD−ROMセクタのディ
レクトリ256をスキャンすることによって導出され
る。マーカーは増分的順序で割当てられるので、最後の
グループは連続しないマーカー番号の1つ前(たとえば
マーカー112、1131、114、2、3を有するグ
ループに関しては、書込まれた最後のグループはマーカ
ー114を有している。)である。NEXTMARKE
Rは次に連続番号(たとえば115)としてストアされ
る。NEXTSECTORが次にDIRECTROY
SECTORの開始からのオフセットを識別することに
よって導出される。キャッシュデータ領域およびDIR
ECTROY SECTOR領域は1対1対応である。
したがって、NEXTMARKERを識別することによ
って、NEXTSECTORは簡単に識別される。導出
されたヘッダ情報を用いて、DIRECTROY SE
CTOR256、DISC_DIRECTORY18
4、ヘッダ254、および領域252内のデータは、一
旦ルックアップテーブル構造(たとえばハッシング表)
が導出されて一次キャッシュ102にストアされれば、
通常の動作のために利用可能である。
【0063】[マルチCD−ROMのためのサポートの
維持(付録第2部を参照)]初期化/リカバリの際に、
CD−ROMドライブ68は、CD−ROM70が存在
するかどうかを見るようにテストされる。存在すれば、
その識別コードが読出/導出され、DISC_DIRE
CTORY184が現在のCD−ROMインデックス値
を識別するように、および必要であれば新しいMAX_
DISC値を識別するようにテストされる。存在しなけ
れば、インデックスはディスクなしを示す(すなわちキ
ャッシュ不能化)。
【0064】コード化される実施例では、CD−ROM
識別コードは64バイト長である。最初の60バイトは
CD−ROMのセクタ16の最初の60バイトであるよ
うに設定される。これは典型的にはCD−ROMに関す
るヘッダ情報であり、所与のCD−ROMに対して一意
的である可能性が高い。しかしながら、冗長コードを避
けるためのさらなる手段を与えるために、コードの最後
の4バイトがこのようなセクタ16のチェックサム値と
して設定される。現在のCD−ROMに関して導出され
たコードはCD−ROMディレクトリ184にストアさ
れる。ディレクトリ184はこれが既にストアされたか
どうかを見るようにスキャンされる。もしされていれ
ば、現在のインデックスが前にストアされた値へのイン
デックスとして設定される。されていなければ、次に利
用可能なインデックスが割当てられ、MAX_DISC
が現在の次に利用可能なディレクトリ位置を指すように
増分される。
【0065】媒体における変化が(割込によって)検出
されるたびに、マルチCD−ROMをサポートするため
のコードが、もしあれば、現在のCD−ROMを識別す
るように実行される。
【0066】[データリクエストサービス(付録第3部
参照)]キャッシュ100が形成され、または回復され
て、現在のCD−ROMが識別されると、キャッシュ1
00の通常の動作が続く。一実施例では、キャッシュ1
00は有効CD−ROMがロードされると活性である。
しかしながら、時としてキャッシュ100はデータ判別
処理によって非活性化され得る(すなわちディスクリミ
ネータが現在のデータリクエストはキャッシュ化される
べきでないと判断する)。キャッシュ100を非活性化
する他の基準を実現してもよい。
【0067】通常動作に関して、ホストマイクロコンピ
ュータで実行されるアプリケーションプログラムはCD
−ROMからデータをリクエストする。典型的には、こ
れはオペレーティングシステムに対するI/O読出コー
ルとして実行される。この発明のキャッシュ実現ソフト
ウェアは、データリクエストを処理するためのシステム
サービス/ユーティリティとしてオペレーティングシス
テムにフックする。
【0068】機能check_cacheが各CD−R
OMI/Oについて呼び出されて、リクエストされたデ
ータのセクタが既にキャッシュ100にあるかどうかを
判断する。より低いレベルのルーチンin_cache
およびin_disk_cacheは、ヒットに関して
一次キャッシュ102および二次キャッシュ104をチ
ェックする。ルーチンadd_cacheおよびadd
_disk_cacheはデータをそれぞれのキャッシ
ュ102、104に加え、ルックアップテーブルを更新
して将来のアクセスを可能にする。
【0069】check_cacheはデータディスク
リミネータ実施例A(図7参照)を実現する。CD−R
OMからのデータ転送のスループットは変数TICKS
をカウントすることによってモニタされる。変数fir
st_sectorおよびnext_sectorは、
シーケンシャルなデータリクエストが連続するデータに
対してであるかどうかを判断するように維持される。も
しそうであれば、データはハードディスク上の連続する
セクタにストアされて、細分化を避ける。
【0070】[細分化の回避(付録第4部参照)]コー
ド化される実施例について、二次キャッシュ104はD
OSファイルとして形成される。従来のDOSファイル
システムを用いる問題は、キャッシュファイルの細分化
が起こり得ることである。これは最終的にファイルシス
テムの細分化を解消する(defragment)必要性を生み、
これに多くの時間を費やすこととなる。キャッシュファ
イルの細分化の解消が行なわれれば、各マルチセクタC
D−ROMリクエストは、多数の異なるディスクリクエ
ストとなるであろう。各ディスクリクエストがローテー
ションの待ち時間およびヘッドのシークを伴い、これは
典型的には合わせて20ミリ秒かかるので、ディスクド
ライブからの全体のスループットは徐々に低下してCD
−ROMドライブよりも悪くなってしまう。一実施例に
おいて、DOSパーティション全体がキャッシュファイ
ルに割当てられる。しかしながら、このようなアプロー
チは物理ディスク空間のすべてを既存のパーティション
に既に割り当てている既存のシステムをアップグレード
するには実用的ではない。実現される実施例において、
(オペレーティングシステムによってもたらされる)初
期細分化は許容されるが、さらなる細分化は避けられ
る。さらなる細分化を避けるのは、ファイルシステムに
よってディスク空間を割当て、オペレーティングシステ
ムによって動かされないように空間を書込保護すること
によって達成される。キャッシュファイルに関するDO
S属性をSYSTEM、HIDDENおよびREAD−
ONLYと設定することによって、DOSはキャッシュ
ファイルをさらに細分化することはない。これは割当て
られた物理セクタをデフラグメンタが動かすことをも避
ける。
【0071】データを廃棄するときに細分化を進めるの
を避けるために、さらなる方法が用いられる。キャッシ
ュファイルが充満すると、既に存在するデータは新しい
データがストアできるように上書きされる。一実施例に
おいて、空間割当て廃棄アルゴリズムが実現される。フ
ァースト・ヒットアルゴリズムに従えば、現在のリクエ
ストを収容するのに十分大きい第1の既に割当てられた
領域について空間がスキャンされる。このようなアルゴ
リズムは通常はさらなる細分化を生まない。さらに別の
実施例では、全く同じサイズの前に割当てられた領域を
見出すエグザクトフィットアルゴリズム(exact fit al
gorithm )が実現され、これも細分化をもたらさない。
これらのフィットベースのアルゴリズムでの問題は、キ
ャッシュ実現に処理オーバヘッドを加えることと、適切
なサイズの空間が見つからないときにフォールバックケ
ースが必要であることである。
【0072】実現される(好ましい)実施例では、変更
された先入れ先出し廃棄基準が用いられる。このような
アプローチは必ず空間を見出すので高速である。これは
またスタートアップの際に速いキャッシュリカバリを可
能にする初期化方法との相互作用を与える利点を有して
いる(リカバリの手順については付録第1部を参照され
たい)。FIFO実現のさらに別の利点は、現在のセク
タが再利用される前にキャッシュファイル全体が完全に
充満される必要があることである。
【0073】キャッシュファイルは初期細分化を有し得
るので、実現されるようなFIFO方法は、データリク
エストがキャッシュファイル250の物理アドレス空間
の2つの連続しない領域間で細分化されないように変更
される。たとえば、キャッシュファイル250が3つの
別個の物理アドレス空間によって形成されていれば、デ
ータリクエストは2つ以上のこのような領域にストアさ
れるように分割されない。データリクエストがこのよう
な領域の残りの物理アドレス空間に適合しないときに第
1の領域を上書きするのであれば、データリクエスト全
体が第2の領域の始めに書込まれる。FIFO方式は、
後続のデータリクエストが第1のデータ領域の残りの部
分に適合できるかどうか判断するためにテストされるの
で、変更されたFIFO方式と考えられる。適合すれ
ば、これはそこにストアされる。適合しなければ、同じ
FIFO基準を用いて次に利用可能な部分を上書きして
第2の領域にストアされる。
【0074】物理レベルでの細分化検出のために、ファ
イルシステムはキャッシュファイル250が形成された
後にバイパスされる。結果として、DOSのファイル割
当てテーブル(FATテーブル)がアクセスされて、D
OSによって形成されたファイルの実際の物理レイアウ
トを判断する。物理レイアウトが利用可能となれば、リ
クエストが物理的に連続した態様で適合するかどうかを
検出することが可能である。上述のように、変更された
FIFOのアプローチでファーストフィットが実行でき
る。キャッシュファイルが非常に細分化されている場合
には、キャッシュファイルの使用は最適とは言えない
が、性能は細分化されないファイルに非常に近い、とい
うのは唯一の付加的なオーバヘッドが物理レベルでのフ
ァーストフィットスキャンであるからである(これはデ
ィスクI/Oと同じ数を有する)。
【0075】別の問題は、ユーザのデータアクセスパタ
ーンによって起こる論理アドレス空間細分化の可能性で
ある。これは、CD−ROMリクエストがシーケンス外
で起こるとき、またはアクセスパターンが、同じセクタ
がアクセスされた2回目には異なる場合に起こる。以下
のシーケンスを検討する。
【0076】1000から10セクタ 1020から10セクタ 1010から10セクタ 1005から10セクタ 1005からの10セクタに対する最後のリクエストは
論理セクタレベルで連続していないであろう。キャッシ
ュファイルの論理レベル細分化は、連続していないCD
−ROMセクタを互いに隣接しておくときに起こる。論
理的細分化を避けるために、これらのセクタは各セクタ
が既にキャッシュにあるときでも連続してストアされる
べきである。これは変わったアプローチであるが、驚く
ほどの利点を与える。従来は、冗長な情報をストアする
のは非効率であると考えられていた。しかしながら、そ
うすることによってデータは1つのデータリクエスト記
憶領域から利用可能である。これは結果として、データ
が2つのリクエスト記憶領域から合わせられるよりもア
クセスを速くする。幸い、このようなアクセスパターン
は珍しく、これからもそうであると考えられるので、冗
長性を許容することが従来懸念されていた大きな非効率
性を生むとは考えにくい。
【0077】価値のある有利な効果 本発明の1つの価値のある効果は、光学記憶媒体にスト
アされたデータへのアクセス時間が向上されることであ
る。これにより、マルチメディア、ハイパメディア、ア
ニメーションおよび他の多くのデータストリームの応用
に関して特に利点が得られる。別の利点は、システムR
AMの一部分とユーザのハードドライブの一部分とを割
当てることによってマイクロコンピュータにおいて既存
の資源を用いてキャッシュ構造を実現できることであ
る。キャッシュ実現ソフトウェアによってキャッシュ構
造が規定されかつ動作が制御される。何時間または何週
間という期間にわたって満たされる大容量キャッシュを
実現しかつシャットダウンおよびCD−ROMスワッピ
ングが生じてもキャッシュデータの保全性を維持するこ
とによって、(「パワーオン」または「媒体のスワッピ
ング」のたびに使用の待ち時間を受け入れるのではな
く)長期間にわたって性能の改善を維持することができ
る。したがって、光学記憶媒体に関するアクセス時間を
向上させるためのコストの効率がよく技術的に効果的な
キャッシュが実現される。
【0078】代替実施例 本発明の代替実施例に従えば、種々の構成および特徴の
サブセットが実現され得る。たとえば、単一段大容量キ
ャッシュは、ハードディスクドライブ70または別の大
容量データ構造の一部分を用いて実現され得る。
【0079】さらに、ハードドライブ部分がDOSファ
イルを介して割当てられる実施例では、物理アドレス空
間を直接割当てる場合よりも、キャッシュ化されたデー
タがさらに細分化される。幾つかの実施例では、電源異
常が起こったときおよび媒体が変わったときのデータの
保全性はサポートされない。
【0080】本発明の好ましい実施例はCD−ROMに
アクセスするためのものであるが、「フロプティカル(f
loptical) 」ドライブ、ベルヌーイドライブ、WORM
ドライブ、CD−Iドライブおよび光磁気ドライブを含
む他の光学媒体を、本発明の実施例に従った大容量キャ
ッシュとともに用いてもよい。
【0081】実施例は10MBまたは20MBないし1
40MBのキャッシュファイルまたは2次キャッシュに
関して記載されるが、サイズに上限はない。
【0082】したがって、本発明の好ましい実施例を図
示しかつ説明したが、種々の変形例、変更例および均等
物を用いることも可能である。したがって、上述の説明
は前掲の特許請求の範囲によって規定される本発明の範
囲を限定するものとして捉えられるべきではない。
【0083】[付録A] キャッシュを実現するための擬似コードリスト バラード・シナージィ・コーポレイション(Ballard Sy
nergy Corporation) 1994 年版権 (未出版) [第1部] /*ハードディスクキャッシュファイルの初期化/回復(D
OSファイル実施例) ディスクベースキャッシュファイルには4つの異なる部
分がある。その大部分はキャッシュ化されたデータ自身
であり、その後、ディレクトリヘッダ、DISC_DI
RECTORYデータ構造、およびディレクトリセクタ
が順に続く。ディレクトリヘッダは、ディスクベースキ
ャッシングコードによって用いられる値を含む。リブー
トに耐える唯一のフィールドは max_discフィールドで
あり、これはその次のCD−ROM DISC番号を割
当てるために用いられる。DISC_DIRECTORY はDISC
当り64バイトを含み、ディレクトリセクタはCD R
OMセクタマッピングテーブルに対する論理セクタを含
む。CD ROMセクタ番号は実際には、CD−ROM
ディスク番号と実際のCD RAMセクタとの合成数で
ある。ディレクトリセクタの各々は、マーカと、127
個のCD−ROMセクタ番号とを含む。CD−ROMセ
クタ番号の各々は、ファイルの初めに含まれるキャッシ
ュ化されたデータに直接マップする。 ファイルレイアウト: CACHED DATA キャッシュ化されたCD−ROM
セクタの各々に関して4×512バイトセクタ DIRECTORY HEADER 以下に示す struct directory 参
照 DISC_DIRECTORY 第2部参照 DIRECTORY SECTORS 127個のCD−ROMセクタの
各々に関して1つの512バイトセクタ 4バイトマーカ 127×4バイトCD−ROMセクタ番号 1バイトDISC番号+3バイトの実際のセクタ番号 */ ♯define DIRHEADERSIZE 4 /*ディレクトリヘッ
ダのサイズ*/ ♯define DIRSIZE 36 /*ディレクトリヘッ
ダのサイズ+DISC_SECTORS */ /* ディレクトリ構造は、ディスクベースキャッシングコー
ドを用いるための初期化の間に計算される。現在、 max
_discフィールドだけがそのまま用いられている。記載
された実施例は255の異なるCD−ROMディスクを
サポートするが、これは、ブートの間にディレクトリセ
クタをスキャンし、かつDISC番号を再割当てし、か
つ max_discを計算することによって変えることができ
る。これにより、ディレクトリヘッダをセーブしかつそ
れをディスクに回復する必要がなくなる。これにより、
いずれのときにも一度に255個のディスクという制限
だけで、時間の経過に応じて任意の数のCD−ROMデ
ィスクをサポートすることが可能となる。] DIR.disksectors は、キャッシュ化されたCD ROM
セクタの数*4に等しい。これは、キャッシュ化された
データ領域に関する論理ディスクセクタの最大値であ
る。DIR.nextsectorは、キャッシュ化されたデータ領域
において割当てるための空いている空間または空間を見
つけ出すための開始点であるその次の論理セクタであ
る。DIR. max_discは、その次に用いられるべきDIS
C番号である。DIR. marker は、その次に用いられるべ
きディレクトリセクタマーカ値である。ディレクトリセ
クタの各々の初めのマーカは、データ構造の状態を、シ
ステムシャットダウン(またはクラッシュ)の前のその
データ構造のように再びつくり出す方法の鍵である。い
ずれの時にも、キャッシュデータ領域に値する127個
のCDセクタの1つの活性グループがある。一旦この領
域が不所望であるように変えられるかまたは不所望であ
ると考えられれば、この127個からなるグループに対
応するディレクトリセクタがファイルに書込まれる。シ
ステムがシャットダウンされかつ再始動されると、シャ
ットダウン時の活性グループが発見され、初期化後の最
初の活性グループとして再活性化される。通常の環境下
ではキャッシュ化されると忘れられることが可能なデー
タのほとんどは126個のCD ROMセクタであるた
め、キャッシュデータファイルの全体のサイズに関し
て、再キャッシュ化されなければならないのは非常に少
量のデータであることになる。この方法の別の大きな利
点は、キャッシュ化されたデータの254Kバイト毎に
余分な512バイトセクタの書込が1つしかないことで
ある。隣接するセクタのマーカがその前のセクタよりも
大きいため、ディレクトリセクタのすべてのマーカをス
キャンして、非増分マーカを有する対を見つけ出すこと
によって活性セクタを検出することができる。 */ struct directory { ushort max_disc; /* その次に用いるべきD
ISC番号*/ ulong disksectors; /* キャッシュ化されたcd
_sectors *4*/ ulong nextsector; /* 0ないしdisksectors
−1*/ ulong marker; /* ディレクトリセクタの
ためにその次に用いるべきID番号*/ */ … }DIR ; /* 初期化の間に一度Init(filesize)機能が呼出される。
これは、すべてのデータ構造、特に、ディスクベースキ
ャッシングをサポートするためのデータ構造を設立する
役割を果たす。filesizeのパラメータは、キャッシュデ
ータファイルのDOSファイルサイズである。主要な第
1のステップは、データ領域にキャッシュ化されたCD
−ROMセクタの数を計算することである。この数に4
を乗算することによって、DIR.disksectors が得られ
る。一旦これがわかると、ファイルの異なる部分に関す
る正確なオフセットを容易に計算することができる。デ
ィレクトリヘッダは、DISC_DIRECTORY に符号化される
異なるCD−ROMディスクの数を検索するために読込
まれる。その後、DISC_DIRECTORY がディスクファイル
から検索される。最後に、ディレクトリセクタが読込ま
れかつ DIR.nextsector および DIR.marker が計算さ
れ、一方、ディスクキャッシングデータ構造が再びつく
り出される。 */ int Init (ulong filesize) { ulong disksector; /*論理から物理セクタへの変換のために用いられる */ ulong cd_sectors; /*データ領域にキャッシュ化されるcdセクタの数 */ ulong variable_size; /*cd_sectors によって変わるファイルのサイズ* / ulong tablesize; /*ディレクトリセクタの数*/ uchar sectorbuf [512];/*1つのディスクセクタの記憶*/ ushort i; /*ループカウンタ*/ ulong table _entries;/*ディスクデータ構造を初期化している間のループ カウンタ*/ uchar wrapped =0; /*マーカがラップアラウンドしたかどうかを示すた めのフラグ*/ last_marker=0; /*その前のディレクトリセクタのマーカの値*/ } /*一定のサイズを有するディレクトリおよびマーカを減じる。セクタは1で 始まるため、4バイトは余分のマーカのためのものである。*/ variable_size = filesize − DIRSIZE *512 −4 ; /*CD ROMセクタの各々は2048バイトでありセクタの各々に関して ulong があるため、サイズの最初の推定値を2052で除算する必要がある。* / cd_sectors = variable _size / 2052L; /*cd_sectors の上述のような計算が常に正しいわけではないのは、各々の ディレクトリセクタのマーカによって占められる各々のCD ROMセクタに関 して4/127バイトがあるからであり、これは、大きいファイルに関しては4 /127が大きい数となり得ることを意味する。これは初期化時に一度だけ行な えばよいため、実行の効率は関係ない。単純なシリアルサーチが行なわれる。* / (i=0;i<30000;i++)に関して { /*ファイルの可変部分の実際のサイズを計算する*/ tablesize = cd_sectors *2052L + (4* cd_sectors)/127 ; /*それが以前からのものと同じであれば、それを発見したことになる* / (tablesize==variable_size )の場合 break;/*これは通常最初の反復時に生じる*/ /*正確に一致するものがなければその次の値を試す*/ cd_sectors ++ ; } (i==30000)の場合 /*この値になれば、一致するものはない*/ return(ERROR); DIR.disksectors = cd_sectors * 4; /*512 バイトセクタカウントに変 換する*/ /*ディレクトリはキャッシュデータの直後に開始する。最初の部分は、ディ レクトリ構造を含むディレクトリヘッダである*/ disksector = DIR.disksectors; real_sector(&disksector); /*物理セクタ番号に変換する*/ diskread(&DIR,disksector, DIRHEADERSIZE); /*ファイルからヘッダを読出 す*/ /*ファイルからのディスクセクタの値が同じでなければ、アボートする*/ (DIR.disksectors ! = cd _sectors * 4)の場合 return(ERROR); /*今 DIR.disksectorsおよび DIR.max_discが適切に設定されており、ファ イルから DISC _DIRECTORY を読込むことができる。これはヘッダの直後に開始 する*/ disksector = DIR.disksectors + DIRHEADERSIZE; real_sector(&disksector); /*物理セクタに変換する*/ diskread (DISC_DIRECTORY, disksector,DIRSIZE −DIRHEADERSIZE); /*読 込*/ /*ディレクトリヘッダの値を適切なデフォルトに初期化する*/ DIR.nextsector = 0; DIR.marker = 1; (table_entries = 0; table_entries<cd_sectors; table _entries + 127)に関して { (table_entries%127) = = 0) の場合 /*sectorbuf がすべて使い果た される*/ { /*その次のものを読込むために論理セクタを計算する*/ disksector =DIR.disksectors + DIRSIZE + table _entries/127; real_sector(&disksector); /*物理セクタに変換する*/ diskread(sectorbuf, disksector,1) ; /*それを読込む*/ } /*活性ディレクトリセクタを見つけるためにマーカを見る*/ (*(ulong*)sectorbuf = = 0) の場合 /*マーカの初期値*/ { (wrapped) の場合 /*ラップされかつ使用されていない領域を有す るのは違法である*/ return(ERROR) ; それ以外の場合 /*活性ディレクトリセクタを発見した*/ { /*nextsectorをこのグループの始めに設定する*/ DIR.nextsector = table_entries *4; /*マーカをその前のマーカ以前のマーカに設定する*/ DIR.marker = last _marker +1; break; /*終了*/ } /*このディレクトリセクタからのエントリをすべて違法であるとし てマークし、これは対応するデータ領域がまだ用いられていないからである*/ (i=1;i<128;i++)に関して { /*add _cd_sector()により、ディスク機能によってさらなる アクセスを行なうことができるようにデータ構造が更新される*/ add _cd_sector(ILLEGAL_SECTOR); /*127によってブロックしているため、オーバランしていな いことを確かめる*/ (table_entries +i > = cd _sectors)の場合 } /*以前に0の値のディレクトリセクタを発見した*/ /*0以外はいずれも違法の値である*/ last_marker = ILLEGAL_SECTOR; } /*マーカがその前のマーカ以前のマーカと等しくなければ、活性ディレクト リセクタを発見していたかもしれない*/ 他の場合で( *(ulong*) sectorbuf ! = last_marker +1)の場合 { /*既に0のマーカをラップしたかまたは発見していれば、アボートする*/ (wrapped‖last_marker = = ILLEGAL_SECTOR) の場合 { DIR.nextsector = 0; return(ERROR); } それ以外の場合 /*活性領域を無視する*/ { /*これが最初のディレクトリセクタでなければ、wrapped を設 定する*/ (table_entries)の場合 wrapped =1; /*このグループの始めに nextsector を設定する*/ DIR.nextsector = table_entries *4; /*マーカをその前のマーカ以前のマーカに設定する*/ DIR.marker = last _marker +1; /*現在の値で始まる新しいマーカシーケンスを開始する*/ last_marker = *(ulong*) sectorbuf; /*このディレクトリセクタからのすべてのエントリを違法としてマ ークする。これは、活性グループのキャッシュ化されたデータの保全性を悪化さ せるいかなる電力異常からも保護するために行なわれる*/ (i=1;i<128;i++)に関して { /*add _cd_sector()によって、ディスク機能によってさらなるア クセスができるようにデータ構造が更新される*/ add _cd_sector(ILLEGAL_SECTOR); /*ブロックしているため、オーバランしていないことを確認する* / (table_entries +i > = cd _sectors)の場合 break; } } } それ以外の場合 /*マーカを現在のディレクトリセクタに更新する*/ { last_marker =*(ulong*) sectorbuf; /*このグループのすべてのcdセクタをディスクデータ構造に加える必 要がある。*/ (i=1;i<128;i++)に関して { add _cd_sector (*(ulong*) sectorbuf +i*4)); /*127によってブロックしているため、オーバランしていないこ とを確認する*/ (table_entries +i > = cd _sectors)の場合 break; } } } /*必要ないかなる他の初期化をも行なう*/ … return(INITIALIZED_OK); } /* データをディスクキャッシュに加えることが所望であると判断されるときはい つでも add_disk_cache() が呼出される。ディレクトリの更新を扱うこの機能 の部分だけを詳細に説明する。その残りの部分は、標準のデータ構造更新および アクセスを用いる。 */ add _disk_cache() { /*tableindexは、この機能の始めで活性であるディレクトリセクタのインデ ックスである。それが4*127であるため、508が用いられる。マーカは4 バイトであり、合計して標準の512バイトになる。*/ ulong tableindex = DIR.nextsector / 508; … /*後に続くグループに進む可能性のある活性グループからのディスク空間を 割当てるために標準の処理を行なう。データ構造の更新はここで行なわれる。[ 付録第4部参照]*/ … /*すべての処理の終わりで、127個のcdセクタの活性グループが進んだ かどうかをチェックする*/ (DIR.nextsector / 508 ! = tableindex)の場合 { /*もし進んでいれば、現在のディレクトリセクタの前のディレクトリセ クタすべてに関してディレクトリセクタを更新する。通常の環境下では、1つの ディレクトリセクタしか書込まれない。コードは、非常に多くのリクエストが処 理されるまたはディスクファイルの領域が割当の選択のためにスキップされる極 端な場合を扱うために書込まれる。*/ (1)の間 { /*ディレクトリセクタを更新する機能を呼出す*/ update_dir(tableindex*127); /*インデックスをその次のディレクトリセクタに増分する*/ tableindex ++ ; /*最後のディレクトリセクタを過ぎたかどうかをチェックする*/ (tableindex >= DIR.disksectors / 508 +1)の場合 { /*インデックスを始めにリセットする*/ tableindex = 0; } /*インデックスが活性セクタであれば、停止させる*/ (tableindex = = DIR.nextsector /508)の場合 break; } } } /* 4バイトマーカと127個のcdセクタ番号を含むディレクトリセクタを更新 するために、update_dir() が呼出される。cdセクタ番号の各々は4バイトで あり、8ビットディスク番号および24ビットCD−ROMセクタ番号を表わす 。*/ void update _dir(ulong cdsectors) { ulong disksector; /*キャッシュデータ、ディレクトリヘッダ、CD−ROMディスクディレク トリおよびインデックスを通過して適切なディレクトリセクタにスキップするこ とによって論理ディスクセクタを計算する*/ disksector = DIR.disksectors + DIRSIZE + cdsectors / 127; real_sector(&disksector) ; /*論理セクタを物理セクタに変換する* / *(ulong*) sectorbuf = DIR.merker ++ ; /*マーカをディレクトリセク タに割当てる*/ /*このディレクトリセクタを含む127個のCDセクタ番号を得る*/ get _direntry(&sectorbuf[sizeof(ulong)], cdsectors, 127; diskwrite(sectorbuf, disksector, 1) ; /*ディスクに書込む*/ }低レベルのユーティリティ機能 get _direntry(ulong *buffer, ulong sector_numb
er, ushort count)は、cdセクタ番号のカウント数を
特定されたバッファに複写する。put _direntry (…)
は、get _direntry()と異なる方法で複写するreal_se
ctor(ulong*disksector) は、論理ディスクセクタを、
低レベルのディスク書込/ディスク読出機能によって使
用可能な実際の物理セクタ番号に変換する。diskwrit
e() およびdiskread()は、標準のPC INT 13h
機能を用いて物理セクタの書込/読出を行なう。シリン
ダ/ヘッド/セクタマッピングの詳細は呼出人に知らさ
れない。セクタ番号は、ディスクドライブの始めに関す
る物理セクタ番号である。512バイトセクタの番号が
特定される。add _cd_sector(cdsector)は、cdsector
を見つけるためのさらなる問合せが可能となるようにデ
ィスクキャッシングデータ構造を更新する役割を果た
す。add _cd_sector()を呼出す命令によって、通過さ
れる cdsector の位置が決定される。第1の呼出は、フ
ァイルのキャッシュ化されたデータ領域の第1の204
8バイトに対応する。第2の呼出は第2の2Kバイトを
表わす等である。 *************************
********** /* write _dir() は、新しいCD−ROMディスクが検出
されるといつでも呼出される。[付録第2部参照] */ void write_dir() { ulong disksector; /*ディレクトリは、キャッシュデータの直後に開始す
る。最初の部分は、ディレクトリ構造を含むディレクト
リヘッダである*/ disksector = DIR.disksectors; real_sector(&disksector) ; /*物理セクタ番号に
変換する*/ diskwrite(& DIR, disksector, DIRHEADERSIZE); /*
ディスクに書込む*/ /*DISC_DIRECTORY bufferは、ディレクトリヘッダの
直後である。*/ disksector = DIR.disksectors + DIRHEADERSIZE; real_sector(&disksector) ; /*物理セクタ番
号に変換する*/ diskwrite(DISC_DIRECTORY, disksector, 32); /*
ディスクに書込む*/ } [第2部] /*複数のCD−ROMディスクのためのサポート 1つのキャッシュデータ領域における複数のCD−RO
Mディスクに関してサポートを実現する鍵となるのは、
CURRENT _DISCと呼ばれるグローバル変数を有すること
である。この変数は、上位8ビットが現在のCD−RO
Mディスクインデックスを表わす32ビットの値であ
る。このインデックスは、特定のCD−ROMディスク
に独自のデータを含むディレクトリへのオフセットであ
る。CD−ROMディスクの各々を識別するために64
バイトが割当てられ、60バイトはセクタ16の最初の
60バイトであり、4バイトはセクタ16に関するチェ
ックサムである。FF000000 hexの値は、CD−ROMド
ライブにおいて媒体がない、またはCD−ROMドライ
ブに識別されていないディスクがあることを表わす。い
ずれの場合も、ディスクへのキャッシングは不能化され
る。もしこの値でなければ、CURRENT _DISCの値はリク
エストされたセクタ値(これは必ず24ビット未満であ
る)とOR処理される。このようにして、異なるディス
クからのセクタ16は、XX000010 hexのセクタである
(ここで、XXはディスクインデックスである) 。これに
より、一度に255個までの異なるディスクのサポート
が可能となる。*/ /*以下に示すのはIn_Disk_Cache(cd_sector) から
のコードフラグメントであり、これは、cd_sectorがデ
ィスクキャッシュにあればYESを戻し、そうでなけれ
ばNOを戻す*/ In_Disk_Cache(cd_sector) { (CURRENT_DISC == 0xFF000000)の場合 return(NO) cd_sector|= CURRENT _DISC; … /*新しいcd_sectorを用いて通常の処理を続ける*/ /*異なるディスクではcd_sectorの値が絶対に重ならない*/ } /*respond _to_change()は、媒体の変化が検出されるときにはいつでも呼出 される。*/ void respond_to_change() { CURRENT _DISC = 0xff000000; … /*他のいずれかの適切な処理を行なう*/ } /*Process _Sector (cd_sector) は、cd_sectorがCD−ROMドライブか らtransfer_address に読込まれた後に呼出される*/ long DISC_DIRECTORY[256][16]; /*DISCのディレクトリのためのグロ ーバルディレクトリ*/ Process _Sector (cd_sector, transfer_address) { int i, j; /*ループカウンタ*/ long sum; /*チェックサム値*/ ( cd_sector = = 0x10)の場合 /*第1のセクタがCD−ROMディスク から読出される*/ { /*32ビット長の各々に関してカスタムCRCを計算する*/ (j = sum = 0; j< CD_SECTOR_SIZE /4; j ++)に関して sum = ((sum<<1) ^ transfer _address[j]) | (sum>>31); /*一致するものを見つけるまで連続的に探索する*/ (i = 0 ; i< DIR.max _disc; i ++ )に関して { /*一致しなければ、第1の60バイトを比較する*/ (j= 0 ; j<15; j ++) に関して (DISC_DIRECTORY [i][j]! = transfer_address[j]) の場合 break; /*最初の60バイトが一致すれば、チェックサムも一致する*/ (j == 15 && DISC_DIRECTORY [i][15] == sum )の場合 { /*ディレクトリに現在のディスクを発見した*/ CURRENT _DISC = (ulong)i << 24; break; } } /*iがDIR.max _discまでのすべてを取れば、一致するものが発見されなか ったことになる*/ (i == DIR.max_disc && DIR.max _disc < 255)の場合 { /*新しいディスクインデックスを割当てる*/ DIR.max _disc++; /* CURRENT_DISCを古いDIR.max _discに設定する*/ CURRENT _DISC = (ulong)i <<24; /*適切な情報をDISC_DIRECTORY に複写する*/ (j=0; j <15; j++)に関して DISC_DIRECTORY [i ][j ] = transfer _address [j ]; DISC_DIRECTORY [i ][15] = sum; write _dir();/*ディスクファイルのディレクトリを更新する */ } } … /*残りの処理を行なう*/ } [第3部] /*データリクエストのサービス check _cache ( )は、リクエストされたセクタが既に
キャッシュにあるかどうかを見るためにすべてのCD−
ROM I/Oが呼出される機能である。戻される値
は、リクエストの始めに発見されたCD−ROMセクタ
の数である。リクエストの始めで始まっていない部分的
なキャッシュヒットは、実際には比較的稀でありそれが
生じるとリクエストが2つの別々のリクエストに分割さ
れてしまう可能性があるため、この実施例においては支
持されない。TICKS は、PCタイマ割込の間に1/18
秒ごとに増分されるグローバル変数である。LAST_TICK
は、最後にcheck _cache ()が呼出された時間の間の
TICKS の値である。CRITICAL_RATEは、ディスクキャッ
シュを潜在的に不能化するために用いられる遮断転送速
度を特定する外部で特定される値である。これは、CRIT
ICAL_TICKS とともに作用する。CRITICAL_TICKS は、
1/18秒の単位の外部で特定される値である。その重
要性は、CRITICAL_TICKS に関してCRITICAL_RATEが維
持されていれば、そのI/Oに関してディスクキャッシ
ュが不能化されることである。CRITICAL_TICKSが0で
あれば、転送速度ディスクリミネータが不能化される。
THROUGHPUTは、キロバイト/秒で計算されたスループッ
トである。START _TICKは、「連続的な」リクエストの
現在の範囲の始めのTICKS の値である。FIRST _SECTOR
は、「連続的な」リクエストの現在の範囲の始めのcd_
sectorの値である。NEXT_SECTORは、CD−ROMディ
スクにおいて最後のリクエストに隣接するこのリクエス
トを行なうであろうセクタである。この実現例は、NEXT
_SECTORがその前のリクエストにちょうど隣接していな
ければならないという非常に厳格な規則を適用する。こ
の条件を少し緩和し、比較的小さい順方向のギャップを
許容することも可能である。「連続的な」リクエストと
は、START _TICKで生じるFIRST _SECTORで始まり、そ
の後に続くすべてのリクエストがNEXT_SECTORテストを
用いて隣接していることを意味する。この実現例では、
これはCD−ROMディスクにおいて隣接していること
を意味する。check _cacke ( )を呼出した後にSKIPPE
D が設定されると、このI/Oに関してディスクキャッ
シュが不能化される。これは、それがディスクキャッシ
ュに加えられていないことを確認するためにキャッシュ
プロセッサによって用いられる。以下に示すのは、chec
k _cache ( )によって用いられる低レベルの機能であ
る。in_cache(transfer_address,cd_sector,count)
は、キャッシュヒットに関してRAMキャッシュを検査
する機能である。これは、リクエストの始めに発見され
たセクタの数を戻す。add _cache(transfer_address,
cd_sector,count) は、in_cache ( )をさらに呼出す
ことによってデータが発見されるように、データをRA
Mキャッシュに加える機能である。in_disk_cache(tr
ansfer_address,cd_sector,count) は、キャッシュヒ
ットに関してDISKキャッシュを検査する機能であ
る。これは、リクエストの始めに発見されたセクタの数
を戻す。add _cache( )およびadd _disk_cache()
は、CD−ROMドライブによる実際のI/Oの終了時
にキャッシュプログラムによって適切なときに呼出され
る。 check _cache(cd_sector,count,transfer _address) { int n; /*RAMにおいて発見され
るcdセクタの数+ディスクキャッシュ*/ int diskn; /*ディスクキャッシュに発
見されるセクタの数*/ long throughput; /*転送速度計算値の一時記
憶*/ SKIPPED = 0; /*デフォルトは、ディスク
キャッシュを可能化することである*/ (CRITICAL _TICKS!=0) の場合 /*0であれば、デ
ィスクリミネータを不能化する*/ { /*以下の検査により、CRITICAL_RATEで用いられる6
4Kのデータが取るであろうティック(tick)の数が計算
される。最後のリクエスト以降にそのような多くのティ
ックを上回るティックが経過していれば、このI/Oに
関してディスクキャッシュが可能化されることを確認す
る。未来の速度の計算値もこのI/Oリクエストに同期
化する。*/ (TICKS −LAST_TICK) > (64L * 18L)/CRITICAL_RA
TE) の場合 { synchronize: THROUGHPUT = 0; /*これは、ディス
クキャッシュが可能化されることを保証する*/ START _TICK = TICKS; /*このリクエスト
を範囲の始めにする*/ FIRST _SECTOR = cd _sector; /*cd_sectorと同
じ*/ } /*これは、隣接に関する厳格なテストである。これ
は、“ce_sector〈NEST _SECTOR ‖ cd_sector〉N
EXT_SECTOR+delta”(ここで、DELTA は15等の比較
的小さい数である)を介していくらか緩和できる*/ 他の場合で(cd_sector ! = NEXT _SECTOR) の場合 { /*NEXT_SECTORテストに失敗すれば、同期する*/ goto synchronize: } /*累積転送速度を計算する必要がある。*/ そうでなければ { /* I/Oが同じティックの間に生じることは可能である。
この場合、そのI/Oは最後のI/Oの2/3ティック
後に起こったと概算する。cdセクタの各々が2キロバ
イトであるため、1ティックにおける1セクタは、36
キロバイト/秒である==>2/3ティックにおける1
セクタは、54キロバイト/秒である。2/3という値
はいくぶん任意のものであるが、これは同じティックの
範囲の間に生じる非常にわずかなI/Oだけに関するも
のであるため、これはそれほど重要ではない。範囲の開
始ティックが現在の1ティック以上前である通常の場
合、部分的なティックは無視して単にその差を用いる。
ここでもCRITICAL_RATEを任意に設定できるため、計算
されたキロバイト/秒が実際のキロバイト/秒とわずか
に異なっていてもそれほど重要ではない。重要なのは、
スループットを計算するために常に同じ方法を用いるこ
とである。いずれにせよ、長時間では、断片的なティッ
ク(fractional tick )の重要性は0に減少する。*/ (TICKS == START_TICK) の場合 throughput = (cd_sector−FIRST _SECTOR) * 54; それ以外の場合 throughput = (((cd _sector−FIRST _SECTOR) *36) /(TICKS−ST
ART _TICK)); /* 臨界転送速度を下回れば、現在のI/Oに同期する。許
容範囲をもう少し拡げ、最も最近の転送速度の移動平均
を維持することも可能である。そうすればよりよく作用
するであろうが、386個の機械に対する実行速度の要
求のため、非常に高速で計算する方法を用いている。*
/ (throughput < CRITICAL _RATE) の場合 goto synchronize; それ以外の場合 THROUGHPUT = throughput; /*THROUGHPUTを現在の値に設 定する*/ } LAST_TICK = TICKS; /*LAST_TICKを“今”に設定 する*/ NEXT_SECTOR = cd _sector + count; /*NEST_SECTORがこのI/O をちょうど通過したものである*/ /*以下に示すのは、臨界の時間の間臨界速度を上回る維持されたスルー プットの大規模なテストである*/ (THROUGHPUT > CRITICAL _RATE && (TICKS−START _TICK) > CRITICA L _TICKS)の場合 { /*この状態に遭遇すれば、このI/Oに関してディスクキャッシュを不 能化する*/ SKIPPED = 1; } } /*キャッシュヒットに関してRAMキャッシュを検査する*/ ( (n=in _cache(transfer_address,cd_sector,count)) !=0) の場合 { /*すべてのセクタが発見されると、終了*/ (n == count)の場合 return(count); /*ここに到達すると、その後に続くキャッシュアクセスのためにリクエ ストを調整する必要がある*/ transfer_address += n * 2048; /*用いられるデータバッファをス キップする*/ cd_sector += n; /*CD−ROMディスクにおいてスキップする* / count -= n; /*残りのcd_sectorを調整する*/ } /*SKIPPED が設定されれば、ディスクキャッシュを不能化する必要がある* / (SKIPPED == 0) の場合 { /*どれだけのcd sector がディスクキャッシュにある
かを見る*/ diskn = in_disk_cache(transfer_address,cd_sect
or,count); /*以下に示すのは光学的なステップであり、これによ
り、ディスクキャッシュに発見されたデータがRAMキ
ャッシュに加えられる。RAMキャッシュが二重データ
を保持するには小さすぎると考えられればそれを削除す
ることができる*/ (diskn) の場合 add_cache(transfer_address,cd_sector,diskn); /*発見されたcdセクタのカウントを調整する*/ n += dsiskn; /*必要なものをすべて既に転送していれば終了する*
/ (n == count)の場合 return(count); } /*最初のリクエストの始めから実際に転送されたcd
セクタの数を戻す*/ return(n) ; } [第4部] /* 細分化の回避(データリクエストのサービスの部分) 第4部は、In_disk_cache 、add _disk_cache 、お
よびいくつかの低レベルのユーティリティのための疑似
コードを含む。In_disk_cache(transfer_address,cd
_sector,count) は、キャッシュヒットに関してDIS
Kキャッシュを検査する機能である。これは、リクエス
トの始めで発見されたセクタの数を戻す。cd_sector
は、cdディスクセクタと組み合わされたCURRENT _DI
SCなしの実際のcdディスクセクタである。add _disk
_cache(transfer_address,cd_sector,count) は、C
D−ROMドライブによる実際のI/Oの終了時にデー
タをディスクベースキャッシングに加えるために呼出さ
れる。稀にadd _disk_cache() がキャッシュ化できず
何も行なわない場合もある。失敗すると0に戻り、成功
するとカウントする。In_disk_cache およびadd _di
sk_cache は、ディスクベースキャッシングの能力に関
する主な外部エントリポイントである。*/ add _disk_cache(transfer_address,cd_sector,count) { ulong i; /*ループカウンタ*/ ushort iterations = 0; /*適切なスペースの検索を制限するカウンタ */ ulong realsector; /*物理ディスクセクタを計算するための場所*/ ushort wrapped = 0; /*始めに戻ることを覚えておくためのフラグ*/ /*識別可能なディスクがなければ、アボートする*/ (CURRENT_DISC == 0xff000000L)の場合 return(0); /*データ構造とともに用いられるべきcd_sectorキーを計算する*/ cd_sector | = CURRENT_DISC; /*キャッシュファイルにおいて物理的に隣接する領域が発見されるまで探索 する*/ (1) の間 { /*キャッシュファイルの論理制限内であることを確認する*/ (DIR.nextsector/4+count > DIR.cd _sectors)の場合 { /*キャッシュファイル全体を既に探索したかどうかを検査する*/ (wrapped) の場合 { /*十分に大きい隣接する空間を割当てることができない*/ return(0); } /*始めにラップする*/ DIS.nextsector = 0; /*始めにラップしたことを覚えておく*/ wrapped = 1; } /*今、物理的な隣接を検査する*/ ((i=real_sector(&realsector)) >= count *4)の場合 break; /*発見した!*/ (++iterations >= 10) の場合 return(0); /*局所的な細分化が多すぎて、割当てることができな い*/ /*その次の物理フラグメントの始めにスキップする*/ DIR. nextsector += i; } ((i=find_cd_sector(cd _sector)) ! = ILLEGAL_SECTOR && contiguous_ length(i) >= count)の場合 { /*リクエスト全体に関して、隣接するブロックが既に存在する*/ return(0); /*何も行なわない*/ } /*上のコードにより、CD−ROMセクタのカウントをストアするために物 理的に十分隣接するディスクセクタが得られる*/ set _cd_index(DIR.nextsector/4); /*各々のcd_sectorをデータ構造に加える*/ (i=0; i <count; i++,cd _sector++) に関して add _cd_sector(cd _sector); diskwrite(transfer_address,realsector,count*4); /*キャッシュに書 込む*/ DIR.nextsector += count * 4; /*必要とされる他のいかなる処理をも行なう*/ …/*ディレクトリセクタの更新を行なう[DIR.DOC参照]*/ return(count); } in_disk_cache(transfer_address,cd_sector,count) { ulong index; /*ループカウンタ*/ ulong len; /*物理的に隣接するセクタの最大数*/ ulong realsector; /*物理ディスクセクタを計算するための場所*/ /*識別可能なディスクがなければ、アボートする*/ (CURRENT_DISC == 0xff000000L)の場合 return(0); /*データ構造とともに用いられるべきcd_sectorキーを計算する*/ cd_sector |= CURRENT _DISC; /*少なくとも1つのセクタがディスクキャッシュにあることを確認する*/ ((index=find_cd_sector(cd _sector)) == ILLEGAL _SECTOR) の場合 return(0); /*どれだけのセクタが物理的に隣接しているかを計算する*/ ((len=contiguous_length(index))< count)の場合 count = len; realsector = index * 4; /*論理セクタを計算する*/ real_sector(&realsector); /*論理セクタを物理セクタに変換する*/ diskread(transfer _address,realsector,count*4); /*キャッシュから 読取る*/ return(count); } /*低レベルのユーティリティ機能 real_sector(ulong *disksector) は、論理ディスク
セクタを、低レベルのディスク書込/ディスク読取機能
によって使用可能な実際の物理セクタ番号に変換する。
これは、この物理フラグメントに残っているディスクセ
クタの数を戻す。diskwrite() およびdiskread()は、標
準PC INT 13h機能を用いて物理セクタの書込
/読出を行なう。シリンダ/ヘッド/セクタマッピング
の詳細は呼出人に知らされない。セクタ番号は、ディス
クドライブの始めに関する物理セクタ番号である。51
2バイトセクタの数が特定される。add _cd_sector(c
dsector)は、find_cd_sector(cdsector)がcdsectorを
発見するようにディスクキャッシングデータ構造を更新
する役割を果たす。add _cd_sector()が呼出される命
令によって、通過されるcdsectorの位置が決定される。
第1の呼出は、ファイルのキャッシュ化されたデータ領
域の第1の2048バイトに対応する。第2の呼出は、
第2の2Kバイトを表わす等である。このような連続的
な性質を、以下のset _cd_index() への呼出しで覆す
ことができる。この機能はまた、以下に示すcontiguous
_length()の有効性を維持する役割を果たす。set _cd
_index(cdindex)は、add _cd_sector()とともに作用
し、通過されるcdsectorに対応させるためにその次の呼
出しを行なう。find_cd_sector(cdsector)は、通過さ
れるcdsectorを探し出し、かつset _cd_index() と両
立可能なcdindex を戻す役割を果たす。ILLEGAL _SECT
ORは、cdsectorを発見できなければ戻される。戻された
cdindex *4は論理ディスクセクタ番号であり、これを
物理セクタに変換するためにreal_sectorとともに用い
ることができる。この機能では、cdsectorの最大の隣接
するブロックのcdindexが戻されることを確認しなけれ
ばならない。contiguous_length(cdindex) は、cdinde
x で始まるキャッシュ化された連続するcdsectorの数を
戻す。cdindex は、set _cd_index() のパラメータお
よびfind_cd_sector()の戻された値と両立可能であ
る。機能のグループ:add _cd_sector()、set _cd_
index() 、find_cd_sector()、およびcontiguous_le
ngth()は、種々の標準の方法で実現され得る。最も単純
な方法は、線形探索を実現する以下のマクロおよび機能
を有する以下のデータ構造を有することである。*/ struct cdsector { ulong contiguous; /*(set_)contiguous _length()によって用いられる 値*/ ulong cdsector; /*add /find_cd_sectorおよび set_cd_index によ って用いられる値*/ } CDSECTORS[MAXCDSECTORS]; ulong cd_index = 0; /*CDSECTORS にアクセスするために用いられる値*/ /*以下に示す3つの機能は非常に単純であるため、マクロであることが可能で ある*/ #define set _cd_index(index) (cd_index = index) #define contiguous_length(index) CDSECTORS [index ].contiguous add _cd_sector(ulong cdsector) { ulong i,disksector,realsector; /*まずパラメータ値で現在のエントリを設定する*/ CDSECTORS [cd_index ].cdsector = cdsector ; /*このインデックスで始まる隣接する長さは1である*/ CDSECTORS [cd_index ].contiguous = 1; realsector = cd _index * 4; /*これは論理ディスクセクタである*/ real_sector(&realsector); /*論理セクタを物理セクタに変換する*/ /*隣接する長さのフィールドを更新するために後方向にスキャンする必要が ある*/ (cd _index > 0) の場合 /*これが最初のエントリであれば必要ない*/ { /*後方向にスキャンして隣接していることを確認する*/ (i=cd _index-1; i>=0; i--)に関して /*始めに到達すると停止する */ { /*値をその前の隣接するCD ROMセクタcdsectorに減分する− 物理ディスクセクタをその前のCD ROM領域に減分する*/ realsector -= 4; /*1つのCD ROMセクタに関して4×51 2バイト*/ /*キャッシュファイルを潜在的に細分化することによって、論理デ ィスクレベルで隣接していても物理ディスクにおいて非連続的になることが可能 である*/ disksector = i * 4; /*これが論理ディスクセクタである*/ real_sector(&disksector); /*論理セクタを物理セクタに変換す る/* /*cdsectorおよびdiskphysicalがその前の隣接するエントリと一致 すれば、隣接する長さを更新する必要がある*/ (CDSECTORS[i ].cdsector == scan _cd && disksector == realse ctor) の場合 CDSECTORS [i ].contiguous++; その他の場合 /*非連続を検出した*/ break; /*更新を中止できる*/ } } /*インデックスを連続する隣接するエントリに増分する*/ cd_index++; } find_cd_sector(ulong cdsector) { ulong i,maxindex,maxlength = 0; /*cdsectorに関して二重エントリがあるかもしれないため、データ構造の終 わりまで探索する必要がある。最も多数の隣接するセクタを備えるエントリにイ ンデックスを戻したいと考える。*/ (i=0; i <MAXCDSECTORS; i++) { /*一致を発見した! */ (CDSECTORS[i ].cdsector == cdsector)の場合 { /*これが最良のものであるかどうかをまだ検査する*/ (CDSECTORS[i ].contiguous > maxlength) の場合 { /*もしそうであれば、後のためにその値およびインデックスを セーブする必要がある*/ maxlength = CDSECTORS [i ].contiguous; maxindex = i; } } } /*maxlength が0であれば、いかなる一致も発見できなかった*/ (maxlength == 0)の場合 return(ILLEGAL_SECTOR); /*ここに到達すると、maxindexは最良の一致である*/ return(maxindex) }
【図面の簡単な説明】
【図1】本発明の光学媒体キャッシュをホストするため
の例示的なマイクロコンピュータシステムの環境を示す
ブロック図である。
【図2】図1の環境のメモリサブシステムおよびプロセ
ッサのブロック図である。
【図3】本発明の一実施例に従った光学媒体キャッシュ
を示すブロック図である。
【図4】本発明のCD−ROMキャッシュの実施例を示
すブロック図である。
【図5】CD−ROMに関するトラックレイアウトを示
す図である。
【図6】本発明の一実施例に従ったキャッシュ実現ソフ
トウェアのフロー図である。
【図7】本発明の一実施例に従ったデータ識別処理のフ
ロー図である。
【図8】本発明の別の実施例に従ったデータ識別処理の
フロー図である。
【図9】本発明のさらに別の実施例に従ったデータ識別
処理のフロー図である。
【図10】本発明の一実施例に従った、転送キー変数
と、(i)CD−ROM識別コードのディレクトリ、
(ii)CD−ROMセクタレイアウト、および(ii
i)ハッシングテーブルとの間の関係を示す図である。
【図11】本発明の並列更新の実施例に従ったキャッシ
ュ更新処理のフロー図である。
【図12】本発明の2段更新の実施例に従ったキャッシ
ュ更新処理のフロー図である。
【図13】本発明の一実施例に従ったキャッシュファイ
ルの論理図である。
【符号の説明】
60 ハードドライブ 70 光学媒体 88 RAM 100 光学媒体キャッシュ 102 一次キャッシュ 104 二次キャッシュ

Claims (33)

    【特許請求の範囲】
  1. 【請求項1】 より速いアクセス時間またはより速い転
    送レートのいずれか一方またはその両方を可能にするよ
    うにアクセス可能である複数の光ディスク(70)のた
    めのデータをストアするためのキャッシュ装置であっ
    て、 (a) 現在の光ディスクのためのデータをストアする
    ための一次キャッシュ(102)と複数の光ディスクの
    ためのデータをストアするための二次キャッシュ(10
    4)とを含む2レベルキャッシュ(100)を含み、前
    記二次キャッシュはハードディスクドライブ(60)の
    第1の部分を含み、さらに (b) 現在の光ディスクデータリクエストを処理する
    コンピュータプログラムを実行するためのデジタル処理
    手段(20)を含み、 前記処理手段は前記2レベルキャッシュ(100)にお
    けるデータ構造を規定し、前記処理手段は (i) 複数のそれぞれの光ディスク識別コードをスト
    アするための第1のデータ構造(184)と、 (ii) 現在の光ディスクを識別するために前記第1
    のデータ構造を指すインデックス(182)と、 (iii) 前記現在の光ディスクと関連する現在のデ
    ータリクエストにおいて特定されたデータのための光デ
    ィスクセクタアドレス(186)と、 (iv) 関連する光ディスク上の位置に前記2レベル
    キャッシュ(100)内のデータリクエストデータをマ
    ッピングするための第2のデータ構造(190)とを含
    み、 前記処理手段(20)は以下のステップによって光ディ
    スクデータリクエストを処理し、前記ステップは (i) 現在の光ディスク(70)を識別するインデッ
    クスを維持するステップと、 (ii) 現在のデータリクエストから光ディスクセク
    タアドレス(186)を決定するステップと、 (iii) 現在のデータリクエストのためのデータリ
    クエストデータを、前記2レベルキャッシュになければ
    前記2レベルキャッシュ(100)にストアするステッ
    プと、 (iv) ストアされたデータリクエストデータが前記
    2レベルキャッシュから後に直接アクセスされることを
    可能にするように前記第2データ構造(190)を更新
    するステップとを含む、キャッシュ装置。
  2. 【請求項2】 前記インデックスを維持するステップ
    が、 光ディスクドライブからの第1の光ディスクの除去を識
    別するステップと、 第2の光ディスクの光ディスクドライブへの挿入を識別
    するステップと、 前記第2の光ディスクに対応する識別コードを決定する
    ステップと、 前記識別コードが既に存在するかどうかを判断するため
    に第1のデータ構造(184)をチェックするステップ
    と、 既に存在すれば、インデックス(182)を前記既に存
    在する識別コードを参照するように設定するステップ
    と、 まだ存在しない場合には、前記識別コードを前記第1の
    データ構造(184)に加え、インデックス(182)
    を前記加えられた識別コードを参照するように設定する
    ステップとを含む、請求項1に記載のキャッシュ装置。
  3. 【請求項3】 第1の光ディスクに関する前記第1の部
    分にストアされた有効データが、第2の光ディスクから
    第1の光ディスクへの光ディスクの変化の後も有効のま
    まであり、アクセス可能である、請求項1に記載のキャ
    ッシュ装置。
  4. 【請求項4】 第1の光ディスクに関する前記第1の部
    分にストアされたデータが、電源異常または電源シャッ
    トダウンのいずれの後にも一旦電源が復元されれば有効
    のままであり、アクセス可能である、請求項1に記載の
    キャッシュ装置。
  5. 【請求項5】 前記ストアするコンピュータプログラム
    ステップが、先入れ先出し基準を用いて上書きする(2
    18、238)二次キャッシュ内の位置を選択するステ
    ップを含む、請求項1に記載のキャッシュ装置。
  6. 【請求項6】 前記実行されるコンピュータプログラム
    が、現在のデータリクエストによって特定されるデータ
    のすべてが2レベルキャッシュにあり、かつ2レベルキ
    ャッシュが活性であるときに、2レベルキャッシュから
    データを取込むステップをさらに含む、請求項1に記載
    のキャッシュ装置。
  7. 【請求項7】 前記実行されるコンピュータプログラム
    が、現在のデータリクエストによって特定される何らか
    のデータが2レベルキャッシュにあり、かつ2レベルキ
    ャッシュが活性であるときに2レベルキャッシュからデ
    ータを取込むステップをさらに含み、データの残りが光
    ディスクから取りこまれる、請求項1に記載のキャッシ
    ュ装置。
  8. 【請求項8】 複数の光ディスクから受取られたデータ
    を不揮発性キャッシュメモリにストアするための方法で
    あって、 複数のそれぞれの光ディスク識別コードをストアするた
    めの第1のデータ構造(184)と、 現在の光ディスクを識別するように前記第1の構造を指
    すインデックス(182)と、 前記現在の光ディスクと関連する現在のデータリクエス
    トにおいて特定されたデータリクエストデータのための
    光ディスクセクタアドレス(186)と、 関連する光ディスク上の位置に前記不揮発性キャッシュ
    メモリ内のデータリクエストデータをマッピングするた
    めの第2のデータ構造(190)とを含むデータ制御構
    造を規定するステップと、 現在の光ディスクを識別するインデックス(182)を
    維持するステップと、 現在のデータリクエストから光ディスクセクタアドレス
    (186)を決定するステップと、 現在のデータリクエストに関するデータリクエストデー
    タを不揮発性キャッシュメモリ(100)にストアする
    ステップと、 ストアされたデータリクエストデータに後に不揮発性キ
    ャッシュメモリから直接アクセスすることを可能にする
    ように前記第2のデータ構造を更新する(200、20
    2)ステップとを含む、方法。
  9. 【請求項9】 前記インデックスを維持するステップ
    が、 光ディスクドライブからの第1の光ディスクの除去を識
    別するステップと、 光ディスクドライブへの第2の光ディスクの挿入を識別
    するステップと、 前記第2の光ディスクに対応する識別コードを決定する
    ステップと、 前記識別コードが既に存在するかどうかを判断するため
    に第1のデータ構造をチェックするステップと、 既に存在すれば、前記既に存在する識別コードを参照す
    るようにインデックスを設定するステップと、 まだ存在しない場合には、前記識別コードを前記第1の
    データ構造に加え、インデックスを前記加えられた識別
    コードを参照するように設定するステップとを含む、請
    求項8に記載の方法。
  10. 【請求項10】 第1の光ディスクに関する前記第1の
    部分にストアされた有効データが、第2の光ディスクか
    ら第1の光ディスクへの光ディスクの変化の後も有効で
    あり、かつアクセス可能である、請求項8に記載の方
    法。
  11. 【請求項11】 第1の光ディスクに関する前記第1の
    部分にストアされたデータが、電源異常または電源シャ
    ットダウンのいずれの後にも電源が復元されると有効の
    ままであり、アクセス可能である、請求項8に記載の方
    法。
  12. 【請求項12】 前記ストアするステップが、 先入れ先出し基準を用いて上書き(218、238)す
    べきデータリクエストデータのためのキャッシュメモリ
    内のアドレス位置を選択するステップと、 第1のデータリクエストからのデータのすべてを連続す
    る物理アドレス位置にストアする(224)ステップと
    を含む、請求項8に記載の方法。
  13. 【請求項13】 第2のデータリクエストに関して第1
    のデータリクエストにシーケンシャルに続くステップ
    と、第1のデータリクエストからのデータに隣接する光
    ディスク上のデータを特定するステップと、第2のデー
    タリクエストからのデータのすべてを第1のデータリク
    エストからのデータと連結する(224)ステップとを
    含み、そのため隣接するデータに対する連続する第1お
    よび第2のデータリクエストがキャッシュメモリ(10
    0)内の連続するアドレス空間にストアされる、請求項
    12に記載の方法。
  14. 【請求項14】 第2のデータリクエストを第1のデー
    タリクエストに関する光ディスクアドレス空間と部分的
    に重ねるステップと、光ディスクデータの冗長的なスト
    アを許容するように第2のデータリクエストからのデー
    タのすべてをストアするようにキャッシュメモリを更新
    するステップとをさらに含む、請求項12に記載の方
    法。
  15. 【請求項15】 光ディスクに関するデータをストアす
    るためのキャッシュ装置であって、 不揮発性メモリ(60)の第1の部分(104)と、 デジタル処理手段(20)とを含み、 前記デジタル処理手段(20)は前記第1の部分(10
    4)をキャッシュ化されたデータの複数のグループに構
    成されるキャッシュ化されたデータをストアするための
    第1の領域(252)と、 マーカーおよび複数の光ディスクセクタアドレスをスト
    アするための第2のデータ構造(256)とを含むよう
    に割当て、 前記デジタル処理手段(20)は電源の復元の後に、ス
    トアされたキャッシュ化データ(252)の実質的な部
    分を回復させるための第1のコンピュータプログラムを
    実行し、前記コンピュータプログラムは第1の領域(2
    52)にストアされた有効光記憶装置セクタの適切な数
    を決定するステップと、 すべての有効マーカーに対して一意的な次のマーカー
    (254)を規定するステップと、 キャッシュ化されたデータをストアするための第1の領
    域(252)内の次の位置を導出するステップとを含
    み、 前記デジタル処理手段はデータリクエストデータに対す
    る現在のデータリクエストを処理するための第2のコン
    ピュータプログラムを実行する、キャッシュ装置。
  16. 【請求項16】 複数の光ディスクに関するデータをス
    トアし、第1の部分(104)が複数のそれぞれの光デ
    ィスク識別コードをストアするための第3の領域(18
    4)をさらに含むように割当てられ、第2の領域(25
    6)が光ディスクセクタアドレスを対応する光ディスク
    と関連付けるための手段をさらに含む、請求項15に記
    載のキャッシュ装置。
  17. 【請求項17】 第1の部分(104)が二次キャッシ
    ュを形成し、一次キャッシュ(102)をさらに含み、
    デジタル処理手段が以下を含むように一次キャッシュ
    (102)を割当て、前記一次キャッシュ(102)
    は、(i)現在の光ディスクを識別するように前記第3
    の領域を指すインデックス(182)と、(ii)現在
    のデータリクエストによって特定されたデータのための
    光ディスクセクタアドレス(186)と、(iii)不
    揮発性メモリの前記第1の部分(104)の前記第1の
    領域(252)内のデータリクエストデータを関連付け
    られた光ディスク上の位置にマッピングするためのルッ
    クアップ論理構造(190)とを含み、前記第2のコン
    ピュータプログラムは光ディスクドライブからの第1の
    光ディスクの除去を識別するステップと、 光ディスクドライブへの第2の光ディスクの挿入を識別
    するステップと、 前記第2の光ディスクに対応する識別コードを決定する
    ステップと、 前記識別コードの既に存在するかどうかを判断するため
    に第3の領域をチェックするステップと、 既に存在すれば、インデックスを前記既に存在する識別
    コードを参照するように設定するステップと、 存在しない場合には、前記識別コードを前記第3の領域
    に加えるステップと、インデックスを前記加えられた識
    別コードを参照するように設定するステップと、 現在のデータリクエストから光ディスクセクタアドレス
    (186)を決定するステップと、 不揮発性メモリの前記第1の部分(104)の前記第1
    の領域(252)に現在のデータリクエストに関するデ
    ータリクエストデータをストアするステップと、 ストアされたデータリクエストデータにキャッシュ装置
    (100)から後に直接アクセスできるように前記ルッ
    クアップ論理構造(190)を更新するステップとを含
    む、請求項16に記載のキャッシュ装置。
  18. 【請求項18】 不揮発性メモリ(104)に光ディス
    ク(70)に関するデータをストアするためのキャッシ
    ュ化方法であって、 複数のキャッシュ化されたデータのグループに構成され
    るキャッシュ化されたデータをストアするための第1の
    領域(252)と、 マーカーおよび複数の光ディスクセクタアドレスをスト
    アするための第2のデータ構造(256)とを含む第1
    のデータ構造を割当てるステップと、 第1の領域(252)にストアされた有効光学記憶装置
    セクタの適切な数を決定するステップと、 すべての有効マーカーに対して一意的な次のマーカー
    (254)を規定するステップと、 キャッシュ化されたデータをストアするための第1の領
    域(252)内の次の位置を導出するステップと、 データリクエストデータに対する現在のデータリクエス
    トを処理するステップとを含む、方法。
  19. 【請求項19】 複数の光ディスクに関するデータをス
    トアし、割当てられた第1のデータ構造が、 複数のそれぞれの光ディスク識別コードをストアするた
    めの第3の領域(184)をさらに含み、第2の領域
    (256)が光セクタアドレスを対応する光ディスクと
    関連付けるための手段をさらに含む、請求項18に記載
    のキャッシュ装置。
  20. 【請求項20】 一次キャッシュ(102)および二次
    キャッシュ(104)を含む2レベルキャッシュ(10
    0)にデータをストアし、二次キャッシュ(104)は
    不揮発性メモリを含み、 第1のデータ構造(252、184、254、256)
    が二次キャッシュにおいて割当てられ、 現在の光ディスクを識別する前記第3の領域(184)
    を指すインデックス(182)と、 現在のデータリクエストによって特定されたデータに関
    する光ディスクセクタアドレス(186)と、 前記二次キャッシュ(104)の前記第1の領域(25
    2)内のデータリクエストデータを関連付けられた光デ
    ィスク(70)上の位置にマッピングするためのルック
    アップ論理構造(190)とを含む第2のデータ構造が
    一次キャッシュ内で割当てられる、請求項19に記載の
    キャッシュ化方法。
  21. 【請求項21】 前記現在の光ディスクを識別するよう
    に前記インデックスを維持するステップをさらに含み、 現在のデータリクエストを処理するステップが、 現在のデータリクエストから光ディスクセクタアドレス
    を決定するステップと、 前記二次キャッシュの前記第1の領域(252)に現在
    のデータリクエストに関するデータリクエストデータを
    ストアするステップと、 ストアされたデータリクエストデータに後にキャッシュ
    装置から直接アクセスできるように前記ルックアップ論
    理構造(190)を更新するステップとを含む、請求項
    20に記載のキャッシュ化方法。
  22. 【請求項22】 前記インデックスを維持するステップ
    が、 光ディスクドライブからの第1の光ディスクの除去を識
    別するステップと、 光ディスクドライブへの第2の光ディスクの挿入を識別
    するステップと、 前記第2の光ディスクに対応する識別コードを決定する
    ステップと、 前記識別コードが既に存在するかどうかを判断するため
    に第3の領域をチェックするステップと、 既に存在すれば、インデックスを前記既に存在する識別
    コードを参照するように設定するステップと、 存在しない場合には、前記識別コードを前記第3の領域
    に加え、前記加えられた識別コードを参照するようにイ
    ンデックスを設定するステップとを含む、請求項21に
    記載のキャッシュ化方法。
  23. 【請求項23】 光ディスク大容量記憶装置からリクエ
    ストされたデータをストアするための判別キャッシュ装
    置であって、 現在の光ディスク(70)に関するデータをストアする
    ための一次キャッシュ(102)と複数の光ディスク
    (70)に関するデータをストアするための二次キャッ
    シュ(104)とを含む2レベルキャッシュ(100)
    を含み、二次キャッシュ(104)はハードディスクド
    ライブ(60)の第1の部分を含み、ハードディスクド
    ライブ(60)は光ディスクドライブ(70)よりも速
    いアクセス時間または転送レートの1つまたは両方を有
    し、さらに以下のステップを含む現在の光ディスクデー
    タリクエストを処理するコンピュータプログラム(11
    0)を実行するためのデジタル処理手段(20)を含
    み、 データ長に依存しない基準を用いて現在のデータリクエ
    ストが光ディスクアクセス時間を向上させそうかを判断
    する(114)ステップと、 前記基準が光ディスクアクセス時間が向上しそうだと示
    すと現在のデータリクエストに関して2レベルキャッシ
    ュを用いる(116)ステップと、 2レベルキャッシュが現在のデータリクエストのために
    用いられており、かつリクエストされたデータが2レベ
    ルキャッシュに存在するときに、2レベルキャッシュか
    ら現在のデータリクエストによって特定されたデータを
    取込む(126、130)ステップと、 2レベルキャッシュから取込まれないときに現在の光デ
    ィスクから現在のデータリクエストによって特定された
    データを取込む(118、134)ステップと、 2レベルキャッシュが使用されているときに現在の光デ
    ィスクから取込まれたデータに関して、取込まれたデー
    タへの2レベルキャッシュから直接の将来のアクセスを
    可能にするように2レベルキャッシュを更新する(13
    8)ステップとを含む、判別キャッシュ装置。
  24. 【請求項24】 判断する前記ステップ(114)が、 現在のデータリクエストが前のデータリクエストからの
    データと連続するデータに対するものであるかを決定す
    る(150)ステップと、 先の第1のタイムウィンドウ内で起こる光ディスクI/
    Oが第1のスループットを超えるかどうかを決定する
    (154)ステップとを含み、 現在のデータリクエストのための前記基準が、以下の状
    況の各々について光ディスクアクセス時間を向上する可
    能性を示す(152)、すなわち、(i)現在のリクエ
    ストに対するデータが前記前のデータリクエストからの
    データと連続していないか、または(ii)現在のデー
    タリクエストに対するデータが連続しており、かつ前記
    先行の第1のウィンドウ内で起こる光学装置I/Oが第
    1のスループットを超えない条件の各々について示す、
    請求項23に記載のキャッシュ装置。
  25. 【請求項25】 決定する前記ステップ(114)が、 現在のデータリクエストによって、および光ディスクが
    アクセスされた先行のデータリクエストによって特定さ
    れるデータ位置に基づいて現在のデータリクエストに対
    する光ディスクアクセス時間を推定する(160)ステ
    ップを含み、 推定されたアクセス時間がハードディスクドライブアク
    セス時間の第1の割合の範囲内にないときには、現在の
    データリクエストに関する前記基準(162)が光ディ
    スクアクセス時間の向上の可能性を示す(164)、請
    求項23に記載のキャッシュ装置。
  26. 【請求項26】 決定する前記ステップ(114)が、 現在のデータリクエスト、および光ディスクがアクセス
    された先行のデータリクエストによって特定される位置
    に基づいて、現在のデータリクエストに対する光ディス
    クアクセス時間を推定する(170)ステップと、 先行の第1のタイムウィンドウ内で起こる光ディスクI
    /Oが第1のスループットを超えるかどうかを決定する
    (174)ステップとを含み、 以下の条件、すなわち(i)推定されたアクセス時間が
    第1の記憶装置アクセス時間の第1の割合以内にない
    か、または(ii)先行の第1のタイムウィンドウ内で
    起こる大容量装置I/Oが第1のスループットを超え
    という条件の各々について現在のデータリクエストに
    対する光ディスクアクセス時間の向上(172)の可能
    性を現在のデータリクエストに関する前記基準が示す、
    請求項23に記載のキャッシュ装置。
  27. 【請求項27】 光ディスク大容量記憶装置からリクエ
    ストされたデータをストアするための判別キャッシュ装
    置であって、 現在の光ディスク(70)に関するデータをストアする
    ための一次キャッシュ(102)と、複数の光ディスク
    (70)に関するデータをストアするための二次キャッ
    シュ(104)とを含む2レベルキャッシュ(100)
    を含み、二次キャッシュ(104)はハードディスクド
    ライブ(60)の第1の部分を含み、ハードディスクド
    ライブ(60)は光ディスクドライブ(70)よりも速
    いアクセス時間または転送レートのいずれか一方または
    その両方を有し、さらに以下のステップを含む現在の光
    ディスクデータリクエストを処理するコンピュータプロ
    グラム(110)を実行するためのデジタル処理手段
    (20)を含み、前記ステップは2レベルキャッシュか
    ら現在のデータリクエストによって特定されたデータ
    を、2レベルキャッシュ内にあれば取込む(126、1
    30)ステップと、 2レベルキャッシュから取込まれなければ、現在の光デ
    ィスクから現在のデータリクエストによって特定された
    データを取込む(118、130)ステップと、 データが現在の光ディスクから取込まれた現在のデータ
    リクエストに関して、現在のデータリクエストが光ディ
    スクアクセス時間を向上しそうかどうかをデータ長に依
    存しない基準を用いて判断するステップと、 データ長に依存しない基準が、光ディスクアクセス時間
    が向上されそうであることを示すと、取込まれたデータ
    への2レベルキャッシュから直接の将来のアクセスを可
    能にするように2レベルキャッシュを更新する(13
    8)ステップと、 データ長に依存しない基準が、光ディスクアクセス時間
    が向上されそうにないことを示すと、現在のデータリク
    エストに関して2レベルキャッシュを更新しないステッ
    プとを含む、判別キャッシュ装置。
  28. 【請求項28】 前記決定するステップが、 データリクエストが前のデータリクエストからのデータ
    に連続するデータに対するものかを決定する(150)
    ステップと、 先行の第1のタイムウィンドウ内で起こる光ディスクI
    /Oが第1のスループットを超えるかどうかを決定する
    (154)ステップとを含み、 以下の条件、すなわち(i)現在のリクエストに関する
    データが前記前のデータリクエストからのデータと連続
    していないか、または(ii)現在のデータリクエスト
    に関するデータが連続しており、かつ前記先行の第1の
    ウィンドウ内で起こる光学装置I/Oが第1のスループ
    ットを超えない条件の各々について光ディスクアクセス
    時間の向上の可能性を前記基準が示す(152)、請求
    項27に記載のキャッシュ装置。
  29. 【請求項29】 前記決定するステップが、 現在のデータリクエスト、および光ディスクがアクセス
    された先行のデータリクエストによって特定されたデー
    タ位置に基づいて、現在のデータリクエストに対する光
    ディスクアクセス時間を推定する(160)ステップを
    含み、 推定されたアクセス時間がハードディスクドライブアク
    セス時間の第1の割合内にない場合には、基準(16
    2)が光ディスクアクセス時間の向上の可能性を示す
    (164)、請求項27に記載のキャッシュ装置。
  30. 【請求項30】 前記決定するステップが、 現在のデータリクエスト、および光ディスクがアクセス
    された先行のデータリクエストによって特定される位置
    に基づいて、現在のデータリクエストに対する光ディス
    クアクセス時間を推定する(170)ステップと、 先行の第1のタイムウィンドウ内で起こる光ディスクI
    /Oが第1のスループットを超えるかどうかを決定する
    (174)ステップと、 以下の条件、すなわち(i)推定されたアクセス時間が
    第1記憶装置アクセス時間の第1の割合内にないか、ま
    たは(ii)先行の第1のタイムウィンドウ内で起こる
    大容量記憶装置I/Oが第1のスループットを超えない
    条件の各々について、基準が光ディスクアクセス時間の
    向上の可能性を示す(172)、請求項27に記載のキ
    ャッシュ装置。
  31. 【請求項31】 大容量記憶装置のデータを特定する現
    在のデータリクエストがキャッシュにストアされるべき
    かを判断するためにデータリクエストを判別する方法で
    あって、 現在のデータリクエストが前の大容量記憶装置データリ
    クエストからのデータと連続する大容量記憶装置のデー
    タに対してであるかを決定する(150)ステップと、 先行の第1のタイムウィンドウ内で起こる大容量記憶装
    置I/Oが第1のスループットを超えるかを決定する
    (154)ステップと、 以下の条件、すなわち(i)現在のリクエストに関する
    データが前記前の大容量装置データリクエストからのデ
    ータと連続していないか、または(ii)現在のデータ
    リクエストに対するデータが前記前の大容量記憶装置デ
    ータリクエストからのデータと連続しており、かつ前記
    先行の第1のウィンドウ内で起こる大容量記憶装置I/
    Oが第1のスループットを超えない条件のいずれかを満
    たすと、現在のデータリクエストに関するデータをキャ
    ッシュにストアする(152)ステップとを含む、方
    法。
  32. 【請求項32】 大容量記憶装置のデータを特定する現
    在のデータリクエストがキャッシュにストアされるべき
    かを判断するためにデータリクエストを判別する方法で
    あって、 (i)現在のデータリクエストおよび(ii)大容量記
    憶装置がアクセスされた先行のデータリクエストによっ
    て特定されるデータの位置に基づいて、大容量記憶装置
    に対するアクセス時間を推定する(160)ステップ
    と、 推定されたアクセス時間が第1記憶装置アクセス時間の
    第1の割合内になければ、データリクエストに対するデ
    ータをキャッシュにストアする(164)ステップとを
    含む、方法。
  33. 【請求項33】 大容量記憶装置のデータを特定する現
    在のデータリクエストがキャッシュにストアされるべき
    かを判断するためにデータリクエストを判別する方法で
    あって、 (i)データリクエスト、および(ii)大容量記憶装
    置がアクセスされた先行のデータリクエストによって特
    定されたデータの位置に基づいて、大容量記憶装置に対
    するアクセス時間を推定する(170)ステップと、 先行の第1のタイムウィンドウ内で起こる大容量記憶装
    置I/Oが第1のスループットを超えるかどうかを決定
    する(174)ステップと、 以下の条件、すなわち(i)推定されたアクセス時間が
    第1記憶装置アクセス時間の第1の割合内にないか、ま
    たは(ii)先行の第1のタイムウィンドウ内で起こる
    大容量記憶装置I/Oが第1のスループットを超えない
    という条件のいずれかを満たすと、現在のデータリクエ
    ストに関するデータを第1の部分にストアする(17
    2)ステップとを含む、方法。
JP6307611A 1994-02-09 1994-12-12 キャッシュ装置、および複数の光ディスクから受取られたデータを不揮発性キャッシュメモリにストアするための方法 Expired - Fee Related JP2711387B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US19399194A 1994-02-09 1994-02-09
US08/194,104 US5584007A (en) 1994-02-09 1994-02-09 Apparatus and method for discriminating among data to be stored in cache
US194104 1994-02-09
US193991 1998-11-17

Publications (2)

Publication Number Publication Date
JPH07225714A true JPH07225714A (ja) 1995-08-22
JP2711387B2 JP2711387B2 (ja) 1998-02-10

Family

ID=26889586

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6307611A Expired - Fee Related JP2711387B2 (ja) 1994-02-09 1994-12-12 キャッシュ装置、および複数の光ディスクから受取られたデータを不揮発性キャッシュメモリにストアするための方法

Country Status (2)

Country Link
EP (1) EP0667579A1 (ja)
JP (1) JP2711387B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004506256A (ja) * 2000-06-23 2004-02-26 インテル・コーポレーション 不揮発性キャッシュ
JP2006012180A (ja) * 2004-06-10 2006-01-12 Marvell World Trade Ltd 主及び補助プロセッサを備えた低電力コンピュータ
JP2013533551A (ja) * 2010-06-29 2013-08-22 トゥクセラ インコーポレイテッド メモリへの読取り又は書込み

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787466A (en) * 1996-05-01 1998-07-28 Sun Microsystems, Inc. Multi-tier cache and method for implementing such a system
US6125403A (en) * 1996-05-01 2000-09-26 Sun Microsystems, Inc. Method for implementing a non-volatile caching product for networks and CD-ROMS
US5806085A (en) * 1996-05-01 1998-09-08 Sun Microsystems, Inc. Method for non-volatile caching of network and CD-ROM file accesses using a cache directory, pointers, file name conversion, a local hard disk, and separate small database
DE19628078C2 (de) * 1996-07-12 2001-04-05 Roland Man Druckmasch Verfahren und Vorrichtung zur Ermittlung zeitbezogener Druckproduktionsdaten für eine Druckmaschine
US6571290B2 (en) 1997-06-19 2003-05-27 Mymail, Inc. Method and apparatus for providing fungible intercourse over a network
US8516132B2 (en) 1997-06-19 2013-08-20 Mymail, Ltd. Method of accessing a selected network
EP1086560A1 (en) 1998-06-19 2001-03-28 Netsafe, Inc. Method and apparatus for providing connections over a network
FI20022297A (fi) 2002-12-31 2004-07-01 Nokia Corp Menetelmä muistikomponenttien sisältöjen vertailemiseksi
US7421602B2 (en) 2004-02-13 2008-09-02 Marvell World Trade Ltd. Computer with low-power secondary processor and secondary display
US20080263324A1 (en) 2006-08-10 2008-10-23 Sehat Sutardja Dynamic core switching

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01292452A (ja) * 1988-05-05 1989-11-24 Internatl Business Mach Corp <Ibm> 階層的データ記憶システム
JPH01319821A (ja) * 1988-05-05 1989-12-26 Internatl Business Mach Corp <Ibm> データ記憶階層システム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0273665A3 (en) * 1987-01-02 1990-06-06 General Electric Company System for write once read many optical storage devices to appear rewritable
EP0389151A3 (en) * 1989-03-22 1992-06-03 International Business Machines Corporation System and method for partitioned cache memory management
EP0475639A3 (en) * 1990-08-31 1992-06-03 Kawasaki Steel Corporation Hard disk emulator

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01292452A (ja) * 1988-05-05 1989-11-24 Internatl Business Mach Corp <Ibm> 階層的データ記憶システム
JPH01319821A (ja) * 1988-05-05 1989-12-26 Internatl Business Mach Corp <Ibm> データ記憶階層システム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004506256A (ja) * 2000-06-23 2004-02-26 インテル・コーポレーション 不揮発性キャッシュ
JP2006012180A (ja) * 2004-06-10 2006-01-12 Marvell World Trade Ltd 主及び補助プロセッサを備えた低電力コンピュータ
JP2013533551A (ja) * 2010-06-29 2013-08-22 トゥクセラ インコーポレイテッド メモリへの読取り又は書込み
JP2016149155A (ja) * 2010-06-29 2016-08-18 トゥクセラ インコーポレイテッド メモリへの読取り又は書込み

Also Published As

Publication number Publication date
JP2711387B2 (ja) 1998-02-10
EP0667579A1 (en) 1995-08-16

Similar Documents

Publication Publication Date Title
US5721866A (en) Apparatus and method for discriminating among data to be stored in cache
US5588129A (en) Cache for optical storage device and method for implementing same
EP1588265B1 (en) Method and apparatus for morphing memory compressed machines
US7861028B2 (en) System and method for configuration and management of flash memory
US20070005904A1 (en) Read ahead method for data retrieval and computer system
US6549995B1 (en) Compressor system memory organization and method for low latency access to uncompressed memory regions
US6766418B1 (en) Methods and apparatus for accessing data using a cache
US5765201A (en) Changing page size in storage media of computer system
US7962700B2 (en) Systems and methods for reducing latency for accessing compressed memory using stratified compressed memory architectures and organization
JP3987577B2 (ja) システム管理モード情報を他の情報と共にキャッシュに入れる方法および装置
US6516389B1 (en) Disk control device
US6175896B1 (en) Microprocessor system and method for increasing memory Bandwidth for data transfers between a cache and main memory utilizing data compression
KR20090026296A (ko) 예측 데이터 로더
JPH11102323A (ja) 仮想アドレス変換用の柔軟な変換記憶バッファ
US20030005219A1 (en) Partitioning cache metadata state
JP2711387B2 (ja) キャッシュ装置、および複数の光ディスクから受取られたデータを不揮発性キャッシュメモリにストアするための方法
US5420983A (en) Method for merging memory blocks, fetching associated disk chunk, merging memory blocks with the disk chunk, and writing the merged data
US7899989B2 (en) Method and system for using a block allocation policy
US20130124821A1 (en) Method of managing computer memory, corresponding computer program product, and data storage device therefor
US6317818B1 (en) Pre-fetching of pages prior to a hard page fault sequence
US20070106868A1 (en) Method and system for latency-directed block allocation
US8478755B2 (en) Sorting large data sets
US7246202B2 (en) Cache controller, cache control method, and computer system
JP3808058B2 (ja) 複数のホストが圧縮データを記憶するメモリ・セクタの集合を共用できるようにするための装置
US6449705B1 (en) Method and apparatus for improving performance of drive linking through use of hash tables

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19970916

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081031

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091031

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091031

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101031

Year of fee payment: 13

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111031

Year of fee payment: 14

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111031

Year of fee payment: 14

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121031

Year of fee payment: 15

LAPS Cancellation because of no payment of annual fees