(57)【要約】【課題】書き込み中の電源遮断が発生しても管理情報は必ず保持されるとともに、データ本体については、少なくとも書き込み開始直前の状態を保持することができるファイルシステムを提供する。【解決手段】第１のファイルおよび第１のファイルをコピーした第２のファイルのデータ本体を格納するデータ領域と、記憶装置内におけるデータ本体の配置を管理する管理領域と、第１のファイルおよび第２のファイルのうち、最新の書き込みが行われたのはどちらかを示すフラグ情報を格納する領域とを備え、ファイルを新規作成する場合には、管理領域に第１のファイルおよび第２のファイルの配置に関する情報を作成し、データ領域に第１のファイルおよび第２のファイルを生成するとともに、フラグ情報には、最新の書き込みが行われたのはどちらのファイルであるかを記憶しておく。【選択図】図４
2007133535.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置内に構築されるファイルシステムであって、
第１のファイルおよび前記第１のファイルをコピーした第２のファイルのデータ本体を格納するデータ領域と、
前記記憶装置内における前記データ本体の配置を管理する管理領域と、
前記第１のファイルおよび前記第２のファイルのうち、最新の書き込みが行われたのはどちらかを示すフラグ情報を格納する領域とを備え、
ファイルを新規作成する場合には、前記管理領域に前記第１のファイルおよび前記第２のファイルの配置に関する情報を作成し、前記データ領域に前記第１のファイルおよび前記第２のファイルを生成するとともに、前記フラグ情報には、最新の書き込みが行われたのは前記第１のファイルであることを記憶しておき、
ファイルへの書き込みを行う場合には、前記フラグ情報に従って前記第１のファイルまたは前記第２のファイルのいずれかのデータ領域にのみ書き込みを行うことを特徴とする記憶装置内のファイルシステム。
【請求項２】
前記フラグ情報を格納する領域は、前記第１のファイルおよび前記第２のファイルの前記データ領域に確保されることを特徴とする請求項１記載の記憶装置内のファイルシステム。
【請求項３】
前記フラグ情報を格納する領域は、バッテリによりバックアップされた揮発性メモリ上に確保されることを特徴とする請求項１記載の記憶装置内のファイルシステム。
【請求項４】
前記第１のファイルまたは前記第２のファイルへの書き込み後、前記フラグ情報が前記第１のファイルを指示していた場合には前記第２のファイルを指示するように前記フラグ情報を変更し、前記フラグ情報が前記第２のファイルを指示していた場合には前記第１のファイルを指示するように前記フラグ情報を変更することを特徴とする請求項１記載の記憶装置内のファイルシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置内のファイルシステムに関し、特に組み込みシステムにおいて、書き込み処理を行っている最中に電源が遮断されてもデータの破壊や不整合を防止できる記憶装置内のファイルシステムに関する。
【背景技術】
【０００２】
小型軽量、低消費電力、耐衝撃性などの特長を備えた半導体メモリデバイスとしてフラッシュメモリデバイスがある。近年、このフラッシュメモリデバイスの高集積化、低価格化が進んだことにより、組み込みシステムにおいても、記憶装置として用いられるようになってきた。
【０００３】
フラッシュメモリデバイスでは、ファイルシステムと呼ばれる形式でデータを操作することが一般的である。ファイルシステムでは、アクセスしたい内容をファイルという単位で操作する。ファイルはデータ本体と管理情報とに分られる。
データ本体には、単独あるいは複数の固定長領域に格納されている。
一方管理情報には、データ本体がいずれの固定長領域から格納開始されているか、複数の固定長領域が使用されている場合はどのような順番で格納されているかという内容が格納されている。管理情報にはまた、データ本体のサイズ、ファイルの名称、ファイル生成日時といった内容も格納されている。
【０００４】
上記のファイルシステムとして代表的なものにＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）がある。このファイルシステムは多くのコンピュータで利用可能であるため、組み込みシステムにおいても、利便性を高める目的でＦＡＴは特に広く採用されるようになってきている。
【０００５】
しかしながら、メモリにファイルを書き込んでいる最中に電源が遮断されると、データ本体が破壊されたり、管理情報の整合性が失われたりして、その後のファイルアクセスが正しく行えなくなることがある。
ファイルを書き込んでいる最中に電源が遮断される原因としては、落雷や電源の不良による物的要因のほか、ファイル書き込み中に作業者が電源ＯＦＦ操作を行ってしまうといった人的要因もある。
【０００６】
このような、書き込み処理を行っている最中の電源遮断に対し、無停電電源装置（ＵＰＳ：Ｕｎｉｎｔｅｒｒｕｐｔｉｂｌｅ  Ｐｏｗｅｒ  Ｓｕｐｐｌｙ）を備え、書き込みが完了するまで電力を供給する方法が知られている。しかし、無停電電源装置は予備電源としてバッテリを用いるため、小型化、低価格化が容易ではない。また、耐環境性、寿命、メンテナンス性にも問題がある。さらにこの方法では、ソフトウェアの不具合等でファイルの書き込み中にシステムがハングアップしてしまった場合には対処することができない。
【０００７】
他の解決方法として、パーソナルコンピュータでは障害の発生を避けられないものとし障害が発生した後にファイルシステム情報の全体検査と修復を実行する方法が知られている。この方法では、全体検査の時間が長大となる上、そもそも全てのファイル復旧が保証できないなど修復可能な障害の範囲が限られているという問題がある。
【０００８】
このため従来の技術では、書き込みデータを既存のデータとマージし、未使用領域に追加記述し、２組の管理領域に順次書き込むようにしていた（例えば、特許文献１参照）。また、３組の管理領域に順次書き込むことで修復を可能にしていた（例えば、特許文献２参照）。
【０００９】
【特許文献１】特開２００５−１４９２９１号公報
【特許文献２】特開２００５−２３５０２８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら特許文献１の方法では、データが書き込まれるたびに未使用領域を消費してゆくため、長期間の運用には耐えられないという問題があった。また、２組の管理領域のいずれが正しいものであるかどうかの判断が難しいという問題もあった。
【００１１】
さらに特許文献２の方法では、書き込み中であったファイルのデータ本体は復旧することができないという問題があった。
【００１２】
本発明はこのような問題点に鑑みてなされたものであり、書き込み中の電源遮断が発生しても管理情報は必ず保持されるとともに、データ本体については、少なくとも書き込み開始直前の状態を保持することができるファイルシステムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記問題を解決するため、本発明は、次のようにしたのである。
【００１４】
請求項１に記載の発明は、記憶装置内に構築されるファイルシステムであって、第１のファイルおよび前記第１のファイルをコピーした第２のファイルのデータ本体を格納するデータ領域と、前記記憶装置内における前記データ本体の配置を管理する管理領域と、前記第１のファイルおよび前記第２のファイルのうち、最新の書き込みが行われたのはどちらかを示すフラグ情報を格納する領域とを備え、ファイルを新規作成する場合には、前記管理領域に前記第１のファイルおよび前記第２のファイルの配置に関する情報を作成し、前記データ領域に前記第１のファイルおよび前記第２のファイルを生成するとともに、前記フラグ情報には、最新の書き込みが行われたのは前記第１のファイルであることを記憶しておき、ファイルへの書き込みを行う場合には、前記フラグ情報に従って前記第１のファイルまたは前記第２のファイルのいずれかのデータ領域にのみ書き込みを行うことを特徴とする。
【００１５】
請求項２に記載の発明は、前記フラグ情報を格納する領域は、前記第１のファイルおよび前記第２のファイルの前記データ領域に確保されることを特徴とする。
【００１６】
請求項３に記載の発明は、前記フラグ情報を格納する領域は、バッテリによりバックアップされた揮発性メモリ上に確保されることを特徴とする。
【００１７】
請求項４に記載の発明は、前記第１のファイルまたは前記第２のファイルへの書き込み後、前記フラグ情報が前記第１のファイルを指示していた場合には前記第２のファイルを指示するように前記フラグ情報を変更し、前記フラグ情報が前記第２のファイルを指示していた場合には前記第１のファイルを指示するように前記フラグ情報を変更することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、既存のファイルシステムと互換性を保ったままで、予期せぬ電源の遮断が生じてもファイルシステム全体に矛盾を引き起こすことがなくなり、かつ、二重化されたファイルのうち、正常な書き込みが最後に完了したファイルを必ず読み出すことができるようになる。
つまり、予期せぬ電源の遮断が生じても正しいデータにアクセスすることができるシステムを、性能を損なうことなく低コストで実現できるという効果がある。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の方法の具体的実施例について、図に基づいて説明する。
【実施例１】
【００２０】
図１は、本発明を適用する記憶装置の構成を示す概略図である。この装置はＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、Ｉ／Ｏ（Input/Output）１０５、２次記憶装置用Ｉ／Ｆ（Interface）１０６、２次記憶装置１０７で構成される。
【００２１】
ＣＰＵ１０１はバス１０４を介した他の構成部品との情報の入出力やプログラムに基づいた数値演算や論理演算を行い、装置全体を制御するもので半導体デバイスの代表的なものである。
【００２２】
ＲＯＭ１０２はプログラムを記憶する半導体メモリデバイスである。読み出し専用で電源を遮断しても内容は失われず、主に装置の立ち上げ動作に必要なプログラムを格納する。ＲＡＭ１０３は読み出しと書き込みが自由な半導体メモリデバイスである。装置の動作中に２次記憶装置１０７のプログラムをコピーして使用したり、一時的にデータを格納したりする。
【００２３】
Ｉ／Ｏ１０５は２次記憶装置１０７以外の各種の入出力である。通信装置やセンサ、アクチュエータを接続する。本発明において特に関連がないので詳細説明は省略する。２次記憶装置用Ｉ／Ｆ１０６は２次記憶装置１０７とバス１０４を接続するためのプロトコル変換を行うためのものである。
【００２４】
２次記憶装置１０７はフレキシブルディスク、コンパクトフラッシュ（登録商標）、フラッシュメモリカード等のリムーバブルメディア（Removable Media）、あるいはハードディスク等である。また、近年市場に現れてきたフラッシュディスクでもよい。フラッシュディスクとは磁気ディスクではなく、フラッシュメモリデバイスを内蔵して記憶装置を構成しているものでハードディスクと同一のプロトコルで接続できる。
【００２５】
図２は、本発明のファイルシステムを適用する装置のソフトウェア概略構成図を示す。本装置のソフトウェアはＣＰＵ１０１上にて実行されるプログラム群であり、ＲＯＭ１０２に格納されている。
プログラム群はアプリケーション２０１、ＯＳ（オペレーティングシステム）２０２、およびＩ／Ｏライブラリ２０３にて構成される。
なお通常の構成では、ＯＳ２０２とＩ／Ｏライブラリ２０３はそれぞれ１つずつ存在するが、アプリケーション２０１は１つだけ存在する場合と複数存在する場合の両方がある。
いずれの場合でも、プログラム群のうち起動時に必要な最小限のものをＲＯＭ１０２に格納し、残りを２次記憶装置１０７に格納してもよい。
【００２６】
ＯＳ２０２は汎用性の高い基本ソフトウェアであり、アプリケーション２０１から、Ｉ／Ｏ１０５や２次記憶装置１０７へのアクセスを容易にする。ファイルシステム２０４は２次記憶装置１０７上のデータをファイルとして扱うためのコンポーネントである。最下層のデバイスドライバ２０５は、直接２次記憶装置１０７との入出力操作を行うもので、個々の記憶装置に特有なプロトコルやパラメータの差を吸収し、上位のファイルシステム２０４が２次記憶装置毎に必要となることがないように抽象化している。
【００２７】
Ｉ／Ｏライブラリ２０３はＯＳ２０２を用いずにＩ／Ｏ１０５や２次記憶装置１０７にアクセスする場合の手段である。ＯＳ２０２の場合と同様に２次記憶装置１０７との入出力操作を行うためのソフトウェアインターフェースである。ＯＳ２０２を用いるよりも最適化（高速、コンパクト）が期待できる。一方で、最適化によりＩ／Ｏライブラリ２０３の汎用性が乏しくなる場合がある。
【００２８】
図３に標準的なファイルシステムに必要とされる記録情報の説明図を示す。２次記憶装置１０７の記憶領域３０１において、ファイルシステムの情報は３つの領域に配置される。３つの領域とは、クラスタ番号テーブル領域（１）３０２および同（２）３０３、ディレクトリ領域３０４、データ領域３０５である。それぞれは記憶領域３０１上の固定位置に配置されている。
【００２９】
２次記憶装置１０７のアクセス単位は、セクタとよばれる固定サイズである。前記の３つの領域は、物理的にはこのセクタと呼ばれる単位でアクセスされる。ただし、データ領域３０５の論理的なアクセスに限っては、セクタを複数個まとめたクラスタと呼ばれる単位が使用される。１クラスタ＝４セクタ、または１クラス＝８セクタという使い方が一般的である。
【００３０】
クラスタ番号テーブル領域（１）３０２は、記録されたデータ本体がどのクラスタにどのような順序で配置されているかの情報を収めるものである。クラスタ番号テーブル領域（２）３０３は、クラスタ番号テーブル領域（１）をバックアップするためのコピーであり、いずれかのクラスタ番号テーブルが損傷しても本体配置情報が確保できるようにしている。
【００３１】
図３の例ではクラスタ番号テーブルの２０番に数値‘２１’が書き込まれている。これはクラスタの２０番には有効データが存在し、続くデータがクラスタの２１番に存在していることを示す。クラスタ番号テーブルの２１番には数値‘２２’が書き込まれている。これはクラスタの２１番に有効データが存在し、続くデータがクラスタの２２番に存在していることを示す。クラスタ番号テーブルの２２番には“Ｅ”（ＥＮＤの意）のコードが書き込まれているが、これはクラスタの２２番に有効データが存在し、続くデータはなく、最後尾のデータが収められていることを示す。
【００３２】
ディレクトリ領域３０４にはファイル毎にファイル名、更新日時、ファイルサイズ（大きさ）などの他、先頭クラスタ番号の情報を収める。先頭クラスタ番号とは、データ本体の先頭が何番のクラスタに存在するかを示す。
図３の例では、あるファイルがクラスタの２０番に先頭のデータを収めていることを示している。このファイルのデータ本体を参照する場合は、まずファイル名でディレクトリ領域を検索し、その結果から先頭クラスタ番号が２０番であることを知る。次にクラスタ番号テーブル領域を２０番から順次辿っていけば、クラスタ番号テーブルの２１番、２２番を参照すればよいことがわかる。
なお、クラスタ番号テーブル領域とディレクトリ領域３０４とをまとめて管理領域とも言う。
【００３３】
データ領域３０５はファイルデータ本体を収める。前述のようにデータはクラスタに分割して記録される。図の例はクラスタ２０番、２１番、２２番の順で、データが“Ａ”、“Ｂ”、“Ｃ”の部分ごとに収められていることを示している。
【００３４】
クラスタ番号テーブル領域３０２／３０３、ディレクトリ領域３０４、データ領域３０５への書き込み順序は規定されているわけではない。特にファイルシステムはファイル内容の変更があった場合に逐一書き込みを行うわけではなく、内部バッファを使用してある程度の変更が蓄積された時点で書き込みを行っている。このため、どの領域にいつ書き込みが行われているかをアプリケーション２０１から知ることはできない。
【００３５】
ここで問題となるのは、ファイルの書き込みのための一連の処理を行っている最中に電源の遮断が発生すると、復旧が非常に困難であるということである。データ領域３０５への書き込み中に電源が遮断されるとデータ領域３０５の内容は保証されない。また、クラスタ番号テーブル領域３０２、３０３やディレクトリ領域３０４への書き込み中に電源が遮断されると、ファイルとしての一貫性が保持されない。
しかも、２次記憶装置１０７がフラッシュメモリデバイスで構成されている場合、当該のファイルだけでなく、同一のセクタにある情報の全てが信頼できないものとなってしまう。これは、フラッシュメモリデバイスの特性として、単純な上書きを行うことができず、既定の領域をすべて消去した後に書き込むという手順が必要となるためである。
【００３６】
図４は、本発明の一実施例により、ファイルの書き込みを行う際の手順を示すフローチャートである。アプリケーション２０１からのファイル書き込み要求に応じ、図３で説明したクラスタ番号テーブル領域３０２、３０３、ディレクトリ領域３０４、データ領域３０５への書き込み処理を行う。
【００３７】
まず、書き込み処理が初回であるかどうかを判断する（ステップＳ０１）。初回かどうかは、書き込みを行おうとする名称のファイルが存在するかどうかで判定できる。初回であれば、ファイルサイズを規定する（ステップＳ０２）。サイズが変動する可能性のあるファイルであれば、所定の最大サイズで規定する。ファイルサイズが規定されれば、ファイルの書き込みを行う（ステップＳ０３）。書き込むべきデータのサイズが最大サイズより小さければ、不足分はダミーデータで埋めて置く。このファイルを「１」とする。
続いて、ファイル「１」をコピーしたファイル「２」の書き込みを行う（ステップＳ０４）。
実際には、ファイル「１」とファイル「２」が同じ内容のものであることをＯＳ２０２が認識できるよう、予め命名についてルールを定めておく。
例えば、アプリケーション２０１からの要求により「ＤＡＴＡ」という名前のファイルを生成する場合、自動的に拡張子を追加し、上記のファイル「１」として「ＤＡＴＡ．１」というファイルを生成し、上記のファイル「２」として「ＤＡＴＡ．２」というファイルを生成するようにしておく。拡張子より前の部分の名前が同一であることにより、ＯＳ２０２はファイル「ＤＡＴＡ．１」とファイル「ＤＡＴＡ．２」とが一組として扱うべきファイルであると判断できる。
【００３８】
この後、最新の書き込みが行われたファイルはどちらのファイルであるかを示すフラグ情報に「１」を記録する（ステップＳ０５）。
このフラグ情報は、各ファイルのデータ領域中に保持することができる。例えば、データ本体の最終バイトを使用し、この最終バイトを初回には‘０’とし、以降書き込むごとに１を加算した値を記録するという方法である。この方法では、ファイル「１」とファイル「２」の最終バイトを比較し、大きい値が入っている方が最後に書き込みを行ったファイルであると判定される。この方法では、ファイル「１」とファイル「２」両方の最終バイトの内容を比較する手間がかかる。その手間を省くため、フラグ情報は２次記憶装置１０７ではなく、バッテリバックアップされた揮発性メモリ（図示せず）に保持してもよい。
この場合、ファイル「１」に書き込んだ場合は数値の「１」を書き込み、ファイル「２」に書き込んだ場合は数値の「２」を書き込む。この方法では、書き込まれた数値がそのまま最後に書き込みを行ったファイルであると判定される。
また、書き込み中に電源遮断が発生しても、揮発性メモリの内容はバッテリにより保持される。
【００３９】
ただし、初回の書き込み中は電源遮断に耐えられないため、ステップＳ０１〜Ｓ０５の処理はシステムの本稼動が始まる前に行っておかなければならない。
以上の手順により構築されるファイルシステムの構造を図５に示す。
【００４０】
続いてファイルの更新処理の場合について説明する。指定された名称のファイルが存在すれば、初回ではないと判断される（ステップＳ０１）。次にフラグ情報の判定を行う（ステップＳ０６）。フラグ情報が「１」を指示していた場合、前回の書き込みはファイル「１」に対するものであったと判断できるので、ファイル「２」への書き込みを行う（ステップＳ０７）。
ここで重要なのは、クラスタ番号テーブル領域３０２、３０３やディレクトリ領域３０４はそのままで、データ領域３０５だけに書き込みを行うということである。
ファイルは所定の最大サイズにて生成済みであるため、クラスタ番号テーブル領域３０２、３０３やディレクトリ領域３０４を更新する必要はない。データ領域３０５への書き込みが正常終了したら、フラグ情報に「２」を記録する（ステップＳ０８）。
【００４１】
フラグ情報が「２」を指示していた場合、前回の書き込みはファイル「２」に対するものであったと判断できるので、ファイル「１」へデータ領域３０５のみの書き込みを行う（ステップＳ０９）。データ領域３０５への書き込みが正常終了したら、フラグ情報に「１」を記録する。
【００４２】
図６は、本発明の一実施例により、ファイルを読み出すときの制御手順を示すフローチャートである。アプリケーション２０１からのファイル読み出し要求に応じ、図５で説明したクラスタ番号テーブル領域３０２、３０３、ディレクトリ領域３０４、データ領域３０５を使ってファイルデータ本体を読み出す。
【００４３】
まず、フラグ情報の判定を行う（ステップＳ２０）。フラグ情報が「１」を指示していた場合、ファイル「１」のデータを読み出す（ステップＳ２１）。もし、フラグ情報が「２」を指示していた場合、ファイル「２」のデータを読み出す（ステップＳ２２）。
【００４４】
いずれの場合も、フラグ情報は書き込みが正常終了しているファイルを指示しているので、書き込み中に電源遮断が発生し矛盾を含んだファイルを読み出すことはない。
【００４５】
以上説明したように、本実施例によれば、既存のファイルシステムと互換性を保ったままで、予期せぬ電源の遮断が生じてもファイルシステム全体に矛盾を引き起こすことがなくなり、かつ、二重化されたファイルのうち、正常な書き込みが最後に完了したファイルを必ず読み出すことができるようになる。
【産業上の利用可能性】
【００４６】
本発明によれば、予期せぬ電源の遮断が生じても正しいデータにアクセスすることができるシステムを、性能を損なうことなく低コストで実現できる。
例えば、産業用ロボットの制御装置には以下のように適用できる。
産業用ロボットの制御装置においても、その記憶装置に関する部分は図１と同様の構成を有している。一般に、作業者は制御装置に接続された教示装置などによってロボットを操作してロボットに行わせたい動作パターンを作成し、制御装置内の２次記憶装置に記録する。また、ロボットの制御に関するパラメータなど、他の情報や設定内容についても２次記憶装置に記録することができる。
しかしながら、教示した動作パターンを２次記憶装置に書き込みしている際に作業者の操作ミスなどにより制御装置の電源が遮断されると、長時間かけて教示したロボットの動作パターンが失われる恐れがある。
産業用ロボットの制御装置に本発明のファイルシステムを適用することにより、このような問題を解消し、少なくとも書き込み開始直前の動作パターンの内容を保持することができる。
【図面の簡単な説明】
【００４７】
【図１】本発明を適用する記憶装置の構成図
【図２】本発明の適用形態例を示すソフトウェアの概略構成図
【図３】標準的ファイルシステムの構造を示す説明図
【図４】本発明によるファイルの書き込み手順の一例を示すフローチャート
【図５】本発明のファイルシステムの構造を示す説明図
【図６】本発明によるファイルの読み出し手順の一例を示すフローチャート
【符号の説明】
【００４８】
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  バス
１０５  Ｉ／Ｏ
１０６  ２次記憶装置用Ｉ／Ｆ
１０７  ２次記憶装置
２０１  アプリケーション
２０２  オペレーティングシステム（ＯＳ）
２０３  Ｉ／Ｏライブラリ
２０４  ファイルシステム
２０５  デバイスドライバ
３０１  ２次記憶装置１０７の記憶領域
３０２  クラスタ番号テーブル領域（１）
３０３  クラスタ番号テーブル領域（２）
３０４  ディレクトリ領域
３０５  データ領域
３１０  クラスタ番号テーブル（データ本体記録情報）
３１１  ディレクトリ情報
３１２  データ本体
【図１】
2007133535.tif 000003
【図２】
2007133535.tif 000004
【図３】
2007133535.tif 000005
【図４】
2007133535.tif 000006
【図５】
2007133535.tif 000007
【図６】
2007133535.tif 000008