JPH05216593A - 間接アクセス記憶装置 - Google Patents
間接アクセス記憶装置Info
- Publication number
- JPH05216593A JPH05216593A JP4257726A JP25772692A JPH05216593A JP H05216593 A JPH05216593 A JP H05216593A JP 4257726 A JP4257726 A JP 4257726A JP 25772692 A JP25772692 A JP 25772692A JP H05216593 A JPH05216593 A JP H05216593A
- Authority
- JP
- Japan
- Prior art keywords
- address
- request
- size
- data
- disk
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B27/00—Editing; Indexing; Addressing; Timing or synchronising; Monitoring; Measuring tape travel
- G11B27/10—Indexing; Addressing; Timing or synchronising; Measuring tape travel
- G11B27/11—Indexing; Addressing; Timing or synchronising; Measuring tape travel by using information not detectable on the record carrier
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
- G11B20/12—Formatting, e.g. arrangement of data block or words on the record carriers
- G11B20/1217—Formatting, e.g. arrangement of data block or words on the record carriers on discs
- G11B20/1252—Formatting, e.g. arrangement of data block or words on the record carriers on discs for discontinuous data, e.g. digital information signals or computer program data
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
- G11B20/12—Formatting, e.g. arrangement of data block or words on the record carriers
- G11B2020/1264—Formatting, e.g. arrangement of data block or words on the record carriers wherein the formatting concerns a specific kind of data
- G11B2020/1265—Control data, system data or management information, i.e. data used to access or process user data
- G11B2020/1281—Servo information
- G11B2020/1282—Servo information in embedded servo fields
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
(57)【要約】
【目的】 書き込み動作を最短時間で完了させることに
より書き込み性能を最適化させると共に読み出し性能を
最適化させること。 【構成】 インテリジェントディスクコントローラ(以
下IDC)と組み合わされた回転ディスク記憶メモリか
らなる間接アクセスディスク記憶装置である。このID
Cは、回転ディスクメモリのどの記憶場所が利用可能で
あるかを決定し、他の利用可能な記憶場所のアクセス時
間と比較して最短時間でアクセスできる記憶場所を利用
可能記憶場所の中から選択することにより、データパケ
ットを記憶させるための要求に応答する。IDCは、そ
の選択を動的に行う。即ち、回転ディスクメモリの記録
ヘッドの現在の位置を監視し、利用可能な記憶場所の記
録を検索して、最適な位置を選択する。IDCは次いで
そのデータパケットを回転ディスクメモリ上に記憶させ
る。
より書き込み性能を最適化させると共に読み出し性能を
最適化させること。 【構成】 インテリジェントディスクコントローラ(以
下IDC)と組み合わされた回転ディスク記憶メモリか
らなる間接アクセスディスク記憶装置である。このID
Cは、回転ディスクメモリのどの記憶場所が利用可能で
あるかを決定し、他の利用可能な記憶場所のアクセス時
間と比較して最短時間でアクセスできる記憶場所を利用
可能記憶場所の中から選択することにより、データパケ
ットを記憶させるための要求に応答する。IDCは、そ
の選択を動的に行う。即ち、回転ディスクメモリの記録
ヘッドの現在の位置を監視し、利用可能な記憶場所の記
録を検索して、最適な位置を選択する。IDCは次いで
そのデータパケットを回転ディスクメモリ上に記憶させ
る。
Description
【0001】
【産業上の利用分野】本発明は、インテリジェントディ
スクコントローラと組み合わされた回転ディスク記憶メ
モリからなる間接アクセスディスク記憶装置に関する。
スクコントローラと組み合わされた回転ディスク記憶メ
モリからなる間接アクセスディスク記憶装置に関する。
【0002】
【従来の技術及び発明が解決しようとする課題】従来、
回転ディスク記憶装置のような記憶媒体上にデータを編
成するタスクは、ホストプロセッサのファイルシステム
によって行われて来た。システムレベルのソフトウェア
は大域情報を利用する上で理論的長所があるが、最適化
に対する障害がいくつか残されている。ファイルは、局
所化されたアドレス範囲に入るように個々に最適化され
るが、大域的ロード均衡化(load balancing)またはフ
ァイルシステム配置は、しばしばシステム管理責任者に
委ねられ、このシステム管理責任者はおそらく、ディス
クの低レベル構造を並べ換える「OSF」論理ボリューム
マネージャ(Logical Volume Manager)等のツールを用
いてこれを行うと思われる。さらに、SCSI−II(小型コ
ンピュータシステムインタフェースII)等の新しいディ
スクインタフェースによって抽象ディスクモデルが出さ
れ、ファイルシステムがこの種の決定を行うことがます
ます困難となっている。
回転ディスク記憶装置のような記憶媒体上にデータを編
成するタスクは、ホストプロセッサのファイルシステム
によって行われて来た。システムレベルのソフトウェア
は大域情報を利用する上で理論的長所があるが、最適化
に対する障害がいくつか残されている。ファイルは、局
所化されたアドレス範囲に入るように個々に最適化され
るが、大域的ロード均衡化(load balancing)またはフ
ァイルシステム配置は、しばしばシステム管理責任者に
委ねられ、このシステム管理責任者はおそらく、ディス
クの低レベル構造を並べ換える「OSF」論理ボリューム
マネージャ(Logical Volume Manager)等のツールを用
いてこれを行うと思われる。さらに、SCSI−II(小型コ
ンピュータシステムインタフェースII)等の新しいディ
スクインタフェースによって抽象ディスクモデルが出さ
れ、ファイルシステムがこの種の決定を行うことがます
ます困難となっている。
【0003】ファイルシステムは(それがオペレーティ
ングシステムの部分であるか、データベースシステムで
あるか、あるいは他の何らかのアプリケーションである
かにかかわらず)、大域システム状態に関する情報を、
その制御装置より多く有しているということ、及び、こ
の情報が、スケジューリング、データ配置、キャッシュ
記憶、及び先取り(プリフェッチ)方針に関する選択を
改善するために使用すべきものであるということは、従
来技術で知られている。例えば、4.2BSDファイルシステ
ム(McKusick84)は大域情報を利用するが、非矩形ディ
スクを扱うための現在のディスク構造についての知識情
報が欠けている。このようなシステムには、ディスク性
能特性のきめ細かい制御、及びその特性についての改善
された知識情報を、制御装置レベルで得ることができる
という長所が欠如している。
ングシステムの部分であるか、データベースシステムで
あるか、あるいは他の何らかのアプリケーションである
かにかかわらず)、大域システム状態に関する情報を、
その制御装置より多く有しているということ、及び、こ
の情報が、スケジューリング、データ配置、キャッシュ
記憶、及び先取り(プリフェッチ)方針に関する選択を
改善するために使用すべきものであるということは、従
来技術で知られている。例えば、4.2BSDファイルシステ
ム(McKusick84)は大域情報を利用するが、非矩形ディ
スクを扱うための現在のディスク構造についての知識情
報が欠けている。このようなシステムには、ディスク性
能特性のきめ細かい制御、及びその特性についての改善
された知識情報を、制御装置レベルで得ることができる
という長所が欠如している。
【0004】ディスク及びディスク制御装置から切り離
されたホストプロセッサは、ディスク制御装置より最適
データレイアウトについての決定能力が劣る。このよう
なホストプロセッサは、ディスク制御装置設計に本来存
在する部分でありかつデータレイアウトに関する正しい
決定にとって極めて重要であるディスクの幾何学諸元及
び性能特性に関する知識情報に欠けるものである。現在
のインタフェース規格の下では、この知識情報をホスト
プロセッサに伝達するのに大きな困難が伴う。ディスク
リソースを割り当てる際のスケジューリング決定にとっ
て重要な現在のディスク状態(現在のヘッド位置を含
む)についての詳細な知識情報は、ホストプロセッサよ
り当然ディスク制御装置で多く得られる。にもかかわら
ず、従来技術においては、スケジューリング決定及びデ
ータ配置決定を行うのにホストプロセッサのファイルシ
ステムを使用することが教示されている。
されたホストプロセッサは、ディスク制御装置より最適
データレイアウトについての決定能力が劣る。このよう
なホストプロセッサは、ディスク制御装置設計に本来存
在する部分でありかつデータレイアウトに関する正しい
決定にとって極めて重要であるディスクの幾何学諸元及
び性能特性に関する知識情報に欠けるものである。現在
のインタフェース規格の下では、この知識情報をホスト
プロセッサに伝達するのに大きな困難が伴う。ディスク
リソースを割り当てる際のスケジューリング決定にとっ
て重要な現在のディスク状態(現在のヘッド位置を含
む)についての詳細な知識情報は、ホストプロセッサよ
り当然ディスク制御装置で多く得られる。にもかかわら
ず、従来技術においては、スケジューリング決定及びデ
ータ配置決定を行うのにホストプロセッサのファイルシ
ステムを使用することが教示されている。
【0005】
【課題を解決するための手段】本発明は、「ディスク制
御装置は、最適データ配置決定をファイルシステムより
良好に行うことができるので、データ配置を決定するの
により好適である」という前提に基づく間接アクセスデ
ィスク記憶装置である。本発明の間接アクセスディスク
記憶装置は、インテリジェントコントローラプロセッ
サ、反転テーブル及び、間接機能(indirection)を大き
く活用して、高性能及び信頼性の高い動作という目的を
達成すると共に、ファイルシステムと記憶装置との間の
協動関係を強化する現行のディスクインタフェースに拡
張性を提供するものである。
御装置は、最適データ配置決定をファイルシステムより
良好に行うことができるので、データ配置を決定するの
により好適である」という前提に基づく間接アクセスデ
ィスク記憶装置である。本発明の間接アクセスディスク
記憶装置は、インテリジェントコントローラプロセッ
サ、反転テーブル及び、間接機能(indirection)を大き
く活用して、高性能及び信頼性の高い動作という目的を
達成すると共に、ファイルシステムと記憶装置との間の
協動関係を強化する現行のディスクインタフェースに拡
張性を提供するものである。
【0006】本発明は、ディスク制御装置がメタデータ
更新なしに全ての書き込み動作毎にディスクの内容を並
べ直すことを可能にする。これは、論理アドレスをラベ
ルにマップする割り当て記録として間接機能テーブルを
ディスク制御装置のメモリに保持することによって達成
される。論理アドレスは、データブロックを識別するた
めにホストプロセッサのファイルシステムによって使用
される。ラベルは、データブロックが記憶されているデ
ィスク上の記憶場所を識別するためにディスク制御装置
によって使用される。割り当て記録が失われた場合の故
障回復に備えて、データブロックは、論理アドレス、現
在時刻スタンプ、及びコミット(commit:委任)フラグと
共に、データパケットにパッケージ化してディスク上に
記憶される。パケットにおいてコミットフラグを使用す
ることにより、最小単位の(atomic)のマルチブロック
更新を行うことができる。
更新なしに全ての書き込み動作毎にディスクの内容を並
べ直すことを可能にする。これは、論理アドレスをラベ
ルにマップする割り当て記録として間接機能テーブルを
ディスク制御装置のメモリに保持することによって達成
される。論理アドレスは、データブロックを識別するた
めにホストプロセッサのファイルシステムによって使用
される。ラベルは、データブロックが記憶されているデ
ィスク上の記憶場所を識別するためにディスク制御装置
によって使用される。割り当て記録が失われた場合の故
障回復に備えて、データブロックは、論理アドレス、現
在時刻スタンプ、及びコミット(commit:委任)フラグと
共に、データパケットにパッケージ化してディスク上に
記憶される。パケットにおいてコミットフラグを使用す
ることにより、最小単位の(atomic)のマルチブロック
更新を行うことができる。
【0007】この間接アクセスディスク記憶装置によ
り、ディスク性能が改善されると共に、大容量記憶装置
に通常固有である待ち時間による性能への影響を少なく
することができる。本発明は、他の利用可能な記憶場所
のアクセス時間に比較して最短の時間でアクセスするこ
とができる利用可能な記憶場所へデータパケットを書き
込む。その結果、書き込み動作が最短時間で完了し、書
き込み性能が最適化される。書き込み性能を最適化する
ことにより、読み出し性能も最適化される。本発明は、
利用可能な記憶場所の最小のプールを維持することによ
り、書き込みの発生時に、すぐ近くのセグメントが利用
可能であることを確実化する。また本発明は、読み出し
性能を改善するために、アイドル期間中にディスク上の
データをリシャッフル(reshuffle)する。
り、ディスク性能が改善されると共に、大容量記憶装置
に通常固有である待ち時間による性能への影響を少なく
することができる。本発明は、他の利用可能な記憶場所
のアクセス時間に比較して最短の時間でアクセスするこ
とができる利用可能な記憶場所へデータパケットを書き
込む。その結果、書き込み動作が最短時間で完了し、書
き込み性能が最適化される。書き込み性能を最適化する
ことにより、読み出し性能も最適化される。本発明は、
利用可能な記憶場所の最小のプールを維持することによ
り、書き込みの発生時に、すぐ近くのセグメントが利用
可能であることを確実化する。また本発明は、読み出し
性能を改善するために、アイドル期間中にディスク上の
データをリシャッフル(reshuffle)する。
【0008】本発明のその他の側面及び利点は、本発明
の原理を解説する図面に関連してなされる以下の詳細な
説明により明らかになるであろう。
の原理を解説する図面に関連してなされる以下の詳細な
説明により明らかになるであろう。
【0009】
【実施例】上述のように、本発明は、ホストプロセッサ
のファイルシステムによって使用される論理アドレスを
実ディスクアドレスとしてではなくデータ識別子として
扱い、データを独自の最適化方針に基づきディスク上に
記憶する。これを行うために、本発明では、ホストプロ
セッサの記憶媒体及びオペレーティングシステムとは別
個に、ディスク制御装置のメモリに独自のメタデータ構
造を維持する。これらのメタデータ構造は、頻繁に更新
され、本発明が、利用可能な記憶場所を識別する利用可
能ラベルに、ホストの論理アドレスをマップすることを
可能とする。実マッピングを含む割り当て記録データ構
造337を図4に示す。図5に示す使用記録データ構造317
は、ワード長が回転ディスク記憶装置における記録ヘッ
ドの個数を反映する記録ワードを使用することにより、
利用可能な記憶場所を識別する利用可能ラベルを迅速に
見つけることを可能にする。図6に示すデータパケット
340は、故障回復のために、回転ディスク記憶装置上の
データをカプセル化したものである。
のファイルシステムによって使用される論理アドレスを
実ディスクアドレスとしてではなくデータ識別子として
扱い、データを独自の最適化方針に基づきディスク上に
記憶する。これを行うために、本発明では、ホストプロ
セッサの記憶媒体及びオペレーティングシステムとは別
個に、ディスク制御装置のメモリに独自のメタデータ構
造を維持する。これらのメタデータ構造は、頻繁に更新
され、本発明が、利用可能な記憶場所を識別する利用可
能ラベルに、ホストの論理アドレスをマップすることを
可能とする。実マッピングを含む割り当て記録データ構
造337を図4に示す。図5に示す使用記録データ構造317
は、ワード長が回転ディスク記憶装置における記録ヘッ
ドの個数を反映する記録ワードを使用することにより、
利用可能な記憶場所を識別する利用可能ラベルを迅速に
見つけることを可能にする。図6に示すデータパケット
340は、故障回復のために、回転ディスク記憶装置上の
データをカプセル化したものである。
【0010】一般にホストプロセッサが1ブロックのデ
ータを記憶するよう要求する場合、本発明では、使用記
録データ構造を走査して、他の利用可能な記憶場所のア
クセス時間と比較して最短時間でアクセスすることがで
きる記憶場所を識別する指定ラベルを、利用可能ラベル
の中から選択する。次に、そのデータブロックを含むデ
ータパケットはその選択された記憶場所に記憶される。
そして、その選択された記憶場所を識別する指定ラベル
は、割り当て記録データ構造中における、論理アドレス
によって指定された記憶場所に、記録される。指定ラベ
ルは、以前に割り当て記録データ構造中の論理アドレス
に関連づけられた古いラベルとは全く無関係なものであ
る。データの書き込み後、その論理アドレスと以前に関
連づけられた古いラベルはそれ以降のデータ記憶のため
に利用可能となる。
ータを記憶するよう要求する場合、本発明では、使用記
録データ構造を走査して、他の利用可能な記憶場所のア
クセス時間と比較して最短時間でアクセスすることがで
きる記憶場所を識別する指定ラベルを、利用可能ラベル
の中から選択する。次に、そのデータブロックを含むデ
ータパケットはその選択された記憶場所に記憶される。
そして、その選択された記憶場所を識別する指定ラベル
は、割り当て記録データ構造中における、論理アドレス
によって指定された記憶場所に、記録される。指定ラベ
ルは、以前に割り当て記録データ構造中の論理アドレス
に関連づけられた古いラベルとは全く無関係なものであ
る。データの書き込み後、その論理アドレスと以前に関
連づけられた古いラベルはそれ以降のデータ記憶のため
に利用可能となる。
【0011】ホストプロセッサからのデータブロックの
ストリームは、データパケットのシーケンスとして書き
込まれる。各パケットには、一塊り(chunk)のデータ、
その論理ブロックアドレス、シーケンス番号、及びその
パケットで最小単位のシーケンスが終わるのかどうかを
示すフラグが含まれる。この特別な情報により、本発明
は、システム障害から回復することができ、複数のブロ
ックオブジェクトについての最小単位の更新を提供する
ことができる。
ストリームは、データパケットのシーケンスとして書き
込まれる。各パケットには、一塊り(chunk)のデータ、
その論理ブロックアドレス、シーケンス番号、及びその
パケットで最小単位のシーケンスが終わるのかどうかを
示すフラグが含まれる。この特別な情報により、本発明
は、システム障害から回復することができ、複数のブロ
ックオブジェクトについての最小単位の更新を提供する
ことができる。
【0012】ホストプロセッサからのデータ記憶要求の
直後において記憶場所が必ず利用可能となるように、本
発明では、以降の割り当てのために記憶装置の一部をリ
ザーブする。データ記憶要求の直後に利用可能な記憶場
所が見つかる可能性は、利用可能なセグメントの数が減
少するにつれて減少する。しかしながら、優れた性能を
達成するためにリザーブする必要のある記憶部の容量は
驚くほど僅かである。本発明においては、この記憶装置
のリザーブ率を5パーセントに保った場合に、公称ディ
スクバンド幅の約2分の1の速度で安定したスループッ
トを得ることが可能となる。リザーブ率を50パーセント
に保った場合には、本発明においては、公称ディスクバ
ンド幅に近い速度で安定したスループットを得ることが
可能となる。これらのスループットに関する数値は、転
送されるブロックがシーケンシャルであるかランダムで
あるかには無関係である。
直後において記憶場所が必ず利用可能となるように、本
発明では、以降の割り当てのために記憶装置の一部をリ
ザーブする。データ記憶要求の直後に利用可能な記憶場
所が見つかる可能性は、利用可能なセグメントの数が減
少するにつれて減少する。しかしながら、優れた性能を
達成するためにリザーブする必要のある記憶部の容量は
驚くほど僅かである。本発明においては、この記憶装置
のリザーブ率を5パーセントに保った場合に、公称ディ
スクバンド幅の約2分の1の速度で安定したスループッ
トを得ることが可能となる。リザーブ率を50パーセント
に保った場合には、本発明においては、公称ディスクバ
ンド幅に近い速度で安定したスループットを得ることが
可能となる。これらのスループットに関する数値は、転
送されるブロックがシーケンシャルであるかランダムで
あるかには無関係である。
【0013】図2は実施例の動作をより詳細に図解した
ものである。ディスクコントローラプロセッサ124は、
命令メモリ120に記憶されたプログラム命令を実行する
ことにより動作する。ホストプロセッサ102は、SCSIイ
ンタフェース(小型コンピュータシステムインタフェー
ス)を介してディスクコントローラプロセッサ124と通
信する。ホストシステムは、SCSIインタフェース108を
用いて間接アクセスディスク記憶装置100がデータ101を
記憶するよう要求する。次に、ホストシステムは、論理
アドレス125及びデータブロック127よりなるデータパケ
ットをSCSIインタフェース108を介してディスクコント
ローラプロセッサ124へ送る。
ものである。ディスクコントローラプロセッサ124は、
命令メモリ120に記憶されたプログラム命令を実行する
ことにより動作する。ホストプロセッサ102は、SCSIイ
ンタフェース(小型コンピュータシステムインタフェー
ス)を介してディスクコントローラプロセッサ124と通
信する。ホストシステムは、SCSIインタフェース108を
用いて間接アクセスディスク記憶装置100がデータ101を
記憶するよう要求する。次に、ホストシステムは、論理
アドレス125及びデータブロック127よりなるデータパケ
ットをSCSIインタフェース108を介してディスクコント
ローラプロセッサ124へ送る。
【0014】その後、ディスクコントローラプロセッサ
124は、図2に示す割り当て命令107を実行する。割り当
て命令は、図1に示す記憶媒体104のどの記憶場所105が
データ記憶に利用可能であるかを判断すると共に、他の
利用可能な記憶場所のアクセス時間と比較して最短時間
でアクセスすることのできる記憶場所を、利用可能な記
憶場所の中から選択する。ディスクコントローラプロセ
ッサ124は、図1に示すように、割り当て命令を実行し
ている間にデータ/ディスクサーボ制御装置150と通信
を行って磁気記録ヘッド106の現在のヘッド位置111を監
視する。ディスクコントローラプロセッサは、現在のヘ
ッド位置111に関するこの情報を用いて、他の利用可能
な記憶場所のアクセス時間と比較して最短時間でアクセ
スすることができる記憶場所を、利用可能な記憶場所の
中から選択する。
124は、図2に示す割り当て命令107を実行する。割り当
て命令は、図1に示す記憶媒体104のどの記憶場所105が
データ記憶に利用可能であるかを判断すると共に、他の
利用可能な記憶場所のアクセス時間と比較して最短時間
でアクセスすることのできる記憶場所を、利用可能な記
憶場所の中から選択する。ディスクコントローラプロセ
ッサ124は、図1に示すように、割り当て命令を実行し
ている間にデータ/ディスクサーボ制御装置150と通信
を行って磁気記録ヘッド106の現在のヘッド位置111を監
視する。ディスクコントローラプロセッサは、現在のヘ
ッド位置111に関するこの情報を用いて、他の利用可能
な記憶場所のアクセス時間と比較して最短時間でアクセ
スすることができる記憶場所を、利用可能な記憶場所の
中から選択する。
【0015】次に、ディスクコントローラプロセッサ12
4は、記録命令112を実行して、図3に示す記憶媒体104
上の選択された記憶場所113にデータパケットを記録す
る。(割り当て命令107及び記録命令112については、本
実施例の説明の最後の「補足説明I:メイン疑似コード
リスト」中のルーチンを参照しつつ以降で詳細に説明す
る。)次に、ディスクコントローラプロセッサ124は、
図1に示す制御バス114及びデータバス116を介して適切
な信号をデータ/ディスクサーボ制御装置150に送るこ
とにより、データパケットを記憶媒体104に記憶させ
る。
4は、記録命令112を実行して、図3に示す記憶媒体104
上の選択された記憶場所113にデータパケットを記録す
る。(割り当て命令107及び記録命令112については、本
実施例の説明の最後の「補足説明I:メイン疑似コード
リスト」中のルーチンを参照しつつ以降で詳細に説明す
る。)次に、ディスクコントローラプロセッサ124は、
図1に示す制御バス114及びデータバス116を介して適切
な信号をデータ/ディスクサーボ制御装置150に送るこ
とにより、データパケットを記憶媒体104に記憶させ
る。
【0016】この好適実施例において、記憶媒体104
は、図1に示す複数のプラッタを有する回転ディスクメ
モリである。図3に示す記憶場所105は、プラッタ104の
うちの1つの表面上の同心リングのセグメントよりな
る。各プラッタ共、これと同様の構成を有する。これら
の同心リングはシリンダとして知られている。各々の特
定セグメントは全て、その盤面、シリンダ位置、及び回
転位置によって探し出すことができる。複数の磁気記録
ヘッド106は一つにまとめられ、各プラッタの表面に1
つずつ磁気記録ヘッド106が割り当てられるようになっ
ている。このように一つにまとめられた磁気記録ヘッド
106は、一体的に移動し、プラッタ104の半径方向に走査
する。この一体的な磁気記録ヘッド106が各プラッタの
表面を走査する際にプラッタ104が回転することによ
り、磁気記録ヘッド106が記憶場所105にアクセスするこ
とが可能となる。既に磁気記録ヘッド106のうちの1つ
の真下にある記憶場所であれば、迅速にアクセスするこ
とができる。ある特定の記憶場所が磁気記録ヘッド106
のうちの1つの真下にない場合には、その特定の記憶場
所へのアクセスには、その特定の記憶場所が磁気記録ヘ
ッド106のうちの1つの真下に来るように、ディスクが
回転して磁気記録ヘッドが走査するのを待つ間遅延が生
じる。この遅延のため、現在のヘッド位置111の近くに
ある記憶場所は、現在のヘッド位置111から離れている
記憶場所より比較的短時間でアクセスすることができ
る。この遅延は、待ち時間というさらに大きな概念と関
係がある。
は、図1に示す複数のプラッタを有する回転ディスクメ
モリである。図3に示す記憶場所105は、プラッタ104の
うちの1つの表面上の同心リングのセグメントよりな
る。各プラッタ共、これと同様の構成を有する。これら
の同心リングはシリンダとして知られている。各々の特
定セグメントは全て、その盤面、シリンダ位置、及び回
転位置によって探し出すことができる。複数の磁気記録
ヘッド106は一つにまとめられ、各プラッタの表面に1
つずつ磁気記録ヘッド106が割り当てられるようになっ
ている。このように一つにまとめられた磁気記録ヘッド
106は、一体的に移動し、プラッタ104の半径方向に走査
する。この一体的な磁気記録ヘッド106が各プラッタの
表面を走査する際にプラッタ104が回転することによ
り、磁気記録ヘッド106が記憶場所105にアクセスするこ
とが可能となる。既に磁気記録ヘッド106のうちの1つ
の真下にある記憶場所であれば、迅速にアクセスするこ
とができる。ある特定の記憶場所が磁気記録ヘッド106
のうちの1つの真下にない場合には、その特定の記憶場
所へのアクセスには、その特定の記憶場所が磁気記録ヘ
ッド106のうちの1つの真下に来るように、ディスクが
回転して磁気記録ヘッドが走査するのを待つ間遅延が生
じる。この遅延のため、現在のヘッド位置111の近くに
ある記憶場所は、現在のヘッド位置111から離れている
記憶場所より比較的短時間でアクセスすることができ
る。この遅延は、待ち時間というさらに大きな概念と関
係がある。
【0017】ディスク書き込みの前後において、待ち時
間は、ディスク書き込み動作を実行するために費やされ
る時間である。これには、磁気記録ヘッド106を正しい
位置へ移動させるための時間(シーク時間として知られ
ている)と、ディスクが正しい位置へ回転するのに要す
る時間(回転待ちとして知られている)と、データを実
際に転送する時間とが含まれる。この待ち時間の概念
は、種々の回転ディスク記憶装置と共に他の大容量記憶
装置にも適用可能なものである。ディスクコントローラ
プロセッサ124は、磁気記録ヘッド106の現在のヘッド位
置111を監視し、割り当て記録132を検索することによ
り、他の利用可能な記憶場所のアクセス時間と比較して
最短時間でアクセスすることができる記憶場所を、利用
可能な記憶場所の中から選択する。このような配置決定
は動的に行われなければならない。これは、現在のヘッ
ド位置111が、ディスクプラッタ104の回転及び磁気記録
ヘッド106の移動により絶えず変化しているためであ
る。
間は、ディスク書き込み動作を実行するために費やされ
る時間である。これには、磁気記録ヘッド106を正しい
位置へ移動させるための時間(シーク時間として知られ
ている)と、ディスクが正しい位置へ回転するのに要す
る時間(回転待ちとして知られている)と、データを実
際に転送する時間とが含まれる。この待ち時間の概念
は、種々の回転ディスク記憶装置と共に他の大容量記憶
装置にも適用可能なものである。ディスクコントローラ
プロセッサ124は、磁気記録ヘッド106の現在のヘッド位
置111を監視し、割り当て記録132を検索することによ
り、他の利用可能な記憶場所のアクセス時間と比較して
最短時間でアクセスすることができる記憶場所を、利用
可能な記憶場所の中から選択する。このような配置決定
は動的に行われなければならない。これは、現在のヘッ
ド位置111が、ディスクプラッタ104の回転及び磁気記録
ヘッド106の移動により絶えず変化しているためであ
る。
【0018】このようにして、本発明によれば、回転デ
ィスク記憶装置に通常固有であるシーク時間及び回転待
ちによる性能への影響を効果的に低減することができ
る。これは延いては待ち時間の性能への影響を小さくす
ることにつながる。本発明は、待ち時間を有する他の大
容量記憶装置にも適用することができる。
ィスク記憶装置に通常固有であるシーク時間及び回転待
ちによる性能への影響を効果的に低減することができ
る。これは延いては待ち時間の性能への影響を小さくす
ることにつながる。本発明は、待ち時間を有する他の大
容量記憶装置にも適用することができる。
【0019】上述のように、ある所与の瞬間において、
各磁気記録ヘッド106は、或る1つの記憶場所の真上に
位置し、その記憶場所へのアクセスが可能となる。その
ような各瞬間においては、記録ヘッド106群の中のどの
1つを用いてもよく、各プラッタ面が1つの記憶場所を
1セットの記憶場所に提供する。そして、その同じ瞬間
には、その1セット内のどの1つの記憶場所でもアクセ
スすることが可能である。磁気記録ヘッド106が一つに
まとめられているので、そのような1セットの記憶場所
の各要素は、各々対応するプラッタ面に関して同じシリ
ンダ上の同じ回転位置にある。プラッタ104が積み重ね
られているので、そのような1セットの記憶場所の各要
素は、多数のプラッタ104を貫通して縦方向に延びるカ
ラム内に存在する。このため、そのような1セットの記
憶場所は、1カラム群の記憶場所123と呼ばれる。例え
ば、32KBのトラック、19のデータ面、及び4KB
の記憶場所サイズを有するディスクの場合には、19の
各記憶場所を8カラム群で編成した152の記憶場所を
1シリンダ中に有することになる。
各磁気記録ヘッド106は、或る1つの記憶場所の真上に
位置し、その記憶場所へのアクセスが可能となる。その
ような各瞬間においては、記録ヘッド106群の中のどの
1つを用いてもよく、各プラッタ面が1つの記憶場所を
1セットの記憶場所に提供する。そして、その同じ瞬間
には、その1セット内のどの1つの記憶場所でもアクセ
スすることが可能である。磁気記録ヘッド106が一つに
まとめられているので、そのような1セットの記憶場所
の各要素は、各々対応するプラッタ面に関して同じシリ
ンダ上の同じ回転位置にある。プラッタ104が積み重ね
られているので、そのような1セットの記憶場所の各要
素は、多数のプラッタ104を貫通して縦方向に延びるカ
ラム内に存在する。このため、そのような1セットの記
憶場所は、1カラム群の記憶場所123と呼ばれる。例え
ば、32KBのトラック、19のデータ面、及び4KB
の記憶場所サイズを有するディスクの場合には、19の
各記憶場所を8カラム群で編成した152の記憶場所を
1シリンダ中に有することになる。
【0020】図5は、記録ワードアレイ325及びラベル
グループ化アドレス索引321を有する使用記録データ構
造317を示すものである。索引中の各ラベルグループ化
アドレスは、図1に示すような或る1カラム群の記憶場
所123に対応する。(図2に示すように、ディスクコント
ローラプロセッサ124は、記憶媒体104上のどの記憶場所
105がデータ記憶に利用可能であり、どの記憶場所がデ
ータ記憶に利用可能でないかを示す使用記録117をデー
タメモリ121中に維持する。)図5は、アレイ325中の各
記録ワードの記憶場所がラベルグループ化アドレスのう
ちの1つによって索引付けされることを示している。こ
のようにして、使用記録データ構造317は、ディスクコ
ントローラプロセッサ124がラベルグループ化アドレス
索引321のうちの1つを用いて記録ワードアレイ325のう
ちの対応する1つを得ることによって使用記録117にア
クセスすることができるように構成される。
グループ化アドレス索引321を有する使用記録データ構
造317を示すものである。索引中の各ラベルグループ化
アドレスは、図1に示すような或る1カラム群の記憶場
所123に対応する。(図2に示すように、ディスクコント
ローラプロセッサ124は、記憶媒体104上のどの記憶場所
105がデータ記憶に利用可能であり、どの記憶場所がデ
ータ記憶に利用可能でないかを示す使用記録117をデー
タメモリ121中に維持する。)図5は、アレイ325中の各
記録ワードの記憶場所がラベルグループ化アドレスのう
ちの1つによって索引付けされることを示している。こ
のようにして、使用記録データ構造317は、ディスクコ
ントローラプロセッサ124がラベルグループ化アドレス
索引321のうちの1つを用いて記録ワードアレイ325のう
ちの対応する1つを得ることによって使用記録117にア
クセスすることができるように構成される。
【0021】アレイ325中の各記録ワードは多数のビッ
トポジション327を有する。各ビットポジション327にお
けるエントリは、記憶媒体104の記憶場所105のうちの1
つの利用可能性を示す。各々の記憶場所105はラベルに
よって識別される。各ラベルはラベルグループ化アドレ
ス及びビットポジションよりなる。ラベルのラベルグル
ープ化アドレス部分は記憶場所105のシリンダ位置及び
回転位置を指定する。ラベルのビットポジション部分は
その記憶場所のプラッタ面を指定する。これらのシリン
ダ位置、回転位置、及びプラッタ面部分は、本実施例の
説明の最後の「補足説明I:メイン疑似コードリスト」
に示す「addr to cyl(request.address)」、「addr
to sect(request.address)」、及び「addr to surf
(request.address)」にそれぞれ対応する。使用記録デ
ータ構造317は、前記「補足説明I」の次の「補足説明I
I:ページ割り当て構造疑似コードリスト」に示す「fre
e map」に対応する。
トポジション327を有する。各ビットポジション327にお
けるエントリは、記憶媒体104の記憶場所105のうちの1
つの利用可能性を示す。各々の記憶場所105はラベルに
よって識別される。各ラベルはラベルグループ化アドレ
ス及びビットポジションよりなる。ラベルのラベルグル
ープ化アドレス部分は記憶場所105のシリンダ位置及び
回転位置を指定する。ラベルのビットポジション部分は
その記憶場所のプラッタ面を指定する。これらのシリン
ダ位置、回転位置、及びプラッタ面部分は、本実施例の
説明の最後の「補足説明I:メイン疑似コードリスト」
に示す「addr to cyl(request.address)」、「addr
to sect(request.address)」、及び「addr to surf
(request.address)」にそれぞれ対応する。使用記録デ
ータ構造317は、前記「補足説明I」の次の「補足説明I
I:ページ割り当て構造疑似コードリスト」に示す「fre
e map」に対応する。
【0022】上述のように、ディスクコントローラプロ
セッサ124は、割り当て命令107を実行して、記憶媒体10
4中のどの記憶場所105がデータ記憶に利用可能であるか
を判断すると共に、他の利用可能な記憶場所のアクセス
時間と比較して最短時間でアクセスすることができる特
定の記憶場所を、利用可能な記憶場所の中から選択す
る。これを実行する際、ディスクコントローラプロセッ
サ124は、現在のヘッド位置111を監視する一方、使用記
録117を検索する検索コード119を実行して、その選択さ
れた記憶場所113を識別する指定ラベルを生成する。検
索コード119は、前記「補足説明I:メイン疑似コード
リスト」に示す「find free segment()」に対応す
る。
セッサ124は、割り当て命令107を実行して、記憶媒体10
4中のどの記憶場所105がデータ記憶に利用可能であるか
を判断すると共に、他の利用可能な記憶場所のアクセス
時間と比較して最短時間でアクセスすることができる特
定の記憶場所を、利用可能な記憶場所の中から選択す
る。これを実行する際、ディスクコントローラプロセッ
サ124は、現在のヘッド位置111を監視する一方、使用記
録117を検索する検索コード119を実行して、その選択さ
れた記憶場所113を識別する指定ラベルを生成する。検
索コード119は、前記「補足説明I:メイン疑似コード
リスト」に示す「find free segment()」に対応す
る。
【0023】検索コード119の実行によって指定ラベル
を生成すると、ディスクコントローラプロセッサは、次
いで記録命令112を実行して、データメモリ121のデータ
バッファ141部に一時記憶されたデータを移動し、デー
タをデータパケット内にカプセル化し、データパケット
全体を記憶媒体104に記憶させる。記録命令112は、前記
「補足説明I:メイン疑似コードリスト」に示す「do
io(phys req, last)」に対応する。
を生成すると、ディスクコントローラプロセッサは、次
いで記録命令112を実行して、データメモリ121のデータ
バッファ141部に一時記憶されたデータを移動し、デー
タをデータパケット内にカプセル化し、データパケット
全体を記憶媒体104に記憶させる。記録命令112は、前記
「補足説明I:メイン疑似コードリスト」に示す「do
io(phys req, last)」に対応する。
【0024】ディスクコントローラプロセッサ124は、
現在時刻133を示す値をデータメモリ121に維持する。こ
の現在時刻133は、データパケットのカプセル化時に、
システム障害の回復のためのバックアップ用として、論
理アドレス125及びデータブロック127と共にデータパケ
ットに入れられる。また、間接アクセスディスク記憶装
置100は、コミットフラグをデータパケットに入れるこ
とにより、任意サイズの最小単位データ更新に備える。
このコミットフラグは、システム障害の回復中に割り当
て記録を復元している際に、下位のシーケンス番号を有
する全ての更新が適用されるべきである、ということを
示す。このコミットフラグはまた、間接アクセスディス
ク記憶装置100が複数の同時トランザクションを行うこ
とを可能にするものである。図6は、データブロック34
3、論理アドレス345、タイムスタンプ347及びコミット
フラグ349を含むデータパケット340を示す。
現在時刻133を示す値をデータメモリ121に維持する。こ
の現在時刻133は、データパケットのカプセル化時に、
システム障害の回復のためのバックアップ用として、論
理アドレス125及びデータブロック127と共にデータパケ
ットに入れられる。また、間接アクセスディスク記憶装
置100は、コミットフラグをデータパケットに入れるこ
とにより、任意サイズの最小単位データ更新に備える。
このコミットフラグは、システム障害の回復中に割り当
て記録を復元している際に、下位のシーケンス番号を有
する全ての更新が適用されるべきである、ということを
示す。このコミットフラグはまた、間接アクセスディス
ク記憶装置100が複数の同時トランザクションを行うこ
とを可能にするものである。図6は、データブロック34
3、論理アドレス345、タイムスタンプ347及びコミット
フラグ349を含むデータパケット340を示す。
【0025】割り当て命令107には、検索コード119の他
に、マッピングコード129と更新コード115も含まれる。
ディスクコントローラプロセッサは、マッピングコード
129を実行することにより、指定ラベルと記憶されてい
るデータ101の論理アドレス125との間の対応関係の割り
当て記録132をデータメモリに121に記憶させる。図4
は、ラベルアレイ311よりなる割り当て記録データ構造3
37を示す。アレイ中の各ラベルの記憶場所は、論理アド
レス索引331によって索引付けされる。このように、割
り当て記録データ構造337は、ディスクコントローラプ
ロセッサ124が論理アドレス125及び論理アドレス索引33
1を用いることにより割り当て記録132にアクセスしてラ
ベルアレイ311に指定ラベルを記憶させることができる
ように、構成される。マッピングコードは、ラベルアレ
イ311中のこの記憶場所に既に古いラベルがあればそれ
を上書きして、指定ラベルを新しいラベルとして記憶さ
せる。マッピングコード129は前記「補足説明I:メイ
ン疑似コードリスト」に示す「store loge map(start
address, request)」に対応する。
に、マッピングコード129と更新コード115も含まれる。
ディスクコントローラプロセッサは、マッピングコード
129を実行することにより、指定ラベルと記憶されてい
るデータ101の論理アドレス125との間の対応関係の割り
当て記録132をデータメモリに121に記憶させる。図4
は、ラベルアレイ311よりなる割り当て記録データ構造3
37を示す。アレイ中の各ラベルの記憶場所は、論理アド
レス索引331によって索引付けされる。このように、割
り当て記録データ構造337は、ディスクコントローラプ
ロセッサ124が論理アドレス125及び論理アドレス索引33
1を用いることにより割り当て記録132にアクセスしてラ
ベルアレイ311に指定ラベルを記憶させることができる
ように、構成される。マッピングコードは、ラベルアレ
イ311中のこの記憶場所に既に古いラベルがあればそれ
を上書きして、指定ラベルを新しいラベルとして記憶さ
せる。マッピングコード129は前記「補足説明I:メイ
ン疑似コードリスト」に示す「store loge map(start
address, request)」に対応する。
【0026】データが選択された記憶場所に記憶される
と、ディスクコントローラプロセッサ124は、更新コー
ド115を実行して、その選択された記憶場所113が利用不
可能になったことを示すエントリによって使用記録117
を更新する。これは、指定ラベルのラベルグループ化ア
ドレス部分を用いて、記録ワードアレイ325中の対応す
る記録ワードを探し出すことによって行われる。次に、
指定ラベルのビットポジション部分を用いて、そのエン
トリについての対応する記録ワード中のビットポジショ
ンを探し出す。これは、前記「補足説明I:メイン疑似
コードリスト」に示す「allocate」によって行われる。
と、ディスクコントローラプロセッサ124は、更新コー
ド115を実行して、その選択された記憶場所113が利用不
可能になったことを示すエントリによって使用記録117
を更新する。これは、指定ラベルのラベルグループ化ア
ドレス部分を用いて、記録ワードアレイ325中の対応す
る記録ワードを探し出すことによって行われる。次に、
指定ラベルのビットポジション部分を用いて、そのエン
トリについての対応する記録ワード中のビットポジショ
ンを探し出す。これは、前記「補足説明I:メイン疑似
コードリスト」に示す「allocate」によって行われる。
【0027】更新コード115もまた、論理アドレスを用
いて、マッピングコードが古いラベル上に指定ラベルを
上書きする前に、ラベルアレイ311中の古いラベルを探
し出す。次に、更新コード115は、古いラベルを用い
て、古いラベルによって識別される記憶場所が利用可能
になったことを示すエントリで、使用記録117を更新す
る。これは、古いラベルのラベルグループ化アドレス部
分を用いて、記録ワードアレイ325中における対応する
記録ワードを探し出すことにより行われる。次に、古い
ラベルのビットポジション部分を用いて、そのエントリ
についての対応する記録ワード中のビットポジションを
探し出す。これは、前記「補足説明I:メイン疑似コー
ドリスト」に示す「free」によって行われる。
いて、マッピングコードが古いラベル上に指定ラベルを
上書きする前に、ラベルアレイ311中の古いラベルを探
し出す。次に、更新コード115は、古いラベルを用い
て、古いラベルによって識別される記憶場所が利用可能
になったことを示すエントリで、使用記録117を更新す
る。これは、古いラベルのラベルグループ化アドレス部
分を用いて、記録ワードアレイ325中における対応する
記録ワードを探し出すことにより行われる。次に、古い
ラベルのビットポジション部分を用いて、そのエントリ
についての対応する記録ワード中のビットポジションを
探し出す。これは、前記「補足説明I:メイン疑似コー
ドリスト」に示す「free」によって行われる。
【0028】上述のように、割り当て命令107及び記録
命令112は、ホスト102からのデータを記憶するために、
ディスクコントローラプロセッサ124によって実行され
る。また、間接アクセスディスク記憶装置100は、アイ
ドル期間(ホストが間接アクセスディスク記憶装置100へ
要求を出していない比較的長い期間)中に記憶媒体を再
編成する。これは、ディスクコントローラプロセッサ12
4によって行われ、まず読み取り命令139を実行して記憶
媒体からデータバッファ141へデータ101を転送する。次
に、ディスクコントローラプロセッサ124は割り当て命
令107及び記録命令112を実行して、データバッファ141
中のデータ101を記憶媒体104へ戻す。これについては、
以下に示す「補足説明III:ディスクシャッフリング疑
似コードリスト」において詳細に述べられている。
命令112は、ホスト102からのデータを記憶するために、
ディスクコントローラプロセッサ124によって実行され
る。また、間接アクセスディスク記憶装置100は、アイ
ドル期間(ホストが間接アクセスディスク記憶装置100へ
要求を出していない比較的長い期間)中に記憶媒体を再
編成する。これは、ディスクコントローラプロセッサ12
4によって行われ、まず読み取り命令139を実行して記憶
媒体からデータバッファ141へデータ101を転送する。次
に、ディスクコントローラプロセッサ124は割り当て命
令107及び記録命令112を実行して、データバッファ141
中のデータ101を記憶媒体104へ戻す。これについては、
以下に示す「補足説明III:ディスクシャッフリング疑
似コードリスト」において詳細に述べられている。
【0029】上記で詳細に説明したように、本発明によ
る間接アクセスディスク記憶装置は、ティスク性能を改
善することができ、かつ回転ディスク記憶装置に通常特
有である待ち時間による性能への影響を効果的に低減す
ることができるものである。本発明の上述の好適実施例
の説明から多くの修正態様を得ることが可能なことは明
白であろう。特許請求の範囲は、本発明の思想及び範囲
に入る全ての修正態様を包括することを意図したもので
ある。
る間接アクセスディスク記憶装置は、ティスク性能を改
善することができ、かつ回転ディスク記憶装置に通常特
有である待ち時間による性能への影響を効果的に低減す
ることができるものである。本発明の上述の好適実施例
の説明から多くの修正態様を得ることが可能なことは明
白であろう。特許請求の範囲は、本発明の思想及び範囲
に入る全ての修正態様を包括することを意図したもので
ある。
【0030】 ************************************補足説明I:メイン疑似コードリスト 読み出し及び書き込み要求がホストからコントローラへ
と送られ、且つマッピングルーチンによって物理ディス
ク位置へとマップされるディスクシステムを想定する。
入力される要求には次のものがある。
と送られ、且つマッピングルーチンによって物理ディス
ク位置へとマップされるディスクシステムを想定する。
入力される要求には次のものがある。
【0031】要求=タイプ(=読出し又は書き込み)、
サイズ、アドレス ここで、「サイズ」はバイトで表し、「アドレス」はコ
ントローラによってホストに提示されたアドレススペー
ス内にオフセットされたバイトである。
サイズ、アドレス ここで、「サイズ」はバイトで表し、「アドレス」はコ
ントローラによってホストに提示されたアドレススペー
ス内にオフセットされたバイトである。
【0032】又、物理的装置を制御する要求には次のも
のがある。
のがある。
【0033】 *********************************************************************** phys_req ={読出し、書き込み}、サイズ、シリンダ、面、セクタ、アドレス 、カウント *********************************************************************** ここで、「サイズ」はバイトで表し、「シリンダ」はア
ーム位置のアドレスであり、「面」はアクセスされるデ
ィスク面を識別し、「セクタ」は前記の面上における回
転位置を識別する。「アドレス」とは要求中の最初の論
理アドレスであり、「カウント」とはI/O要求の順序
付けされた識別子(疑似タイムスタンプ又はシーケンス
番号)である。「アドレス」と「カウント」は、故障に
続くマッピングテーブルの再構成を可能にするためにコ
ミットフラグと共に「do_io」によって装置のメタデー
タ内に組み込まれる。回復は、パワーアップ時に呼び出
される新しいルーチン「restore _map」によって実行
される。
ーム位置のアドレスであり、「面」はアクセスされるデ
ィスク面を識別し、「セクタ」は前記の面上における回
転位置を識別する。「アドレス」とは要求中の最初の論
理アドレスであり、「カウント」とはI/O要求の順序
付けされた識別子(疑似タイムスタンプ又はシーケンス
番号)である。「アドレス」と「カウント」は、故障に
続くマッピングテーブルの再構成を可能にするためにコ
ミットフラグと共に「do_io」によって装置のメタデー
タ内に組み込まれる。回復は、パワーアップ時に呼び出
される新しいルーチン「restore _map」によって実行
される。
【0034】「nativ _io_perform」は下記のように
変化する。
変化する。
【0035】 *********************************************************************** nativ _perform _io(request) BEGIN //IOが大きすぎないかチェック。これで最小単位の更新が可能になる。
【0036】 IF request.size > MAX_IO_SIZE THEN err := LARGE _IO; return FI last := FALSE WHILE request.size > 0 // 作業がある限り以下を実行する。
【0037】 DO // 論理から物理への変換 phys_req : = loge_map(request) phys_req.address := request.address phys_req.count :=global_count IF request.size = phys_req.size //これは最後の要求か? THEN do_io(phys_req, /* last = */ TRUE) ELSE do_io(phys_req, /* last = */ FALSE) FI request.size := request.size - phys_req.size request.address := request.address + request.address OD IF phys_req.type = WRITE THEN global_count := global_count + 1 free_list() // フリーとなったセグメントを利用可能にする FI END *********************************************************************** 上記において、「loge_map」は「io_map」によって戻
されたものと同じ情報を戻し、「free_list()」は「do
_io」によって準備されたセグメントのリストをフリー
にし、「do_io」は下記のものの修正バージョンであ
る。
されたものと同じ情報を戻し、「free_list()」は「do
_io」によって準備されたセグメントのリストをフリー
にし、「do_io」は下記のものの修正バージョンであ
る。
【0038】「io_map」はセグメントアドレスを実際
のディスク位置へとマップする。
のディスク位置へとマップする。
【0039】 *********************************************************************** io_map(request) BEGIN phys_req.cylinder := addr_to_cyl(request.address) phys_req.surface := addr_to_surf(request.address) phys_req.sector := addr_to_sect(request.address) //サイズをこのトラック上の最大にセットする phys_req.size := remaining(phys_req ) //必要ならば要求されたサイズに短縮する IF phys_req.size > request.size THEN phys_req.size := request.size FI phys_req END *********************************************************************** 上記で、「addr_to_cyl」、「addr_to_surf」及び
「addr_to_sect」は、データの記憶場所を決定する数
学的関数である。「remaining()」は、アドレス指定さ
れたセクタと現在のトラックの終端との間のバイト数を
戻す。この数値は、単一の「do_io」 トランザクショ
ンに転送可能なデータ量の限界を表す。
「addr_to_sect」は、データの記憶場所を決定する数
学的関数である。「remaining()」は、アドレス指定さ
れたセクタと現在のトラックの終端との間のバイト数を
戻す。この数値は、単一の「do_io」 トランザクショ
ンに転送可能なデータ量の限界を表す。
【0040】「Loge_map」は次のように実行される。
【0041】 *********************************************************************** loge_map(request) BEGIN IF request.type = READ THEN loge_read(request) ELSE loge_write(request) FI END *********************************************************************** 「Loge_write」は、ヘッド位置と回転位置との双方に
近接したデータ用の記憶場所を選択し、次に、実際の物
理的な記憶場所を決定するために「io_map」を呼び出
す。選択された記憶場所が同じトラック上の別のフリー
セグメントの直前にあり、要求が1セグメントよりも長
い場合、「loge_write」は、フリーセグメントのシー
ケンスが使用し尽くされるか、または要求全体が満たさ
れるまで、セグメントを要求に割り当てる。
近接したデータ用の記憶場所を選択し、次に、実際の物
理的な記憶場所を決定するために「io_map」を呼び出
す。選択された記憶場所が同じトラック上の別のフリー
セグメントの直前にあり、要求が1セグメントよりも長
い場合、「loge_write」は、フリーセグメントのシー
ケンスが使用し尽くされるか、または要求全体が満たさ
れるまで、セグメントを要求に割り当てる。
【0042】 *********************************************************************** Loge_write(request) BEGIN request2 := find_free_segment() allocate(request2.address) WHILE request2.size < request.size //作業がある限り以下を実行 DO //割り当てられたセグメントに続くフリーセグメントをチェック segment IF NOT available(next(request2)) THEN break FI allocate(next(request2)) request2.size := request2.size + segment_size OD store_loge_map(request.adress,request2) request2.address := request.address phys_req := io_map(request2) // 下記注1を参照 phys_req END *********************************************************************** 注1:「io_map」は標準ディスク用に書き込まれるの
で、これは、より高レベルのコードが次のトラックのシ
ークを開始するように、トラックの境界の最後を強化し
ようとする。「Loge」システムでは、この機能はページ
割り当て方針によって暗黙のうちに扱われ、「loge_wr
ite」及び「loge_read」は「io_map」の方針に優先す
る。
で、これは、より高レベルのコードが次のトラックのシ
ークを開始するように、トラックの境界の最後を強化し
ようとする。「Loge」システムでは、この機能はページ
割り当て方針によって暗黙のうちに扱われ、「loge_wr
ite」及び「loge_read」は「io_map」の方針に優先す
る。
【0043】「allocation()」は、セグメントが割り当
てられたという事実を記録するリソース制御ルーチンで
ある。「available()」は、セグメントが割り当てられ
たかどうかを問い合わせる付随機能である。「next()」
は、その引数を回転的に追従する同じトラック上のセグ
メントを戻す。
てられたという事実を記録するリソース制御ルーチンで
ある。「available()」は、セグメントが割り当てられ
たかどうかを問い合わせる付随機能である。「next()」
は、その引数を回転的に追従する同じトラック上のセグ
メントを戻す。
【0044】 *********************************************************************** next(request) BEGIN request2.type := request.type request2.size := segment_size //アドレスモジュロトラックサイズを前進させる request2.address := (request.size + request.address) //「io_map」がトラックを横切って前進。これは望ましくない。
【0045】 IF io_map(request2).sueface !=io_map(request).sueface THEN request2.address := request2.address - track_size(request) FI request2.address END *********************************************************************** 「loge_read」は、データの記憶場所を決定するために
マッピングテーブルを利用する。前述のように、これ
は、2セグメント以上の転送のためにセグメントを合体
しようとする。
マッピングテーブルを利用する。前述のように、これ
は、2セグメント以上の転送のためにセグメントを合体
しようとする。
【0046】 *********************************************************************** loge_read(request) BEGIN request2.address := get_loge_map(request.address) request2.size := segment_size; //作業がある限り、 //又、次のセグメントがその一部である限り、 WHILE request2.size < request.size AND next(request2) := get_loge_map(request.address + request2.size) DO request2.size := request2.size + segment_size OD phys_req := io_map(request2) //上記注1を参照 phys_req.size := request2.size phys_req END *********************************************************************** 「loge」マッピングテーブルは、セグメント番号によっ
て索引付けされたセグメントのアレイとして記憶され
る。読み出しはアレイをアクセスするだけの簡単な事で
ある。記憶には2つのステップが含まれる。第1に、セ
グメントに以前割り当てられたセグメントをフリーに
し、第2にアレイ内の値を修正する。
て索引付けされたセグメントのアレイとして記憶され
る。読み出しはアレイをアクセスするだけの簡単な事で
ある。記憶には2つのステップが含まれる。第1に、セ
グメントに以前割り当てられたセグメントをフリーに
し、第2にアレイ内の値を修正する。
【0047】 *********************************************************************** address map[0:NBLOCK - 1] free1 = list of address get_loge_map(address) BEGIN map[address/segment_size] END store_loge_map(start_adress, request) BEGIN size := request.size request.size := segment_size index := start_adress / segment_size WHILE size > 0 // 作業がある限り次を実行する DO insert(free1, map[index]) map[index] := request request.address := request.address + segment_size size := size - segment_size index := index + 1 OD END *********************************************************************** 「insert」は、リスト内に挿入する標準動作である。
「free_list」は、IOの完了後に呼び出され、このリス
トをパージする: *********************************************************************** free_list(list) BEGIN WHILE NOT empty(list) //作業がある限り、 DO free(pop(list)) OD END *********************************************************************** 「pop()」と「empty()」は標準スタック動作である。
「free()」はディスクセグメントの割り当て解除を行
う。
「free_list」は、IOの完了後に呼び出され、このリス
トをパージする: *********************************************************************** free_list(list) BEGIN WHILE NOT empty(list) //作業がある限り、 DO free(pop(list)) OD END *********************************************************************** 「pop()」と「empty()」は標準スタック動作である。
「free()」はディスクセグメントの割り当て解除を行
う。
【0048】「find_free_segment()」は「Loge」に
よって用いられるセグメント割り当て方針を実行する。
これは、書き込みヘッドによって到達可能なフリーセグ
メント用の連続的な回転位置を検索し、フリーセグメン
ト用のアドレスを戻す: *********************************************************************** range = first, last list = a list of cylinders to search find_free_segment() BEGIN search_pos := next_rot(current_rot_position) WHILE TRUE //無限ループ、区切りの内部で以下を実行 DO(search _loop) avail_time := rot_time(search_pos) range := seek_range(avail_time) list := search_list(range, search_pos) // リストからアドレスを引き出す WHILE cyl := adress_get(list) DO //最初のフリーセグメントで停止 IF NOT empty(cyl, rot) THEN surface := first_elem(cyl, rot) break search_loop OD search_pos := next_rot(search_pos) OD request.type := WRITE request.size := segment_size request.address := phys_to_seg(cyl, surface, rot) request END *********************************************************************** 「next_rot()」は、セグメントが記憶される、引数に
続く次の回転記憶場所を生む。「current_rot_positi
on」が循環する間、「next_rot()」は、常にその引数
よりも高い位置を生み、まる1回転だけ異なる2つの異
なる回転位置を別のルーチンが区別することを可能にす
る。「rot_time」は、装置が所定の回転位置に到達す
るのに必要な時間を生む。「seek_range」は、所定の
時間内に到達可能である最大及び最小のシリンダを生
む。「search_list()」は、所定の検索位置に対応し、
特定のシリンダ範囲内にある全てのセグメントアドレス
のリストを作成する。
よって用いられるセグメント割り当て方針を実行する。
これは、書き込みヘッドによって到達可能なフリーセグ
メント用の連続的な回転位置を検索し、フリーセグメン
ト用のアドレスを戻す: *********************************************************************** range = first, last list = a list of cylinders to search find_free_segment() BEGIN search_pos := next_rot(current_rot_position) WHILE TRUE //無限ループ、区切りの内部で以下を実行 DO(search _loop) avail_time := rot_time(search_pos) range := seek_range(avail_time) list := search_list(range, search_pos) // リストからアドレスを引き出す WHILE cyl := adress_get(list) DO //最初のフリーセグメントで停止 IF NOT empty(cyl, rot) THEN surface := first_elem(cyl, rot) break search_loop OD search_pos := next_rot(search_pos) OD request.type := WRITE request.size := segment_size request.address := phys_to_seg(cyl, surface, rot) request END *********************************************************************** 「next_rot()」は、セグメントが記憶される、引数に
続く次の回転記憶場所を生む。「current_rot_positi
on」が循環する間、「next_rot()」は、常にその引数
よりも高い位置を生み、まる1回転だけ異なる2つの異
なる回転位置を別のルーチンが区別することを可能にす
る。「rot_time」は、装置が所定の回転位置に到達す
るのに必要な時間を生む。「seek_range」は、所定の
時間内に到達可能である最大及び最小のシリンダを生
む。「search_list()」は、所定の検索位置に対応し、
特定のシリンダ範囲内にある全てのセグメントアドレス
のリストを作成する。
【0049】シリンダ範囲内のフリーセグメントが枯渇
すると性能が低下するので、「adress_get()」が不規
則であることが重要である。これは、乱数生成器を使用
してリストからエレメントを除去することによって達成
できる: *********************************************************************** adress_get(list) BEGIN target := random_int(1 to size(list)) address := list[target] delete(list, target) address END *********************************************************************** 「do_io」で記述されているタスクは次のように実行す
るように修正される。
すると性能が低下するので、「adress_get()」が不規
則であることが重要である。これは、乱数生成器を使用
してリストからエレメントを除去することによって達成
できる: *********************************************************************** adress_get(list) BEGIN target := random_int(1 to size(list)) address := list[target] delete(list, target) address END *********************************************************************** 「do_io」で記述されているタスクは次のように実行す
るように修正される。
【0050】 *********************************************************************** metadata = ecc, count, address, commit (= TRUE or FALSE) do_io(phys_req, last) BEGIN metadata.address := phys_req.address metadata.count := phys _req.count metadata.commit := FALSE disk_seek(phys_req.cylinder, phys_req.surface, phys_req.sector) //最後のioを除いて全てをループし、最後のioを処理する。特に下記のよ うな場合には以下の通り実行する。
【0051】 WHILE phys_req.size > sector_size DO disk_op(phys_req.type, data_buffer, metadata) data _buffer+sector_size phys_req.size := phys_req.size - sector_size IF mod(phys_req.size, segment_size) = 0 THEN // 全てのセグメントの後のアドレスを前進させる metadata.address := metadata.address + 1 FI OD // コミットフラグを最後のI/Oだけにセットする IF last THEN metadata.commit := TRUE FI disk_op(phys_req.type, data_buffer, metadata) data_buffer := data_buffer + sector_size phys_req.size := phys_req.size - sector_size END *********************************************************************** このように、データブロックのブロックアドレスとコミ
ット表明子(signifier)は双方とも個々のセグメントと
共に記憶される。要求の最後のセクタでは、コミット表
明子が真であり、これは、転送がうまく完了したことを
示す。
ット表明子(signifier)は双方とも個々のセグメントと
共に記憶される。要求の最後のセクタでは、コミット表
明子が真であり、これは、転送がうまく完了したことを
示す。
【0052】マップは、パワーアップ時に次のように動
作するルーチン「restore _map」で初期設定される。
作するルーチン「restore _map」で初期設定される。
【0053】 *********************************************************************** mappings = block_addr, address pending = list of mapping restore_map() BEGIN FOR i := 0 TO NBLOCK - 1 //mapを空にする DO map[i] := BAD_BLOCK OD FOR addr := 0 TO NDADDRS - 1 //全ディスクアドレスをフリーにする DO free(i) OD max_commit := 0 FOR addr := 0 TO NDADDRS - 1 //全ディスクアドレスをチェックする DO metadata := get_meta_data(addr) process_md(metadata, address) 0D FOR i := 0 TO NBLOCK - 1 DO //マップ内の全てのセグメントを割り当て通りにマークする IF map[i] != BAD_BLOCK THEN allocate(i) FI OD END *********************************************************************** 「Get_meta_data()」は、特定の高レベルのディスク
アドレス用のメタデータを読み出す。単一のI/O 動作で
メタデータのトラック価値全体を読み出し、以降の要求
のために情報をキャッシュすることは「get _meta_da
ta(」)にとって簡単な最適化である。
アドレス用のメタデータを読み出す。単一のI/O 動作で
メタデータのトラック価値全体を読み出し、以降の要求
のために情報をキャッシュすることは「get _meta_da
ta(」)にとって簡単な最適化である。
【0054】「Process_md()」は、メタデータエント
リのリストを走査し、それに従ってマップを更新する。
適正に動作するには、既にコミットされていることが既
知であるマッピング、すなわち既にコミットされている
ことが既知である動作のシーケンス番号よりも小さいシ
ーケンス番号を有するマッピング、または実際のコミッ
トフラグを有するマッピングだけを挿入しなければなら
ない。IOサイズの限界により、未処理の要求のリスト
を実際的に保持する。
リのリストを走査し、それに従ってマップを更新する。
適正に動作するには、既にコミットされていることが既
知であるマッピング、すなわち既にコミットされている
ことが既知である動作のシーケンス番号よりも小さいシ
ーケンス番号を有するマッピング、または実際のコミッ
トフラグを有するマッピングだけを挿入しなければなら
ない。IOサイズの限界により、未処理の要求のリスト
を実際的に保持する。
【0055】 *********************************************************************** process_md(metadata, address) BEGIN IF metadata.count <= max_commit //既にコミットされている場合 THEN map[metadata.address] := address ELIF metadata.count = max_commit + 1 AND NOT metadata.commit //countを前進させない THEN plistelm.address := address plistelm.block_addr := metadata.address insert(pending, plistelm) ELSE // 前進をカウントし、保留リストをフラッシュする WHILE NOT empty(pending) //リスト上の項目 DO map[top(pending).block_adress] := top(pending).adress pop(pending) OD IF metadata.commit //コミットされたトランザクションをチェック THEN //コミットされ、マップをインストールし、max commitを更新する max_commit := metadata.count map[metadata.address] := addres ELSE //保留リストに挿入 plistelm.address := address plistelm.block_addr := metadata.address insert(pending, plistelm) //このトランザクションに先行するようにmax_commitを更新 max_commit := metadata.count - 1 FI FI END *********************************************************************** 「top()」、「pop()」、及び「insert()」は標準リスト
動作である。
動作である。
【0056】注2:このアルゴリズムは、一つの未処理I/
Oだけをサポートするものであるが、同時I/Oへの汎用化
は簡単である。
Oだけをサポートするものであるが、同時I/Oへの汎用化
は簡単である。
【0057】 ************************************補足説明II:ページ割り当て構造疑似コードリスト ページ割り当てテーブルは、ディスク構造を反映するよ
うに編成される。各アドレスには単一ビットが割り当て
られる。これらのビットは三次元アレイへと編成され、
シリンダ番号、回転位置及び面番号(前述の物理的要求
の構成要素)によって索引付けされる。待ち時間は主と
してシリンダ番号と回転位置とによって決定されるの
で、ビット自体はワードとして編成され、各ワードは可
能記憶場所の縦のカラムを表す。そこで割り当てテーブ
ルは次のように見える。
うに編成される。各アドレスには単一ビットが割り当て
られる。これらのビットは三次元アレイへと編成され、
シリンダ番号、回転位置及び面番号(前述の物理的要求
の構成要素)によって索引付けされる。待ち時間は主と
してシリンダ番号と回転位置とによって決定されるの
で、ビット自体はワードとして編成され、各ワードは可
能記憶場所の縦のカラムを表す。そこで割り当てテーブ
ルは次のように見える。
【0058】カラム = 32ビットの整数 free_map = カラムの(Nシリンダ×N回転)のアレ
イ これらの構造を操作するルーチンは2つのカテゴリ、す
なわちリソースの制御と検索とに分類される。リソース
制御ルーチンは「allocate」と「free()」である: *********************************************************************** allocate(address) BEGIN segment := address / segment_size cylinder := segment / segments_per_cyl rotation := mod(segment, segments_per_track) surface := mod(segment, number_of_surfaces) clearbit(free_map[cylinder][rotation], surface) END free(address) BEGIN segment := address / segment_size cylinder := segment/segments_per_cyl rotation := mod(segment, segments_per_track) surface := mod(segment, number_of_surfaces) setbit(free_map[cylinder][rotation], surface) END *********************************************************************** 「setbit()」と「clearbit()」はカラムビット記号列を
面毎に1ビットずつ維持する。
イ これらの構造を操作するルーチンは2つのカテゴリ、す
なわちリソースの制御と検索とに分類される。リソース
制御ルーチンは「allocate」と「free()」である: *********************************************************************** allocate(address) BEGIN segment := address / segment_size cylinder := segment / segments_per_cyl rotation := mod(segment, segments_per_track) surface := mod(segment, number_of_surfaces) clearbit(free_map[cylinder][rotation], surface) END free(address) BEGIN segment := address / segment_size cylinder := segment/segments_per_cyl rotation := mod(segment, segments_per_track) surface := mod(segment, number_of_surfaces) setbit(free_map[cylinder][rotation], surface) END *********************************************************************** 「setbit()」と「clearbit()」はカラムビット記号列を
面毎に1ビットずつ維持する。
【0059】更に4つの検索ルーチン、即ち「empt
y()」、「first_elem()」、「available()」、及び「s
earch_list()」がある: *********************************************************************** empty(cyl, rot) BEGIN rot := mod(rot, NROT) IF free_map[cyl]{rot] = 0 // 「=0」はfreeセグメントを含意しない THEN TRUE ELSE FALSE FI END first_elem(cyl, rot) BEGIN rot :=mod(rot, NROT) column = free_map[cyl]{rot] FOR surface = 0 TO NSURFACE - 1 DO IF bit(column, surface) THEN break FI OD surface END search_list(range, search_pos) BEGIN list := NULL rposition := search_pos.sector / sect_per_segment FOR cyl = range.first TO range.last DO insert(list, cyl) OD list END available(address) BEGIN segment := address / segment_size cylinder := segment / segments_per_cyl rotation := mod(segment, segments_per_track) surface := mod(segment, number_of_surface) bit(free_map[cylinder][rotation], surface) END *********************************************************************** 「bit()」は、ビットがセットされている場合は真に戻
り、セットされていない場合には偽に戻る。
y()」、「first_elem()」、「available()」、及び「s
earch_list()」がある: *********************************************************************** empty(cyl, rot) BEGIN rot := mod(rot, NROT) IF free_map[cyl]{rot] = 0 // 「=0」はfreeセグメントを含意しない THEN TRUE ELSE FALSE FI END first_elem(cyl, rot) BEGIN rot :=mod(rot, NROT) column = free_map[cyl]{rot] FOR surface = 0 TO NSURFACE - 1 DO IF bit(column, surface) THEN break FI OD surface END search_list(range, search_pos) BEGIN list := NULL rposition := search_pos.sector / sect_per_segment FOR cyl = range.first TO range.last DO insert(list, cyl) OD list END available(address) BEGIN segment := address / segment_size cylinder := segment / segments_per_cyl rotation := mod(segment, segments_per_track) surface := mod(segment, number_of_surface) bit(free_map[cylinder][rotation], surface) END *********************************************************************** 「bit()」は、ビットがセットされている場合は真に戻
り、セットされていない場合には偽に戻る。
【0060】 ************************************補足説明III:ディスクシャッフリング疑似コードリスト アイドル期間中、ディスクは読み出しをより効率良くす
るようにそれ自体の再編成を行う。一対一機能「opt_s
eg()」が、引数としてブロックを付与されたセグメント
用の最適記憶場所を生み、又、「opt _block()」が、
提示された記憶場所が付与された最適ブロックを生むも
のと想定すると、下記のアルゴリズムを用いてディスク
を復元することができる。このアルゴリズムは先ずブロ
ックをそれらの目標シリンダ内に移動させ、次にそれら
の最終行き先へと移動する。
るようにそれ自体の再編成を行う。一対一機能「opt_s
eg()」が、引数としてブロックを付与されたセグメント
用の最適記憶場所を生み、又、「opt _block()」が、
提示された記憶場所が付与された最適ブロックを生むも
のと想定すると、下記のアルゴリズムを用いてディスク
を復元することができる。このアルゴリズムは先ずブロ
ックをそれらの目標シリンダ内に移動させ、次にそれら
の最終行き先へと移動する。
【0061】 *********************************************************************** shuffle_disk() BEGIN request. size := segment_size request. type := READ done := FALSE WHILE NOT done //終了するまでシリンダを集める DO done := TRUE //全てのアドレス FOR request.address FROM 1 TO NBLOCK - 1 DO read_request := loge_read(request) cur_cyl := addr_to_cyl(read_request.address) target := opt_seg(request) tar_cyl := addr_to_cyl(target) //誤ったシリンダをチェック IF cur_cyl = tar_cyl THEN // 適所にあり、継続する ELIF cyl full(tar_cyl) // 行き先がない THEN done := FALSE ELSE // 新たなシリンダに移動 do_io(read_request, FALSE); cyl_shuffle_write(request, target); FI OD OD done := FALSE WHILE NOT done DO done := TRUE //全てのブロック FOR request.adress FROM 1 TO NBLOCK - 1 DO read_request := loge_read(request) target := opt_seg(request) //誤ったシリンダをチェックする IF read_request.address = target THEN // 適所にあり、継続する FI do_io(read_request, FALSE); IF available(target) THEN //正しい記憶場所に移動する target_shuffle_write(request, target); ELSE done := FALSE //このブロックは誤った記憶場所にある //デッドロックを防止するため、このブロックを移動する cyl_shuffle_write(request, target); FI OD OD END target_shuffle_write(request, address); BEGIN write_request.size := segment_size write_request.address := address phys_req := io_map(write_request) phys_req.size := segment_size old_adress := get_loge_map(address) phys_req.count := global_count do_io(phys_req, /* last = */ TRUE) global_count := global_count + 1 free(old_adress) END cyl_shuffle_write(request, target) BEGIN cyl := addr_to_cyl[target] FOR rot FROM 0 TO NROTATION - 1 DO IF NOT empty(free_map[cyl][rot]) THEN break; FI OD surface :=first_elem(column) target := phys_to_seg(cyl, surface, rot) target_shuffle_write(request, target) END *********************************************************************** 「 Opt_seg()」は、ディスクによって内部的に、又は固
定されたマッピング又はホストからダウンロードされた
マッピングを介して外部的に定義することができる。簡
単なマッピングは、ホストファイルシステムがディスク
を良好にレイアウトすることを想定し、常にシーケンシ
ャル状態を復元しようと試みる、シーケンシャルマップ
ということになる。
定されたマッピング又はホストからダウンロードされた
マッピングを介して外部的に定義することができる。簡
単なマッピングは、ホストファイルシステムがディスク
を良好にレイアウトすることを想定し、常にシーケンシ
ャル状態を復元しようと試みる、シーケンシャルマップ
ということになる。
【0062】 *********************************************************************** Opt_seg(address) BEGIN cylinder := address / logical_cyl_size surface := (address % logical_cyl_size) / track_size rot :=(address%track_size phys_to_seg(cyl, surface, rot) END *********************************************************************** 論理シリンダサイズが実際のシリンダサイズよりも小さ
い場合、これは各シリンダ内にフリーセグメントを残
し、ディスクをシーケンシャル編成する。
い場合、これは各シリンダ内にフリーセグメントを残
し、ディスクをシーケンシャル編成する。
【0063】
【発明の効果】本発明は上述のように、他の利用可能な
記憶場所のアクセス時間に比較して最短の時間でアクセ
スすることができる利用可能な記憶場所へデータパケッ
トを書き込むので、書き込み動作が最短時間で完了す
る。これにより、書き込み性能を最適化させると共に読
み出し性能を最適化させることが可能となる。
記憶場所のアクセス時間に比較して最短の時間でアクセ
スすることができる利用可能な記憶場所へデータパケッ
トを書き込むので、書き込み動作が最短時間で完了す
る。これにより、書き込み性能を最適化させると共に読
み出し性能を最適化させることが可能となる。
【図1】ホストプロセッサに接続された本発明による間
接アクセスディスク記憶装置を示す概略図である(1/
2)。
接アクセスディスク記憶装置を示す概略図である(1/
2)。
【図2】ホストプロセッサに接続された本発明による間
接アクセスディスク記憶装置を示す概略図である(2/
2)。
接アクセスディスク記憶装置を示す概略図である(2/
2)。
【図3】図1に示した間接アクセスディスク記憶装置に
おける選択された記憶場所を示す部分拡大図である。
おける選択された記憶場所を示す部分拡大図である。
【図4】図2のデータメモリに示した割り当て記録に対
応する割り当て記録データ構造を示す説明図である。
応する割り当て記録データ構造を示す説明図である。
【図5】図2のデータメモリに示した使用記録に対応す
る使用記録データ構造を示す説明図である。
る使用記録データ構造を示す説明図である。
【図6】図3に示した選択された記憶場所に記憶される
データパケットを示す説明図である。
データパケットを示す説明図である。
102 ホストプロセッサ 104 記憶媒体 106 磁気記録ヘッド 108 SCSIインタフェース 111 現在のヘッド位置 113 選択された記憶場所 114 制御バス 116 データバス 120 命令メモリ 121 データメモリ 123 1カラム群の記憶場所 124 ディスクコントローラプロセッサ 317 使用記録データ構造 337 割り当て記録データ構造 340 データパケット
Claims (1)
- 【請求項1】データを記憶させるための装置であって、
この装置が、 複数の記憶場所を有する記憶媒体と、 データパケットを記憶させるための要求に応じて、どの
記憶場所が利用可能であるかを判定し、他の利用可能な
記憶場所のアクセス時間と比較して最短時間でアクセス
できる記憶場所を利用可能記憶場所の中から選択する割
り当て手段と、 前記記憶媒体上における前記選択された記憶場所に前記
データパケットを記録する記録手段とからなることを特
徴とする、間接アクセス記憶装置。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US07/767,109 US5345575A (en) | 1991-09-26 | 1991-09-26 | Write optimized disk storage device |
| US767109 | 1996-12-04 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH05216593A true JPH05216593A (ja) | 1993-08-27 |
Family
ID=25078507
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP4257726A Pending JPH05216593A (ja) | 1991-09-26 | 1992-09-28 | 間接アクセス記憶装置 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US5345575A (ja) |
| JP (1) | JPH05216593A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH09198195A (ja) * | 1996-01-19 | 1997-07-31 | Nec Corp | データ再配置可能なディスク装置 |
| JP2013200728A (ja) * | 2012-03-26 | 2013-10-03 | Nec Engineering Ltd | ハードディスクドライブ装置データ保護システム、その方法およびそのプログラム |
Families Citing this family (32)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5664143A (en) * | 1994-11-23 | 1997-09-02 | International Business Machines Corporation | Method and apparatus for sorting disk access commands in a rotational position queue according to time differences between the commands |
| US5708793A (en) * | 1995-03-31 | 1998-01-13 | International Business Machines Corporation | Method and apparatus using address and read head location information to provide optimal operation of a disk system |
| US5719983A (en) * | 1995-12-18 | 1998-02-17 | Symbios Logic Inc. | Method and apparatus for placement of video data based on disk zones |
| JP2986089B2 (ja) * | 1995-12-25 | 1999-12-06 | インターナショナル・ビジネス・マシーンズ・コーポレイション | デイスク装置およびデイスク装置におけるヘッド切り換え方法 |
| US5805787A (en) * | 1995-12-29 | 1998-09-08 | Emc Corporation | Disk based disk cache interfacing system and method |
| US6742080B1 (en) * | 1996-09-06 | 2004-05-25 | Intel Corporation | Disk block allocation optimization methodology and application |
| US6253296B1 (en) * | 1996-09-06 | 2001-06-26 | Intel Corporation | Disk block allocation optimization methodology and applications |
| US6434663B1 (en) | 1996-09-06 | 2002-08-13 | Intel Corporation | Disk block allocation optimization methodology with accommodation for file system cluster size greater than operating system memory page size |
| US6026463A (en) * | 1997-09-10 | 2000-02-15 | Micron Electronics, Inc. | Method for improving data transfer rates for user data stored on a disk storage device |
| US6202118B1 (en) | 1997-09-10 | 2001-03-13 | Micron Technology, Inc. | Apparatus for address translation to selectively improve data transfer rates on a disk storage device |
| US6061761A (en) * | 1997-10-06 | 2000-05-09 | Emc Corporation | Method for exchanging logical volumes in a disk array storage device in response to statistical analyses and preliminary testing |
| US6088766A (en) * | 1997-10-06 | 2000-07-11 | Emc Corporation | Method for exchanging data blocks on disk storage devices utilizing disk access statistics and testing for the effect of a change |
| US6167461A (en) * | 1998-03-31 | 2000-12-26 | Texas Instruments Incorporated | Programmable high performance disk formatter for headerless disk drive controller executing a series of low level instructions generated by a high level processing engine |
| US6247024B1 (en) * | 1998-09-25 | 2001-06-12 | International Business Machines Corporation | Method and system for performing deferred file removal in a file system |
| US6636941B1 (en) | 2000-01-18 | 2003-10-21 | International Business Machines Corporation | Enhanced stable disk storage |
| US6668304B1 (en) | 2000-01-18 | 2003-12-23 | International Business Machines Corporation | Transaction support on logical disks |
| US6789162B1 (en) * | 2000-10-17 | 2004-09-07 | Sun Microsystems, Inc. | Storage controller configured to select unused regions of a storage device for data storage according to head position |
| JP4210769B2 (ja) * | 2001-11-22 | 2009-01-21 | 独立行政法人産業技術総合研究所 | Gatewayエントリークローンの作製方法 |
| US7031085B2 (en) * | 2002-01-16 | 2006-04-18 | Seagate Technology Llc | Version tracking of disk write operations |
| KR100532842B1 (ko) * | 2002-08-17 | 2005-12-05 | 삼성전자주식회사 | 하드디스크 드라이브의 공간낭비를 줄일 수 있는 영상기록/재생장치 |
| US6898685B2 (en) * | 2003-03-25 | 2005-05-24 | Emc Corporation | Ordering data writes from a local storage device to a remote storage device |
| US20040268082A1 (en) * | 2003-06-27 | 2004-12-30 | Michael Yatziv | Method and system for parcel-based data mapping |
| US7509452B2 (en) * | 2004-01-19 | 2009-03-24 | Ricoh Company, Ltd. | Image forming apparatus, erasing method, and hard disk management method |
| US7310711B2 (en) * | 2004-10-29 | 2007-12-18 | Hitachi Global Storage Technologies Netherlands B.V. | Hard disk drive with support for atomic transactions |
| US20070011288A1 (en) * | 2005-05-31 | 2007-01-11 | International Business Machines Corporation | Apparatus and method for achieving thermal management through the allocation of redundant data processing devices |
| US7590799B2 (en) * | 2005-06-16 | 2009-09-15 | Seagate Technology Llc | OSD deterministic object fragmentation optimization in a disc drive |
| WO2012163024A1 (zh) * | 2011-10-27 | 2012-12-06 | 华为技术有限公司 | 针对多步长非一致性内存访问numa架构的内存管理方法及装置 |
| US9110595B2 (en) | 2012-02-28 | 2015-08-18 | AVG Netherlands B.V. | Systems and methods for enhancing performance of software applications |
| US9652376B2 (en) * | 2013-01-28 | 2017-05-16 | Radian Memory Systems, Inc. | Cooperative flash memory control |
| US10120891B2 (en) * | 2013-02-11 | 2018-11-06 | International Business Machines Corporation | Data placement optimization |
| EP3093772B1 (en) * | 2014-02-10 | 2018-07-18 | Huawei Technologies Co., Ltd. | Data processing method, data writing method, and related apparatus |
| US9886209B2 (en) * | 2016-02-16 | 2018-02-06 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Controlling file placement on a disk drive to improve file access |
-
1991
- 1991-09-26 US US07/767,109 patent/US5345575A/en not_active Expired - Lifetime
-
1992
- 1992-09-28 JP JP4257726A patent/JPH05216593A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH09198195A (ja) * | 1996-01-19 | 1997-07-31 | Nec Corp | データ再配置可能なディスク装置 |
| JP2013200728A (ja) * | 2012-03-26 | 2013-10-03 | Nec Engineering Ltd | ハードディスクドライブ装置データ保護システム、その方法およびそのプログラム |
Also Published As
| Publication number | Publication date |
|---|---|
| US5345575A (en) | 1994-09-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH05216593A (ja) | 間接アクセス記憶装置 | |
| CN1265273C (zh) | 对数据存储介质并行读写访问的方法、数据存储驱动器以及自动数据存储库 | |
| US8756382B1 (en) | Method for file based shingled data storage utilizing multiple media types | |
| JP5000316B2 (ja) | オブジェクト・ベースのデータ記憶装置 | |
| EP0165382B1 (en) | Data processing system including a data storage unit and its method of operation | |
| US5764880A (en) | Method and system for rebuilding log-structured arrays | |
| US8069306B2 (en) | Data area managing method in information recording medium and information processor employing data area managing method | |
| US5742933A (en) | Rotary memory storage device with cache control method and apparatus | |
| US5983319A (en) | Information recording and reproduction apparatus and a method of data caching including read-ahead capability | |
| US5651132A (en) | Disk array control system | |
| JP2804115B2 (ja) | ディスクファイルシステム | |
| JPH11194899A (ja) | ディスク記憶システム及び同システムに適用するデータ更新方法 | |
| KR20020064357A (ko) | 디스크 드라이브내 버퍼 내부 및 외부 데이터 전송 관리용버퍼 관리 시스템 | |
| JPH06332623A (ja) | アレイ型記録装置及び記録装置 | |
| JPH08249134A (ja) | 冗長性パリティ記憶技法に従ってユーザ・データを書き込む方法 | |
| US7987328B2 (en) | Data archive system | |
| JPH1063578A (ja) | 情報記録再生装置 | |
| JPH06180671A (ja) | ディスクキャッシュ制御装置 | |
| US5420983A (en) | Method for merging memory blocks, fetching associated disk chunk, merging memory blocks with the disk chunk, and writing the merged data | |
| JPH06110772A (ja) | コンピュータのデータを記憶させるための直接アクセス記憶装置の割振り方法及び装置 | |
| JP2001243100A (ja) | 大容量記憶装置における区分テーブル、ファイル装置ディレクトリ構造、および個々のファイルクラスタチエンのバッファリング | |
| US20030037019A1 (en) | Data storage and retrieval apparatus and method of the same | |
| US6693754B2 (en) | Method and apparatus for a disc drive adaptive file system | |
| EP0347032A2 (en) | Record format emulation | |
| JPH07152498A (ja) | 情報処理システム |