JP4785819B2 - 記憶装置、記憶方法、ならびに、プログラム - Google Patents

記憶装置、記憶方法、ならびに、プログラム Download PDF

Info

Publication number
JP4785819B2
JP4785819B2 JP2007289606A JP2007289606A JP4785819B2 JP 4785819 B2 JP4785819 B2 JP 4785819B2 JP 2007289606 A JP2007289606 A JP 2007289606A JP 2007289606 A JP2007289606 A JP 2007289606A JP 4785819 B2 JP4785819 B2 JP 4785819B2
Authority
JP
Japan
Prior art keywords
bit string
bit
flash memory
written
page
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.)
Active
Application number
JP2007289606A
Other languages
English (en)
Other versions
JP2009116661A (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.)
Konami Digital Entertainment Co Ltd
Original Assignee
Konami Digital Entertainment Co Ltd
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
Application filed by Konami Digital Entertainment Co Ltd filed Critical Konami Digital Entertainment Co Ltd
Priority to JP2007289606A priority Critical patent/JP4785819B2/ja
Publication of JP2009116661A publication Critical patent/JP2009116661A/ja
Application granted granted Critical
Publication of JP4785819B2 publication Critical patent/JP4785819B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、フラッシュメモリを用いる記憶装置において、消去の回数をできるだけ抑制して寿命を長くするのに好適な記憶装置、記憶方法、ならびに、これらをコンピュータにて実現するプログラムに関する。
従来から、EEPROM(Electrically Erasable Programmable Read Only Memory)を用いたフラッシュメモリが広く利用されており、ディジタルカメラやビデオカメラの画像保存媒体やコンピュータの情報記憶媒体等に広く使われている。これらのフラッシュメモリでは、ハードディスク等と等価に取り扱えるように各種のファイルシステムなどが構築されていることも多い。
フラッシュメモリでは、浮遊ゲート(floating gate)を備えるセルが「消去済」「書込済」のいずれの状態をとるかによって1ビットの情報を表現するが、大別してNAND型とNOR型の2種類がある。
ここで、NOR型フラッシュメモリでは、1ビット単位での読出(消去済か書込済かを調べる)と書込(消去済を書込済に更新する)が可能であるが、消去(書込済を消去済に更新する)は、ブロックと呼ばれる複数ビット単位で行う。一方、NAND型フラッシュメモリでは、読出と書込はページと呼ばれる複数ビット単位で行い、消去は、ブロックと呼ばれる複数ビット単位で行う。ここで、1ページがNビットであり、1ブロックがMビットであるとすると、一般に1 < N < Mである。
ただし、NAND型フラッシュメモリは、ページ単位での読出と書込を行うとはいえ、1ページ読み出した後は所望のビットを抽出すれば、読出は1ビット単位で可能であるし、所望のビットを消去から書込に更新したい場合は、一旦ページをRAM(Random Access Memory)等に読み出して、当該所望のビットを消去済から書込済にしたページをRAM内で構成してから、これを当該ページに書き込めば良い。
また、NAND型フラッシュメモリはNOR型フラッシュメモリに比べて誤りが生じることが多いため、ページ単位で誤り訂正符号を記憶する領域を確保するのが一般的である。
フラッシュメモリ技術の分野では、セルの消去済をビット値「1」に書込済をビット値「0」に対応付けて考えることが多い。この場合、「1」から「0」に書き換える際の単位は1ビットもしくは1ページ(Nビット)であり、「0」から「1」に消去する際の単位は1ブロック(Mビット)である、ということになる。もっとも、消去済と書込済に対する「0」「1」の対応付けは、負論理と正論理のいずれを採用するかによって、適宜反転が可能である。
さて、フラッシュメモリには、消去回数に制限があり、消去を頻繁に繰り返すと寿命に達してしまうという性質がある。消去回数を抑制するための技術は、たとえば以下の文献に開示されている。
特開2005−339450号公報
一方で、ゲーム装置などで、プレイヤーの情報やゲームの状態を保存するためのメモリカードにも、フラッシュメモリが使用されている。ゲーム装置などで保存されるゲーム状態のパラメータをビット列により表現した場合、その一部のみが変化して、大部分が変化しないことが多い。また、ゲーム状態のパラメータのうち、数値のものには、殆どの場合に増加し、減少することが稀であるようなものもある。たとえば「ログイン回数」「プレイ時間」「経験値」などのパラメータである。
このような数値パラメータの変化の特徴は、ゲーム装置におけるゲーム状態のほか、各種の情報処理においても見られ、数値はランダムに変化するのではなく、ビット列により表現した場合、その一部のみが変化して、大部分が変化しないことが多い。
したがって、パラメータの変化の特徴を生かしつつ、フラッシュメモリの消去回数を抑制して寿命ができるだけ尽きないようにする技術が強く求められている。
本発明は、上記のような課題を解決するもので、フラッシュメモリを用いる記憶装置において、消去の回数をできるだけ抑制して寿命を長くするのに好適な記憶装置、記憶方法、ならびに、これらをコンピュータにて実現するプログラムを提供することを目的とする。
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
本発明の第1の観点に係る記憶装置は、フラッシュメモリ部、配置部、ビット列読出部、ビット列書込部を備え、以下のように構成する。
すなわち、フラッシュメモリ部は、消去済と書込済のいずれの状態であるかによりビット値の情報を記憶するセルを複数有し、当該セルへの書き込みは、各セルごと、もしくは、N (N>1)個のセルごと(以下「ページごと」という。)に行い、当該セルの消去は、M (M>N)個のセルごと(以下「ブロックごと」という。)に行う。
すなわち、このフラッシュメモリ部は、従来から用いられているEEPROM等のセルの集合体であり、書込はビット単位、もしくは、複数ビットからなるページ単位で行い、読出は複数ビット・複数ページからなるブロック単位で行うものである。
一方、配置部は、識別名を受け付けて、当該識別名と、フラッシュメモリ部においてセルの列が配置される場所と、を対応付けて、フラッシュメモリ部に記憶させる。
すなわち、配置部は、フラッシュメモリ記憶媒体においてファイルシステムを構築する処理を行う。このようなファイルシステムの構築の具体的な手法については、コンピュータの外部記憶装置としてハードディスクと同等に扱うためのファイルシステムの公知の技術を適用するのが典型的である。ただし、後述するように、本発明においては、ファイルの中身が変更されたときに、セル列が配置される場所を再配置しなければならない可能性をできるだけ低減する工夫が、書込の際に行われる。
一方、ビット列読出部は、識別名を受け付けて、フラッシュメモリ部において当該識別名に対応付けられる場所に配置されるセルの列のそれぞれの状態に対応付けられるビット値から、当該識別名に対応付けられるビット列を読み出す。
すなわち、ビット列読出部は、ファイル名に相当する識別名を鍵に、フラッシュメモリ部に記憶されているビット列を読み出す処理を行うものであり、コンピュータの外部記憶装置としてハードディスクと同等に扱うためのファイルシステムの公知の技術を適用するのが典型的である。
さらに、ビット列書込部は、識別名とビット列とを受け付けて、
(a)フラッシュメモリ部に当該識別名に対応付けられる場所が記憶されている場合、当該識別名に対応付けられる場所に配置されるセルの列のうち状態が消去済のセルの一部または全部を書込済にすれば、当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列を当該受け付けられたビット列に一致させることができるならば、フラッシュメモリにおいて当該消去済のセルの一部または全部を書込済に更新し、
(b)上記(a)以外の場合は、配置部に当該識別名に対応付けられる場所を新たに配置させ、新たに配置された場所のセルの列の一部または全部を書込済に更新して、
フラッシュメモリ部において当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列が当該受け付けられたビット列に一致するように書き込む。
すなわち、更新前のビット列と更新後のビット列とを比較し、更新前のビット列の一部または全部を、消去済から書込済に変化させるだけで更新後のビット列になるようであれば、ビット単位でセルに対する書き込みを行うことで、ファイルの中身の更新を行う(上記(a))。
また、更新前のビット列の一部または全部を、消去済から書込済に変化させるだけでは不十分な場合には、セルの再配置を行ってから書き込みを行うことで、ファイルの中身の更新を行う(上記(b))。
従来の技術では、ファイルの中身の更新を行おうとすると、その更新の如何をとわず、上記(b)のように、セルの再配置を行って書き込みをしているが、本発明においては、ファイルの中身の更新を行う際に、その更新の様子を吟味して、セルの再配置をできるだけ生じないように工夫している(上記(a))。そして、セルの再配置には、フラッシュメモリ部の消去が不可避である。
したがって、本発明によれば、フラッシュメモリの消去が生じるのをできるだけ抑制して、寿命を伸ばすことができるようになる。
また、本発明の記憶装置において、当該セルの状態の消去済は0に、書込済は1に、それぞれ対応付けられ、整数書込部、整数読出部をさらに備え、以下のように構成することができる。
すなわち、整数書込部は、識別名と整数値とを受け付けて、当該整数値を所定の除数Dで割った商を表す上位ビット列と、当該整数値を当該所定の除数で割った余の数だけ1を含み、それ以外は0であるD-1ビット長の下位ビット列と、を連結したビット列を生成して、当該識別名と当該生成されたビット列とをビット列書込部に与える。
一般に、現実社会において処理の対象となる整数は、ランダムに変化するものではなく、一定の傾向により変化することが多い。整数を通常のビット列で表現した場合、上位ビットと下位ビットでは、下位ビットの方が頻繁に変化する傾向がある。そこで、上位ビットは、そのまま通常のビット表現を用い、下位ビットは、その数値の数だけ1が並び、あとは0であるビット列に変換してから、フラッシュメモリ部に記憶する。
たとえば、8ビット整数値「122」は、2進数のビット列で表現すると「01111010」となる。そこで、これを上位3ビット「011」と下位5ビット「11010」に分ける。
5ビットの2進数では、0〜31の32通りが表現できるから、0〜31のいずれかの値vを、
「1」がv個、「0」が31-v個
で表現する。
上記の例では、下位5ビット「11010」は、整数値「26」であるから、「1」が26個、「0」が(32−1)−26 = 5個のビット列で表現する。当該32ビットのビット列としては、0側を下位ビットに配置する
1 11111 11111 11111 11111 11111 00000
という表現と、1側を下位ビットに配置する
0 00001 11111 11111 11111 11111 11111
という表現の2通りが典型的である。0〜31の32通りを32ビットのビット列の中で「1」が立っている状態で表現する形式であれば、どのような形式を採用しても良い。
したがって、全体として見ると、8ビット整数値は、3+(32−1)=34ビットで表現されることになり、実際のビット列は、種々の態様が考えられるが、2つの断片を上記の2種類の態様に合わせて配置する以下の4通りのいずれかを選択するのが典型的である。
011 1 11111 11111 11111 11111 11111 00000;
1 11111 11111 11111 11111 11111 00000 011;
011 0 00001 11111 11111 11111 11111 11111;
0 00001 11111 11111 11111 11111 11111 011
さて、当該8ビット整数値「122」が1増加して「123」になったとすると、上記と同様の処理により、そのビット列表現は、上記の典型例に合わせて考えると、
011 1 11111 11111 11111 11111 11111 10000;
1 11111 11111 11111 11111 11111 10000 011;
011 0 00011 11111 11111 11111 11111 11111;
0 00011 11111 11111 11111 11111 11111 011
のいずれかとなる。
この表現を利用する限り、8ビット整数値が1ずつ増加しても、上位ビットが変化するのは32回に1回の割合であり、下位ビットを表現する32ビットは、ほとんどの場合、0だったビットが1に変化するだけである。すなわち、ほとんどの場合は、「消去済」のセルを「書込済」に更新するだけで済み、ブロック消去の原因となるセルの再配置はしないですむことになる。
一方、整数読出部は、識別名を受け付けて、当該識別名をビット列読出部に与え、読み出されたビット列を当該上位ビット列と当該下位ビット列とに分解し、当該上位ビット列により表される整数値にDを乗じて当該下位ビット列に含まれる1の個数を加えた整数値を読み出し結果とする。
これは、上記のような表現によってフラッシュメモリ部に記憶されたビット列を、通常の整数値に戻す処理を行うものである。
本発明によれば、数値の変化の特性を生かしたビット列の表現を採用することで、記憶装置の寿命をできるだけ伸ばすことができるようになる。
また本発明の記憶装置において、フラッシュメモリ部はNOR型フラッシュメモリであり、書き込みは、1ビット単位で行われるように構成することができる。
本発明は、上記発明の好適実施形態に係るものであり、アクセスの際の信頼性が高いとされるNOR型フラッシュメモリを利用するものである。
また、本発明の記憶装置において、フラッシュメモリ部はNAND型フラッシュメモリであり、書き込みは、1ページ単位で行われ、当該ページのうち、ビット列を記憶するためのデータページには、当該データページに記憶されるビット列の誤り訂正符号を表す訂正ビット列を記憶するチェックページが対応付けられ、ビット列書込部が、当該データページにビット列を書き込むと、当該ビット列の訂正ビット列を当該チェックページの先頭から当該訂正ビット列を書き込むように構成することができる。
本発明は、上記発明の好適実施形態に係るものであり、アクセスの際の信頼性がNOR型に比べて低いとされるNAND型フラッシュメモリを利用するものである。従来の技術では、あるページにデータを書き込むと、そのページは消去されるまで更新されないから、各ページに誤り訂正符号用領域を用意していたが、本発明では、あるページにデータを書き込んだ後も、そのページに対するセル単位の書き込みが生じるため、誤り訂正符号も変化する。そこで、この訂正ビット列を別のページの先頭から順に書き込むこととするものである。
本発明のその他の観点に係る記憶方法は、消去済と書込済のいずれの状態であるかによりビット値の情報を記憶するセルを複数有し、当該セルへの書き込みは、各セルごと、もしくは、N (N>1)個のセルごと(以下「ページごと」という。)に行い、当該セルの消去は、M (M>N)個のセルごと(以下「ブロックごと」という。)に行うフラッシュメモリ部を制御し、当該記憶方法は、配置部、ビット列読出部、ビット列書込部を有する記憶装置により実行され、配置工程、ビット列読出工程、ビット列書込工程を備え、以下のように構成する。
すなわち、配置工程では、配置部が、識別名を受け付けて、当該識別名と、フラッシュメモリ部においてセルの列が配置される場所と、を対応付けて、フラッシュメモリ部に記憶させる。
一方、ビット列読出工程では、ビット列読出部が、識別名を受け付けて、フラッシュメモリ部において当該識別名に対応付けられる場所に配置されるセルの列のそれぞれの状態に対応付けられるビット値から、当該識別名に対応付けられるビット列を読み出す。
さらに、ビット列書込工程では、ビット列書込部が、識別名とビット列とを受け付けて、
(a)フラッシュメモリ部に当該識別名に対応付けられる場所が記憶されている場合、当該識別名に対応付けられる場所に配置されるセルの列のうち状態が消去済のセルの一部または全部を書込済にすれば、当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列を当該受け付けられたビット列に一致させることができるならば、フラッシュメモリにおいて当該消去済のセルの一部または全部を書込済に更新し、
(b)上記(a)以外の場合は、配置部に当該識別名に対応付けられる場所を新たに配置させ、新たに配置された場所のセルの列の一部または全部を書込済に更新して、
フラッシュメモリ部において当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列が当該受け付けられたビット列に一致するように書き込む。
本発明のその他の観点に係るプログラムは、フラッシュメモリを有するコンピュータを、上記の記憶装置の各部として機能させるように構成する。典型的には、当該プログラムは、各種のフラッシュメモリカードが内蔵するコントローラチップにて実行されるが、差替可能なEEPROMを独立したカードとして用意し、これが挿入されるコンピュータやゲーム装置のCPU(Central Processing Unit)にて当該プログラムを実行して、CPUがコントローラチップを介さずに直接EEPROMにアクセスすることで、上記の記憶装置を実現することとしても良い。
また、本発明のプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記憶媒体に記録することができる。
上記プログラムは、プログラムが実行されるコンピュータとは独立して、コンピュータ通信網を介して配布・販売することができる。また、上記情報記憶媒体は、コンピュータとは独立して配布・販売することができる。
本発明によれば、フラッシュメモリを用いる記憶装置において、消去の回数をできるだけ抑制して寿命を長くするのに好適な記憶装置、記憶方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
以下に本発明の実施形態を説明する。以下では、理解を容易にするため、ゲーム用の情報処理装置を利用して本発明が実現される実施形態を説明するが、以下に説明する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本発明の範囲に含まれる。
図1は、本発明の記憶装置を利用する典型的な情報処理装置の概要構成を示す模式図である。以下、本図を参照して説明する。
情報処理装置100は、CPU(Central Processing Unit)101と、ROM 102と、RAM(Random Access Memory)103と、インターフェイス104と、コントローラ105と、外部メモリ106と、画像処理部107と、DVD−ROM(Digital Versatile Disc ROM)ドライブ108と、NIC(Network Interface Card)109と、音声処理部110と、マイク111と、を備える。
このうち、外部メモリ106と、CPU 101と、RAM 103と、が、共働して、本実施形態における記憶装置として機能することとなる。本実施形態では、当該記憶装置は、ゲームにおけるログイン回数や経験値などの数値パラメータをセーブするために利用される。以下、詳細に説明する。
ゲーム用のプログラムおよびデータを記憶したDVD−ROMをDVD−ROMドライブ108に装着して、情報処理装置100の電源を投入することにより、当該プログラムが実行され、本実施形態の記憶装置が実現される。
CPU 101は、情報処理装置100全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。また、CPU 101は、レジスタ(図示せず)という高速アクセスが可能な記憶域に対してALU(Arithmetic Logic Unit)(図示せず)を用いて加減乗除等の算術演算や、論理和、論理積、論理否定等の論理演算、ビット和、ビット積、ビット反転、ビットシフト、ビット回転等のビット演算などを行うことができる。さらに、マルチメディア処理対応のための加減乗除等の飽和演算や、三角関数等、ベクトル演算などを高速に行えるように、CPU 101自身が構成されているものや、コプロセッサを備えて実現するものがある。
ROM 102には、電源投入直後に実行されるIPL(Initial Program Loader)が記録され、これが実行されることにより、DVD−ROMに記録されたプログラムをRAM 103に読み出してCPU 101による実行が開始される。また、ROM 102には、情報処理装置100全体の動作制御に必要なオペレーティングシステムのプログラムや各種のデータが記録される。
RAM 103は、データやプログラムを一時的に記憶するためのもので、DVD−ROMから読み出したプログラムやデータ、その他ゲームの進行やチャット通信に必要なデータが保持される。また、CPU 101は、RAM 103に変数領域を設け、当該変数に格納された値に対して直接ALUを作用させて演算を行ったり、RAM 103に格納された値を一旦レジスタに格納してからレジスタに対して演算を行い、演算結果をメモリに書き戻す、などの処理を行う。
インターフェイス104を介して接続されたコントローラ105は、ユーザがゲーム実行の際に行う操作入力を受け付ける。
インターフェイス104を介して着脱自在に接続された外部メモリ106には、ゲーム等のプレイ状況(過去の成績等)を示すデータ、ゲームの進行状態を示すデータ、ネットワーク対戦の場合のチャット通信のログ(記録)のデータなどが書き換え可能に記憶される。ユーザは、コントローラ105を介して指示入力を行うことにより、これらのデータを適宜外部メモリ106に記録することができる。
本実施形態では、この外部メモリ106は、EEPROMにより構成されており、EEPROMのアドレスバスとデータバスがバス(本図の白矢印)経由でCPU 101に接続されるものとする。すなわち、外部メモリ106は、専用のコントローラチップを有するのではなく、CPU 101に直接管理される。このような構成を採用することで、外部メモリ106のコストを低減させることができる。もちろん、専用のコントローラチップを外部メモリ106内に用意して、コンピュータに接続した場合にハードディスクと同様に見えるような機能を持たせることとしても良い。
DVD−ROMドライブ108に装着されるDVD−ROMには、ゲームを実現するためのプログラムとゲームに付随する画像データや音声データが記録される。CPU 101の制御によって、DVD−ROMドライブ108は、これに装着されたDVD−ROMに対する読み出し処理を行って、必要なプログラムやデータを読み出し、これらはRAM 103等に一時的に記憶される。
画像処理部107は、DVD−ROMから読み出されたデータをCPU 101や画像処理部107が備える画像演算プロセッサ(図示せず)によって加工処理した後、これを画像処理部107が備えるフレームメモリ(図示せず)に記録する。フレームメモリに記録された画像情報は、所定の同期タイミングでビデオ信号に変換され画像処理部107に接続されるモニタ(図示せず)へ出力される。これにより、各種の画像表示が可能となる。
画像演算プロセッサは、2次元の画像の重ね合わせ演算やαブレンディング等の透過演算、各種の飽和演算を高速に実行できる。
また、仮想3次元空間に配置され、各種のテクスチャ情報が付加されたポリゴン情報を、Zバッファ法によりレンダリングして、所定の視点位置から仮想3次元空間に配置されたポリゴンを所定の視線の方向へ俯瞰したレンダリング画像を得る演算の高速実行も可能である。
さらに、CPU 101と画像演算プロセッサが協調動作することにより、文字の形状を定義するフォント情報にしたがって、文字列を2次元画像としてフレームメモリへ描画したり、各ポリゴン表面へ描画することが可能である。
NIC 109は、情報処理装置100をインターネット等のコンピュータ通信網(図示せず)に接続するためのものであり、LAN(Local Area Network)を構成する際に用いられる10BASE−T/100BASE−T規格にしたがうものや、電話回線を用いてインターネットに接続するためのアナログモデム、ISDN(Integrated Services Digital Network)モデム、ADSL(Asymmetric Digital Subscriber Line)モデム、ケーブルテレビジョン回線を用いてインターネットに接続するためのケーブルモデム等と、これらとCPU 101との仲立ちを行うインターフェース(図示せず)により構成される。
音声処理部110は、DVD−ROMから読み出した音声データをアナログ音声信号に変換し、これに接続されたスピーカ(図示せず)から出力させる。また、CPU 101の制御の下、ゲームの進行の中で発生させるべき効果音や楽曲データを生成し、これに対応した音声をスピーカや、ヘッドホン(図示せず)、イヤフォン(図示せず)から出力させる。
音声処理部110では、DVD−ROMに記録された音声データがMIDIデータである場合には、これが有する音源データを参照して、MIDIデータをPCMデータに変換する。また、ADPCM形式やOgg Vorbis形式等の圧縮済音声データである場合には、これを展開してPCMデータに変換する。PCMデータは、そのサンプリング周波数に応じたタイミングでD/A(Digital/Analog)変換を行って、スピーカに出力することにより、音声出力が可能となる。
さらに、情報処理装置100には、インターフェイス104を介してマイク111を接続することができる。この場合、マイク111からのアナログ信号に対しては、適当なサンプリング周波数でA/D変換を行い、PCM形式のディジタル信号として、音声処理部110でのミキシング等の処理ができるようにする。
このほか、情報処理装置100は、ハードディスク等の大容量外部記憶装置を用いて、ROM 102、RAM 103、外部メモリ106、DVD−ROMドライブ108に装着されるDVD−ROM等と同じ機能を果たすように構成してもよい。
以上で説明した情報処理装置100は、いわゆる「コンシューマ向けテレビゲーム装置」に相当するものであるが、仮想空間を表示するような画像処理を行うものであれば本発明を実現することができる。したがって、携帯電話、携帯ゲーム機器、カラオケ装置、一般的なビジネス用コンピュータなど、種々の計算機上で本発明を実現することが可能である。
たとえば、一般的なコンピュータは、上記情報処理装置100と同様に、CPU、RAM、ROM、DVD−ROMドライブ、および、NICを備え、情報処理装置100よりも簡易な機能を備えた画像処理部を備え、外部記憶装置としてハードディスクを有する他、フレキシブルディスク、光磁気ディスク、磁気テープ等が利用できるようになっている。また、コントローラ105ではなく、キーボードやマウスなどを入力装置として利用する。
(整数の内部表現)
以下では、本実施形態において使われる整数の内部表現について説明する。一般に、整数をビット列で表現するためには、2の補数表現が用いられる。2の補数表現は、整数値とビット列が対応付けられる表現である。以下に、8ビット整数の例を示す。また、理解を容易にするため、ビット列には空白による区切を入れている。
整数127 ⇔ ビット列0111 1111;
整数126 ⇔ ビット列0111 1110;
…;
整数4 ⇔ ビット列0000 0100;
整数3 ⇔ ビット列0000 0011;
整数2 ⇔ ビット列0000 0010;
整数1 ⇔ ビット列0000 0001;
整数0 ⇔ ビット列0000 0000;
整数-1 ⇔ ビット列1111 1111;
整数-2 ⇔ ビット列1111 1110;
整数-3 ⇔ ビット列1111 1101;
整数-4 ⇔ ビット列1111 1100;
…;
整数-127 ⇔ ビット列1000 0001;
整数-128 ⇔ ビット列1000 0000
ここで、現実社会の活動においては、ゲーム装置の「ログイン回数」「プレイ時間」「経験値」「残り時間」の例に見られるように、整数数値が一方向のみに変化する(増加するのみ、もしくは、減少するのみ)ことが多い。すなわち、非対称な変化をすることが多い。
一方で、フラッシュメモリにおいては、消去済のセルを書込済にするのは、ビット単位やページ単位で可能であり、細かい制御が可能であるが、書込済のセルを消去済に戻すのには、ブロック単位での制御が必要であり、しかも、消去回数にはフラッシュメモリの寿命に基づく制限がある。すなわち、消去済→書込済の変化と、書込済→消去済の変化とは、非対称である。
したがって、この非対称性を生かした整数の内部表現を採用することにより、フラッシュメモリの消去の回数を減らし、これによって寿命を伸ばすことができると期待できる。
さて、上記のビット列の例を見ると、整数値がある方向に変化していったとしても、上位ビットの値は変化しない。一方で、下位ビットは上位ビットに比べて激しく、0→1、1→0と変化する。これをそのままフラッシュメモリに書き込もうとすると、上記のように、ブロック単位での消去が必要になる。この消去の回数は、書込回数のおよそ半分程度と予想される。
したがって、下位ビットの表現に工夫を加えて、消去回数を抑えることを考える。以下では、正整数の値が増加していく状況が頻繁に生じるものとして考える。
フラッシュメモリでは、消去済→書込済に変化させる方が、その逆よりもコストが低い。一方、前提から、正整数の値が増加していく頻度は高い。したがって、正整数の値が増加すると、セルが消去済→書込済に変化するような表現を採用すると、消去回数を減らすことができると考えられる。
まず、2の補数表現による整数を上位ビットと下位ビットに分ける。ここでは、理解を容易にするため、上位ビットは3ビット、下位ビットは5ビットとする。
すると、下位ビットでは、0から31(=25−1)までの32(=25)通りの整数が表現されることになる。
整数値が1ずつ増加していくと、上位ビットは、32回に1回だけ変化するが、下位ビットは、毎回変化する。そこで、2の補数表現では5ビットで表される下位ビットを、25-1=31ビット長のビット列で表現する。すなわち、0から31の数値を、「31ビット長のビット列の中で、値が1であるビットの個数」により表現するのである。
すると、0から31まで数値が増加していく間は、上記のビット表現では、「0であったビット一つが1に変化する」ことを繰り返すことになる。
あとは、この31ビット長のビット列と、上位3ビットのビット列とを連結すれば、本実施形態における内部表現を得ることができる。以下具体例をあげて説明する。
8ビット整数値「122」は、2の補数表現によるビット列で表現すると「0111 1010」となる。そこで、これを上位3ビット「011」と下位5ビット「11010」に分ける。
下位5ビット「11010」は、整数値「26」であるから、「1」が26個、「0」が(32−1)−26 = 5個のビット列で表現する。当該32ビットのビット列としては、0側を下位ビットに配置する
1 11111 11111 11111 11111 11111 00000
という表現と、1側を下位ビットに配置する
0 00001 11111 11111 11111 11111 11111
という表現の2通りが典型的である。0〜31の32通りを32ビットのビット列の中で「1」が立っている状態で表現する形式であれば、たとえばランダムにビット位置を選択して1を立てる等、どのような形式を採用しても良い。
したがって、全体として見ると、8ビット整数値は、本実施形態の内部表現では、3+(32−1)=34ビットで表現されることになる。
本実施形態の内部表現の実際のビット列は、種々の態様が考えられるが、2つの断片を上記の2種類の態様に合わせて配置する以下の4通りのいずれかを選択するのが典型的である。
011 1 11111 11111 11111 11111 11111 00000;
1 11111 11111 11111 11111 11111 00000 011;
011 0 00001 11111 11111 11111 11111 11111;
0 00001 11111 11111 11111 11111 11111 011
さて、当該8ビット整数値「122」が1増加して「123」になったとすると、上記と同様の処理により、そのビット列表現は、上記の典型例に合わせて考えると、
011 1 11111 11111 11111 11111 11111 10000;
1 11111 11111 11111 11111 11111 10000 011;
011 0 00011 11111 11111 11111 11111 11111;
0 00011 11111 11111 11111 11111 11111 011
のいずれかとなる。
この表現を利用する限り、8ビット整数値が1ずつ増加しても、上位ビットが変化するのは32回に1回の割合であり、下位ビットを表現する32ビットは、ほとんどの場合、0だったビットが1に変化するだけである。
一般に、本内部表現では、2の補数表現により表現された整数を上位ビットと下位ビットに分ける。一般に、この分割は、整数値を定数Dで割ったときの商と余により得ることができる。
次に、D-1ビット長のビット列において、当該余の値の個数だけビットを1に立て、それ以外はビットを0にクリアしたままとしたビット列を得る。
そして、商を表すビット列(これは、2の補数表現をそのまま用いることができる。)とD-1ビット長のビット列とを連結する。
そして、本内部表現を採用するのに合わせて、フラッシュメモリのセルの消去済を0に、書込済を1に対応させる。
すると、頻繁に行われる整数が少しずつ増加する演算は、消去済(0)→書込済(1)の変化に対応させ、比較的回数が少ないそれ以外の演算は、書込済(1)→消去済(0)の変化に対応させることができる。したがって、全体として見ると、フラッシュメモリのセルに対するブロック消去の回数が抑制されると期待できる。
さて、正整数については、上記のような内部表現を採用することで、フラッシュメモリの消去回数を抑制できると期待されるが、負の整数が次第に増加していく状況が頻繁に想定される環境下でも、ある整数値xをDで割ったときの商yと余rを以下のように定義することによって、同様の効果を得ることができる。
x = y×D + r,(0≦r≦D-1)
この手法は、単純なビット列の分割と、本質的に同じである。たとえば、
-1 = (-1)×32 + 31;
-2 = (-1)×32 + 30;
-127 = (-4)×32 + 1;
-128 = (-4)×32 + 0
であり、整数「−1」の3ビット長の2の補数表現は「111」であり、整数「−4」の3ビット長の2の補数表現は「100」であるから、それぞれを上記の内部表現の一例で表すと、
整数-1 ⇔ 111 1 11111 11111 11111 11111 11111 11111;
整数-2 ⇔ 111 0 11111 11111 11111 11111 11111 11111;
整数-127 ⇔ 100 0 00000 00000 00000 00000 00000 00001;
整数-128 ⇔ 100 0 00000 00000 00000 00000 00000 00000;
のような対応を付けることができる。
このほか、負の数を表すためには、一旦1の補数表現を採用してから、上位ビットと下位ビットに分割することとしても良い。
以下、整数については、2の補数表現と、上記の内部表現の2通りを適宜使い分けるものとする。また、文字列等の表現については、固定長表現、長さと文字列の組み合わせによる表現、ヌル文字を最後に配置した文字列表現等、用途に合わせて手法を使い分けるものとする。
(記憶装置)
図2は、上記情報処理装置100にプログラムを実行させることにより実現される記憶装置の一実施形態の概要構成を示す説明図である。以下、本図を参照して説明する。
記憶装置201は、フラッシュメモリ部202、配置部203、ビット列読出部204、ビット列書込部205、整数読出部206、整数書込部207、を備える。
フラッシュメモリ部202は、EEPROM等により構成され、複数のセルを有し、当該セルは、消去済、書込済のいずれかの状態をとる。そして、当該セルへの書き込みは、各セルごと、もしくは、N (N>1)個のセルごと(以下「ページごと」という。)に行われる。当該セルの消去は、M (M>N)個のセルごと(以下「ブロックごと」という。)に行われる。以下では、フラッシュメモリ部202として、書き込みをページ単位で行うNAND型のEEPROMを想定して説明をするが、ビット単位での書き込みが可能なNOR型のEEPROMでも、同様の手法を採用することができる。
本実施形態では、理解を容易にするため、セルが消去済の状態をビット値0に、書込済の状態をビット値1に、それぞれ割り当てるものとし、ファイルシステムとして、ファイル名の長さと制限がファイルに格納できる情報量に制限があるものを例としてとりあげて説明する。
本実施形態のフラッシュメモリ部202は、Nビットのページが2×Z個ある集合体である。したがって、フラッシュメモリ部は、Z個の配列p[0],p[1],…,p[Z-1]およびZ個の配列q[0],q[1],…,q[Z-1]からなると考えることができる。
各ページp[i]のセルは、全部でNビットであるが、適宜ビットを割り当てた各フィールドに、以下のような情報を格納する。
(1)ファイル名(識別名)p[i].n。固定長(L文字、8×Lビット)の文字列を採用する。このファイル名としては、文字表現にASCIIを用い、文字列の最後が0で終わるASCIIZ形式を採用する。
(2)当該ページp[i]が、消去しても良いか否かを表すごみビットp[i].e。ごみビットp[i].e = 0であれば、当該ページp[i]は未使用(ファイルとして確保されていない)もしくは使用中であり、ごみビットp[i].e = 1であれば、当該ページp[i]は消去しても良いことを意味する。
(3)当該ページp[i]に格納されるビット列p[i].b。当該ファイルに格納されうる情報のサイズは固定長(N-8×L-1ビット)である。
また、各ページq[i]は、ページp[i]に格納された情報に対する誤り訂正符号を格納するための領域である。ページq[i]は、q[i][0],q[i][1],…,q[i][Q-1]のようにQ個に分割されており、断片q[i][j]は、ページp[i]に対してj回目の書き込みが行われたときの、情報が格納される。具体的には、以下の通りである。
断片q[i][j]に誤り訂正符号が格納されているか否かを示す有効ビットq[i][j].v。たとえば、q[i][0].v = q[i][1].v = … = q[i][k-1].v = 1であり、q[i][k].v = 0である場合は、ページp[i]に対する書き込みがk回行われたことを意味する。
ページp[i]に対する誤り訂正符号q[i][j].c。利用できる誤り訂正符号の最大ビット長は、N/Q - 1ということになる。
上記の整数内部表現を採用して、ファイル1つについて整数1個を記憶させるものとし、その整数が1ずつ増えていく状況を考えると、書込がD回行われるごとに消去を1回行う必要があるものと予想される。したがって、Q≦Dとするのが典型的である。
初期状態(フォーマット直後の状態)では、フラッシュメモリ部202の各ページは、消去されている。したがって、i = 0,1,…,Z-1のそれぞれについて、
p[i].n = ""(長さ0の文字列);
p[i].e = 0;
p[i].b = 0;
q[i][0].v = q[i][1].v = … = q[i][Q-1].v = 0;
q[i][0].c = q[i][1].c = … = q[i][Q-1].c = 0
となる。
さて、本実施形態のフラッシュメモリ部202はNAND型のEEPROMを採用しているため、その読み書きは、ページ単位で行われる。すなわち、あるページp[i]やq[i]における所定位置のビット(列)を読み出すには、まず、その位置を含むページ全体をRAMに読み出す。そして、RAMに読み出されたページ全体のビット列から、所望位置のビット(列)を抽出すれば、所望のビット(列)の読出ができることになる。
一方、書き込みについては、上記と同様に、一旦、書き込みたい位置に記憶されているビット(列)を抽出する。このビット(列)をaとする。一方、その位置に書き込みたいビット(列)をbとする。ビット論理積演算をANDと表記するとき、
a AND b = a
が成立すれば、当該書き込みたい位置にビット(列)bを書き込んだとしても、セルが0(消去済)→1(書込済)へ変化することはあっても、その逆は生じない。
したがって、上記の条件が満たされる場合には、RAMにおいて、aの位置にbを書き込んで更新し、その結果を、フラッシュメモリ部202の当該ページに書き込むことになる。
一般に、あるページ全体をビット列s、当該ページ全体に書き込みたい新たなビット列tについて、
s AND t = s
が成立すれば、当該ページにそのままtを上書きすることができる。一方、これが成立しない場合には、ページの再配置が必要となる。
また、ビット単位での読み書きが可能なNOR型EEPROMを採用する場合には、ファイル管理のためにページを適当なサイズに設定して、ビット単位でアクセスを行っても良いし、ページ単位でまとめてアクセスを行うこととしても良い。
以下では、理解を容易にするため、ページ内の所定のフィールドの内容を読み出す場合には、読み出された当該フィールドの値をp[k].e(k番目のページの消去可能フィールド)のように、当該フィールド名で記載するものとし、上記のようなRAMを経由した読み出しの詳細は言及を省略する。
また、上書きが可能な場合(0が1になるセルが存在しても良いが、1が0になるセルは存在しない場合)に、当該フィールド位置にビット(列)を上書きする処理については、
p[k].e ← 1
のように、←を用いて表記するものとする。
一般に、あるページs全体をビット列として考えたとき、当該ページs全体に書き込みたい新たなビット列tについて、
s AND t = s
が成立すれば、
s ← t
のように、当該ページsにtを、そのまま上書きすることができる。一方、これが成立しない場合には、ページの再配置が必要となる。以下、まず、ページをファイルに割り当てる配置処理について説明する。
(配置処理)
以下では、配置部203が実行する配置処理について説明する。
配置部203は、新たなファイルを作成する際や、ページへの書き込みでは更新が不可能になり、新たなページを割り当てる必要がある場合に開始される。
図3、図4は、配置処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。この配置処理は、いわゆるライブラリ呼び出し、関数呼び出しの形式で実行されるのが典型的である。
配置部203は、フラッシュメモリ部202に新たに確保したいファイル名fを受け付けると(ステップS300)、変数k = 0,1,…,Z-1について、以下の処理を繰り返す(ステップS301〜S304)。
すなわち、
p[k].n = f(ファイル名が一致)かつ
p[k].e = 0(当該ページを使用中)
であるか否かを調べ(ステップS302)、成立すれば(ステップS302;Yes)、
p[k].e ← 1(代入)
を実行してフラッシュメモリへの書き込みを行い(ステップS303)、当該ファイル名に対する既存のファイルを消去可能にし、ループS301〜S304を抜ける。
一方、成立しなければ(ステップS302;No)、次のkを得て繰り返しを続ける(ステップS304)。
次に、配置部203は、変数k = 0,1,…,Z-1について、以下の処理を繰り返す(ステップS305〜S308)。
すなわち、未使用のページを得るため
p[k].n = ""(ファイル名が長さ0の文字列)
p[k].e = 0(当該ページは未使用)
であるか否かを調べ(ステップS306)、そうであれば(ステップS306;Yes)、
p[k].n ← f;
を実行してフラッシュメモリへの書き込みを行い(ステップS307)、ループS305〜S308を抜ける。
一方、成立しなければ(ステップS306;No)、次のkを得て繰り返しを続ける(ステップS308)。
ループS305〜S308が単純に終了した場合、すべてのkについてページp[k]が未使用でないことを意味するから、すでにごみとなっているページを未使用の状態に戻す、すなわち、消去する必要がある。ここで、上記のように、読み書きはページ単位で行えるが、消去は、複数ページからなるブロック単位で行わなければならない。以下、ブロック1個が、B個のページからなるとして、説明する。
変数i = 0,1,…,(Z/B)-1について、以下の処理を繰り返す(ステップS309〜S312)。
ここで、変数iは、ブロック番号を意味する。i番目のブロックには、ページ
p[b×i],p[b×i+1],…,p[b×i+B-1]
および、これらに対応する誤り訂正符号ページ
q[b×i],q[b×i+1],…,q[b×i+B-1]
が対応するものとし、これらの単位で消去が可能であるとする。
そして、当該i番目のブロック(ブロック#i)のページすべてが消去可能であるか否か、すなわち、
p[b×i].e = p[b×i+1].e = … = p[b×i+B-1].e = 1
であるか否かを調べ(ステップS310)、そうであれば(ステップS310;Yes)、p側のブロック
p[b×i],p[b×i+1],…,p[b×i+B-1]
およびq側のブロック
q[b×i],q[b×i+1],…,q[b×i+B-1]
を消去することにより、ブロック#iに対応付けられる各ページを「ページ消去」する(ステップS311)。
ステップS310の条件が満たされない場合(ステップS310;No)、および、ステップS311の後は、次のkを得て繰り返しを続ける(ステップS312)。
そして、ループS309〜S312の繰り返しで消去を行うことができたか否か、すなわち、ステップS311を1回でも通過したか否かを判断する(ステップS313)。消去を行うことができた場合(ステップS313;Yes)、未使用のページを作ることができたことになるから、ステップS305に戻る。
一方、消去ができなかった場合(ステップS313;No)、各ページを移動することによって、消去を行うことを試みる。
あらかじめ、RAM内に、当該ページと同じビット数からなるバッファ領域を2×B個、
r[0],r[1],…,r[B-1];
s[0],s[1],…,s[B-1]
のように用意しておく。
そして、変数b,kを0に設定し(ステップS314)、当該バッファ領域r[0],r[1],…,r[B-1],s[0],s[1],…,s[B-1]の各ビットを、すべて0にクリアする(ステップS315)。
ついで、変数i = 0,1,…,Z-1について、以下の処理を繰り返す(ステップS316〜S330)。
まず、消去しても良いページでないか、それとも、消去して良いページか、すなわち、
p[i].e = 1
であるか否か、を調べる(ステップS317)。1に等しくない場合(ステップS317;No)、ステップS330に進む。
1に等しい場合(ステップS317;Yes)、ページp[i],q[i]は消去してはならないことになるから、
r[b] ← p[i],s[b] ← q[i]
のように、ページの内容を一時的にコピーして(ステップS318)、bの値を1増やす(ステップS319)。
そして、b = Bであるか否かを調べる(ステップS320)。これが成立しない場合(ステップS320;No)、ステップS330に進む。
一方これが成立した場合(ステップS320;Yes)、バッファ領域に1ブロック分のページが蓄積されたことになる。
そこで、ページ
p[k],p[k+1],…,p[k+B-1];
q[k],q[k+1],…,q[k+B-1]
からなるブロック(ブロック番号k/B)を消去して(ステップS321)、
p[k] ← r[0],p[k+1] ← r[1],…,p[k+B-1] ← r[B-1];
q[k] ← s[0],q[k+1] ← s[1],…,q[k+B-1] ← s[B-1]
のように、ブロック番号k/Bのブロックにページの書込を行ってコピー移動を行い(ステップS322)、変数bを0にクリアし、変数kをBだけ増やし(ステップS323)、バッファ領域r[0],r[1],…,r[B-1],s[0],s[1],…,s[B-1]の各ビットを、すべて0にクリアして(ステップS324)、変数iについての繰り返しを続ける(ステップS330)。
なお、i = k+B-1の場合には、ステップS321、ステップS322の処理は省略しても良い。「同じ場所への移動」を意味するからである。
さて、ステップS316〜ステップS330の繰り返しが終了したら、b = 0であるか否かを調べる(ステップS331)。これが成立しない場合(ステップS331;No)、使用中のページの情報がバッファ領域に蓄積されていることになる。
したがって、ページ
p[k],p[k+1],…,p[k+B-1];
q[k],q[k+1],…,q[k+B-1]
からなるブロック(ブロック#k/B)を消去して(ステップS332)、
p[k] ← r[0],p[k+1] ← r[1],…,p[k+B-1] ← r[B-1];
q[k] ← s[0],q[k+1] ← s[1],…,q[k+B-1] ← s[B-1]
のようにページのコピー移動を行い(ステップS333)、変数kをBだけ増やす(ステップS334)。これにより、有効なページがすべて、フラッシュメモリ部202に戻されたことになる。
そして、k < Zが成立する間(ステップS335〜S338)、
p[k],p[k+1],…,p[k+B-1];
q[k],q[k+1],…,q[k+B-1]
からなるブロック(ブロック#k/B)を消去して(ステップS336)、変数kをBだけ増やす(ステップS337)処理を繰り返す(ステップS338)。これによって、残余の不要ブロックをすべて消去する。その後にステップS306に戻る。
一方、b = 0であったら(ステップS331;Yes)、ステップS335に進む。
これらの処理は、いわゆるごみ集め(garbage collection)に相当する処理であり、上記の技術に限らず、公知の種々の技術を適用することができる。
なお、ブロック消去が1回もできなかった場合には、記憶装置201が充満状態になっており、これ以上ファイルを書き込むことはできない旨のエラーを報告して、処理を終了することとしても良い。
さて、ステップS307においてp[k].nにファイル名fの書き込みを行ったら、ファイル名fに対してk番目のページが確保できたことを後述するビット書込処理等に返して(ステップS351)、本処理を終了する。
(ビット列書込処理)
図5は、ビット列書込部205にて実行されるビット列書込処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
ビット列書込処理は、ファイル名fと、書き込むビット列tとを指定する関数呼び出し、ライブラリ呼び出しによって開始されるのが典型的である。
また、ビット列tは、ビット長がN-8×L-1であることを想定して説明するが、ビット列tを適当な長さに分割して、各断片ごとにビット列を書き込み、読み出しできるようにしても良い。この場合には、ファイル名fと当該断片の位置との組み合わせが、その情報に対する識別名として機能する。
さて、ビット列書込部205がファイル名fとビット列tを受け付けると(ステップS401)、変数k = 0,1,…,Z-1について、以下の処理を繰り返す(ステップS402〜S404)。
すなわち、
p[k].n = f(ファイル名が一致)かつ
p[k].e = 0(当該ページを使用中)
であるか否かを調べ(ステップS403)、成立しなければ(ステップS403;No)、次のkを得て繰り返しを続ける(ステップS404)。
ステップS403の条件が成立しないままにループS402〜S404を抜けた場合には、当該ファイル名fが割り当てられたページが存在しないこととなるので、当該ファイル名fを指定して、上記の配置処理を起動し、当該ファイル名fに対するページ番号kを取得し(ステップS405)、誤り訂正符号を書き込む断片の位置hとして0を設定して(ステップS406)、ステップS421へ進む。
一方、ステップS403の条件が成立した場合(ステップS403;Yes)、当該ページに既に格納されているビット列p[k].bと、書き込みたいビット列tと、に、
p[k].b AND t = p[k].b
が成立するか否かを調べる(ステップS407)。成立しない場合(ステップS407;No)、当該ページp[k]はページの再配置が必要となるから、
p[k].e ← 1
を実行して、ページp[k]およびq[k]をごみに設定してから(ステップS408)、ステップS405に進む。
一方、成立する場合(ステップS407;Yes)、ページp[k]に対する誤り訂正符号を格納できるか否かを調べるため、変数h = 0,1,…,Q-1について、順に以下の処理を繰り返す(ステップS411)。
すなわち、
q[k][h].v = 0
であるか否かを判断し(ステップS412)、そうであれば(ステップS412;Yes)、断片の位置hに誤り訂正符号を書き込むことができるので、ステップS421へ進む。
もしq[k][h].v = 1であれば(ステップS412;No)、次のhを得て繰り返しを続ける(ステップS413)。
ステップS412の条件が成立しないままにループS411〜S413が終了した場合、誤り訂正符号を格納できる領域がページq[k]に残っていないことになるため、ページの再配置が必要となるから、ステップS405に進む。
さて、ファイル名fに対してビット列tが書き込み可能なページp[k]、および、当該ページp[k]に対する誤り訂正符号を書き込むページq[k]内の断片q[k][h]に対するインデックスk,hが得られたら、ビット列tに対する誤り訂正符号uを計算する(ステップS421)。採用する誤り訂正符号の種類は、ハミング符号やリード・ソロモン符号等、用途とビット長の制限に応じて適宜選択することができる。
誤り訂正符号uが計算されたら、
p[k].b ← t;
q[k][h].v ← 1;
q[k][h].c ← u
のように、各ページに情報を書き込み(ステップS422)、本処理を終了する。
(ビット列読出処理)
図6は、ビット列読出部204により実行されるビット列読出処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
ビット列読出処理は、ファイル名fを指定する関数呼び出し、ライブラリ呼び出しによって開始されるのが典型的である。
また、読み出されるビット列は、上記のビット列の書込処理と同様に、ビット長がN-8×L-1であることを想定して説明するが、読み出されるビット列を適当な長さに分割して、各断片ごとにビット列を読み出しできるようにしても良い。この場合には、ファイル名fと当該断片の位置との組み合わせが、その情報に対する識別名として機能する。
さて、ビット列読出部204がファイル名fを受け付けると(ステップS501)、変数k = 0,1,…,Z-1について、以下の処理を繰り返す(ステップS502〜S504)。
すなわち、
p[k].n = f(ファイル名が一致)かつ
p[k].e = 0(当該ページを使用中)
であるか否かを調べ(ステップS503)、成立しなければ(ステップS503;No)、次のkを得て繰り返しを続ける(ステップS504)。
ステップS503の条件が成立しないままにループS502〜S504を抜けた場合には、当該ファイル名fが割り当てられたページが存在しないこととなるので、当該ファイルは存在しない旨のエラーを報告して(ステップS505)、本処理終了する。
一方、ステップS503の条件が成立した場合(ステップS503;Yes)、ページp[k]に対する誤り訂正符号を取得するため、変数h = 0,1,…,Q-2について、順に以下の処理を繰り返す(ステップS511)。
すなわち、
q[k][h].v = 1かつq[k][h+1].v = 0
であるか否かを判断し(ステップS512)、そうであれば(ステップS512;Yes)、断片の位置hに最新の誤り訂正符号が書き込まれていることになるので、ステップS521へ進む。
一方ステップS512の条件が成立しなければ(ステップS512;No)、次のhを得て繰り返しを続ける(ステップS513)。
ステップS512の条件が成立しないままにループS511〜S513が終了した場合、断片の位置Q-1に最新の誤り訂正符号が記憶されていることになるので、hにQ-1を設定して(ステップS514)、ステップS521に進む。
さて、ファイル名fに対するページp[k]および当該ページp[k]に対する最新の誤り訂正符号が書き込まれたページq[k]内の断片q[k][h]についての、インデックスk,hが得られたら、ページp[k]に格納されたビット列p[k].bを、誤り訂正符号q[k][h].cで、誤り訂正して、ビット列tを得る(ステップS521)。
そして、誤り訂正の結果のビット列tを、読み出した結果として返して(ステップS522)、本処理を終了する。
上述のファイルシステムは極めて単純なものであるが、他の種々のファイルシステムにおいても、本発明の原理を適用することが可能である。たとえば、複数ページにまたがる可変長のファイルを処理可能とするために、各ページpには、ファイル内における次のページのインデックスを格納することとし、ファイルの全体長は、当該ページ群に対するq内に格納する等の手法や、公知のファイルシステム構築技術を配置部202や、ビット列読出部204、ビット列書込部205における処理対称のページ位置の検索に適用することができる。
なお、上記の実施形態では、NAND型EEPROMを使用しているため、誤り訂正符号を適用することが望ましい場合が多いが、誤りが生じる可能性がよりNOR型EEPROMの場合等では、誤り訂正符号に係る構成や処理を省略することとしても良い。
さて、上記のような、フラッシュメモリ部202、配置部203、ビット列読出部204、ビット列書込部205による構成を用いても、従来の技術に比べて各ページに対する消去回数は、抑制できるものと期待される。たとえば、各種のログファイルのように、ファイルの内容に文字列の追加のみが行われるような場合には、上記の構成のみであっても、ページ消去の回数を抑制することができる。
以下では、前述のような内部表現を用いることで、さらにページ消去の回数を抑制する手法について説明する。
(整数書込・整数読出)
整数以外のビット列については、上記のように、直接、ビット列読出部204、ビット列書込部205を利用することで、ページ消去の回数を抑制しつつアクセスが可能となるが、整数については、前述の内部表現の変換を行うことで、さらにページ消去の回数を抑制することが期待できる。
すなわち、整数書込部207は、ファイル名(および、ページの大きさによっては、当該ファイル内における位置)に相当する識別名vと、当該識別名vに対して記憶する整数値wと、を受け付けて、整数値wを、上記の内部表現に変換し、当該識別名vと、変換結果のビット列w'と、を、ビット列書込部205に渡す。
一方、整数読出部206は、ファイル名(および、ページの大きさによっては、当該ファイル内における位置)に相当する識別名vを受け付けて、これをビット列読出部204に渡し、返ってきた内部表現のビット列x'を、整数値xに逆変換して、読み出された整数値として取得し、他の処理で利用可能なようにする。
上記のように、整数値の変化に非対称性がある場合には、本実施形態の内部表現を用いることで、各セルについて、0(消去済)→1(書込済)の変化の方が、その逆の変化よりも頻繁に発生するようになるため、ページの再配置・消去が必要ない更新の機会を増やすことができる。
以上説明したように、本発明によれば、フラッシュメモリを用いる記憶装置において、消去の回数をできるだけ抑制して寿命を長くするのに好適な記憶装置、記憶方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
本発明の記憶装置が利用される典型的な情報処理装置の概要構成を示す模式図である。 情報処理装置にプログラムを実行させることにより実現される記憶装置の一実施形態の概要構成を示す説明図である。 配置部により実行される配置処理の制御の流れを示すフローチャートである。 配置部により実行される配置処理の制御の流れを示すフローチャートである。 ビット列書込部により実行されるビット列書込処理の制御の流れを示すフローチャートである。 ビット列読出部により実行されるビット列読出処理の制御の流れを示すフローチャートである。
符号の説明
100 情報処理装置
101 CPU
102 ROM
103 RAM
104 インターフェイス
105 コントローラ
106 外部メモリ
107 画像処理部
108 DVD−ROMドライブ
109 NIC
110 音声処理部
111 マイク
201 記憶装置
202 フラッシュメモリ部
203 配置部
204 ビット列読出部
205 ビット列書込部
206 整数読出部
207 整数書込部

Claims (4)

  1. 消去済と書込済のいずれの状態であるかによりビット値の情報を記憶するセルを複数有し、当該セルへの書き込みは、各セルごと、もしくは、N (N>1)個のセルごと(以下「ページごと」という。)に行い、当該セルの消去は、M (M>N)個のセルごと(以下「ブロックごと」という。)に行うフラッシュメモリ部、
    識別名を受け付けて、当該識別名と、前記フラッシュメモリ部においてセルの列が配置される場所と、を対応付けて、前記フラッシュメモリ部に記憶させる配置部、
    識別名を受け付けて、前記フラッシュメモリ部において当該識別名に対応付けられる場所に配置されるセルの列のそれぞれの状態に対応付けられるビット値から、当該識別名に対応付けられるビット列を読み出すビット列読出部、
    識別名とビット列とを受け付けて、
    (a)前記フラッシュメモリ部に当該識別名に対応付けられる場所が記憶されている場合、当該識別名に対応付けられる場所に配置されるセルの列のうち状態が消去済のセルの一部または全部を書込済にすれば、当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列を当該受け付けられたビット列に一致させることができるならば、前記フラッシュメモリにおいて当該消去済のセルの一部または全部を書込済に更新し、
    (b)上記(a)以外の場合は、前記配置部に当該識別名に対応付けられる場所を新たに配置させ、前記新たに配置された場所のセルの列の一部または全部を書込済に更新して、
    前記フラッシュメモリ部において当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列が当該受け付けられたビット列に一致するように書き込むビット列書込部
    を備え
    前記フラッシュメモリ部はNAND型フラッシュメモリであり、当該セルの状態の消去済は0に、書込済は1に、それぞれ対応付けられ、書き込みは、1ページ単位で行われ、当該ページのうち、ビット列を記憶するためのデータページには、当該データページに記憶されるビット列の誤り訂正符号を表す訂正ビット列を所定個数まで格納可能な訂正ビット列格納領域と、前記所定個数の領域のそれぞれの位置に訂正ビット列が格納されているか否かを1か0かにより示す有効ビットからなる有効ビット列が格納される有効ビット列格納領域と、を含むチェックページが対応付けられ、
    前記ビット列書込部が、当該データページにビット列を書き込むと、当該有効ビット列格納領域に格納される有効ビット列のうち、値が0である有効ビットを先頭から走査して、当該訂正ビット列格納領域のうち未だ訂正ビット列が記憶されていない位置を求め、
    (p)訂正ビット列が記憶されていない位置が求められれば、当該訂正ビット列格納領域のうち、当該求められた位置に当該訂正ビット列を書き込み、当該有効ビット列格納領域のうち、当該求められた位置に対する有効ビットに1を書き込み、
    (q)訂正ビット列が記憶されていない位置が求められなければ、ページの再配置を行ってから、当該訂正ビット列格納領域のうち、先頭の位置に当該訂正ビット列を書き込み、当該有効ビット列格納領域のうち、先頭の有効ビットに1を書き込む
    ことを特徴とする記憶装置。
  2. 請求項1に記載の記憶装置であって
    識別名と整数値とを受け付けて、当該整数値を所定の除数Dで割った商を表す上位ビット列と、当該整数値を当該所定の除数で割った余の数だけ1を含み、それ以外は0であるD-1ビット長の下位ビット列と、を連結したビット列を生成して、当該識別名と当該生成されたビット列とを前記ビット列書込部に与える整数書込部、
    識別名を受け付けて、当該識別名を前記ビット列読出部に与え、読み出されたビット列を当該上位ビット列と当該下位ビット列とに分解し、当該上位ビット列により表される整数値にDを乗じて当該下位ビット列に含まれる1の個数を加えた整数値を読み出し結果とする整数読出部
    をさらに備えることを特徴とする記憶装置。
  3. 消去済と書込済のいずれの状態であるかによりビット値の情報を記憶するセルを複数有し、当該セルへの書き込みは、各セルごと、もしくは、N (N>1)個のセルごと(以下「ページごと」という。)に行い、当該セルの消去は、M (M>N)個のセルごと(以下「ブロックごと」という。)に行うフラッシュメモリ部を制御する記憶方法であって、当該記憶方法は、配置部、ビット列読出部、ビット列書込部を有する記憶装置により実行され、
    前記配置部が、識別名を受け付けて、当該識別名と、前記フラッシュメモリ部においてセルの列が配置される場所と、を対応付けて、前記フラッシュメモリ部に記憶させる配置工程、
    前記ビット列読出部が、識別名を受け付けて、前記フラッシュメモリ部において当該識別名に対応付けられる場所に配置されるセルの列のそれぞれの状態に対応付けられるビット値から、当該識別名に対応付けられるビット列を読み出すビット列読出工程、
    前記ビット列書込部が、識別名とビット列とを受け付けて、
    (a)前記フラッシュメモリ部に当該識別名に対応付けられる場所が記憶されている場合、当該識別名に対応付けられる場所に配置されるセルの列のうち状態が消去済のセルの一部または全部を書込済にすれば、当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列を当該受け付けられたビット列に一致させることができるならば、前記フラッシュメモリにおいて当該消去済のセルの一部または全部を書込済に更新し、
    (b)上記(a)以外の場合は、前記配置部に当該識別名に対応付けられる場所を新たに配置させ、前記新たに配置された場所のセルの列の一部または全部を書込済に更新して、
    前記フラッシュメモリ部において当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列が当該受け付けられたビット列に一致するように書き込むビット列書込工程
    を備え
    前記フラッシュメモリ部はNAND型フラッシュメモリであり、当該セルの状態の消去済は0に、書込済は1に、それぞれ対応付けられ、書き込みは、1ページ単位で行われ、当該ページのうち、ビット列を記憶するためのデータページには、当該データページに記憶されるビット列の誤り訂正符号を表す訂正ビット列を所定個数まで格納可能な訂正ビット列格納領域と、前記所定個数の領域のそれぞれの位置に訂正ビット列が格納されているか否かを1か0かにより示す有効ビットからなる有効ビット列が格納される有効ビット列格納領域と、を含むチェックページが対応付けられ、
    前記ビット列書込工程にて、前記ビット列書込部が当該データページにビット列を書き込むと、前記ビット列書込部は、当該有効ビット列格納領域に格納される有効ビット列のうち、値が0である有効ビットを先頭から走査して、当該訂正ビット列格納領域のうち未だ訂正ビット列が記憶されていない位置を求め、
    (p)訂正ビット列が記憶されていない位置が求められれば、当該訂正ビット列格納領域のうち、当該求められた位置に当該訂正ビット列を書き込み、当該有効ビット列格納領域のうち、当該求められた位置に対する有効ビットに1を書き込み、
    (q)訂正ビット列が記憶されていない位置が求められなければ、ページの再配置を行ってから、当該訂正ビット列格納領域のうち、先頭の位置に当該訂正ビット列を書き込み、当該有効ビット列格納領域のうち、先頭の有効ビットに1を書き込む
    ことを特徴とする記憶方法。
  4. 消去済と書込済のいずれの状態であるかによりビット値の情報を記憶するセルを複数有し、当該セルへの書き込みは、各セルごと、もしくは、N (N>1)個のセルごと(以下「ページごと」という。)に行い、当該セルの消去は、M (M>N)個のセルごと(以下「ブロックごと」という。)に行うフラッシュメモリ部を制御するコンピュータを、
    識別名を受け付けて、当該識別名と、前記フラッシュメモリ部においてセルの列が配置される場所と、を対応付けて、前記フラッシュメモリ部に記憶させる配置部、
    識別名を受け付けて、前記フラッシュメモリ部において当該識別名に対応付けられる場所に配置されるセルの列のそれぞれの状態に対応付けられるビット値から、当該識別名に対応付けられるビット列を読み出すビット列読出部、
    識別名とビット列とを受け付けて、
    (a)前記フラッシュメモリ部に当該識別名に対応付けられる場所が記憶されている場合、当該識別名に対応付けられる場所に配置されるセルの列のうち状態が消去済のセルの一部または全部を書込済にすれば、当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列を当該受け付けられたビット列に一致させることができるならば、前記フラッシュメモリにおいて当該消去済のセルの一部または全部を書込済に更新し、
    (b)上記(a)以外の場合は、前記配置部に当該識別名に対応付けられる場所を新たに配置させ、前記新たに配置された場所のセルの列の一部または全部を書込済に更新して、
    前記フラッシュメモリ部において当該セルの列のそれぞれの状態に対応付けられるビット値からなるビット列が当該受け付けられたビット列に一致するように書き込むビット列書込部
    として機能させ
    前記フラッシュメモリ部はNAND型フラッシュメモリであり、当該セルの状態の消去済は0に、書込済は1に、それぞれ対応付けられ、書き込みは、1ページ単位で行われ、当該ページのうち、ビット列を記憶するためのデータページには、当該データページに記憶されるビット列の誤り訂正符号を表す訂正ビット列を所定個数まで格納可能な訂正ビット列格納領域と、前記所定個数の領域のそれぞれの位置に訂正ビット列が格納されているか否かを1か0かにより示す有効ビットからなる有効ビット列が格納される有効ビット列格納領域と、を含むチェックページが対応付けられ、
    前記ビット列書込部が、当該データページにビット列を書き込むと、当該有効ビット列格納領域に格納される有効ビット列のうち、値が0である有効ビットを先頭から走査して、当該訂正ビット列格納領域のうち未だ訂正ビット列が記憶されていない位置を求め、
    (p)訂正ビット列が記憶されていない位置が求められれば、当該訂正ビット列格納領域のうち、当該求められた位置に当該訂正ビット列を書き込み、当該有効ビット列格納領域のうち、当該求められた位置に対する有効ビットに1を書き込み、
    (q)訂正ビット列が記憶されていない位置が求められなければ、ページの再配置を行ってから、当該訂正ビット列格納領域のうち、先頭の位置に当該訂正ビット列を書き込み、当該有効ビット列格納領域のうち、先頭の有効ビットに1を書き込む
    ように機能させることを特徴とするプログラム。
JP2007289606A 2007-11-07 2007-11-07 記憶装置、記憶方法、ならびに、プログラム Active JP4785819B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007289606A JP4785819B2 (ja) 2007-11-07 2007-11-07 記憶装置、記憶方法、ならびに、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007289606A JP4785819B2 (ja) 2007-11-07 2007-11-07 記憶装置、記憶方法、ならびに、プログラム

Publications (2)

Publication Number Publication Date
JP2009116661A JP2009116661A (ja) 2009-05-28
JP4785819B2 true JP4785819B2 (ja) 2011-10-05

Family

ID=40783739

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007289606A Active JP4785819B2 (ja) 2007-11-07 2007-11-07 記憶装置、記憶方法、ならびに、プログラム

Country Status (1)

Country Link
JP (1) JP4785819B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101326011B1 (ko) * 2010-10-29 2013-11-07 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 솔리드 스테이트 드라이브를 위한 삭제 카운트가 감소된 진보된 데이터 인코딩
JP5614337B2 (ja) 2011-03-08 2014-10-29 富士通セミコンダクター株式会社 メモリの制御方法、メモリの制御回路、記憶装置、及び電子機器
KR101741346B1 (ko) 2013-01-11 2017-06-15 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 플래시 메모리들에 대한 페이지 할당
KR101742462B1 (ko) 2013-02-27 2017-06-01 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 메모리 디바이스들을 위한 선형 프로그래밍 기반 디코딩
US9859925B2 (en) 2013-12-13 2018-01-02 Empire Technology Development Llc Low-complexity flash memory data-encoding techniques using simplified belief propagation
CN111208950B (zh) * 2020-01-15 2023-07-14 山西银河电子设备厂 一种基于单片机的提升norflash使用周期的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0817192A (ja) * 1994-06-27 1996-01-19 Yaskawa Electric Corp フラッシュメモリによる位置記憶方法
JP2000020409A (ja) * 1998-07-07 2000-01-21 Seiko Epson Corp 半導体記憶装置
US7065607B2 (en) * 2002-06-28 2006-06-20 Microsoft Corporation System and method for implementing a counter
JP2005078378A (ja) * 2003-08-29 2005-03-24 Sony Corp データ記憶装置及び不揮発性メモリに対するデータ書き込み方法
JP2005339450A (ja) * 2004-05-31 2005-12-08 Pentel Corp フラッシュメモリのデータ管理方式
JP2007034431A (ja) * 2005-07-22 2007-02-08 Fuji Xerox Co Ltd メモリ制御装置

Also Published As

Publication number Publication date
JP2009116661A (ja) 2009-05-28

Similar Documents

Publication Publication Date Title
JP4785819B2 (ja) 記憶装置、記憶方法、ならびに、プログラム
US8516219B2 (en) Index cache tree
JP4734033B2 (ja) 記憶装置
JP4122972B2 (ja) データ記録装置及びフラッシュメモリに対するデータ書き込み方法
US10698814B2 (en) Data storage devices and data processing methods
JP2006221636A (ja) Run単位アドレスマッピングテーブル及びそれの構成方法
TWI306263B (ja)
KR102603070B1 (ko) 메모리 시스템, 메모리 시스템에 데이터를 기록하는 방법 및 메모리 시스템으로부터 데이터를 판독하는 방법
KR20040023643A (ko) 플래시 메모리장치 및 그것에 기억된 데이터의 머지방법
JP2008003932A (ja) データ記憶装置、データ記憶方法およびコンピュータプログラム
CN110109926A (zh) 一种Equihash算法数据的排序装置和排序方法
CN109976664A (zh) 固态存储设备的日志数据组织
JP2007250101A (ja) 不揮発性メモリ装置および不揮発性メモリ装置の制御方法
JP2019016328A (ja) 情報処理装置、情報処理システム及びプログラム
JP2002202912A (ja) 記録装置、記録制御方法、及びプログラム
JP6072428B2 (ja) 制御装置、記憶装置、記憶制御方法
US8429338B2 (en) Method and apparatus for emulating byte wise programmable functionality into sector wise erasable memory
JP3748847B2 (ja) 格納装置、プログラム、ならびに、格納方法
JP7196457B2 (ja) データ処理装置及びデータ処理プログラム
JP2008299455A (ja) データ記憶装置及びデータ管理方法
JP4818893B2 (ja) 画像処理装置及びプログラム
KR100688463B1 (ko) 물리 메모리의 데이터 기록 및 삭제 방법
KR102172219B1 (ko) 객체의 메타데이터 처리 장치 및 방법
US7065606B2 (en) Controller architecture for memory mapping
JP3998941B2 (ja) データビットを選択(パンクチャリング)するための方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110324

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110526

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110621

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: 20110712

R150 Certificate of patent or registration of utility model

Ref document number: 4785819

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20140722

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250