JP4365385B2 - フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム - Google Patents

フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム Download PDF

Info

Publication number
JP4365385B2
JP4365385B2 JP2006130478A JP2006130478A JP4365385B2 JP 4365385 B2 JP4365385 B2 JP 4365385B2 JP 2006130478 A JP2006130478 A JP 2006130478A JP 2006130478 A JP2006130478 A JP 2006130478A JP 4365385 B2 JP4365385 B2 JP 4365385B2
Authority
JP
Japan
Prior art keywords
block
entry
state
data
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2006130478A
Other languages
English (en)
Other versions
JP2006209808A (ja
Inventor
ジェイ クルーガー ウィリアム
ラジャゴパラン スリラム
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.)
Microsoft Corp
Original Assignee
Microsoft 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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=25252682&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP4365385(B2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006209808A publication Critical patent/JP2006209808A/ja
Application granted granted Critical
Publication of JP4365385B2 publication Critical patent/JP4365385B2/ja
Expired - Lifetime legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1435Saving, restoring, recovering or retrying at system level using file system or storage system metadata
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9017Indexing; Data structures therefor; Storage structures using directory or table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation

Description

本発明は、一般に、ファイルをマネージするためのコンピュータシステムに係り、より詳細には、フラッシュ消去可能なプログラマブル・リードオンリメモリ(FEProm)に記憶されたファイルをマネージするための方法及びシステムに係る。
コンピュータシステムは、一般に、揮発性及び不揮発性の両方の記憶装置における情報の記憶をサポートする。揮発性記憶装置と不揮発性記憶装置の相違は、揮発性記憶装置から電源が切断されたときに情報が失われることである。これに対して、不揮発性記憶装置から電源が切断されたときには、情報が失われない。従って、不揮発性記憶装置に情報を記憶した場合には、たとえコンピュータシステムの電源が切られていても、ユーザはあるときに情報を入力しそしてその後に情報を検索することができる。又、ユーザは、不揮発性記憶装置をコンピュータから切断しそしてその記憶装置を別のコンピュータに接続して、その別のコンピュータが情報をアクセスするようにすることができる。
不揮発性記憶装置に記憶された情報は、一般に、ファイルに編成される。ファイルとは、関連情報を収集したものである。時間の経過と共に、コンピュータシステムは、記憶装置の容量にもよるが、記憶装置に何百、何千のファイルを記憶することができる。情報を記憶することに加えて、コンピュータシステムは、典型的に、ファイルの情報を読み取ったり、修正したり、削除したりすることができる。コンピュータシステムは、記憶、読み取り、修正及び削除を効率的に行えるように記憶装置にファイルを編成することが重要である。
一般にコンピュータのオペレーティングシステムの一部分であるファイルシステムは、記憶装置上のファイルを管理する助けをするために開発されたものである。1つのこのようなファイルシステムが、マイクロソフト・コーポレーションによりそのディスクオペレーティングシステム(MS−DOS)として開発されている。このファイルシステムは、ファイルを記憶するためにハイアラーキ解決策を使用している。図1は、記憶装置のディレクトリ構造体を示している。これらのディレクトリはファイルの論理グループを含む。これらのディレクトリは、引出しの折り畳み器が引き出し内にペーパを編成していくのと同様にファイルを編成する。DOS、WORD、DAVID及びMARYと示されたブロックは、ディレクトリを表しており、そしてAUTOEXEC.BAT、COMMAND.COM、FORMAT.EXE、LETTER2.DOC、LETTER.DOCと示されたブロック及びLETTER1.DOCと示された2つのファイルは、ファイルを表している。このディレクトリ構造では、ユーザが関連ファイルをそれら自身のディレクトリに入れることによりファイルを編成することができる。この例において、WORDというディレクトリは、ワードプロセッシングプログラムWORDによって発生された全てのファイルを含む。このディレクトリWORDの中には2つのサブディレクトリDAVID及びMARYがあり、これらは、WORDファイルを、Davidにより開発されたもの及びMaryにより開発されたものへと更に編成する上で助けとなるものである。
従来のファイルシステムは、不揮発性記憶装置の多数回書き込み機能の利点を取り入れている。多数回書き込み機能は、記憶装置上のいかなる情報ビットでも実質上無限の回数で1から0へそして0から1へ変更することができる。この機能では、ファイルを記憶装置に書き込みそしてファイルの幾つかのビットを変更することによりファイルを選択的に修正することができる。
ディスクのような多数回書き込み能力を有する従来の記憶装置の欠点は、その速度が内部のコンピュータメモリの速度に比して遅いことである。これに対し、そのコンピュータメモリに勝るこれら記憶装置の利点は、不揮発性であること、コストが低いこと、容量が大きいことである。
フラッシュEProm(FEProm)として知られている記憶装置は、内部コンピュータメモリの速度と、コンピュータディスクの不揮発性とが結合されたものである。この装置はEProm型(消去可能なプログラマブル・リードオンリメモリ)のデバイスである。FEPromの内容は、典型的なEPromと同様にデバイスに紫外線を照射するのではなく、入力にある電圧を印加することによって消去することができる。消去は、デバイス内の各ビットを同じ値にセットする。他のEPromと同様に、FEPromは不揮発性メモリである。FEPromは、その速度がコンピュータの内部メモリに匹敵する。最初と、消去後とに、FEPromの各ビットは1にセットされる。FEPromの特徴は、他のEPromと同様に、ビット値1を0に変更できるが、ビット値0は1に変更できないというものである。従って、データは、1から0へのビットの変更を行うようにEPromに書き込むことができる。しかしながら、いったんビットが0に変更されると、1に変更し直すことはできず、即ち全FEPromを全て1に消去しない限り1に戻すことができない。実際には、FEPromの各ビットは一度しか書き込むことができないが、次々の消去の間に何回も読み取ることができる。更に、FEPromの各ビットを消去して0にセットできるのは、ある限定された回数だけである。この限定された回数がFEPromの実効寿命を定める。
FEPromをアクセスする典型的な時間は、アクセスの形式と多数の他のファクタとによって異なる。読み取りアクセス時間は数百ナノ秒の範囲であり、バイトを読み取る回数については制限がない。書き込みアクセス時間は、典型的に数十マイクロ秒の範囲である。書き込みアクセス時間は、バイトを消去した回数と、デバイスの温度と、FEPromのバイト密度とによって左右される。バイトを書き込む回数に理論的な制限はないが、消去の制限が実際上の書き込みの制限となる。FEPromの消去時間は数秒の範囲である。消去時間は、FEPromを消去した回数、デバイスの温度、及びFEPromのバイト密度とによって左右される。
従来のファイルシステムは、記憶装置が多数回書き込み能力を有するものと仮定していたので、これらのファイルシステムは、実際上一回の書き込み能力しか持たないFEPromには不適である。従って、FEPromをベースとする記憶装置をサポートするファイルシステムをもつことが望ましい。このようなファイルシステムは、コンピュータシステムの速度と、コンピュータディスクの不揮発性とを有するものである。
コンピュータディスクのような従来の記憶装置は、バイトでアドレスできるのではなくブロックでアドレスすることができる。バイトは、コンピュータの内部メモリのアドレス能力の単位であり、即ちコンピュータは一度に1バイト(典型的に8ビット)で書き込み又は読み取りすることができるのであって、それ未満ではできない。コンピュータがディスクに書き込んだりディスクから読み取ったりするときには、ブロックと称するバイトのグループで行わねばならない。ブロックのサイズは変えられるが、典型的には2の累乗である(128、256、512等)。例えば、ディスク上の1バイトだけを変更しようとする場合に、そのブロックサイズ内の全バイト数の書き込みを行わねばならない。これには、ディスクからコンピュータメモリへブロック全体を読み取り、1バイトを変更し(内部メモリはバイトでアドレス可能である)そしてそのブロック全体をディスクに書き込むことが含まれる。
従来のファイルシステムは、ブロックに未使用の部分を残す状態でデータを記憶する。このファイルシステムは、一度に1つのファイルのみからのデータを所与のブロック内に記憶する。例えば、このファイルシステムは、1つのファイルからのデータをブロックの最初の50バイトには記憶せず、そして別のファイルからのデータを128バイトブロックの最後の78バイトには記憶しない。しかしながら、ファイルの長さがブロックサイズの偶数倍でない場合には、ブロック端のスペースが未使用となる。上記例において、ブロックの最後の78バイトは未使用となる。ディスクが4096といった大きなブロックサイズを使用するときには、4095バイトまでのデータが使用できないことになる。多数回書き込み能力を有していて数百万バイトを記憶できるようなディスクドライブではこのような未使用スペースが無視できる量であるが、多数回書き込み能力をもたず、しかも数百万バイトのデータを記憶する容量をもたない記憶装置では相当の量である。
FEPromは、典型的な記憶装置に比して、ブロックアドレス式ではなくてバイトアドレス式である。従って、FEPromのバイトアドレス能力をサポートするファイルシステムをもつことが望まれる。
又、FEPromは、ブロックで消去可能なフォーマットで編成することができる。ブロックで消去可能なFEPromは、個々に消去できる多数のブロック(典型的に16)を含んでいる。例えば、図6は、0から15まで番号が付けられた16個のブロックを有するブロック消去可能なFEProm301の概略図である。ブロックの各々は、他のブロックの内容に影響を及ぼすことなく個々に消去することができる。ブロック番号14のブロック302は、他のブロックのデータに影響を及ぼすことなく消去することができる。ブロック消去可能なFEPromをサポートするファイルシステムをもつことが所望される。
そこで、本発明の目的は、ファイル記憶装置、特に、ブロック消去可能で且つフラッシュ消去可能なプログラマブル・リードオンリメモリにデータを記憶する方法を提供することである。
本発明の別の目的は、ブロック消去可能なFEPromにおいてメモリを割り当てたり割り当て解除したりするコンピュータメモリマネージャを提供することである。
本発明の別の目的は、ブロック消去可能なFEPromにおいてブロックを消去した回数を追跡する方法を提供することである。
本発明の更に別の目的は、メモリの割り当てを容易にするデータ構造体を備えたブロック消去可能なFEPromを提供することである。
本発明の更に別の目的は、データを記憶するためのブロックを割り当てる方法を提供することである。
本発明の更に別の目的は、ブロック消去可能なFEPromにおいて割り当て解除されたスペースをリクレイミングする方法を提供することである。
本発明の更に別の目的は、ブロック消去可能なFEPromのためのファイルシステムを提供することである。
本発明の上記及び他の目的は、以下の説明から明らかとなるように、ブロック消去可能で且つフラッシュ消去可能なプログラマブル・リードオンリメモリにおいてメモリをマネージするための方法及びシステムを提供することにより達成される。このシステムは、好ましい実施例において、ブロックヘッダと、ブロック割り当てテーブルと、データ記憶エリアと、データを記憶すべきブロックを選択するためのブロック割り当てルーチンと、ブロック割り当てテーブルのエントリ及びデータ記憶エリアの一部分を選択するためのデータエリア割り当てルーチンと、データを記憶するための記憶ルーチンとを有したブロック消去可能なFEPromを具備している。又、このシステムは、好ましい実施例において、ブロック消去可能なFEPromのためのファイルシステムを実施するファイルマネージャを備えている。
好ましい実施例において、本発明は、ブロック消去可能なFEPromのメモリをマネージする方法及びシステムを提供する。このシステムは、FEPromマネージャ及びファイルシステムとして説明する。FEPromマネージャは、FEPromのメモリの割り当てと割り当て解除とを管理する。ファイルシステムは、ハイアラーキ式のディレクトリシステムであり、FEPromマネージャを用いてメモリの割り当て及び割り当て解除を行う。或いは又、FEPromマネージャ及びファイルシステムは、ある最適化を達成するように一体化することができる。しかしながら、個別のFEPromマネージャを使用することによりFEPromは異なるファイルシステムからのデータや非ファイルシステムデータも記憶することができる。
本発明のFEPromマネージャは、ブロック消去可能なFEPromにおいて自由スペースの割り当て、割り当てられたスペースの割り当て解除、及び割り当て解除されたスペースのリクレイミングを行う。図26に示す好ましい実施例では、FEPromの各ブロックが、ブロック割り当て構造体2302と、データ領域2303と、自由スペース2304とを含んでいる。ブロック割り当て構造体2302は、ヘッダ及び割り当てアレイを含んでいる。ヘッダは、ブロックの状態情報を含む固定長さの構造体である。割り当てアレイは可変長さであり、割り当てアレイのエントリはデータ領域を記述する。テーブルAは、ブロック割り当て構造体のデータ構造を示している。この構造体は、構造体変数の記述と共にCプログラミング言語フォーマットで示されている。アレイのAllocは、割り当てアレイであり、他の変数がヘッダを構成する。データ領域は、FEPromに記憶されたデータを保持する可変長さの領域である。自由スペース2304は、ブロック割り当て構造体又はデータ領域に割り当てられないスペースである。ブロック割り当て構造体2302及びデータ領域2303はブロックの両端に割り当てられる。領域が追加されるときには、ブロック割り当て構造体2302及びデータ領域が矢印2305及び2306によって示されたように互いに向かって成長する。ブロック割り当て構造体のAllocエントリは、ブロックの対応領域に対するオフセット2310−2315を含んでいる。好ましい実施例においては、ブロック割り当て構造体が、その領域に記憶されたデータに対して特定のデータを含んでいる。
テーブルA
データ構造体
struct BlockAllocation

struct

byte Status;
byte Offset[3];
word Len;
} Alloc [ ];
dword BootRecordPtr
dword EraseCount;
word BlockSeq;
word BlockSeqChecksum;
word Status;

定義
Alloc ブロック内の領域を定める可変長さアレイ構造体
Status 領域の状態
ビット#
5-2 1111 未使用
1011 中間状態
0111 自由
0011 割り当てられた
0001 割り当て解除された
0010 取って代わられた
0000 ゼロ
7-6 11 未使用エントリ
10 最終エントリ
00 非最終エントリ
Offset この領域のブロックの開始に対するオフセット
Len 領域の長さ( 単位バイト)
BootRecordPtr FEPromがファイル記憶装置として使用されるとき
に記録をブートするための処理
EraseCount ブロックを消去した回数
Blockseq FEProm内のブロックの論理シーケンス
BlockSeqChecksum ブロックシーケンス番号のチェック和
Status
ビット#
1-0 11 ブロックにないブート記録(FEProm がファイルシステム
データを含むとき)
10 ブロックのブート記録
00 取って代わられたブート記録
15-10 110000 レディ
0XXXXX QueuedForErasure
111111 消去された
111110 UpdateInProcess
111100 スペアブロック
111000 ReclaimationInProcess
000000 リアタイアされた
FEPromマネージャは、Allocエントリを追加し、自由スペース内の第1位置を指すように可変オフセットをセットし、変数Lenを領域の長さにセットし、そして割り当てられたことを指示するように変数Statusをセットすることによりブロック内のデータ領域を割り当てる。FEPromマネージャは、対応するAllocエントリにおける変数Statusを割り当て解除された状態にセットすることにより領域の割り当て解除を行う。割り当て解除されたスペースは一般に再割り当てには使用できない。というのは、非FNULL値にセットされているからである。割り当て解除されたスペースは、再割り当てされる前にFNULLにセットされる。割り当て解除されたスペースをFNULLにセットしそして割り当てに使用できるようにするプロセスは、ブロックリクレイミングである。割り当て解除されたスペースは、割り当てられた領域を第2のブロックにコピーしそして第2のブロックのAllocエントリを新たなオフセットを指すようにセットすることによりリクレイミングされる。ブロックのリクレイミングプロセスは、第2ブロックのAllocエントリがブロックヘッダに対しコピー元ブロックにあったのと同じ位置になるように確保する。FEPromマネージャは、論理ブロックシーケンス番号であるヘッダの変数BlockSeqを使用して、データの特定の論理ブロックを識別する。リクレイミング中に、ブロックがコピーされるときには、物理的なブロック番号が変化するが、論理的なブロックシーケンス番号は変化しない。
FEPromマネージャは、領域のスタートアドレスではなくて割り当てられた領域に対するハンドルを与える。このハンドルは、2つの部分、即ち(1)物理的なブロックを間接的に参照する論理ブロックシーケンス番号と、(2)物理的なブロック内の領域を間接的に参照するAllocエントリに対するインデックスとを含んでいる。ハンドルは、論理的なブロックシーケンス番号に対応する物理的なブロックを決定しそしてハンドルのインデックス部分によって指示されたAllocエントリの変数Offsetをアクセスしてその変数Offsetを物理的なブロックのスタートアドレスに加えることにより参照解除される。この参照解除により領域のアドレスが形成される。ハンドルを使用すると、FEPromマネージャは、存在するかもしれないデータ領域へのリンクを調整せずにブロックをリクレイミングすることができる。更新しなければならないものは、メモリ内にあって論理ブロックシーケンス番号を物理的なブロックに対してマップする変換キャッシュ(以下で説明する)と、Allocアレイのオフセットだけである。ハンドルが参照解除されるときには、新たなオフセットを用いて正しいアドレスが形成される。図29は、9の論理ブロックシーケンス番号2502と、3のAllocインデックス2503とを有するハンドル2501の参照解除を示している。ブロック変換キャッシュ2504は、論理的なブロック番号を物理的なブロック番号に対してマップする。FEPromマネージャはキャッシュを維持する。ある物理的なブロックがブロックのリクレイミング中に別の物理的なブロックへ移動されるときには、FEPromマネージャは、論理ブロックシーケンス番号を新たな物理的ブロックにマップするように変換キャッシュを調整する。図29の例においては、論理ブロックシーケンス番号9が物理的ブロック14 2505へとマップされる。物理的なブロック番号14に対するAllocアレイは、ハンドル2501のAllocインデックス2503によって指示される。Alloc〔3〕エントリの変数Offsetは、物理的なブロック番号14 2505に領域3 2506のオフセットを含んでいる。領域3 2506のアドレスは、物理的なブロック2505のアドレスにオフセットを追加することによって決定される。
図33は、ブロック内に新たな領域を割り当てる領域割り当てルーチンの流れ線図である。このルーチンに対する入力パラメータは、その領域に記憶すべきデータと、データの長さである。このルーチンは、割り当てられた領域にハンドルを返送する。或いは又、このルーチンはデータを書き込まず、単にスペースを割り当てる。このルーチンは、ブロックが領域に対して充分な自由スペースと、追加のAllocエントリとを有すると仮定する。図35は、Allocエントリのステータスに対する状態図である。Allocエントリは、次のステータスのうちの1つである。即ち、未使用、割り当てられた状態、割り当て解除された状態、取って代わられた状態、自由、又はゼロである。又、エントリは、割り当てが処理中である間は移行状態にある。エントリが未使用である場合には、Allocアレイの最後のエントリを通過しており、即ちアレイの一部分ではない。エントリが割り当てられた場合には、それに対応する領域が現在割り当てられる。エントリが割り当て解除される場合には、それに対応する領域が不要であるが、その領域はまだリクレイミングされていない。エントリが取って代わられる場合には、別のAllocエントリ(単数又は複数)がその同じデータ領域に対応する。リクレイミング中、取って代わられたエントリにあるデータは無視される。というのは、別のエントリ(単数又は複数)がデータ領域を指すからである。エントリが自由の場合には、それに対応する領域がリクレイミングされており、新たな領域がブロックに追加されたときにAllocエントリを再使用することが出来る。エントリがゼロの場合には、エントリへの書き込み中に問題が生じており、消去されるまで使用されない。エントリが割り当てにおいてプロセス移行状態にある場合には、エントリにおけるデータの若干は有効であるが必ずしも全部ではない。
図35を参照すれば、全てのエントリは最初は未使用状態3101にあり、ブロックが消去されたときに未使用状態3101へ移行する。エントリは、未使用状態3101から割り当て進行状態3104を経て割り当て状態3103へ移行する。自由状態3102にあるエントリは割り当て状態3103へ移行する。未使用状態3101にあるエントリは、そのエントリが割り当て解除されるか又は取って代わられて、リクレイミングされるべきブロック内の最後に割り当てられたエントリの後に探索されないときに、ブロックリクレイミングによって自由状態3102へ移行する。割り当てられた状態3103にあるエントリは、対応する領域が割り当て解除されたときに割り当て解除状態3105に移行する。割り当てられた状態3105にあるエントリは、同じ領域に対応する別の1つ又は複数のエントリが割り当てられたときに、取って代わられた状態3106へ移行する。最後に、いかなる状態にあるエントリも、そのエントリに対する書き込みエラーの際にはゼロ状態3107へ移行する。
図33を参照すれば、ブロック2901において、システムはAllocエントリが自由の状態にあるかどうかを判断する。このようなエントリが見つかった場合には、システムはそのエントリを再使用し、ブロック2902へ続くが、さもなくば、ブロック2903へ続く。ブロック2902において、システムは自由のAllocエントリを選択し、ブロック2905へ続く。ブロック2903において、システムは新たなAllocエントリを選択し、ブロック2904へ続く。新たなAllocエントリは、最終とマークされたエントリの直後のエントリである。ブロック2904において、システムは、選択されたAllocエントリに対して変数Statusをセットし、割り当てが進行中であることを指示する。割り当て進行中状態は、データが一貫した状態にないかもしれないことを指示する移行状態である。ブロック2905において、システムは変数Offset及びLenをセットし、自由スペースの第1位置から始まってデータ領域にデータを書き込む。ブロック2906において、Allocエントリが新規であった場合には、システムはブロック2907へ続くが、さもなくば、システムはブロック2908へ続く。ブロック2907において、システムは手前の最終Allocエントリのステータスをリセットし、もはやAlloc構造体の最終エントリでないことを指示する。ブロック2908において、システムは、選択されたAllocエントリに対する変数Statusを割り当てられた状態にセットし、データが今や一貫した状態にあることを指示する。次いで、システムは割り当てを終了する。
上記したように、FEPromのブロックの性能は、消去カウントが増加するにつれて低下する。各ブロックの消去カウントをほぼ等しく(均等化したと称する)維持することが好ましい。通常の動作においては、消去カウントが均等化されない。例えば、実行可能なファイルがブロックに書き込まれた場合には、そのブロックを消去する必要は決して生じない。従って、そのブロックの消去カウントは、他のブロックの消去カウントが増加しても一定のままである。好ましい実施例ではブロックの消去カウントを均等化するために多数の解決策を使用する。まず、ブートアップ中又はFEPromがロードされるときに(初期化)、FEPromマネージャはブロックを走査して、FEPromをマネージするデータを得る。好ましい実施例では、このデータが各ブロックの消去カウントを含んでいる。消去カウントの均等化を助けるために、FEPromマネージャは、消去カウントの大きいブロックのデータと、消去カウントの低いブロックのデータをスワッピングする。このスワッピングは時間がかかるので、初期化中に生じるスワッピングの回数を最小にすることが望ましい。更に、スワッピングは、消去カウントの差がスレッシュホールド値又は比を越えたときだけ実行すればよい。第2に、FEPromマネージャがブロックに対してリクレイミングを実行するときには、消去カウントの小さい使用可能なブロックを選択するのが好ましい。第3に、FEPromマネージャが領域を割り当てるときには、消去カウントの低いブロックの領域を割り当てる。第4に、FEPromマネージャはブロックの消去回数を追跡する。消去の回数がスレッシュホールド値を越えた場合には、FEPromマネージャは、2つのブロックに対する消去カウントの差がスレッシュホールド値又は比を越えたかどうかを決定する。そのスレッシュホールド値を越えた場合には、マネージャはそれらブロックのデータをスワッピングする。
FEPromマネージャは、各物理的なブロックのヘッダに消去カウントを維持するのが好ましい。ブロックが消去されたときには、FEPromマネージャは、増加された消去カウントをブロックヘッダに書き込んで戻す。ブロックがコピーされたときには、消去カウントが転送されない。各ブロックはそれ自身の消去カウントを保持する。或いは又、消去カウントは単一のブロックに記憶することができる。しかしながら、この別の方法は、好ましい方法以上に幾つかの欠点がある。第1に、単一のブロックに欠陥が生じると、全ての消去カウントが失われる。第2に、ブロックが消去されると、消去カウントブロックを更新しなければならない。最終的に、消去カウントブロックは消去され、再書き込みされねばならない。
図32は、ブロック消去可能なFEPromのどのブロックを使用して領域を割り当てるかを選択するブロック割り当てルーチンの流れ線図である。FEPromマネージャは、多数のファクタに基づいてどのブロックを割り当てるかを決定する。まず、FEPromマネージャは、消去カウントが最も低い充分な自由スペースを有するブロックを割り当てる。消去カウントの低いブロックを割り当てることは、ブロックの均等化を確保する上で助けとなる。第2に、FEPromマネージャは、充分な自由スペースをもつブロックがない場合には多数のブロックを割り当てる。データは、異なるブロックに各々記憶された多数の領域に分割される。第3に、FEPromマネージャは、あまりに多数の部分が生じるときには割り当てを許さない。このルーチンに対する入力パラメータは、割り当てられるべき領域の長さと、領域を多数のブロックに記憶できるかどうかである。ブロック2801において、システムは、データを記憶するに充分な自由スペースを有する全てのブロックを選択する。好ましい実施例において、システムは、自由スペースの開始位置とAllocエントリの数とに基づいて自由スペースの長さを決定する。このデータは、初期化中及び必要に応じて更新される間にFEPromマネージャバッファに記憶されるのが好ましい。又、システムは、もし必要ならば、新たなAllocエントリを追加するに充分なスペースが存在するよう確保する。1つの実施例において、システムは、ブロックが充分な自由スペースを有しているかどうかを決定する前に、リクレイミング基準に合致するブロックに対してブロックリクレイミングを実行する。別の実施例においては、充分な自由スペースがないと決定されるまでリクレイミングは行われない。ブロック2802においては、少なくとも1つのブロックが選択された場合に、領域を保持するに充分な自由スペースが単一ブロックにあり、システムはブロック2803に続き、さもなくば、システムはブロック2804に続く。ブロック2803において、システムは、選択されたブロックのどれが最も低い消去カウントを有するかを決定し、そのブロックを割り当てると共に、システムはブロックの割り当てを終了する。ブロック2804においては、システムは、領域データを保持するに充分な自由スペースを有する1組のブロックを選択する。ブロック2805においては、全自由スペースと割り当て解除されたスペースがデータを保持するに充分でないか或いはあまりに多数の部分がある場合に、システムはブロック2807へ続き、さもなくば、システムはブロック2806へ続く。領域データを単一ブロックに記憶しなければならない場合には、2つのブロックを選択すると、部分が多数になり過ぎる。又、データを多数のブロックに記憶すべき場合には、リクレイミングが適当である。ブロック2806において、システムは選択されたブロックを割り当て、ブロックの割り当てが終了する。ブロック2807において、全てのブロックがリクレイミングされた場合には、FEPromにはデータを記憶するに充分な余裕がなく、ブロックの割り当てが終了するか、さもなくば、システムはブロック2808へ続く。ブロック2808において、システムはブロックをリクレイミングし、ブロック2801へ進んで、新たな充分な自由スペースがあるかどうかを決定する。
図34は、ブロック内の割り当て解除された領域をリクレイミングするブロックリクレイミングルーチンの流れ線図である。入力パラメータは、リクレイミングされるべきブロックの数と、スペアブロックの物理的な番号とである。ブロックは、多数の種々の時間にリクレイミングされる。第1に、割り当て要求を満たす充分な自由スペースがないときには、ブロックがリクレイミングされる(上記したように)。第2に、FEPromマネージャは、FEPromへの書き込みアクセスの回数を追跡することができる。書き込み回数がスレッシュホールド数を越えた場合には、マネージャがいずれかのブロックをリクレイミングすべきかどうかを決定する。割り当て解除されたスペースとブロックサイズとの比がスレッシュホールド値を越えたときにはブロックをリクレイミングしなければならない。当業者に明らかなように、例えば、FEPromが最初にロードされるときのような別の時間にブロックリクレイミングを行うこともできる。FEPromマネージャは、割り当てられた領域をスペアブロック、即ち消去されたブロックへコピーすることによりブロックをリクレイミングする。割り当てられた領域のみをコピーすることにより、割り当て解除された領域がリクレイミングされる。或いは又、FEPromマネージャは、割り当てられた領域を非FEPromメモリへコピーし、次いで、ブロックを消去し、そして領域をブロックへコピーして戻す。しかしながら、この方法は、割り当てられた領域を記憶するに充分な非FEPromメモリを必要とし、消去の後であって且つブロックが再書き込みされる前に停電が生じたとすれば、データを失うおそれがある。好ましい方法においては、FEPromマネージャは、リクレイミングされるべきブロック内の割り当てられた領域をスペアブロックへコピーすると共に、そのスペアブロック内の新たな領域位置を表す変数Offsetを調整するブロック割り当て構造体をコピーする。図27は、領域1及び5をリクレイミングした後の図26のブロックレイアウトの例を示している。割り当てられた領域は隣接するようにコピーされている。対応するAllocエントリは、新たな領域位置を指すように更新される。たとえ領域1がリクレイミングされていてもAlloc〔1〕エントリは依然として必要とされる。ハンドルを使用するために、全てのAllocエントリはブロック割り当て構造体においてそれらの同じ位置を維持しなければならない。しかしながら、Alloc〔1〕エントリに対する変数Statusは自由状態にセットされ、これを用いて、リクレイミングされたブロックに追加される次の位置を指すことができる。Alloc〔5〕エントリの後にはAlloc入力はないので、ハンドルに対するプレースホルダーとして必要とされず、除去されている。Alloc〔4〕エントリの位置状態は、それがAllocアレイにおける最終エントリであることを指示する。
図36はブロックの状態を示す状態図である。ブロックの状態は変数Statusのヘッダに記憶される。ブロックの状態は、消去3201、更新進行中3202、スペア3203、リクレイミング進行中3204、レディ3205、消去のための待ち行列3206、及びリタイア3207である。新たに消去されたブロックは消去状態3201である。消去されたブロックは、通常、更新進行状態3202へ移行され、次いで、スペア状態3203へ移行される。更新進行状態3202は、ヘッダ内のあるデータ、例えば消去カウントが更新されていることを指示する。この更新が完了すると、ブロックはスペアの状態3203へ移行する。更新が失敗すると、ブロックは消去のための待ち行列状態3206へ移行する。スペア状態3203のブロックは、そのブロックがリクレイミングされているブロックからデータを受け取るべきときに、リクレイミング進行状態3204へ移行する。リクレイミング進行状態3204は、ブロック割り当て構造体が一貫した状態にないことを指示する移行状態である。データが一貫したものになると、ブロックはレディ状態3205へ移行する。しかしながら、リクレイミング進行状態3205の間にエラーが生じた場合には、そのブロックに対してリクレイミングが行われた後に、ブロックが消去待ち行列状態3206へ移行する。消去待ち行列状態3206にあるブロックは、消去されたときに消去状態3201へ移行する。消去が失敗すると、ブロックはリタイア状態3207へ移行する。それからブロックはリタイア状態に留まる。FEPromが最初に初期化されるときには、ブロックがレディ状態又はスペア状態にセットされる。レディ状態にあるブロックはデータを含むことができ、スペア状態にあるブロックはデータを含まない。
図34を参照すれば、ブロック3001において、システムは、リクレイミングされるべきスペアブロックに対する変数Statusを、リクレイミング進行中を指示するようにセットする。ブロック3002において、システムは、リクレイミングされるべきブロックのヘッダから変数Seq、SeqCheckSum、及びBootRecordPtrをスペアブロックへコピーする。ブロック3003において、システムは、リクレイミングされるべきブロックに対して割り当て状態にある最終Allocエントリの位置を決定する。リクレイミングプロセス中に、Allocエントリは、最後に割り当てられたエントリの後に無視される。従って、リクレイミングされたブロックは、これらエントリの状態を未使用にセットする。ブロック3004ないし3010において、システムは、最後に割り当てられたエントリまでの各Allocエントリをスペアブロックにコピーする。ブロック3004において、システムは、Allocエントリを指示するインデックスjを初期化する。ブロック3005において、このインデックスjがブロック3003で決定された最後に割り当てられたエントリのインデックスより大きい場合には、全てのAllocエントリとそれに対応する領域がコピーされており、システムはブロック3011へ続き、さもなくば、システムはブロック3006へ続く。ブロック3006において、エントリの状態が割り当てられた状態である場合には、システムはブロック3007へ続き、さもなくばブロック3009へ続く。ブロック3007において、システムは、Alloc〔j〕エントリに対応する領域データをスペアブロックへコピーする。ブロック3008において、システムは、スペアブロックのAlloc〔j〕入力における変数Offsetを更新し、コピーされた領域の位置を指示するようにすると共に、変数Status(位置の状態を適当にセットする)及びLenをコピーし、ブロック3010に続く。ブロック3009では、システムは、スペアブロックのAlloc〔j〕エントリの状態を更新し、そのエントリが自由状態であることを指示するようにする。ブロック3010では、システムはインデックスjを増加して、次のAllocエントリを指示し、ブロック3005へとループする。ブロック3011においては、システムはスペアブロックの状態をレディにセットする。ブロック3012では、システムは、リクレイミングされるべきブロックの状態を消去のための待ち行列にセットする。ブロック3011についての処理が完了した後であって且つブロック3012についての処理が完了する前に、スペアブロックと、リクレイミングされるべきブロックの両方は有効データを有している。ブロック3012についての処理が完了する前に処理が中断した場合には、FEPromは、同じ論理シーケンス番号を有する2つのブロックを含む。システムは、好ましくは、FEPromの初期化中にこの状態をチェックする。このときに、システムはブロック3012の処理を完了することができる。ブロック3013では、システムは、スペアブロック(以下で述べる)の状態を表すように変数PhysicalBlockNum、FirstFreeByteOffset、LenDeallocateSpace及びAllocStructCnt in BlockData〔Seq〕を更新する。ブロック3014では、システムは、スペアブロックのリストを調整するようにDriveRecを更新し、リクレイミングが終了となる(以下で述べる)。
表 B
データ構造
struct DriveRec
{ word BlockCnt
word SpareBlockCnt
dword BlockSize
word RootDirPtr
word SpareBlockPtr 〔 〕

struct ConfigRec

word WriteAccessCntThreshold
word EraseCntThreshold
word BlockReclamationThreshold
word BlockEraseLevelingThreshold

struct BlockRec

byte Flags
word PhysicalBlockNum
dword FirstFreeByteOffset
dword LenDeallocatedSpace
word AllocStructCnt
dword BlockEraseCnt
word FirstUseableAllocEntry
word FreeAllocEntryCnt
} BlockData 〔 〕
定義
BlockCnt FEProm内の物理ブロックの数
BlockSize ブロック内のバイトの数
RootDirPtr FEPromをファイル記憶装置として使用した時のルート
ディレクトリを含むデータ領域へのハンドル
SpareBlockPtr 〔 〕 予備ブロックの物理ブロックの数を含む可変長アレイ
SpareBlockCnt 予備ブロックの数
WriteAccessCntThreshold ブロックを再利用すべきか否かをシステムに決定させる
FEProm への書込みの数
EraseCntThreshold ブロックレベル化を行うべきか否かをシステムに決定
させる FEProm への消去の数
BlockReclamationThreshold ブロック再利用をトリガする割当て解除スペースと
ブロックサイズとの比
BlockEraseLevelingThreshold ブロック間のレベル化プロセスをトリガする最小及び
最大消去数間の差
PhysicalBlockNum 論理的ブロックを含む物理ブロックの数
FirstFreeByteOffset 空きスペースの最初のバイトの物理ブロック内の
オフセット
LenDeallocatedSpace 物理ブロック内の割当て解除済領域の合計の長さ
FirstUseableAllocEntry ブロック内の最初の使用可能な Allocエントリ索引
FreeAllocEntryCnt Alloc エントリの数
BlockEraseCnt 物理ブロックが消去された回数
FEPromが最初にロードされる時、FEProm管理者は FEProm を走査して表Bに示す内部データを初期化する。構造 DriveRec は装置に関するデータを含み、構造ConfigRec は構成パラメタに関するデータを含み、アレイ BlockDataは FEProm 内の各物理ブロック毎のデータを有するエントリを含む。アレイ BlockDataはブロック変換キャッシュである。初期化中、 FEProm 管理者はアレイ BlockData内の各変数及び構造 DriveRec 内の予備ブロックに関する変数を初期化する。構造DriveRec内の他の変数はシステム定義された変数である。好ましい実施例では、FEProm管理者は、これらのデータ構造内の領域データの型に特定の情報を記憶している。例えばもし FEProm がファイル記憶装置として使用されていれば、データ構造はルートディレクトリへのハンドルを含むことができる。図31は、好ましい実施例における初期化プロセスの流れ図である。この手順は、 FEProm 上の各ブロック毎にブロック割当て構造を走査することによって DriveRec 及び BlockData構造を初期化する。システムはブロック2701乃至2709をループして各ブロック毎のデータを読む。ブロック2701ではシステムは、現在アクセスされている物理ブロックを指示する索引iを初期化する。ブロック2702において、もし索引iが FEProm 内のブロックの数より大きければ、全てのブロックは走査されたのでありシステムはブロック2710へ進み、そうでない場合にはシステムはブロック2703へ進む。ブロック2703では、システムは索引iによって指示されたブロックの見出しを読む。ブロック2704では、システムは DriveRec 及び BlockData〔i〕データを更新する。もしそのブロックが予備ブロックであれば、システムは SpareBlockCntをインクリメントさせ、そのブロックを SpareBlockPtrアレイに追加する。好ましい実施例では、システムはこれらの領域内に記憶されているデータに特定の情報をも走査する。例えばもし FEProm をファイルシステムとして使用していて、そのブロックがブートレコードを含んでいれば、システムは BootRecPtr をセットし、ブートレコードを読み、そして RootDirPtr をセットする。
システムはブロック2705乃至2708をループして各 Allocエントリ内のデータを処理する。ブロック2705では、 Allocエントリを指示する指標jを初期化する。ブロック2706において、もしシステムが最後のAlloc エントリを処理済であればシステムはブロック2709へ進み、そうでなければシステムはブロック2707へ進む。ブロック2707では、システムはjによって指示された Allocエントリに基づいて BlockData〔 BlockSeq 〕データを更新する。システムは変数 FirstFreeByteOffset、LenDeallocatedSpace 、及び AllocaStructCntを更新する。システムは、変換キャッシュを初期化する索引iに変数 PhysicalBlockNum をセットする。ブロック2708では、システムは索引jをインクリメントさせて次の Allocエントリを指示させ、ブロック2706へループする。ブロック2710では、システムはブロック使用をレベル化する。システムは BlockDataアレイを走査して最大 BlockEraseCntを有するブロック及び最小 BlockEraseCntを有するブロックを決定する。次いでシステムはブロック間でデータをスワップ(交換)する。システムは先ず最大ブロックを予備ブロックへ複写する。次にシステムは最大ブロックを消去する。システムは最小ブロックからのデータを消去されたブロックへ複写し、そして好ましくは複写しながらブロック再利用を遂行する。システムは最小ブロックを消去し、予備ブロックからのデータを最小ブロックへ複写し、そして好ましくは複写中にブロック再利用を遂行する。
本発明の FEProm 管理者はブロック化されていない、または消去することができない媒体を支援することができる。ブロック再利用及びブロック消去カウントレベル化プロセスはブロック消去可能性に頼っている。従ってもし媒体がブロック消去可能性を支援しなければ、これらのプロセスを不能にすべきである。好ましい実施例では、予備ブロックカウントを0にセットすることによってこれらのプロセスを実効的に不能にすることができる。 FEProm 管理者ははこれらのプロセスを作動させるために少なくとも1つの予備ブロックに頼っている。もし媒体がブロック化されていなければ、任意のブロックサイズを論理的ブロックとして選択することができる。好ましい実施例ではブロックのサイズは、割当てアレイエントリ内のオフセットが全ブロックをアドレスできない程大きくすべきではなく、またブロック見出し及び割当てアレイがブロックサイズのかなりなパーセントを占めたり、または変換キャッシュが大き過ぎる程は小さくすべきでない。
FEProm 管理者は、 FEProm 書込み及び消去エラーからの動的な回復を可能にする。書込みエラーは、メモリ位置を指定された値にセットできない場合に生成される。これらのエラーは、ハードウエアの障害によって、または既に0に変化しているあるビット内に1を要求するというように、あるメモリ位置にある値を書込もうと試みることによってもたらされる。
書込みエラーはデータ領域、ブロック見出し、及び割当てアレイエントリへ書込む時に発生し得る。好ましい実施例では、データ領域へ書込み中に書込みエラーが発生すると、 FEProm 管理者はそのブロックを割当て解除された状態にセットする。次いで FEProm 管理者は、図33に示す領域割当てプロセスを再始動させることによって、データを異なるデータ領域へ書込むことを試みる。
割当てアレイエントリへ書込み中に書込みエラーが発生すると、 FEProm 管理者はその割当てアレイエントリを空白(ヌル)状態にセットする。あるエントリを置換された( superseded )状態、割当て解除された状態、解放された(フリー)状態、または割当て進行中状態にセットしている時に、もし書込みエラーが発生すると、そのエントリを空白状態にセットすることによって FEProm は一貫した( consistent )状態に保たれる。しかしながら、もしあるエントリを割当て済状態にセットしている時にエラーが発生すると、データ領域は割当て済状態の対応割当てアレイエントリを有していないのであるから、 FEProm は非一貫状態になる。 FEProm 管理者はそのデータ領域に対して別のエントリを割当てる。あるエントリを空白状態にセットしている時にもエラーは発生し得る。空白状態は、0の値のステータスとして定義されているから、あるエントリを空白状態にセットしている時に発生するエラーは必然的にハードウエアエラーである。もしエラーが発生すれば、対応する領域を再利用しなければならないことを指定する再利用を必要とするかも知れない。例えば、もしあるエントリを割当て解除状態にセット中に、及び再びそのエントリを空白状態にセット中にエラーが発生すれば、そのエントリは割当て済状態になる。もしこの状態のままであれば、このエントリ及び対応データ領域は正常の再利用の下では決して再利用されなくなる。
ブロック見出しに書込み中にエラーが発生すると、 FEProm 管理者はそのブロックを消去待ち行列状態にセットする。もしあるブロックを消去待ち行列状態にセット中にエラーが発生すれば、 FEProm 管理者はそのブロックを引退( retired)状態にセットするので、そのエラーを回復することはできなくなる。
あるブロックを消去中に書込みエラーが発生すると、 FEProm 管理者はそのブロックを引退状態にセットする。もし引退させたブロックが予備ブロックであったならば、 FEProm 管理者は少なくなった予備ブロックで動作する。代替としてFEProm管理者は割当て済の割当てアレイエントリを用いずにブロックを探知することを試みる。次いで FEProm 管理者は探知したブロックを消去し、それを予備状態にセットする。予備ブロックが使用できない場合には FEProm 管理者は FEProm を、あたかもそれが前述した消去不能であるかのように取扱う。
本発明は、 FEProm が非一貫状態にある場合の動的エラー回復をも提供する。図33を参照する。例えば、もしブロック2905においてオフセットが書込まれた後に、しかしブロック2908において状態が解放状態から割当て済状態へ更新される前に FEProm が除去されれば、 FEProm は非一貫状態になる。FEPromに次にロードする時に、 FEProm 管理者は割当てエントリが解放されていることを見て、それを再使用しようとする。しかしながら、オフセットへ書込もうとする試みは失敗する(同一データがオフセットへ書込まれている場合を除く)。上述したように、 FEProm 管理者はエントリを空白状態にセットすることによって回復し、領域割当てプロセスを再始動させて異なるエントリを選択する。もしFEPromが取外される前にデータの一部分がデータ領域へ書こまれれば、 FEProm 管理者がデータをその領域へ書込もうとする時にエラーが検出される。このエラーは上述したようにして処理される。
ファイルシステム
本発明は、 FEProm 装置に対してディレクトリをベースとする階層ファイルシステムを提供する。階層ファイルシステムは論理的グルーピング内にファイルを記憶させる。好ましい実施例は、ディレクトリ階層及び内部ファイル記憶の両者を実現するためにリンクされたリストデータ構造を使用する。
図1に典型的な階層ディレクトリ構造を示す。ワシントン州レッドモンドのマイクロソフト社から入手できる MS-DOS オペレーティングシステムが、階層ディレクトリ構造を有するファイルシステムを実現する。図1に示すように、ディレクトリ「ルート」100は、2つのサブディレクトリ(「 DOS」102及び「ワード」103)と、2つのファイル(「 AUTOEXEC.BAT 」104及び「 COMMAND.COM」105)とを含む。ディレクトリ「 DOS」102は1つのファイル(「 FORMAT.EXE 」106)を含む。ディレクトリ「ワード」103は次に低いレベルに2つのサブディレクトリ(「デービッド(DAVID) 」107及び「メリー(MARY) 」108)を含む。ディレクトリ「デービッド」107は1つのファイル「 LETTER1.DOC」109を含む。ディレクトリ「メリー」108は3つのファイル「LETTER1.DOC 」110、「LETTER2.DOC 」111及び「LETTER3.DOC 」112を含む。
図2は、好ましい実施例において図1のディレクトリ構造を実現する考え得るリンクされたリストを示す。ディレクトリ「ルート」レコード100(本明細書においては「レコード」及び「エントリ」という語を互換可能なように使用する)はポインタ120を有し、このポインタ120は次に低いレベルのサブディレクトリのリンクされたリスト140及びファイルレコードを指し示す。リンクされたリスト140は、ポインタ121、122、123によってリンクされたサブディレクトリレコード DOS102及び「ワード」103と、ファイルレコード「 AUTOEXEC.BAT 」104及び「 COMMAND.COM」105とからなる。サブディレクトリレコード「 DOS」102は次に低いレベルのファイルレコード106を指し示すポインタ124を有し、サブディレクトリレコード「ワード」103は次に低いレベルのファイルレコードのリンクされたリスト141を指し示すポインタ125を有している。リンクされたリスト141は、ポインタ126によってリンクされているディレクトリレコード「デービッド」107及び「メリー」108からなる。サブディレクトリレコード「デービッド」107は次に低いレベルのファイルを指し示すポインタ127を有し、サブディレクトリレコード「メリー」108は次に低いレベルのファイルレコードのリンクされたリスト142を指し示すポインタ128を有している。リンクされたリスト142は、ポインタ129及び130によってリンクされているファイルレコード「 LETTER1.DOC」110、「LETTER2.DOC 」111及び「LETTER3.DOC 」112からなる。右上のテンプレート10は図面を通して使用されるレコードレイアウトを示す。好ましい実施例では図2に示すレコードは、以下に説明するように DirEntry 及び FileEntry構造である。
図2は、図1を表す単に1つの考え得るリンクされたリスト配列を表すに過ぎない。この配列は、もしファイルが追加されたが次いで削除されたか、またはディレクトリ名が変更されていれば異なる配列になる。図3は別の考え得る配列を示す。図3は、図1と同一のディレクトリ階層を表しているが、一時期存在したディレクトリ「ビル(BILL)」113は削除されている。 FEProm 装置は一回限り書込み可能である(消去された場合を除く)から、本発明の好ましい実施例では図3に示すように、ディレクトリレコード「ビル」113をリンクされたリストから物理的に除去しない。ディレクトリまたはファイルは、ディレクトリまたはファイルエントリのステータスをセットすることによってリンクされたリストから削除される。もしディレクトリまたはファイルがコンピュータディスク上に記憶されていたのであれば、ディレクトリレコード「ビル」113は、ディレクトリレコード「メリー」108を指し示しているポインタ131をディレクトリレコード「デービッド」107内に再書込みすることによって物理的に除去することができる。
好ましい実施例は、あるファイルを構成する範囲( extent )をリンクするためにもリンクされたリストデータ構造を使用する。各ファイルはそれに対応付けられたファイルレコードを有し、このファイルレコードは他のデータと共にファイル名を含み、また上述したようにディレクトリ階層内にリンクされている。ある範囲は、そのファイルに関するデータを含むメモリの連続域である。各ファイルは、ファイルデータを含む1またはそれ以上の範囲である。各範囲はそれに対応付けられた範囲レコードを有している。範囲レコードは、他のデータと共にその範囲を指し示すポインタと範囲の長さとを含む。図4はファイル“\A \D.DAT ”202の範囲を示す。範囲レコードR1 203、R2 204及びR3 205はリンクされ、対応範囲E1 211、E2 212及びE3 213を指し示すポインタを含んでいる。ファイルは範囲E1 211、E2 212及びE3 213の論理的連結である。好ましい実施例では、範囲レコードは後述するように FileInfo 構造である。
図4は、ファイル“\A \D.DAT ”202のための単なる1つの考え得るリンクされたリスト配列を表すに過ぎない。図5に同一ファイルを表す別の配列を示す。範囲E4 214はファイルに追加されたが、削除されている。好ましい実施例では範囲レコードR4 206は、ファイルを構成する範囲のリンクされたリストから物理的に除去されていない。そうではなく、レコードの削除を指示するようにレコードのステータスをセットすることによって範囲レコードR4 206は論理的に除去されているのである。
表C及びDは、本発明の好ましい実施例に使用される幾つかのデータ構造を含んでいる。表Cに示されているデータ構造は BootRecord である。 BootRecord は、以下に説明するように、ファイルシステムの識別に関するある一般的な情報、 FEProm をアクセスすることができるファイルシステムのバージョン番号、ルートディレクトリを指し示すポインタ、及び付加的なデータを含む。表Dに示す第1及び第2の構造は、 DirEntry 構造及び FileEntry構造である。これらの構造の1つが各ディレクトリ及びファイル毎に割当てられる。これらの構造は同一である。変数 SiblingPtr はディレクトリ階層の同一レベルの DirEntry 構造及びFileEntry 構造のリンクされたリスト内の次の同胞を指し示す。変数 PrimaryPtr 及び SecondaryPtr は以下に詳述する。第3の構造は、 FileInfo 構造である。各ファイル範囲は関連 FileInfo 構造を有している。変数 PrimaryPtr はファイルの FileInfo 構造を指し示す。
表 C
データ構造
struct BootRecord
{ word Signature;
dword SerialNumber;
word FFSWriteVersion;
word FFSReadVersion;
word TotalBlockCount;
word SpareBlockCount;
dword BlockLen;
dword RootDirectoryPtr;
word Status;
byte VolumeLabelLen;
word BootCodeLen;
byte VolumeLabel 〔 〕;
byte BootCode〔 〕;

定義
Signature 媒体がこのファイルシステムを支援することを指示する値
SerialNumber VolumeLabel との組合せは特定 FEProm の独特な識別子である
FFSWriteVersion このボリュームへ書込むために要求されるファイルシステムの
高バイトにおけるバージョン番号及び低バイトにおける改定番号
FFSReadVersion このボリュームを読出すために要求されるファイルシステムの
最早バージョンの高バイトにおけるバージョン番号及び低バイト
における改定番号
TotalBlockCount FEProm内の予備ブロックを含むブロックの合計数
SpareBlockCount ブロック再利用及びエラー回復に使用可能なブロックの数
BlockLen バイトで表したブロックの長さ
RootDirectoryPtr ルートディレクトリを指し示すポインタ
Status ファイル名フォーマットを指定するデータ
VolumeLabelLen ボリュームラベル内の文字の数
BootCodeLen ブートコードアレイ内のバイトの数。もし0ならば媒体は
ブート不能
VolumeLabel 〔 〕 ボリュームラベル
BootCode〔 〕 オペレーティングシステムに関するブートコード
表 D
データ構造
struct DirEntry

word Status;
dword SiblingPtr;
dword PrimaryPtr;
dword SecondaryPtr;
byte Attributes;
word Time;
word Date;
byte NameLen;
byte Name〔8〕;
byte Ext 〔3〕;

struct FileEntry

word Status;
dword SiblingPtr;
dword PrimaryPtr;
dword SecondaryPtr;
byte Attributes;
word Time;
word Date;
byte NameLen;
byte Name〔8〕;
byte Ext 〔3〕;

struct FileInfo

word Status;
dword ExtentPtr;
dword PrimaryPtr;
dword SecondaryPtr;
byte Attributes;
word Time;
word Date;
word ExtentLen;
word UncomprssedExtentLen;

定義
Name ディレクトリ/ファイル名
Ext ファイル拡張
Status
bit #
0 1:レコードはディレクトリ構造内に存在(存在)
0:レコードはディレクトリ構造から削除済(削除済)
1 1:レコードは現属性、日付、及び時間データを含む
( ATDRecent )
0:レコードは置換されたデータを含むか、またはデータを
含まない( ATDSuperseded )
3 - 2 11:未定義
10:FileInfo
01:FileEntry
00:DirEntry
4 1: PrimaryPtr は有効ではない
0: PrimaryPtr は有効 ( PrimaryPtrValid )
5 1: SecondaryPtr は有効ではない
0: SecondaryPtr は有効 ( SecondaryPtrValid )
6 1: SiblingPtr/ExtentPtr は有効ではない
0: SiblingPtr/ExtentPtr は有効
( SiblingPtrValid/ExtentPtrValid )
DirEntry
15 - 7 保留
FileEntry
7 1:ファイルは圧縮されていない
0:ファイルは圧縮されている
15 - 8 圧縮アルゴリズムの識別
FileInfo
7 1:ファイルは圧縮されていない
0:ファイルは圧縮されている
8 1:範囲は圧縮されたブロックの最初のセグメントを含まない
0:範囲は圧縮されたブロックの最初のセグメントを含む
9 1:範囲は圧縮されたブロックの最後のセグメントを含まない
0:範囲は圧縮されたブロックの最後のセグメントを含む
15 - 10 保留
SiblingPtr 同胞連鎖内の次の DirEntry または FileEntryを指すポインタ
ExtentPtr FileInfoEntry に対応付けられた範囲を指すポインタ
PrimaryPtr DirEntry:ディレクトリ階層内の次に低いレベルの最初の
DirEntry または FileEntryを指す
FileEntry :ファイルに対応付けられた FileInfo エントリの
リンクされたリストを指す
FileInfo:ファイルのための次の FileInfo エントリを指す
SecondaryPtr DirEntry:ディレクトリのための次の DirEntry エントリを指す
;SecondaryPtrを除くこのエントリの全内容は有効で
はなく、無視される
FileEntry :ファイルのための次の FileEntryエントリを指す
;SecondaryPtrを除くこのエントリの全内容は有効
ではなく、無視される
FileInfo:ファイルのための次の FileInfo エントリを指す
Attributes 読出し専用、読出し/書込み等のようなファイル属性
Time 創成または変更の時刻
Date 創成または変更の日付
NameLen バイトで表した名前及び拡張の長さ
Name〔8〕 名前
Ext 〔3〕 拡張
ExtentLen バイトで表した範囲の長さ
本発明のファイルシステムは、ディレクトリ及びファイル構造をブロック消去可能な FEProm 内のブロック境界を横切って分散させる。ファイルシステムは、FEProm内の記憶装置の割当て及び割当て解除に FEProm 管理者を使用する。ファイルシステムは、上述したように、リンクされたリスト内のポインタとしてハンドルを使用する。以下の説明では「ハンドル」及び「ポインタ」を互換可能に使用する。図30は、図2のディレクトリ階層の一部のブロック割当て例を示す。図30に示した部分はディレクトリ「ルート」、ディレクトリ「 DOS」、ディレクトリ「ワード」、ファイル「 AUTOEXEC.BAT 」、及びファイル「 COMMAND.COM」のための DirEntry 及び FileEntryレコードからなっている。ブロック0はディレクトリ「 DOS」及びディレクトリ「ワード」を含み、ブロック 12 はディレクトリ「ルート」及びファイル「 COMMAND.COM」を含み、そしてブロック 14 はファイル「 AUTOEXEC.BAT 」を含んでいる。
図28は、図30の例のブロック割当て構造及び領域例を示す。図28はブロック0 2401、ブロック12 2402、及びブロック14 2403を示す。ブロック0 2401は、領域2420及び2430を含む。領域2420はディレクトリ「 DOS」のための DirEntry を含み、領域2430はディレクトリ「ワード」のための DirEntry を含む。ブロック0 2401は、見出し2404、領域2420に対応する Alloc〔0〕エントリ2421、及び領域2430に対応する Alloc〔1〕エントリ2431をも含む。ブロック12 2402は領域2410及び2450を含む。領域2410はディレクトリ「ルート」のための DirEntry を含み、領域2450はファイル「 COMMAND.COM」のための FileEntryを含む。ブロック12 2402は、ブロック見出し2405、領域2410に対応する Alloc〔0〕エントリ2411、及び領域2450に対応する Alloc〔1〕エントリ2451をも含む。ブロック14 2403は、領域2490及び2440を含む。領域2490はブートレコードを含み、領域2440はファイル「 AUTOEXEC.BAT 」のための FileEntryを含む。ブロック14 2403は、ブロック見出し2406、領域2490に対応する Alloc〔0〕エントリ2491、及び領域2440に対応する Alloc〔1〕エントリ2441をも含む。
図28では、ポインタ2407、2413、24233、2433、2443、2453、及び2493は、ポインタ2407から始まりブロック見出し2406内のブートレコードまでのディレクトリ階層を限定する。ブートレコード2490はブロック14 2403内にある。ブロック14 2403のための可変ステータスは、このブロックがブートディレクトリを含んでいることを指示する。 BootRecordPtr2407はブートレコードのための Alloc〔0〕エントリ2491を指し示している。 Alloc〔0〕エントリ2491は、領域2490のオフセットを含む変数「オフセット」2492を含む。領域2490はブートレコードを含む。ブートレコードはディレクトリ「ルート」に対応する Alloc〔0〕エントリ2411を指し示すポインタ RootDirectoryPtr 2493を含む。 Alloc〔0〕エントリ2411は、領域2410のオフセットを含む変数「オフセット」2412を含む。領域2410はディレクトリ「ルート」のための DirEntry を含む。ディレクトリ「ルート」の PrimaryPtr 2413はディレクトリ「 DOS」に対応する Alloc〔0〕エントリ2421を指し示す。 Alloc〔0〕エントリ2421は、領域2420のオフセットを含む変数「オフセット」2422を含む。
領域2420はディレクトリ DOSのための DirEntry を含む。ディレクトリ「 DOS」の SiblingPtr 2423はディレクトリ「ワード」のための Alloc〔1〕エントリ2431を指し示す。 Alloc〔1〕エントリ2431は、領域2430のオフセットを含む変数「オフセット」2432を含む。領域2430はディレクトリ「ワード」のための DirEntry を含む。ディレクトリ「ワード」の SiblingPtr 2433はファイル「 AUTOEXEC.BAT 」のための Alloc〔1〕エントリ2441を指し示す。 Alloc〔1〕エントリ2441は、領域2440のオフセットを含む変数「オフセット」2442を含む。領域2440はファイル「 AUTOEXEC.BAT 」のための FileEntryを含む。ファイル「 AUTOEXEC.BAT 」のためのポインタ SiblingPtr 2443はファイル「 COMMAND.COM」のための Alloc〔1〕エントリ2451を指し示す。 Alloc〔1〕エントリ2451は、領域2450のオフセットを含む変数「オフセット」2452を含む。領域2450はファイル「 COMMAND.COM」のための FileEntryを含む。 SiblingPtr 2453は FNULLにセットされ、リンクされたリストの終わりを指示する。
このファイルシステムは、ディレクトリの追加及び削除、及びファイルの創成、拡張及び変更を可能にする。図7は、ディレクトリを FEProm へ追加するルーチンの流れ図である。このルーチンの入力パラメタは、新しいディレクトリの完全パスネームと、新しいディレクトリのための属性データである。このルーチンは、親ディレクトリのための DirEntry のアドレスを含むように変数Pをセットし、また子ディレクトリのための DirEntry のアドレスを含むように変数Cをセットする。例えば、パスネーム“\P\C”は、ルートディレクトリのサブディレクトリであるPのサブディレクトリであるディレクトリCが創成されることを意味する。図8はディレクトリCがPの最初のサブディレクトリである場合を示し、図9はディレクトリCがPの最初のサブディレクトリではない場合を示す。図8及び9において、実線はディレクトリCを追加する前のディレクトリ構造を示し、点線はディレクトリCが追加された後のディレクトリ構造を示す。
図7のブロック401においてシステムは、ルートディレクトリからの経路を追跡することによってディレクトリPを探知し、ディレクトリPのための DirEntry を指し示すように変数Pをセットする。ディレクトリPを探知する時システムは、変数 SecondaryPtr によって置換されていない限り変数 PrimaryPtr を追跡する。ブロック402では、システムはディレクトリCのための DirEntry に領域を割当てる。システムは、 FEProm 管理者の手順を呼出すことによって領域を割当てる。システムは、割当て済領域を指し示すように変数Cをセットする。以下の説明では FEProm 管理者から戻されるハンドルを領域を指し示すポインタと呼ぶ。ブロック403においてシステムは、変数「名、時刻、日付、及び属性」を新たに割当てられたレコード内にセットし、新たに割当てられたエントリがディレクトリエントリであることを指示するように変数「ステータス」をセットする。
ブロック405乃至412においてシステムは、新しいディレクトリエントリを古いディレクトリ構造内へリンクする。システムは、ブロック406乃至410において新しいディレクトリがPの最初のサブディレクトリではない場合の状況を処理し、ブロック411及び412において新しいディレクトリがPの最初のサブディレクトリである場合の状況を処理する。ブロック405において、もし PrimaryPtr が有効であることをP−>「ステータス」が指示すれば、ディレクトリPはサブディレクトリを有しているか、または有していたのであり、システムはブロック406へ進み、そうでない場合ディレクトリPはサブディレクトリを有していたことはなく、システムはブロック411へ進む。ブロック411では、システムは新たに割当てられたディレクトリエントリであるディレクトリCを指し示すようにP−> PrimaryPtr をセットして新しいディレクトリへのリンキングを遂行する。ブロック412においてシステムは、変数 PrimaryPtr が有効であることを指示するようにP−>「ステータス」をセットしてルーチンを終了する。
ブロック406においてシステムは、変数 next-ptr をP−> PrimaryPtr に等しくセットする。変数 next-ptr は同胞サブディレクトリのリンクされたリスト内の次のディレクトリを指し示すポインタを含む。ブロック407において、SiblingPtrが有効であることを next-ptr によって指し示されるレコードのステータスが指示していればシステムはブロック408へ進み、そうでなければ同胞のリンクされたリストの終わりに到達したのであり、システムはブロック409へ進む。ブロック408では、 next-ptr は next-ptr によって指し示されるレコードの SiblingPtr に等しくセットされ、これはリンクされたリスト内の次のディレクトリを指し示すように next-ptr を前進させ、システムはブロック407へ進められてリンクされたリストの終わりに達したか否かが決定される。同胞のリンクされたリストの終わりを探索する場合、システムは変数 SiblingPtr を追跡する。システムはブロック409において、 next-ptr によって指し示されるレコードの SiblingPtr を、ディレクトリCのためのDirEntryを指し示すポインタに等しくセットする。ブロック410においてシステムは、新たに割当てられたディレクトリエントリを指し示すエントリ内の SiblingPtr が有効であることを指示するように、 next-ptr によって指し示されるレコードの「ステータス」をセットし、ルーチンを終了する。
図10は、新しいファイルに関して FileEntryレコードをファイルシステム内へ追加するルーチンの流れ図である。 FileEntryレコードは階層的な木構造のファイルシステムの単なる葉ノードに過ぎず、 FileEntryレコードを追加するルーチンは図7に示したディレクトリ追加ルーチンに酷似している。主要な相違点はブロック803において、レコードがファイルであることを指示するように変数「ステータス」がセットされることである。
図11及び12は、データをファイルの終わりに追加するためのルーチンの流れ図である。このルーチンには、完全パスネーム、書込まれるデータ及び書込まれるバイトの数が渡される。図13は拡張されるファイル\L.DAT を含むディレクトリ構造のレイアウトの見本である。実線はファイルが拡張される前の構造を示し、点線はファイルが拡張された後の構造を示す。ファイル「 L.DAT」は始めに FileEntryレコード1101、 FileInfo レコード1102、及びそれに対応付けられた範囲1103を有している。点線は、範囲D2 1105内のファイルへ追加されるデータを有する FileInfo レコード1104を表す。
図11のブロック1001においてシステムは、領域を FEProm 内の新 FileInfo レコードに割当て、そのレコードを指し示すように変数 FI をセットする。システムはブロック1002において領域をデータ範囲に割当て、その範囲を指し示すように変数Dをセットする。システムはブロック1003において、割当てられたブロックへデータを書込む。ブロック1004においてシステムは割当てられた FileInfo エントリ内に変数「属性、時刻、及び日付」をセットする。ブロック1005においてシステムは、 FI −> ExtentPtrを割当てられた範囲のハンドルにセットする。ブロック1005Aでは、 FI −> ExtentLenが範囲の長さを含むようにセットされる。ブロック1005Bでは FI −>「ステータス」が、「存在」、 ATDRecent、 FileInfo 、及び ExtentPtrvalid にセットされる。ブロック1006ではシステムは、拡張すべきファイルの FileEntryレコードを探知し、そのレコードのアドレスに FE をセットする。好ましい実施例では、システムは新範囲及び FileInfo レコードを割当てる前に FileEntryレコードを探知して、何等かの割当てが行われる前にファイルが存在するようにしている。
図11の続きである図12のブロック1007乃至1012においてシステムは、拡張すべきファイルの最後の FileInfo レコード(もし1つが存在すれば)を探知する。システムは FileEntryレコード及び FileInfo レコードの PrimaryPtr または SecondaryPtr を追跡する。有効 SecondaryPtr は、 PrimaryPtr によって指し示されるレコードが、 SecondaryPtr によって指し示されるレコード内のデータによって置換されたことを指示する。ブロック1007においてシステムは、ポインタ next-ptr を FileEntryレコードを指し示すポインタに等しくセットする。ブロック1008Aでは、ポインタ prev-ptr が next-ptr に等しくセットされる。ファイル内の最後の FileInfo レコードが探知されると、ポインタ prev-ptr はそのレコードを指し示すポインタを含む。ブロック1009では、もし SecondaryPtr が有効であることを next-ptr によって指し示されるレコードのステータスが指示していれば、 PrimaryPtr によって指し示されるレコード内のデータは置換されたのであり、システムはブロック1011へ進み、そうでない場合はシステムはブロック1010へ進む。ブロック1010においてシステムは next-ptr を、 next-ptr によって指し示されるレコードの PrimaryPtr に等しくセットしてリンクされたリスト内の次のレコードを指し示すポインタを入手し、ブロック1012へ進む。ブロック1011ではシステムは next-ptr を、 next-ptr によって指し示されるレコードの SecondaryPtr に等しくセットしてリンクされたリスト内の次のレコードを指し示すポインタを入手し、ブロック1008Aへ進む。ブロック1012では、もし next-ptr が有効であれば、リンクされたリストの終わりに達したのであり、システムはブロック1013へ進み、そうでない場合にはシステムは1008Aへ戻ってリンクされたリスト内の次のレコードを処理する。ブロック1013ではシステムは prev-ptr によって指し示されるレコードの PrimaryPtr を、 FI を指し示すポインタに等しくセットしてファイルの拡張を遂行する。ブロック1014においてシステムはprev-ptrによって指し示されるレコードの「ステータス」を PrimaryPtrValidに等しくセットしてルーチンを終了する。
図14及び15は、ファイル内のデータを更新する「ファイル更新」ルーチンの流れ図である。このルーチンのパラメタは、変更された関連範囲を持つためのFileInfoブロックのアドレスであるRと、新データのための範囲内へのオフセットである extent-offsetと、新データである new-data と、新データの長さである data-lengthとである。少なくともあるブロックが消去されるまでは、FEPromは1回書込み装置であるから、データが記憶される領域は、ファイルへの更新が発生する時には再書込みはできない。以下に説明するように好ましい実施例では更新されるデータは FEProm の異なる領域へ書込まれる。
図16は、あるファイルのための FileInfo レコードのリンクされたリストの典型的部分を示す。ファイル更新ルーチンは陰影を施した領域1301によって表されるデータを置換する。図17は変更されるデータが FEProm へ書込まれた後のリンクされたリストの構造を示す。3つの FileInfo レコードR1 1411、R2 1412、及びR3 1413がリンクされたリスト内へ挿入されている。範囲全体が再書込みされるのではなく、実際に変更された部分だけが再書込みされるのである。ルーチンは範囲を3つの区分D1 1401、D2 1402、及びD3 1403に分割する。区分D1 1401及びD3 1403は、更新によって変化しないデータを含み、区分D2 1402は変化するデータを含む。各区分は対応する FileInfo レコードを有する。 FileInfo レコードR1 1411、R2 1412、及びR3 1413はそれらの PrimaryPtr フィールドを通してリンクされている。またR1 1411及びR3 1413内の ExtentPtrフィールドはそれらの対応範囲区分を指し示すようにセットされ、 ExtentLenフィールドがセットされる。新範囲は、レコードR2 1412によって指し示される区分である新D2 1404に対応する新データに割当てられる。レコードR 1410の SecondaryPtr は FileInfo R1 1411を指し示し、R 1410の PrimaryPtr が置換されたことを指示する。 FileInfo レコードR3 1413の PrimaryPtr は FileInfo レコードR 1410の PrimaryPtr 内に含まれている値にセットされてリンクを完了する。
ファイル更新ルーチンは、ブロック内に3つの新 Allocエントリを追加するための範囲を含む十分なスペースが存在することに依存する。これら3つの Allocエントリは、1つの領域ではなく3つの領域内に範囲を再定義する。もし十分なスペースが存在しなければ、ブロックの再利用によって空きスペースを発生させることができ、ファイル更新ルーチンを呼出すことができる。しかし、もし十分な空きスペースが存在しなければ、その範囲内のデータは新範囲へ移動させられる。もしデータが移動させられれば、新データは古データと統合され、1つだけの FileInfo レコードを有する新ブロック内の1領域へ書込まれる。古ブロック内の領域は割当て解除される。好ましい実施例では、 FEProm 管理者は既存領域の部分を指し示すAlloc エントリの追加を支援する。図17の例は、ブロックへ追加する3つの新Alloc エントリを必要とし、これらはD1、D2、及びD3に関連付けられた新たに定義された領域に対応する。D2のための Allocエントリは割当て解除され、D1及びD3のための Allocエントリが割当てられる。区分D1、D2、及びD3からなる領域に対応する古い Allocエントリのステータスは、それが置換されたことを指示するようにセットされる。置換済のステータスは、 Allocエントリが本質的に対応領域を用いずに割当て解除されることを指示する。
図14のブロック1201においてシステムは FileInfo レコードのための3つの領域を割当て、領域のアドレスを含むように変数R1、R2、及びR3をセットする。ブロック1202においてもしR−>「ステータス」が ATDRecentを指示していれば、システムはR1−>「時刻」、R1−>「日付」、及びR1−>「属性」をR内の値にセットし、R1−>「ステータス」を ATDRecentにセットし、そうではない場合には、システムはこれらのフィールドを FNULLにしたままである。好ましい実施例では、 FEProm 管理者は Allocエントリを置換にセットするのと、 Allocエントリを既存領域に割当てるのを支援する。ブロック1203においてシステムはある領域を新データに割当て、 R2NewDataをその領域のアドレスにセットする。ブロック1204では、3つの Allocエントリが割当てられる。これらのエントリはD1、D2、及びD3を指し示すように初期化される。D1、D2、及びD3からなる領域を指し示す Allocエントリのステータスは置換にセットされる。ブロック1205においてシステムは R2NewDataによってアドレスされた新領域へ new-data を書込む。システムはブロック1206乃至1208Aにおいてデータを FileInfo レコードR2内にセットする。ブロック1206においてシステムは、R2−> ExtentPtrを新データのための領域を指し示すポインタに等しくセットする。ブロック1207では、R2−> ExtentLenを新領域の長さに等しくセットする。ブロック1208においては、R2−> PrimaryPtr がR3を指し示すポインタにセットされる。ブロック1208Aにおいてシステムは、ExtentPtr 及び PrimaryPtr が有効であることを指示するようにR2−>「ステータス」をセットする。
図14の続きである図15のブロック1209乃至1211Aにおいてシステムは、データを FileInfo レコードR3内にセットする。ブロック1209ではD3領域を指し示すポインタに等しくR3−> ExtentPtrをセットする。ブロック1210ではR3−> ExtentLenをD3領域の長さに等しくセットする。ブロック1211においてシステムは、R3−> PrimaryPtr をR−> PrimaryPtr に等しくセットする。ブロック1211Aでは、ExtentPtr 及び PrimaryPtr が有効であることを指示するようにR3−>「ステータス」をセットする。
ブロック1212乃至1214Aにおいてシステムは、データを FileInfo レコードR1内にセットする。ブロック1212ではD1領域を指し示すポインタに等しくR1−> ExtentPtrをセットする。ブロック1213ではR1−> ExtentLenをD3領域の長さに等しくセットする。ブロック1214においてシステムは、R1−> PrimaryPtr をR2を指し示すポインタにセットする。ブロック1214Aでは、ExtentPtr 及び PrimaryPtr が有効であることを指示するようにR1−>「ステータス」をセットする。
ブロック1215においては、R1を指し示すポインタに等しくなるようにR−> SecondaryPtr がセットされる。ブロック1216では、 SecondaryPtr が有効であることを指示するようにR−>「ステータス」がセットされる。これでルーチンが終了する。
図18及び19は、ファイル更新の特別な場合の結合の FileInfo リストを示す。これらの特別な場合を処理するためのルーチンは、図14、15に示したファイル更新の一般的な場合の処理に必要なルーチンの部分集合である。図18において、範囲の始まりから始まるデータが更新される。区分D1 1501は更新すべき範囲の始まりのデータを含み、区分D2 1502は更新されない範囲の終わりのデータを含む。2つの新 FileInfo レコードだけが必要である。第1の FileInfo レコードR1 1511は新データ1503を指し示し、第2のFileInfoレコードR2 1512は区分D2 1502内の古いデータを指し示す。図19に示すように範囲境界上で終わるデータが更新される場合にも同様な状況が発生する。ファイル更新の一般的な場合のように、D1及びD2を含む古い領域は、古い領域を含むブロックに2つの新しい割当て表エントリを割当てることによって2つの領域に細分される。またもしエントリのために十分なスペースが存在しなければ、変更されないデータは新ブロックへ移動させられる。
図20は更新データが範囲境界にまたがる場合の FileInfo レコードのためのリンクされたリストを示す。
図21は、 FEProm からディレクトリを削除するルーチンの流れ図である。ファイルを削除するルーチンは、対応付けられた FileInfo レコードが割当て解除されること以外は同一である。このルーチンは、 DirEntry のステータスを、それが削除されることを指示するようにセットする。ブロック1801においてシステムは、削除すべきディレクトリを探知し、そのディレクトリのアドレスを含むように変数「ポインタD」をセットする。ブロック1802では、そのディレクトリを削除することを指示するようにD−>「ステータス」をセットする。
ディレクトリまたはファイルの名前は、新しい DirEntry または FileEntryをそれぞれ割当て、次いで新しいエントリを指し示すように古いエントリの SecondaryPtr をセットすることによって変更される。図23は、名前が“ B.DAT”に変更される時の、“ D.DAT”のためのファイルエントリを実線で、また変更を点線で示してある。新エントリは FileInfo エントリ、ディレクトリ構造、及び古いエントリに対応付けられた範囲のリンクされたリストを指し示す。
図22はファイル名の変更を実現する好ましいサブルーチンの流れ図である。ディレクトリ名を変更するためのサブルーチンは、対応付けられる範囲が存在しないことを除いて同一である。このルーチンへの入力パラメタは、ファイルの同胞及び新ファイル名である。ブロック1901においてシステムはディレクトリを通してシステムを探索し、名前を変更すべきファイルを探知し、 FileEntryを指し示すように変数Pをセットする。システムは、そのファイルのためのエントリのリンクされたリスト内の最後の FileEntryを探索する。ファイルは各名前変更毎にエントリを有する。
ブロック1904においてシステムは、領域を新 FileEntryに割当て、その領域を指し示すように変数Cをセットする。ブロック1905においてシステムはC−>「名前」を新ファイル名に等しくセットし、C−>「属性」、C−>「日付」、C−>「時刻」をセットし、 ATDRecentに置換されるファイルエントリに基づいてC−>「ステータス」をセットする。ブロック1906においてシステムは、C−> SiblingPtr をP−> SiblingPtr に等しくセットしてエントリをディレクトリ階層にリンクする。ブロック1909では、C−> PrimaryPtr がP−> PrimaryPtr に等しくセットされ、新エントリは範囲のリストにリンクされる。ブロック1909Aでは、 ExtentPtr及び PrimaryPtr が有効であることを指示するためにC−>「ステータス」がセットされる。ブロック1910ではシステムはCを指し示すポインタに等しくP−> SecondaryPtr をセットする。ブロック1911においてシステムは SecondaryPtr が有効であることを指示するようにP−>「ステータス」をセットし、古いエントリの置換を完了させてルーチンを終了させる。
図24及び25は、あるファイルの属性データを変更するルーチンの流れ図である。あるファイルに関連する属性データは、 ATDRecentのステータスを有し、また「性、日付、及び時刻」フィールドが FNULLにセットされている第1の FileInfo エントリを選択することによって変更される。もしこのようなフィールドが存在しなければ、新しい FileInfo エントリが創成され、選択される。次いでシステムは「属性、日付、及び時刻」フィールドを選択された FileInfo エントリ内にセットする。先に最新の「属性、日付、及び時刻」データを記憶していたFileInfoエントリは、 ATDSupereseded にセットされているステータスを有している。入力パラメタはパスネーム及び属性データである。ブロック2101においてシステムはディレクトリ構造を通して探索してファイルを探知し、 FileEntryを指し示すように変数Pをセットする。ブロック2102においてもしP−>「ステータス」が ATDRecentを指示していれば、 FileEntryは最新の属性データを含んでおり、システムはブロック2103に進み、そうでない場合にはシステムはブロック2104に進む。ブロック2103においてシステムは変数Xを変数Pにセットして図25のブロック2111に進む。ブロック2104ではシステムは変数CをP−> PrimaryPtr に等しくセットする。システムはブロック2105乃至2108をループして最新の属性データを指示しているステータスを有するFileInfoエントリを探索する。ブロック2105においてもし SecondaryPtr が有効であることをC−>「ステータス」が指示していれば、システムはブロック2106へ進み、そうでない場合はシステムはブロック2107へ進む。ブロック2106では変数CはC−> SecondaryPtr にセットされて置換されるエントリを指し示すようにされ、ブロック2105へループバックされる。ブロック2107においてもしC−>「ステータス」が ATDRecentを指示していればFileInfoエントリは最新の属性データを含んでいるのであり、システムはブロック2109へ進み、そうでない場合にはシステムはブロック2108へ進む。ブロック2108においてシステムは変数CをC−> PrimaryPtr に等しくセットし、ブロック2105へループバックする。ブロック2109においてはシステムは変数Xを変数Cにセットし、図25のブロック2111へ進む。
システムは、ブロック2111において変数Yを変数Xに初期化する。変数Xは最新の属性データを有するエントリを指し示す。ブロック2112乃至2119においては、再新のステータスを有し FNULLにセットされた属性データを有する次のエントリを探知する。ブロック2112においてもし PrimaryPtr が有効であることをY−>「ステータス」が指示していれば、システムはブロック2113へ進み、そうでなければ新エントリを追加するためにブロック2120へ進む。ブロック2113では、変数YはY−> PrimaryPtr にセットされる。ブロック2114においてもし SecondaryPtr が有効であることをY−>「ステータス」が指示していれば、システムはブロック2115へ進み、そうでなければブロック2116へ進む。ブロック2115では変数YがY−> SecondaryPtr に等しくセットされ、ブロック2114へループバックされる。ブロック2116においてもしY−>「ステータス」が ATDRecentにセットされていればシステムはブロック2117へ進み、そうでなければブロック2112へ戻される。ブロック2117においてもしY−>「属性」、Y−>「日付」、及びY−>「時刻」が FNULLに等しければシステムはブロック2118へ進み、そうでなければブロック2112へループバックされる。ブロック2118において、Y−>「属性」、Y−>「日付」及びY−>「時刻」は新しい属性データにセットされる。ブロック2119ではX−>「ステータス」が ATDSupersededに等しくセットされ、ルーチンは完了する。
ブロック2120乃至2123においてシステムは新 FileInfo エントリを割当てて初期化する。ブロック2120では新 FileInfo エントリが割当てられ、新エントリを指し示すように変数Zがセットされる。ブロック2121では、システムはZ−>「属性」、Z−>「日付」、及びZ−>「時刻」を新属性データにセットし、Z−>「ステータス」を「存在」、 ATDRecent、及び FileInfo にセットし、Z−>ExtentPtr をY−>ExtentPtr にセットし、そしてZ−>ExtentLen をY−>ExtentLen にセットする。ブロック2122ではY−>SecondaryPtrが変数Zに等しくセットされ、 SecondaryPtr が有効であることを指示するようにY−>「ステータス」がセットされる。ブロック2123では、X−>「ステータス」が ATDSupersededに等しくセットされ、エントリが最早現属性データを含んでいないことを指示し、ルーチンが完了する。
以上に本発明を好ましい実施例に関して説明したが、本発明はこの実施例に限定されるものではない。当業者ならば本発明の思想に基づく多くの変更が明白であろう。本発明の範囲は特許請求の範囲によってのみ限定されるものである。
ディレクトリ及びファイルのサンプルハイアラーキ構造もしくはツリー構造の編成を示す図である。 図1の同じディレクトリ構造を示すリンクされたリスト構造体の図である。 図1の同じディレクトリ構造を表す別のリンクされたリスト構造体を示した図である。 ファイル名”\A\d.DAT”のファイルに対するリンクされたリストの構造を示す図である。 ファイル名”\A\d.DAT”のファイルに対する別のリンクされたリストの構造を示す図である。 本発明の好ましい実施例によるブロック消去可能なFEPromのレイアウトを示す図である。 本発明の好ましい実施例によるAdd Directoryルーチンを示す流れ線図である。 本発明の好ましい実施例によりディレクトリ構造に新たにディレクトリが追加される前後の図である。 本発明の好ましい実施例によりディレクトリ構造に新たにディレクトリが追加される前後の図である。 本発明の好ましい実施例によるAdd Fileルーチンを示す流れ線図である。 本発明の好ましい実施例によるExtend Fileルーチンを示す流れ線図である。 本発明の好ましい実施例によるExtend Fileルーチンを示す流れ線図である。 本発明の好ましい実施例を用いたサンプルディレクトリ及びファイルレイアウトを示す図である。 本発明の好ましい実施例によるUpdate Fileルーチンを示す流れ線図である。 本発明の好ましい実施例によるUpdate Fileルーチンを示す流れ線図である。 本発明の好ましい実施例により更新される前後のファイルのサンプル部分を示す図である。 本発明の好ましい実施例により更新される前後のファイルのサンプル部分を示す図である。 本発明の好ましい実施例によりファイルが更新された後のファイルのサンプル部分を示す図である。 本発明の好ましい実施例によりファイルが更新された後のファイルのサンプル部分を示す図である。 本発明の好ましい実施例によりファイルが更新された後のファイルのサンプル部分を示す図である。 本発明の好ましい実施例によるDel Directoryルーチンを示す流れ線図である。 本発明の好ましい実施例によるChange File Nameルーチンを示す流れ線図である。 名前を変化したファイルに対するディレクトリ構造の前後を表す図である。 本発明の好ましい実施例によるChange Attribute Dataルーチンを示す流れ線図である。 本発明の好ましい実施例によるChange Attribute Dataルーチンを示す流れ線図である。 本発明の好ましい実施例におけるブロックのレイアウトを示す図である。 好ましい実施例においてリクレイミングを行った後の図26のブロックのレイアウトを示す図である。 図30のサンプルに対するサンプルブロック割り当て構造及び領域を示す図である。 ハンドルの参照解除を示す図である。 図2のディレクトリハイアラーキの一部分に対するサンプルブロック割り当てを示す図である。 好ましい実施例における初期化プロセスを示す流れ線図である。 好ましい実施例におけるブロック割り当てルーチンを示す流れ線図である。 好ましい実施例における領域割り当てルーチンを示す流れ線図である。 好ましい実施例におけるブロックリクレイミングルーチンを示す流れ線図である。 Allocエントリのステータスを示す状態図である。 ブロックのステータスを示す状態図である。
符号の説明
100 ディレクトリ「ルート」
102 「DOS」サブディレクトリ
103 「ワード」サブディレクトリ
104 「AUTOEXEC.BAT」ファイル
105 「COMMAND.COM」ファイル
106 「FORMATEXE」ファイル
107 「デービッド」サブディレクトリ
108 「メリー」サブディレクトリ
109 「LETTER1.DOC」ファイル
110 「LETTER1.DOC」ファイル
111 「LETTER2.DOC」ファイル
112 「LETTER3.DOC」ファイル
113 「ビル」ディレクトリ
120−132 ポインタ
140−142 リンクされたリスト
200−202 ファイル
203−206 範囲レコード
211−214 範囲
301 FEProm
302 ブロック
2302 ブロック割り当て構造体
2303 データ領域
2304 自由スペース
2310−2315 オフセット

Claims (6)

  1. ブロック消去可能で一回書き込み多数回読み取りのメモリを管理するためのシステム内でエラーを回復するための方法において、前記メモリが複数のブロックを備え、各ブロックが割り当てアレイデータ領域及びヘッダを備え、前記割り当てアレイが、前記ブロックの各々のデータ領域を参照するエントリを備え、前記各エントリが、割り当てられ、割り当てを取り消され、または、ヌルである状態を備え、前記割り当てを取り消された状態が、エントリによって参照されたデータ領域が割り当てを取り消されていることを示し、前記割り当てられた状態が、エントリによって参照されたデータ領域が割り当てられていることを示し、前記ヌルの状態が、エントリに書き込みをするときに生じたエラーを示し、前記ヘッダは、論理ブロック番号、ブロックの状態及びブロックの消去カウントを含み
    前記割り当てが取り消された状態にエントリを設定するときにエラーが生じるとき、エントリをヌル状態に設定するステップと、
    前記割り当てられた状態にエントリを設定するときにエラーが生じるとき、新しいエントリを選択し、前記新しいエントリを前記割り当てられた状態に設定し、前記エントリによって参照されたデータ領域を参照させ、ブロックの再利用中に、前記エントリが無視されるように前記ヌル状態にエントリを設定するステップとを有し、
    前記ブロックの再利用中に、消去カウントの小さい使用可能なブロックを選択し、
    前記割り当てられた状態にエントリを設定するときに、消去カウントの低いブロックの領域を割り当て、
    ブロックの再利用は、所定の論理ブロック番号を有する第1のブロックを前記所定の論 理ブロック番号を変えることなく第2のブロックにコピーすることにより行われ、
    前記消去カウントの小さい使用可能なブロックを選択すること及び消去カウントの低いブロックの領域を割り当てること並びにある2つのブロックについての消去カウントの差が所定の閾値を超える場合に該2つのブロックのデータをスワップすることにより、ブロックについて消去カウントを均等化させ、ブロックの性能の低下を防止することを特徴とする方法。
  2. 前記ヌル状態にエントリを設定するときエラーが生じるとき、前記ブロックの再利用を実行するステップ
    を有することを特徴とする請求項1に記載の方法。
  3. 各エントリが状態のフィールドを包含し、
    前記ヌル状態が、前記状態のフィールド内における各ビットを消去されていない値に設定することにより示される
    ことを特徴とする請求項2に記載の方法。
  4. 前記ブロックの状態は、消去状態、更新進行状態、スペア状態、再利用進行状態、レデ ィ状態、消去のための待ち行列状態及びリタイア状態を含むことを特徴とする請求項1に 記載の方法。
  5. ブロック消去可能で一回書き込み多数回読み取りのメモリを管理するためのシステム内でエラーを回復するための方法において、前記メモリが複数のブロックを備え、各ブロックが割り当てアレイデータ領域及びヘッダを備え、前記割り当てアレイが、前記ブロックの各々のデータ領域を参照するエントリを備え、前記各エントリが、割り当てられ又は割り当てを取り消された状態を備え、前記割り当てを取り消された状態が、エントリによって参照されたデータ領域が割り当てを取り消されていることを示し、前記割り当てられた状態が、エントリによって参照されたデータ領域が割り当てられていることを示し、 記ヘッダは、論理ブロック番号、ブロックの状態及びブロックの消去カウントを含み、
    ブロックにストアされるべきデータを受信するステップと、
    新しいデータ領域を選択するステップと、
    前記選択されたデータ領域に対応するエントリを選択するステップと、
    前記選択されたデータ領域を参照するように前記選択されたエントリを設定するステップと、
    前記受信されたデータを前記選択されたデータ領域に書き込むステップと、
    前記選択されたデータ領域に前記受信されたデータを書き込む間、エラーが生じないとき、割り当てられた状態に前記選択されたエントリを設定するステップと、
    ブロックの再利用中に、前記選択されたデータ領域を再利用することができるように、前記データを前記選択されたデータ領域に書き込む間、エラーが生じたとき、前記選択されたエントリを前記割り当てを取り消された状態に設定し、前記受信されたデータに関して別のデータ領域を割り当てるステップと、
    前記ブロックの再利用中に、消去カウントの小さい使用可能なブロックを選択するステップと、
    前記データ領域を割り当てるときに、消去カウントの低いブロックの領域を割り当てるステップと、
    によって新しいデータ領域を割り当てるステップと、
    を有し、ブロックの再利用は、所定の論理ブロック番号を有する第1のブロックを前記所 定の論理ブロック番号を変えることなく第2のブロックにコピーすることにより行われ、ある2つのブロックについての消去カウントの差が所定の閾値を超える場合に該2つのブロックのデータがスワップされてブロックについて消去カウントを均等化させ、ブロックの性能の低下を防止することを特徴とする方法。
  6. 前記ブロックの状態は、消去状態、更新進行状態、スペア状態、再利用進行状態、レデ ィ状態、消去のための待ち行列状態及びリタイア状態を含むことを特徴とする請求項5に 記載の方法。
JP2006130478A 1992-01-29 2006-05-09 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム Expired - Lifetime JP4365385B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/828,763 US6256642B1 (en) 1992-01-29 1992-01-29 Method and system for file system management using a flash-erasable, programmable, read-only memory

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP01398093A Division JP3825479B2 (ja) 1992-01-29 1993-01-29 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2008214841A Division JP4485586B2 (ja) 1992-01-29 2008-08-25 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム

Publications (2)

Publication Number Publication Date
JP2006209808A JP2006209808A (ja) 2006-08-10
JP4365385B2 true JP4365385B2 (ja) 2009-11-18

Family

ID=25252682

Family Applications (10)

Application Number Title Priority Date Filing Date
JP01398093A Expired - Lifetime JP3825479B2 (ja) 1992-01-29 1993-01-29 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2006130477A Pending JP2006209807A (ja) 1992-01-29 2006-05-09 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2006130478A Expired - Lifetime JP4365385B2 (ja) 1992-01-29 2006-05-09 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2008214841A Expired - Lifetime JP4485586B2 (ja) 1992-01-29 2008-08-25 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009081080A Expired - Lifetime JP4858789B2 (ja) 1992-01-29 2009-03-30 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009273039A Expired - Lifetime JP4608589B2 (ja) 1992-01-29 2009-12-01 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009273033A Expired - Lifetime JP4608587B2 (ja) 1992-01-29 2009-12-01 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009273034A Expired - Lifetime JP4608588B2 (ja) 1992-01-29 2009-12-01 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2011012551A Expired - Lifetime JP4836217B2 (ja) 1992-01-29 2011-01-25 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2011173783A Pending JP2011222051A (ja) 1992-01-29 2011-08-09 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム

Family Applications Before (2)

Application Number Title Priority Date Filing Date
JP01398093A Expired - Lifetime JP3825479B2 (ja) 1992-01-29 1993-01-29 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2006130477A Pending JP2006209807A (ja) 1992-01-29 2006-05-09 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム

Family Applications After (7)

Application Number Title Priority Date Filing Date
JP2008214841A Expired - Lifetime JP4485586B2 (ja) 1992-01-29 2008-08-25 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009081080A Expired - Lifetime JP4858789B2 (ja) 1992-01-29 2009-03-30 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009273039A Expired - Lifetime JP4608589B2 (ja) 1992-01-29 2009-12-01 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009273033A Expired - Lifetime JP4608587B2 (ja) 1992-01-29 2009-12-01 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2009273034A Expired - Lifetime JP4608588B2 (ja) 1992-01-29 2009-12-01 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2011012551A Expired - Lifetime JP4836217B2 (ja) 1992-01-29 2011-01-25 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
JP2011173783A Pending JP2011222051A (ja) 1992-01-29 2011-08-09 フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム

Country Status (5)

Country Link
US (3) US6256642B1 (ja)
EP (1) EP0557736B1 (ja)
JP (10) JP3825479B2 (ja)
CA (3) CA2325812C (ja)
DE (1) DE69333906T2 (ja)

Families Citing this family (215)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2251324B (en) * 1990-12-31 1995-05-10 Intel Corp File structure for a non-volatile semiconductor memory
GB2251323B (en) * 1990-12-31 1994-10-12 Intel Corp Disk emulation for a non-volatile semiconductor memory
JP3407317B2 (ja) * 1991-11-28 2003-05-19 株式会社日立製作所 フラッシュメモリを使用した記憶装置
JP3587204B2 (ja) * 1991-11-28 2004-11-10 株式会社日立製作所 記憶装置
US5416782A (en) * 1992-10-30 1995-05-16 Intel Corporation Method and apparatus for improving data failure rate testing for memory arrays
US5479633A (en) * 1992-10-30 1995-12-26 Intel Corporation Method of controlling clean-up of a solid state memory disk storing floating sector data
US5452311A (en) * 1992-10-30 1995-09-19 Intel Corporation Method and apparatus to improve read reliability in semiconductor memories
US5535369A (en) * 1992-10-30 1996-07-09 Intel Corporation Method for allocating memory in a solid state memory disk
US5337275A (en) * 1992-10-30 1994-08-09 Intel Corporation Method for releasing space in flash EEPROM memory array to allow the storage of compressed data
US5448577A (en) * 1992-10-30 1995-09-05 Intel Corporation Method for reliably storing non-data fields in a flash EEPROM memory array
US5473753A (en) * 1992-10-30 1995-12-05 Intel Corporation Method of managing defects in flash disk memories
US5357475A (en) * 1992-10-30 1994-10-18 Intel Corporation Method for detaching sectors in a flash EEPROM memory array
US5740395A (en) * 1992-10-30 1998-04-14 Intel Corporation Method and apparatus for cleaning up a solid state memory disk storing floating sector data
US5369616A (en) * 1992-10-30 1994-11-29 Intel Corporation Method for assuring that an erase process for a memory array has been properly completed
US5341330A (en) * 1992-10-30 1994-08-23 Intel Corporation Method for writing to a flash memory array during erase suspend intervals
US5471604A (en) * 1992-10-30 1995-11-28 Intel Corporation Method for locating sector data in a memory disk by examining a plurality of headers near an initial pointer
JP3641280B2 (ja) * 1992-10-30 2005-04-20 インテル・コーポレーション フラッシュeepromアレイのクリーン・アップすべきブロックを決定する方法
US5822781A (en) * 1992-10-30 1998-10-13 Intel Corporation Sector-based storage device emulator having variable-sized sector
US5455800A (en) * 1993-02-19 1995-10-03 Intel Corporation Apparatus and a method for improving the program and erase performance of a flash EEPROM memory array
US5835933A (en) * 1993-02-19 1998-11-10 Intel Corporation Method and apparatus for updating flash memory resident firmware through a standard disk drive interface
US5586285A (en) * 1993-02-19 1996-12-17 Intel Corporation Method and circuitry for increasing reserve memory in a solid state memory disk
US5581723A (en) * 1993-02-19 1996-12-03 Intel Corporation Method and apparatus for retaining flash block structure data during erase operations in a flash EEPROM memory array
US5740349A (en) * 1993-02-19 1998-04-14 Intel Corporation Method and apparatus for reliably storing defect information in flash disk memories
US5603036A (en) * 1993-02-19 1997-02-11 Intel Corporation Power management system for components used in battery powered applications
US5640529A (en) * 1993-07-29 1997-06-17 Intel Corporation Method and system for performing clean-up of a solid state disk during host command execution
US5490264A (en) * 1993-09-30 1996-02-06 Intel Corporation Generally-diagonal mapping of address space for row/column organizer memories
SG49632A1 (en) * 1993-10-26 1998-06-15 Intel Corp Programmable code store circuitry for a nonvolatile semiconductor memory device
US5765175A (en) * 1994-08-26 1998-06-09 Intel Corporation System and method for removing deleted entries in file systems based on write-once or erase-slowly media
US5754817A (en) * 1994-09-29 1998-05-19 Intel Corporation Execution in place of a file stored non-contiguously in a non-volatile memory
US5809558A (en) * 1994-09-29 1998-09-15 Intel Corporation Method and data storage system for storing data in blocks without file reallocation before erasure
JPH08137634A (ja) * 1994-11-09 1996-05-31 Mitsubishi Electric Corp フラッシュディスクカード
US5563828A (en) * 1994-12-27 1996-10-08 Intel Corporation Method and apparatus for searching for data in multi-bit flash EEPROM memory arrays
JP2734391B2 (ja) * 1995-01-18 1998-03-30 日本電気株式会社 不揮発性メモリのファイル管理装置
US5724592A (en) * 1995-03-31 1998-03-03 Intel Corporation Method and apparatus for managing active power consumption in a microprocessor controlled storage device
KR100308703B1 (ko) * 1995-09-12 2001-11-30 모리시타 요이찌 부호화방법,부호화장치,웨이블릿변환장치및웨이블릿역변환장치
US6014724A (en) * 1995-10-27 2000-01-11 Scm Microsystems (U.S.) Inc. Flash translation layer block indication map revision system and method
US5860082A (en) * 1996-03-28 1999-01-12 Datalight, Inc. Method and apparatus for allocating storage in a flash memory
JPH09319645A (ja) 1996-05-24 1997-12-12 Nec Corp 不揮発性半導体記憶装置
US5845296A (en) * 1996-07-10 1998-12-01 Oracle Corporation Method and apparatus for implementing segmented arrays in a database
KR0185954B1 (ko) * 1996-09-30 1999-05-15 삼성전자주식회사 휴대형 단말기기의 메모리 관리방법
US5832493A (en) * 1997-04-24 1998-11-03 Trimble Navigation Limited Flash file management system
JP3640154B2 (ja) * 1997-09-30 2005-04-20 ソニー株式会社 不揮発性メモリ、不揮発性メモリの管理方法、不揮発性メモリを有する記憶装置、不揮発性メモリを管理するデータ管理装置及びデータ処理システム
JP3319361B2 (ja) * 1997-09-30 2002-08-26 ソニー株式会社 記憶装置、データ処理装置及びデータ処理方法
US5983239A (en) * 1997-10-29 1999-11-09 International Business Machines Corporation Storage management system with file aggregation supporting multiple aggregated file counterparts
US6098074A (en) * 1997-10-29 2000-08-01 International Business Machines Corporation Storage management system with file aggregation
US6021415A (en) * 1997-10-29 2000-02-01 International Business Machines Corporation Storage management system with file aggregation and space reclamation within aggregated files
US6094585A (en) * 1997-11-14 2000-07-25 Lucent Technologies Inc. CDMA forward link power overload control in a base station
US6092163A (en) * 1998-12-04 2000-07-18 W. Quinn Associates, Inc. Pageable filter driver for prospective implementation of disk space quotas
US6038636A (en) * 1998-04-27 2000-03-14 Lexmark International, Inc. Method and apparatus for reclaiming and defragmenting a flash memory device
DE19819205A1 (de) * 1998-04-29 1999-11-04 Siemens Ag Datenhaltungssystem für persistente Daten
US6542909B1 (en) 1998-06-30 2003-04-01 Emc Corporation System for determining mapping of logical objects in a computer system
US6393540B1 (en) 1998-06-30 2002-05-21 Emc Corporation Moving a logical object from a set of source locations to a set of destination locations using a single command
US6883063B2 (en) * 1998-06-30 2005-04-19 Emc Corporation Method and apparatus for initializing logical objects in a data storage system
US7383294B1 (en) 1998-06-30 2008-06-03 Emc Corporation System for determining the mapping of logical objects in a data storage system
JP3511916B2 (ja) * 1998-11-17 2004-03-29 松下電器産業株式会社 記録再生装置
KR100716576B1 (ko) 1999-02-22 2007-05-11 가부시키가이샤 히타치세이사쿠쇼 메모리 카드, 논리 어드레스의 할당방법 및 데이터 기록방법
US6742078B1 (en) * 1999-10-05 2004-05-25 Feiya Technology Corp. Management, data link structure and calculating method for flash memory
WO2001028179A2 (en) 1999-10-14 2001-04-19 Bluearc Uk Limited Apparatus and method for hardware implementation or acceleration of operating system functions
DE19960114A1 (de) * 1999-12-08 2001-06-13 Heidenhain Gmbh Dr Johannes Verfahren zum Speichern von Daten in einer Datei eines Datenspeichersystems
US7051054B1 (en) * 2000-05-30 2006-05-23 Dphi Acquisitions, Inc. Method and apparatus for emulating read/write file system on a write-once storage disk
US6704835B1 (en) 2000-09-26 2004-03-09 Intel Corporation Posted write-through cache for flash memory
US7013455B1 (en) * 2000-10-19 2006-03-14 International Business Machines Corporation System for automatically altering environment variable to run proper executable file by removing references to all except one duplicate file in the path sequence
KR20020032803A (ko) * 2000-10-27 2002-05-04 구자홍 스트리밍 서비스를 위한 파일 구조
JP4401565B2 (ja) * 2000-12-12 2010-01-20 キヤノン株式会社 記録装置及び管理方法
US6740603B2 (en) * 2001-02-01 2004-05-25 Texas Instruments Incorporated Control of Vmin transient voltage drift by maintaining a temperature less than or equal to 350° C. after the protective overcoat level
JP2003196142A (ja) * 2001-12-25 2003-07-11 Sony Corp ライトワンス型メモリ装置及びファイル管理方法
PL351784A1 (en) * 2002-01-21 2003-07-28 Advanced Digital Broadcast Ltd System for of storing data and method of recording them in that system
US7010662B2 (en) * 2002-02-27 2006-03-07 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US7085879B2 (en) * 2002-02-27 2006-08-01 Microsoft Corporation Dynamic data structures for tracking data stored in a flash memory device
US6901499B2 (en) * 2002-02-27 2005-05-31 Microsoft Corp. System and method for tracking data stored in a flash memory device
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
US7072910B2 (en) * 2002-03-22 2006-07-04 Network Appliance, Inc. File folding technique
US7155464B2 (en) * 2002-03-29 2006-12-26 Panasas, Inc. Recovering and checking large file systems in an object-based data storage system
US6895464B2 (en) * 2002-06-03 2005-05-17 Honeywell International Inc. Flash memory management system and method utilizing multiple block list windows
US7130979B2 (en) * 2002-08-29 2006-10-31 Micron Technology, Inc. Dynamic volume management
US6968439B2 (en) 2002-08-29 2005-11-22 Micron Technology, Inc. Single segment data object management
US6970969B2 (en) * 2002-08-29 2005-11-29 Micron Technology, Inc. Multiple segment data object management
US7108605B2 (en) * 2002-09-30 2006-09-19 Igt EPROM file system in a gaming apparatus
US7457822B1 (en) 2002-11-01 2008-11-25 Bluearc Uk Limited Apparatus and method for hardware-based file system
US8041735B1 (en) 2002-11-01 2011-10-18 Bluearc Uk Limited Distributed file system and method
US7082512B2 (en) * 2002-11-21 2006-07-25 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
RU2319227C2 (ru) 2002-12-24 2008-03-10 Эл Джи Электроникс Инк. Способ запоминания с двойным протоколированием и носитель данных для него
US7032090B2 (en) * 2003-04-08 2006-04-18 International Business Machines Corporation Method, system, and apparatus for releasing storage in a fast replication environment
CA2426619A1 (en) * 2003-04-25 2004-10-25 Ibm Canada Limited - Ibm Canada Limitee Defensive heap memory management
US7827375B2 (en) * 2003-04-30 2010-11-02 International Business Machines Corporation Defensive heap memory management
US7069402B2 (en) * 2003-06-02 2006-06-27 International Business Machines Corporation Host-independent incremental backup method, apparatus, and system
CN100390817C (zh) * 2003-06-10 2008-05-28 大唐微电子技术有限公司 动态逻辑分区并控制访问权限的ic智能卡及其实现方法
DE10332831B4 (de) * 2003-07-18 2009-07-30 Siemens Ag Verfahren zur Darstellung einer Dateistruktur
JP4667243B2 (ja) * 2003-08-29 2011-04-06 パナソニック株式会社 不揮発性記憶装置及びその書込み方法
US20050086430A1 (en) * 2003-10-17 2005-04-21 International Business Machines Corporation Method, system, and program for designating a storage group preference order
US7089349B2 (en) * 2003-10-28 2006-08-08 Sandisk Corporation Internal maintenance schedule request for non-volatile memory system
US7437695B1 (en) 2004-03-03 2008-10-14 Xilinx, Inc. Method of memory and run-time efficient hierarchical timing analysis in programmable logic devices
US7117473B1 (en) 2004-03-03 2006-10-03 Xilinx, Inc. System for creating a physical hierarchy of a chip without restriction by invading a logical hierarchy of logic blocks
US7073149B2 (en) * 2004-03-03 2006-07-04 Xilinx, Inc. System for representing the logical and physical information of an integrated circuit
US20060026377A1 (en) * 2004-07-27 2006-02-02 Somsubhra Sikdar Lookup interface for array machine context data memory
US9171100B2 (en) * 2004-09-22 2015-10-27 Primo M. Pettovello MTree an XPath multi-axis structure threaded index
US7873596B2 (en) * 2006-05-23 2011-01-18 Microsoft Corporation Extending cluster allocations in an extensible file system
US9639554B2 (en) * 2004-12-17 2017-05-02 Microsoft Technology Licensing, Llc Extensible file system
US8606830B2 (en) * 2004-12-17 2013-12-10 Microsoft Corporation Contiguous file allocation in an extensible file system
US8321439B2 (en) 2004-12-17 2012-11-27 Microsoft Corporation Quick filename lookup using name hash
US7457909B2 (en) * 2005-01-14 2008-11-25 Angelo Di Sena Controlling operation of flash memories
US20060184719A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
US7877539B2 (en) * 2005-02-16 2011-01-25 Sandisk Corporation Direct data file storage in flash memories
US9104315B2 (en) * 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US20060184718A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US7698704B2 (en) * 2005-02-17 2010-04-13 International Business Machines Corporation Method for installing operating system on remote storage: flash deploy and install zone
DE602005003778T2 (de) * 2005-03-08 2008-04-30 Robert Bosch Gmbh Verfahren und Vorrichtung zum Wiederbeschreiben eines Sektors mit Bootloader-Software in einem sektor-löschbaren nichtflüchtigen Halbleiterspeicher
US20080162782A1 (en) * 2005-06-15 2008-07-03 Nagarajan Suresh Using Transacted Writes and Caching Mechanism to Improve Write Performance in Multi-Level Cell Flash Memory
US7480766B2 (en) * 2005-08-03 2009-01-20 Sandisk Corporation Interfacing systems operating through a logical address space and on a direct data file basis
US7552271B2 (en) 2005-08-03 2009-06-23 Sandisk Corporation Nonvolatile memory with block management
US7949845B2 (en) 2005-08-03 2011-05-24 Sandisk Corporation Indexing of file data in reprogrammable non-volatile memories that directly store data files
US7558906B2 (en) 2005-08-03 2009-07-07 Sandisk Corporation Methods of managing blocks in nonvolatile memory
US7627733B2 (en) * 2005-08-03 2009-12-01 Sandisk Corporation Method and system for dual mode access for storage devices
US7409489B2 (en) * 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
US7669003B2 (en) * 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7529905B2 (en) * 2005-10-13 2009-05-05 Sandisk Corporation Method of storing transformed units of data in a memory system having fixed sized storage blocks
US7814262B2 (en) * 2005-10-13 2010-10-12 Sandisk Corporation Memory system storing transformed units of data in fixed sized storage blocks
US7664742B2 (en) 2005-11-14 2010-02-16 Pettovello Primo M Index data structure for a peer-to-peer network
US7877540B2 (en) * 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US7769978B2 (en) * 2005-12-21 2010-08-03 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7793068B2 (en) * 2005-12-21 2010-09-07 Sandisk Corporation Dual mode access for non-volatile storage devices
US7831783B2 (en) * 2005-12-22 2010-11-09 Honeywell International Inc. Effective wear-leveling and concurrent reclamation method for embedded linear flash file systems
US20070174309A1 (en) * 2006-01-18 2007-07-26 Pettovello Primo M Mtreeini: intermediate nodes and indexes
US7783686B2 (en) * 2006-06-16 2010-08-24 Microsoft Corporation Application program interface to manage media files
US7603387B2 (en) * 2006-06-16 2009-10-13 Microsoft Corporation Techniques to manage media files
US20080077590A1 (en) * 2006-09-22 2008-03-27 Honeywell International Inc. Efficient journaling and recovery mechanism for embedded flash file systems
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US20080140724A1 (en) * 2006-12-06 2008-06-12 David Flynn Apparatus, system, and method for servicing object requests within a storage controller
US9885739B2 (en) 2006-12-29 2018-02-06 Electro Industries/Gauge Tech Intelligent electronic device capable of operating as a USB master device and a USB slave device
US9063181B2 (en) * 2006-12-29 2015-06-23 Electro Industries/Gauge Tech Memory management for an intelligent electronic device
US8285757B2 (en) * 2007-01-31 2012-10-09 Agency For Science, Technology And Research File system for a storage device, methods of allocating storage, searching data and optimising performance of a storage device file system
US7991942B2 (en) * 2007-05-09 2011-08-02 Stmicroelectronics S.R.L. Memory block compaction method, circuit, and system in storage devices based on flash memories
US7765426B2 (en) * 2007-06-07 2010-07-27 Micron Technology, Inc. Emerging bad block detection
JP2009003784A (ja) * 2007-06-22 2009-01-08 Toshiba Corp 不揮発性メモリの制御装置及び制御方法及び記憶装置
US8082387B2 (en) 2007-10-29 2011-12-20 Micron Technology, Inc. Methods, systems, and devices for management of a memory system
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US7836226B2 (en) 2007-12-06 2010-11-16 Fusion-Io, Inc. Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
JP2010003150A (ja) * 2008-06-20 2010-01-07 Nec Personal Products Co Ltd メモリコントローラおよびフラッシュメモリのデータ管理方法
CN101334797B (zh) * 2008-08-04 2010-06-02 中兴通讯股份有限公司 一种分布式文件系统及其数据块一致性管理的方法
US8347055B2 (en) * 2009-06-30 2013-01-01 Incard S.A. Method to defrag a memory of an IC card
US20110004720A1 (en) * 2009-07-02 2011-01-06 Chun-Ying Chiang Method and apparatus for performing full range random writing on a non-volatile memory
US8588364B2 (en) 2009-08-19 2013-11-19 J. Morita Manufacturing Corporation Medical X-ray apparatus
CN102696010B (zh) * 2009-09-08 2016-03-23 才智知识产权控股公司(2) 用于将数据高速缓存在固态存储设备上的装置、系统和方法
US8601222B2 (en) 2010-05-13 2013-12-03 Fusion-Io, Inc. Apparatus, system, and method for conditional and atomic storage operations
EP2476039B1 (en) 2009-09-09 2016-10-26 SanDisk Technologies LLC Apparatus, system, and method for power reduction management in a storage device
CN102598019B (zh) 2009-09-09 2015-08-19 才智知识产权控股公司(2) 用于分配存储的设备、系统和方法
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
US9223514B2 (en) 2009-09-09 2015-12-29 SanDisk Technologies, Inc. Erase suspend/resume for memory
US8631028B1 (en) 2009-10-29 2014-01-14 Primo M. Pettovello XPath query processing improvements
US20130297840A1 (en) 2009-12-01 2013-11-07 Electro Industries/Gaugetech Intelligent electronic device capable of operating as a usb master device and a usb slave device
US8677203B1 (en) * 2010-01-11 2014-03-18 Apple Inc. Redundant data storage schemes for multi-die memory systems
US20110203944A1 (en) * 2010-02-20 2011-08-25 Todd Edward Singer Combination food storage bag and container with soaker pad
JP5407945B2 (ja) 2010-03-05 2014-02-05 株式会社デンソー 充電制御システム
US9396104B1 (en) 2010-03-22 2016-07-19 Seagate Technology, Llc Accessing compressed data of varying-sized quanta in non-volatile memory
US8725934B2 (en) 2011-12-22 2014-05-13 Fusion-Io, Inc. Methods and appratuses for atomic storage operations
WO2012016089A2 (en) 2010-07-28 2012-02-02 Fusion-Io, Inc. Apparatus, system, and method for conditional and atomic storage operations
DK2605789T3 (da) 2010-08-17 2019-09-16 Ambrx Inc Modificerede relaxinpolypeptider og anvendelser deraf
US8984216B2 (en) 2010-09-09 2015-03-17 Fusion-Io, Llc Apparatus, system, and method for managing lifetime of a storage device
US9141526B2 (en) * 2010-09-16 2015-09-22 International Business Machines Corporation Reclaiming units by searching units for a predetermined criterion and storing data from a valid subunit
US10817421B2 (en) 2010-12-13 2020-10-27 Sandisk Technologies Llc Persistent data structures
WO2012082792A2 (en) 2010-12-13 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for auto-commit memory
US10817502B2 (en) 2010-12-13 2020-10-27 Sandisk Technologies Llc Persistent memory management
US9047178B2 (en) 2010-12-13 2015-06-02 SanDisk Technologies, Inc. Auto-commit memory synchronization
US9218278B2 (en) 2010-12-13 2015-12-22 SanDisk Technologies, Inc. Auto-commit memory
US9208071B2 (en) 2010-12-13 2015-12-08 SanDisk Technologies, Inc. Apparatus, system, and method for accessing memory
WO2012083308A2 (en) 2010-12-17 2012-06-21 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
WO2012100087A2 (en) 2011-01-19 2012-07-26 Fusion-Io, Inc. Apparatus, system, and method for managing out-of-service conditions
JP5917163B2 (ja) * 2011-01-27 2016-05-11 キヤノン株式会社 情報処理装置、その制御方法及びプログラム並びに記憶媒体
US9201677B2 (en) 2011-05-23 2015-12-01 Intelligent Intellectual Property Holdings 2 Llc Managing data input/output operations
US8874823B2 (en) 2011-02-15 2014-10-28 Intellectual Property Holdings 2 Llc Systems and methods for managing data input/output operations
US9003104B2 (en) 2011-02-15 2015-04-07 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a file-level cache
WO2012116369A2 (en) 2011-02-25 2012-08-30 Fusion-Io, Inc. Apparatus, system, and method for managing contents of a cache
WO2012129191A2 (en) 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
US9563555B2 (en) 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
JP5451682B2 (ja) * 2011-05-20 2014-03-26 株式会社東海理化電機製作所 フラッシュメモリ装置
KR20130043445A (ko) * 2011-10-20 2013-04-30 삼성전자주식회사 인터페이스 관리 방법 및 이를 이용한 저장 장치에서의 매핑 처리 방법
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
US9612966B2 (en) 2012-07-03 2017-04-04 Sandisk Technologies Llc Systems, methods and apparatus for a virtual machine cache
US10339056B2 (en) 2012-07-03 2019-07-02 Sandisk Technologies Llc Systems, methods and apparatus for cache transfers
US10346095B2 (en) 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
KR102011135B1 (ko) 2012-12-11 2019-08-14 삼성전자주식회사 모바일 장치 및 그것의 스왑을 통한 데이터 관리 방법
US8812744B1 (en) 2013-03-14 2014-08-19 Microsoft Corporation Assigning priorities to data for hybrid drives
US9842053B2 (en) 2013-03-15 2017-12-12 Sandisk Technologies Llc Systems and methods for persistent cache logging
JP2014206967A (ja) * 2013-03-18 2014-10-30 株式会社Genusion 記憶装置
US10102144B2 (en) 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management
US9626126B2 (en) 2013-04-24 2017-04-18 Microsoft Technology Licensing, Llc Power saving mode hybrid drive access management
US9946495B2 (en) 2013-04-25 2018-04-17 Microsoft Technology Licensing, Llc Dirty data management for hybrid drives
US9842128B2 (en) 2013-08-01 2017-12-12 Sandisk Technologies Llc Systems and methods for atomic storage operations
US10019320B2 (en) 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for distributed atomic storage operations
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
US9547553B1 (en) 2014-03-10 2017-01-17 Parallel Machines Ltd. Data resiliency in a shared memory pool
US9781027B1 (en) 2014-04-06 2017-10-03 Parallel Machines Ltd. Systems and methods to communicate with external destinations via a memory network
US9690713B1 (en) 2014-04-22 2017-06-27 Parallel Machines Ltd. Systems and methods for effectively interacting with a flash memory
US9594688B1 (en) 2014-12-09 2017-03-14 Parallel Machines Ltd. Systems and methods for executing actions using cached data
US9529622B1 (en) 2014-12-09 2016-12-27 Parallel Machines Ltd. Systems and methods for automatic generation of task-splitting code
US9927470B2 (en) 2014-05-22 2018-03-27 Electro Industries/Gauge Tech Intelligent electronic device having a memory structure for preventing data loss upon power loss
US9781225B1 (en) 2014-12-09 2017-10-03 Parallel Machines Ltd. Systems and methods for cache streams
US9690705B1 (en) 2014-12-09 2017-06-27 Parallel Machines Ltd. Systems and methods for processing data sets according to an instructed order
US9639473B1 (en) 2014-12-09 2017-05-02 Parallel Machines Ltd. Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location
US9753873B1 (en) 2014-12-09 2017-09-05 Parallel Machines Ltd. Systems and methods for key-value transactions
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US10009438B2 (en) 2015-05-20 2018-06-26 Sandisk Technologies Llc Transaction log acceleration
US10528287B2 (en) * 2015-10-09 2020-01-07 Sony Corporation Memory, memory controller, storage apparatus, information processing system, and control method for tracking erase count and rewrite cycles of memory pages
US10162552B2 (en) * 2016-03-31 2018-12-25 EMC IP Holding Company LLC System and method for quasi-compacting garbage collection
ES2963839T3 (es) 2017-02-08 2024-04-02 Bristol Myers Squibb Co Polipéptidos de relaxina modificados que comprenden un potenciador farmacocinético y usos de los mismos
KR20190001300A (ko) * 2017-06-27 2019-01-04 에스케이하이닉스 주식회사 컨트롤러 및 메모리 시스템 및 메모리 시스템의 동작 방법
USD939988S1 (en) 2019-09-26 2022-01-04 Electro Industries/Gauge Tech Electronic power meter
CN111522507B (zh) * 2020-04-14 2021-10-01 中山大学 一种低延迟的文件系统地址空间管理方法、系统及介质

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435752A (en) * 1973-11-07 1984-03-06 Texas Instruments Incorporated Allocation of rotating memory device storage locations
US4408273A (en) 1980-05-27 1983-10-04 International Business Machines Corporation Method and means for cataloging data sets using dual keyed data sets and direct pointers
DE3173549D1 (en) 1981-03-16 1986-03-06 Ibm Improvements to digital data processing apparatus
US4680698A (en) 1982-11-26 1987-07-14 Inmos Limited High density ROM in separate isolation well on single with chip
US4507752A (en) 1983-02-22 1985-03-26 International Business Machines Corporation In-place index compression
US4630234A (en) 1983-04-11 1986-12-16 Gti Corporation Linked list search processor
US4606002A (en) 1983-05-02 1986-08-12 Wang Laboratories, Inc. B-tree structured data base using sparse array bit maps to store inverted lists
JPS62102385A (ja) * 1985-10-29 1987-05-12 Toshiba Corp 携帯可能媒体
JPS62128391A (ja) * 1985-11-30 1987-06-10 Toshiba Corp 携帯可能電子装置
JPS62131354A (ja) * 1985-12-03 1987-06-13 Sharp Corp Icカ−ドに於ける情報書き込み制御方法
GB8613069D0 (en) 1986-05-29 1986-07-02 Univ Manchester Parallel storage allocation
JPH07109717B2 (ja) * 1986-05-31 1995-11-22 キヤノン株式会社 メモリ書き込み制御方法
JP2685173B2 (ja) * 1986-05-31 1997-12-03 キヤノン株式会社 メモリ書き込み制御方法
US4953122A (en) 1986-10-31 1990-08-28 Laserdrive Ltd. Pseudo-erasable and rewritable write-once optical disk memory system
JPS63129586A (ja) * 1986-11-19 1988-06-01 Matsushita Electric Ind Co Ltd 情報記憶装置
JPS63200398A (ja) * 1987-02-16 1988-08-18 Hitachi Ltd 情報処理装置
US5060147A (en) 1987-05-01 1991-10-22 General Electric Company String length determination on a distributed processing system
US4942541A (en) * 1988-01-22 1990-07-17 Oms, Inc. Patchification system
JP2679761B2 (ja) * 1987-09-29 1997-11-19 富士通株式会社 データ管理システム
JPH01180688A (ja) * 1988-01-12 1989-07-18 Toshiba Corp 携帯可能電子装置
US5132853A (en) * 1988-02-08 1992-07-21 International Business Machines Corporation Allocation procedures for optical disk recorders
US4939598A (en) * 1988-02-08 1990-07-03 International Business Machines Corporation Managing data storage space on large capacity record media
US4953080A (en) 1988-04-25 1990-08-28 Hewlett-Packard Company Object management facility for maintaining data in a computer system
JPH01276495A (ja) * 1988-04-28 1989-11-07 Hitachi Ltd Eepromの制御方式
JPH01286199A (ja) * 1988-05-12 1989-11-17 Hitachi Ltd 書替え可能な不揮発性メモリ書替え装置
US5268870A (en) * 1988-06-08 1993-12-07 Eliyahou Harari Flash EEPROM system and intelligent programming and erasing methods therefor
US5161256A (en) * 1988-08-26 1992-11-03 Kabushiki Kaisha Toshiba Method and system for allocating file area in memory area of ic card
US4989132A (en) 1988-10-24 1991-01-29 Eastman Kodak Company Object-oriented, logic, and database programming tool with garbage collection
US5115504A (en) 1988-11-01 1992-05-19 Lotus Development Corporation Information management system
JPH02188000A (ja) * 1989-01-13 1990-07-24 Sharp Corp 不揮発性メモリ内蔵マイクロコンピュータ
US5029125A (en) * 1989-03-07 1991-07-02 Drexler Technology Corporation Method of reading and writing files on nonerasable storage media
US5491807A (en) 1989-03-20 1996-02-13 International Business Machines Corporation System and method for worm volume management of new and updated data files using variable threshold block addresses
DE69033438T2 (de) * 1989-04-13 2000-07-06 Sandisk Corp Austausch von fehlerhaften Speicherzellen einer EEprommatritze
JPH0687229B2 (ja) * 1989-06-19 1994-11-02 松下電送株式会社 追記型記憶媒体を用いたファイルの管理方法
JPH0325798A (ja) * 1989-06-23 1991-02-04 Ricoh Co Ltd Eepromを使用した記憶装置
US5247658A (en) * 1989-10-31 1993-09-21 Microsoft Corporation Method and system for traversing linked list record based upon write-once predetermined bit value of secondary pointers
US5414826A (en) * 1990-01-31 1995-05-09 Hewlett-Packard Company System and method for memory management in microcomputer
JP2646813B2 (ja) * 1990-07-30 1997-08-27 松下電器産業株式会社 ディジタル映像信号記録方法
US5229992A (en) * 1991-03-28 1993-07-20 Sprint International Communications Corp. Fixed interval composite framing in integrated services networks
US5247516A (en) * 1991-03-28 1993-09-21 Sprint International Communications Corp. Configurable composite data frame
JP2582487B2 (ja) * 1991-07-12 1997-02-19 インターナショナル・ビジネス・マシーンズ・コーポレイション 半導体メモリを用いた外部記憶システム及びその制御方法

Also Published As

Publication number Publication date
CA2088442A1 (en) 1993-07-30
DE69333906D1 (de) 2005-12-22
JP4608587B2 (ja) 2011-01-12
JP4485586B2 (ja) 2010-06-23
US5898868A (en) 1999-04-27
CA2325812C (en) 2001-12-18
JP2011222051A (ja) 2011-11-04
JP2008282429A (ja) 2008-11-20
EP0557736B1 (en) 2005-11-16
JP2006209807A (ja) 2006-08-10
JP4608589B2 (ja) 2011-01-12
CA2325810A1 (en) 1993-07-30
US6256642B1 (en) 2001-07-03
CA2325810C (en) 2001-08-21
JP3825479B2 (ja) 2006-09-27
JP2010049713A (ja) 2010-03-04
JP4858789B2 (ja) 2012-01-18
JP2010049714A (ja) 2010-03-04
CA2325812A1 (en) 1993-07-30
JP2006209808A (ja) 2006-08-10
JP2009146458A (ja) 2009-07-02
EP0557736A2 (en) 1993-09-01
DE69333906T2 (de) 2006-05-24
EP0557736A3 (ja) 1994-02-09
JP2011103137A (ja) 2011-05-26
CA2088442C (en) 2003-04-15
JP4608588B2 (ja) 2011-01-12
US5634050A (en) 1997-05-27
JPH07191892A (ja) 1995-07-28
JP2010049712A (ja) 2010-03-04
JP4836217B2 (ja) 2011-12-14

Similar Documents

Publication Publication Date Title
JP4365385B2 (ja) フラッシュ消去可能なプログラマブル・リードオンリメモリを用いてファイルシステムをマネージする方法及びシステム
US5392427A (en) System for updating data stored on a flash-erasable, programmable, read-only memory (FEPROM) based upon predetermined bit value of indicating pointers
US6587915B1 (en) Flash memory having data blocks, spare blocks, a map block and a header block and a method for controlling the same
US9489301B2 (en) Memory systems
US6381176B1 (en) Method of driving remapping in flash memory and flash memory architecture suitable therefor
KR100453053B1 (ko) 플래쉬 메모리용 파일 시스템
EP0688450B1 (en) Flash file system
US7610434B2 (en) File recording apparatus
US20070294490A1 (en) System and Method of Updating a Memory to Maintain Even Wear
KR20070060070A (ko) 최적화된 순차적인 클러스터 관리용 에프에이티 분석
JP2009199625A (ja) メモリカードおよびメモリカードの制御方法および不揮発性半導体メモリの制御方法
JP2006040264A (ja) メモリカードの制御方法および不揮発性半導体メモリの制御方法
US6938140B2 (en) System and method for linear object reallocation in place
US20070005929A1 (en) Method, system, and article of manufacture for sector mapping in a flash device

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060510

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20061120

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070531

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070830

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071225

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080325

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080428

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080821

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20080908

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20081017

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090218

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090223

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090630

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090820

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

Free format text: PAYMENT UNTIL: 20120828

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20130828

Year of fee payment: 4

EXPY Cancellation because of completion of term
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130828

Year of fee payment: 4