JP4219299B2 - 記録デバイスのキャッシュ方法及びデータ記録装置 - Google Patents

記録デバイスのキャッシュ方法及びデータ記録装置 Download PDF

Info

Publication number
JP4219299B2
JP4219299B2 JP2004140315A JP2004140315A JP4219299B2 JP 4219299 B2 JP4219299 B2 JP 4219299B2 JP 2004140315 A JP2004140315 A JP 2004140315A JP 2004140315 A JP2004140315 A JP 2004140315A JP 4219299 B2 JP4219299 B2 JP 4219299B2
Authority
JP
Japan
Prior art keywords
data
recording
buffer
ping
request
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 - Fee Related
Application number
JP2004140315A
Other languages
English (en)
Other versions
JP2005322074A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2004140315A priority Critical patent/JP4219299B2/ja
Publication of JP2005322074A publication Critical patent/JP2005322074A/ja
Application granted granted Critical
Publication of JP4219299B2 publication Critical patent/JP4219299B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、ファイルシステムを介してデータを記録する際、転送レートを保証できる記録デバイスのキャッシュ方法とそのデータ記録装置に関する。
メモリカードやハードディスク、光ディスクなどの記録媒体では、データはセクタと呼ばれる単位(例えば512バイト)でリード/ライトされる。これらの記録媒体をパーソナルコンピュータ(以下、PCと略す)や携帯機器に接続してファイルを記録させる際には、ファイルシステムにより管理領域を除くデータはクラスタと呼ばれる単位(例えば4Kバイト,32Kバイト等)でリード/ライトされる。
ファイルシステムの代表的なものには、FAT(Standard ECMA-107: Volume and File Structure of Disk Cartridges for Information Interchange)がある。ファイルシステムの動作は複雑であるため、PCや携帯機器にオペレーティングシステム(以下、OSと略す)を搭載して、ソフトウェアとしてファイルシステムを実装するのが一般的である。
ファイルシステムフォーマットの一例として、FATフォーマットを図45を参照して説明する。メモリカードやハードディスク等の物理ドライブ600は、一般的に、領域の先頭に置かれるマスターブートレコード602と1個以上の論理ドライブ601とから構成される。1個の論理ドライブ601は、1種類のファイルシステムでフォーマットされる。FATフォーマットの場合、領域の先頭からパーティションブートセクタ603、ファイルアロケーションテーブル(FAT)604、FATのバックアップ604b、ルートディレクトリエントリ605というシステム領域が順次配置され、システム領域の後にユーザデータ領域606が配置される。
パーティションブートセクタ603には、パーティションのセクタ数やクラスタサイズといったパーティションを起動するのに必要な情報が記録される。FAT604には、ファイルの記録情報が配置される。ルートディレクトリエントリ605は、ルートディレクトリに置かれているファイル又はフォルダの情報がエントリとして記録される。エントリの情報には、ファイルのデータが置かれる先頭のクラスタ番号が含まれる。ユーザデータ領域606には、ファイルのデータ自体が置かれる。
FAT604に配置されるファイルの記録情報について、図46を参照して説明する。FAT604は、ユーザデータ領域606上のクラスタを管理するためのテーブルである。FAT604には、ファイルの次のデータが存在するクラスタ番号が12ビットや16ビットといった単位で記録される。図46に示すように、ユーザデータ領域606に記録するファイル310を部分データ212に分けてクラスタ番号3,4,7のクラスタに記録する場合、FAT604にはクラスタを連結するための情報として、クラスタ番号3の位置に4が記録され、クラスタ番号4の位置に7が記録される。最後にクラスタ番号7の位置に終了マークが記録される。ファイル310における先頭のクラスタ番号3は、前述のようにファイル310のエントリに記録される。
図45のFATファイルシステムにおけるファイルの記録処理650を図47のフローチャートを参照して説明する。ファイルの記録処理650が開始されると、まずファイルを構成する部分データを内部バッファに読み込むステップ651を行う。部分データの大きさは、ファイルシステムドライバの構造やファイルを記録する状況により異なる。次に、転送先の空き領域の検索ステップ652を行う。ファイルは、クラスタに分割されて記録されるため、空き領域はクラスタ単位で検索される。空き領域の検索は、クラスタを管理するFAT604を参照して行われる。空き領域が検索されると、FATとディレクトリエントリの更新ステップ653を行う。
上記ファイルの記録処理650では、予めFAT領域とディレクトリエントリを確保しておくことにより、他のプロセスから同じ領域にアクセスされることによる危険を回避できる。クラスタ単位の記録処理の実行ステップ654では、クラスタ単位に分割されたデータが記録される。内部バッファに蓄積された部分データの記録が完了したかどうかはステップ655で判定される。以上の動作をファイルの記録が完了することをステップ656で判定するまで繰り返し行われる。
半導体メモリカードは、一般に1個以上のフラッシュメモリで構成される。フラッシュメモリはメモリセルと呼ばれる最小単位でデータを保持する。一般に、一定数のメモリセルが1個のページを形成し、一定数のページが1個の物理ブロックを形成する。データの消去動作は、フラッシュメモリの特性に基づいて、消去ブロックと呼ばれる物理ブロックに相当する単位(例えば64Kバイト、128Kバイト等)で行われる。フラッシュメモリ上で物理的に消去可能なブロックの最小単位(消去可能な最小ブロック)は消去ブロックより小さい(例えば16Kバイト等)ことがある。しかしながら、最近のメモリカードの大容量化に伴い、管理領域と検索効率の向上などの理由から消去時のデータの退避は消去可能な最小ブロックでは行えない場合が多い。
フラッシュメモリは、その特性上、記録されているデータの上から新たなデータを上書きするというオーバーライト動作ができない。そのため、データの書き込みには消去動作を伴うことになる。しかしながら、フラッシュメモリの消去動作はリード/ライト動作と比較して莫大な時間を要する。このような理由により、書き込むデータの目標とする論理アドレスに対応する物理ブロックは、消去動作を必要としない物理ブロックに対応付けが変更されたうえで書き込まれ、消去動作は後で行うのが一般的である。
ファイルをメモリカードに記録する場合、通常、図48に示すようにファイルの記録単位であるクラスタ210とメモリカードの消去ブロック105とは合致していない。そのため図49に示す状態が発生することがある。すなわち、ファイルシステム201があるクラスタに割り当てたデータAをメモリカード100に転送し終えた後に時間を空けてデータBの転送する処理が実施されることがある。その場合、消去動作を回避するためにデータBは、物理アドレス上ではデータAと異なる消去ブロックに記録されてしまうことがある。このような動作が繰り返されると、メモリカード上に消去ブロック間に跨ったデータや消去ブロックに満たないデータの数が増加する。これにより、空き容量の割りに書き込める消去ブロックの数が少なくなり、空き容量の検索処理が増加したり物理上に分断されるデータが増加したりして、その結果として、ライト処理時間が継続的に増加する、という現象が起こる。
特にファイルシステムを用いた記録の場合、ファイルシステムの持つ独特のキャッシュ機構やデバイスドライバ等に起因する理由により、I/O要求が分断されたり、ファイルシステム特有のI/O要求が両者の間に挟まったりすることが多い。そのため、データAとデータBとが同一のファイルに属するデータであったとしても、上述した現象の発生頻度はより一層高くなる。
このような記録パフォーマンスの劣化対策として、従来からいくつかの構成が提案されている。
第1の構成では、クラスタの境界と消去可能ブロック(記録の単位)の境界を合致させることにより、上記劣化を低減させている(例えば、特許文献1参照)。
第2の構成では、ファイルシステムを消去ブロックに対応させて動作させることでこのような現象を回避させている(例えば、特許文献2参照)。第2の構成は、リアルタイムファイルは消去ブロック単位に記録し、非リアルタイムファイルはクラスタ単位に記録するファイルシステムにしている。これにより、リアルタイムファイルに対して高速な記録動作を実現することができる。
特開2001−188701号公報(図12) 特開2003−308240号公報(図7) Standard ECMA-107: Volume and File Structure of Disk Cartridges for Information Interchange
第1の構成には次のような課題がある。一般に、データの記録においてはクラスタサイズより消去ブロックサイズの方が大きい。そのため、第1の構成において、消去ブロックに満たないサイズのデータが多く書き込まれたり、消去ブロックに合わないサイズのデータが多く書き込まれたりした場合には、記録時のパフォーマンス劣化を低減させることはできない。特に、PCにおける標準的なファイルシステムにおいては、I/O要求のサイズは消去ブロックサイズより小さい値に限定されているものが多く、それらに対して第1の構成では、記録時のパフォーマンスの劣化を低減させることは困難である。
第2の構成では、ファイルシステムを独自にすることで独自のAPI(Application Program Interface)が必要となる。そのため、PCで既存アプリケーションを稼動させている状態でこの対策を実施することができない、といった実施上の制限がある。
このような課題は以下の用途に半導体メモリカードを用いる場合に顕著となる。昨今、半導体メモリカードは、放送・業務用カメラレコーダ等の品質と信頼性が要求される用途に利用されつつある。このような用途においては、記録レートの保証は重要なこととなる。
しかしながら、カメラレコーダで撮影した映像及び音声をAVファイルとしてメモリカードに記録する際、編集作業でPCのファイルシステムを介して記録された経歴のある半導体メモリカードでは、上述した記録パフォーマンスの劣化,すなわち、図49に示すように、転送レートの低下が発生することがあり、そうすると、リアルタイム記録が保証できなくなってしまう。
上記課題を解決するために、本発明のメモリカードおよびデータ記録装置は、メモリカードにファイルを記録する際、CPUによりファイルシステムドライバ及びデバイスドライバを動作させ、デバイスドライバは、メモリカードに記録される全てのデータを消去ブロックで区切ることで複数の部分データに分割してからピンポンバッファに保持し、消去ブロックに一致する部分データはそのまま消去ブロックで、また消去ブロックに満たないデータは不足分を読み出して消去ブロックにしてから、メモリカードに書き込むものである。
メモリカードにデータを書き込む際、消去ブロックにアライメントされないデータを多く書き込むことにより起こる転送速度の劣化を防止し、メモリカードへの転送レートを保証することができる。
以下、本発明の実施の形態について、図1から図44を参照して説明する。
第1の参考例
本発明の第1の参考例であるデータ記録装置101の構成を図1に示す。データ記録装置101は、PC(パーソナルコンピュータ)102により構成される。PC102は、少なくともメモリカード100を装填するためのメモリカードスロット190を有する。但し、メモリカードスロット190の代わりに外付けドライブ191を接続しても良い。PC102は、ディスプレイ192や入力装置193を有するがこれらはなくともよい。
データ記録装置101は、図2に示すように、少なくともCPU181、メモリ182、プログラムやオペレーションシステム(以下OS)を格納するハードディスク等の記憶デバイス183、それらを接続する内部バス184、メモリカード100を接続するためのバスコントローラ185から構成される。メモリカード100の接続形態としては、例えばATA(AT Attachment)、USB(Universal Serial Bus)がある。また多くの場合、データ記録装置101は、ディスプレイ192を接続するためのグラフィックコントローラや、入力装置193を接続するための入力デバイスコントローラ186を備える。オペレーションシステム(以下、OSと略す)としては、例えばWindows(登録商標)やMac OS(登録商標)などの汎用OSを用いることができる。
データ記録装置101において、OSのプログラム250、デバイスドライバのプログラム110、ファイルシステムドライバのプログラム200、アプリケーションプログラム300は記憶デバイス183に記録されている。データ記録装置101の電源が起動されると、記憶デバイス183に格納されたOS250が起動する。デバイスドライバのプログラム110、ファイルシステムドライバのプログラム200は、OS250の起動時もしくはメモリカード100の装填時にメモリ182上にロードされる。デバイスドライバ110及びファイルシステムドライバ200は、メモリカード100に対してファイル入出力を行うのに必要な機能を有する。但しこれらドライバ110、200は、メモリカード100だけでなく、ハードディスクや光ディスクなどの記録媒体へのファイル入出力に用いても良い。
ユーザがメモリカード100をデータ記録装置101に接続すると、OS250はプラグアンドプレイ機能によりメモリカード100を認識し、デバイスドライバ110をメモリ182上にロードする。ファイルシステムドライバ200は、デバイスドライバ110を経由してメモリカード100上のファイルフォーマットを認識し、論理ドライブとしてマウントする。ユーザはOS250上でアプリケーションプログラム300を起動して入力装置193を操作することにより、メモリカード100にデータを読み書きすることができる。
デバイスドライバ110の処理の全体構成を、図3に示す。デバイスドライバの処理111は、要求の受付処理124、ロード処理170、アンロード処理179、要求処理スレッド155、タイマーライト起動スレッド160から構成される。
ロード処理170およびアンロード処理179は、OS250がデバイスドライバ110をメモリ182上にロードまたはアンロードする際に、それぞれ実行される。スレッドとは、OS250がマルチタスクを並行して処理する際の1個のプログラムの流れである。デバイスドライバにおけるスレッドは、ロード処理170の実行時に起動され、アンロード処理179の実行時に削除される。
要求の受付処理124は、デバイスドライバ110がOS250から何らかの要求を受けた際に実行される。要求の受付処理124では、要求が受け付けられた(ステップ125)のち、受け付けた要求に対応するデータをキューに挿入して(ステップ126)終了する。これにより、デバイスドライバ110が要求を処理中に受けた新たな要求は、キューに挿入されて処理の順番になるまで待たされる。
要求処理スレッド155は、キューに挿入された要求を逐次処理するためのスレッドである。最初に、スレッドを終了すべきかどうかを判定し(ステップ156)、終了すべきであれば終了(ステップ159)する。終了すべきでない場合は、1個の要求と対応するデータをキューから取得する(ステップ157)。次に要求が第2のライト要求122かどうかを判定する(ステップ158)。第2のライト要求122とは、ファイルシステムドライバ200からデバイスドライバ110に送信するデータのライト要求であって、請求項における要求データを構成する。なお、後述するように、アプリケーション300からファイルシステムドライバ200に送信するデータのライト要求を第1のライト要求121と呼ぶため、ファイルシステムドライバ200からデバイスドライバ110に送信するデータのライト要求を第2のライト要求122と呼ぶ。
ステップ158で第2のライト要求122でないと判定すればライト以外の操作(ステップ150)を行う。第2のライト要求122であれば、タイマーライトの要求かどうかを判断し(ステップ158B)、タイマーライトの要求であればタイマーライト操作(ステップ166)を、そうでなければライト操作(ステップ130)を行う。以上で1個の要求の処理を終了し、スレッド終了判定操作(ステップ156)に戻る。なお、タイマーライトの要求(ステップ158B)は、後述するタイマーライト起動スレッド(ステップ160)で作成されたライト要求を示す。
デバイスドライバ110におけるいくつかの処理は、複数のスレッドによって同時並行して実行され得る。即ち、要求の受付処理124、要求処理スレッド155、タイマーライト起動スレッド160は同時並行で行われる可能性がある。しかし、要求とデータを挿入するキューは1個であり、複数の要求の受付処理124が並行して動作した場合でも、各受付処理124におけるキューへの挿入操作(ステップ126)は逐次処理で行われる。
デバイスドライバのロード処理170を図4のフローチャートを参照して説明する。最初にデバイスドライバ110のインスタンスをメモリ182上にロードする(ステップ171)。これにより、デバイスドライバのプログラム110をメモリ182上から利用可能にする。次に、ロードしたデバイスドライバの初期化操作を行う(ステップ172)。これには、OS250にデバイスのインスタンスを登録したり、使用する関数やハンドラを登録する操作が含まれる。
次に消去ブロックサイズを決定する(ステップ173)。消去ブロックサイズの決定方法としては、デバイスドライバ110内部で固定値を指定する方法や、メモリカード内部に用意されたレジスタに値を設定しておき、デバイスドライバ110がコマンドを発行してレジスタ上の値を読み込んで値に応じた消去ブロックサイズを設定する方法がある。
消去ブロックサイズが決定された後、メモリ182上にライト処理用のバッファ263を確保する(ステップ174)。このバッファ263は、一時保持器として機能するものであり、少なくとも消去ブロックサイズの連続した領域としてメモリ182上に確保される。この例を図5に示す。OSのメモリ空間260において、カーネル空間261上にライト処理のバッファ263を確保する。この例では、消去ブロックサイズを128Kバイトとしている。バッファ263は、デバイスドライバ110のアンロード処理179において解放される。デバイスドライバ110のロード処理170及びアンロード処理179は、それぞれメモリカード100をデータ記録装置101に接続/取り外しするタイミングで行うのが望ましい。
メモリカード100に対するファイルのリード/ライト動作を図6を参照して説明する。アプリケーションプログラム300がファイルのリード/ライトを行う際、カーネル空間プログラムであるファイルシステムドライバ200がアプリケーション300からのI/O要求を処理する。
ファイルシステムドライバ200は図47を参照して従来例で説明したようなファイルシステムフォーマットに記録するための独自のI/O要求をデバイスドライバ110に発行する。デバイスドライバ110がバスコントローラ185を介してメモリカードコントローラ109にコマンドとデータを送ることで、記録媒体(メモリカード100)へのリード/ライト動作が実行される。
デバイスドライバ110とメモリカードコントローラ109との間のデータの受け渡しの方法は、DMA(Direct Memory Access)とPIO(Programmed I/O)がある。高速性が要求されるデータのリード/ライトにはDMAを用いる。DMAは、データ記録装置101上のメモリ182にメモリカードコントローラ109が直接アクセスすることでデータの転送を行う。デバイスドライバ110は、メモリ182上のアドレスとメモリカード100上のアドレス、及びデータ長などの転送情報のみをメモリカードコントローラ109に指定する。メモリカードコントローラ109が転送を行うため、CPU181の処理能力を有効に活用できる。
次に、本参考例の特徴となるメモリカード100への記録処理を、図7を参照して説明する。アプリケーションプログラム300は、ファイル310をメモリカード100に記録するためのライト要求(以下、このライト要求を第1のライト要求と呼ぶ)121を実行する。ファイルシステムドライバ200は、図47を参照して従来例で説明した処理手順に従って、ファイルをクラスタ210の単位で記録する。ファイルシステムドライバ200は、ファイル310を記録するために必要なクラスタ210や管理情報を、新たないくつかのライト要求(以下、このライト要求は、前述した第2のライト要求である)122としてデバイスドライバ110に送信する。なお、図7の例は、4個のクラスタ210のデータを1個の第2のライト要求122として送信する状態を示している。
第2のライト要求122は、元のファイル310の記録に必要なデータであっても良いし、同時刻に記録すべき他のファイルのデータを含んでいても良い。
第2のライト要求122を受けたデバイスドライバ110は、ライト処理130を開始する。ライト処理130では、デバイスドライバ110は、今回メモリカード100に記録する記録用データを消去ブロック105で区切ることで複数の部分データに分割し、消去ブロック105に一致する部分データはそのまま消去ブロック105で、また消去ブロックに満たない部分データはメモリカード100から不足分を読み出して消去ブロック105の大きさにする。このとき、メモリカード100から読み出すデータのアドレスは、メモリカード100に書き込むアドレス位置と同一とする。具体的には、次のようにして記録用データを設定する。すなわち、消去ブロック105の整数倍の大きさを有するとともに今回の記録処理でメモリカード100に記録する記録予定データのアドレス領域が全て含有される最小限の大きさを有するもう一つのアドレス領域をメモリカード100上に設定する。そのうえで、このもう一つのアドレス領域から、記録するデータのアドレス領域を差し引いた残余のアドレス領域に該当する記録済データをメモリカード100から読み出して残余のアドレス領域に複写することで消去ブロック105の境界に一致する記録用データを設定する。
このようにしてすべての記録予定データを消去ブロック105にしてから、そのデータをメモリカード100に書き込む。デバイスドライバ110は、ライト処理130を消去ブロック105にするために図4のステップ174で確保したバッファ(一時保持器)263を用いる。
デバイスドライバ110によるライト処理130の詳細を、図8のフローチャートを参照して説明する。なお、図8のフローチャートでは、互いにステップ位置の異なるステップ140Aとステップ140Bとが設けられているが、これらのステップの操作内容自体は基本的には同一であって、以降の説明および図面において同一の処理として取り扱われて説明される際にはステップ140と記載される。
今回のデータを記録する際のメモリカード100上のアドレス領域の先頭アドレスと、既にバッファ263内にあるデータを記録する際のメモリカード100上のアドレス領域の終端アドレスとが連続するかどうかを判定する(ステップ132)。ここでバッファ263内にあるデータとは、デバイスドライバ110がキャッシュしているデータであり、以前のライト処理130によってバッファ263に一時保持されたもののまだメモリカード100にライトされていないデータである。またアドレスとは、メモリカード100上の論理アドレス又は物理アドレスである。アドレスが連続しない場合は、バッファ263内のデータの消去ブロック105のライト操作を行う(ステップ140A)。連続する場合は、バッファ263内で以前のデータと今回のデータとを連結させるため、消去ブロック105内の部分データをバッファ263にコピーする(ステップ134)。
次に、コピーした部分データがバッファ263の終端に到達したかどうかを判定し(ステップ135)、到達していなければ終了する。到達していればバッファ263内のデータの消去ブロック105のライト操作(ステップ140B)を行う。なお、前述したように、ステップ140Aとステップ140Bとは基本的に同一の処理である。
今回の要求データにおいてまだ処理を終了していない残余のデータがあるかどうかを判定し(ステップ136)、残っていればステップ134に戻る。残っていなければ終了する。
以上説明したデバイスドライバのライト処理130の具体例を説明する。図9〜図13を参照して説明する。これらの例においてバッファ263は、図5で予め確保した領域のアドレスであり、0x20000バイト即ち128Kバイトの消去ブロックサイズ分の領域としている。
バッファ263内にデータがない場合のライト処理130の例を図9に示す。第2のライト要求122が、ターゲットアドレス0x82000、レングス0xD000であるとする。ここでターゲットアドレスとは、メモリカード100上のアドレスを指す。消去ブロックは0x20000の倍数であるから、ターゲットアドレスを含む消去ブロックの先頭アドレスは0x80000となる。バッファ263を0x80000から0xA0000までの消去ブロック105の1個に対応させて、0x82000から0xD000分のデータをバッファ263にコピーする(ステップ134参照)。この場合、データはバッファ263の終端に到達していないので(ステップ135参照)、この第2のライト要求122に対応するライト処理130を終了する。
今回の第2のライト要求122がバッファ263内のデータと連続する場合の例を図10に示す。バッファ263にはターゲットアドレス0x80000からレングス0x2000の書き込むべきデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x82000でレングスが0xD000の場合、その要求データはバッファ263内のデータと連続するので、ターゲットアドレス0x80000からレングス0x10000の書き込むべきデータに更新する(ステップ134)。
今回の第2のライト要求122がバッファ263内のデータと連続しない場合の例を図11に示す。バッファ263にはターゲットアドレス0x6C000からレングス0x8000のデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x82000でレングスが0xD000の場合、バッファ263内のデータと今回の要求のアドレス0x82000とは連続しないので、バッファ263内のデータを消去ブロック105のライト操作(ステップ140A)で先に読み出してメモリカード100に書き込んでから、バッファ263に今回の要求122をコピーする。
今回の第2のライト要求122がバッファ263内のデータと連続し、消去ブロック105の境界を跨ぐ場合の例を図12に示す。この場合、バッファ263にはターゲットアドレス0x90000からレングス0xA000の読み出すべきデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x9A000でレングスが0xD000の場合、バッファ263内のデータと連続するが、すべてのデータをバッファ263にコピーすると消去ブロック105の境界を跨ぐためバッファ263にはデータを0x6000だけしか挿入できない。この場合、図8のステップ134で、消去ブロック105内に収まるレングス0x6000の部分データだけをバッファ263にコピーする。コピーしたデータはバッファ263の終端に到達するので(ステップ135)、バッファ263内のデータの消去ブロック105のライト操作(ステップ140B)を行う。次に残りのレングス0x8000の部分データを新たにバッファ263にコピーする(ステップ134)が、データはバッファ263の終端に達しないので終了する。
今回の第2のライト要求122がバッファ263内のデータと連続せず、消去ブロック105の境界を跨ぐ場合の例を図13に示す。この場合、バッファ263にはターゲットアドレス0x6C000からレングス0x8000の読み出すべきデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x9A000でレングスが0xD000の場合、そのデータはバッファ263内のデータと連続しないので、バッファ263内のデータを消去ブロック105のライト操作(ステップ140A)で先にバッファ263から読み出してメモリカード100に書き込む。そのうえで、今回の第2のライト要求122を実行する。ここで、今回の第2のライト要求122のターゲットアドレスのデータ量では、バッファ263の消去ブロック105のブロック境界によってその第2のライト要求122は規制されてしまって全てのデータを消去ブロック105に挿入することはできず、この場合には、レングス0x6000だけしか消去ブロック105に挿入できない。この場合、図8のステップ134で、消去ブロック105の境界以内のレングス0x6000の部分データだけがバッファ263にコピーされる。コピーされたデータはバッファ263の消去ブロック105の終端に到達するので(ステップ135)、バッファ263内のデータの消去ブロック105のライト操作(ステップ140B)を行う。次に残りのレングス0x8000の部分データを新たにバッファ263にコピーする(ステップ134)。コピーしたデータはバッファ263の終端に達しないので終了する。
バッファ263内のデータの消去ブロック105のライト操作(ステップ140A、140B)を、図14のフローチャートと前述した図8のフローチャートとを参照して説明する。なお、両ライト操作(ステップ140A,140B)は、前述したように、基本的には同一の操作(ステップ140)である。
最初の状態では、バッファ263内にデータが全く存在しない。そのため、この状態(図9の例参照)では、次のように判定する。すなわち、ライト処理130(図8参照)において第1のライト操作(ステップ140A)の前操作に位置するステップ132の判定においてNO(今回のデータの先頭アドレスと既にバッファ263内にあるデータの終端アドレスとは連続しない)と判断する。
このような判定を下すため、第1のライト操作(ステップ140A)に移行する。しかしながら、第1のライト操作(ステップ140A)では、ステップ141の判断(バッファ263内にデータは存在するか否かの判断)においてデータは存在しないと判断する。そのため、第1のライト操作140Aを実施することなく、ステップ134,135を実施する。第2のライト操作140Bが実施されるかどうかは、今回のデータがバッファの終端に到達したかどうかの判断(ステップ135)による。図9の例では、データはバッファの終端(0xA0000)に到達していないため、第2のライト操作140Bは実施されない。
次に、バッファ263内にデータが存在している場合の消去ブロック105のライト操作140を説明する。この場合、ステップ141でバッファ263内にデータが存在することを確認したのち、バッファ263内の有効なデータの先頭アドレスが消去ブロック105のブロック境界に合致しているか否かを判定する(ステップ142)。一致していない場合は、先頭アドレスを消去ブロック105のブロック境界に一致させるためのリード操作を行う(ステップ143)。一方、一致している場合は、ステップ143を実施しない。
ここでいうリード操作とは、次の操作をいう。まず、書き込み対象となっているメモリカード100の消去ブロック105において、書き込み対象データの先頭アドレスと消去ブロック105のブロック境界との間のデータ領域に格納されたデータをメモリカード100から読み出す。読み出したデータを、バッファ263においてデータ格納場所となっている消去ブロック105の対応アドレス位置にコピーする。これによりバッファ263の消去ブロック105において残余のデータ領域に、メモリカード100から読み出したデータをコピーすることで埋め込む。このような一連の操作がここでいうリード操作である。
ステップ142,143の操作が実施されたのち、次に、バッファ263内の有効なデータの終端アドレスが消去ブロック105のブロック境界に一致しているか否かを判定する(ステップ144)。一致していない場合は、終端アドレスを消去ブロック境界に合わせるためのリード操作を行う(ステップ145)。一致している場合は、ステップ145を実施しない。
ここでいうリード操作とは、次の操作をいう。まず、書き込み対象となっているメモリカード100の消去ブロック105において、書き込み対象データの終端アドレスと消去ブロック105のブロック境界との間のデータ領域に格納されたデータをメモリカード100から読み出す。読み出したデータを、バッファ263においてデータ格納場所となっている消去ブロック105の対応アドレス位置にコピーする。これにより、バッファ263の消去ブロック105において残余のデータ領域に、メモリカード100から読み出したデータをコピーすることで埋め込む。このような一連の操作がここでいうリード操作である。
ステップ144、ステップ145を実施することにより、データの端が消去ブロック105のブロック境界に一致したことを確認する。境界一致を確認したのち、消去ブロックサイズのライト操作130(ステップ146)を行う。ライト操作130とは、データをバッファ263から読み出してメモリカード100に書き込む操作をいう。
以上のようにして消去ブロックサイズのライト処理130を実行する。
バッファ263内のデータの消去ブロックのライト操作140の例を、図15を参照して説明する。バッファ263内にターゲットアドレス0x6C000、レングス0x8000のデータが存在するとする。この場合、ステップ142にてバッファ263の先頭アドレスが消去ブロック境界0x60000に一致していないことが確認される。そこで、デバイスドライバ110はターゲットアドレス0x60000、レングス0xC000のリード要求127をメモリカードコントローラ109に発行することで前述したリード操作を実施する。これにより、バッファ263の消去ブロック105内のデータにおいて、その先頭アドレスはブロック境界0x60000に一致する。
次にステップ144にてバッファ263の終端アドレスが消去ブロック境界0x80000に合致していないことが確認される。そこで、デバイスドライバ110はターゲットアドレス0x74000、レングス0xC000のリード要求127をメモリカードコントローラ109に発行することで前述したリード操作を実施する。これにより、バッファ263の消去ブロック105内のデータにおいて、その終端アドレスは消去ブロック境界に一致する。
最後にターゲットアドレス0x60000、レングス0x20000のデータをバッファ263から読み出して(リードして)メモリカード100に書き込む(ライトする)。
なお、デバイスドライバ110におけるライト操作140以外の操作150では、図16のフローチャートに示すように、バッファ263内のデータを消去ブロック105でライト操作(ステップ140)したのちライト以外の操作を実行する(ステップ152)。このような処理手順を踏むことによりバッファ263内のデータをメモリカード100に確実に反映させてデータの整合性を確保することができる。ライト以外の操作(ステップ152)としては、リード要求(デバイスドライバ110がファイルシステムドライバ200から受けるリード要求であり、デバイスドライバ110がライト処理中に生成するリード要求127は含まない)やデバイス制御の要求がある。
デバイスドライバ110におけるタイマーライト起動スレッド160を、図17のフローチャートを参照して説明する。図8のライト処理130における特徴的な操作は、バッファ263内にデータを残したうえで、次の第2のライト要求122のアドレスが先の第2のライト要求122のアドレスに連続するかを判断することである。これにより、両アドレスが連続する場合には次の要求122を先の要求122に連結させることが可能となる。
しかし、次の第2のライト要求122が来ない時にデータがバッファ263に滞留してしまうことがある。このような不具合を解消するため、図17のタイマーライト起動スレッドを行う。以下説明する。
当該スレッド160が終了していない(継続中である)ことを確認したうえで(ステップ161)、最近のライト要求終了(又は開始)からの経過時間を判定する(ステップ162)。ステップ162の判定において、前記経過時間が閾値Thより大きければ、新たなライト要求を作成したうえで(ステップ163)、その要求とデータとをキューに挿入する(ステップ164)。そのうえでステップ161に戻る。一方、ステップ162において閾値Th以下の場合は、ステップ163、164の操作(ライト要求・キュー挿入)を実施せずにステップ161に戻る。そして、ステップ161でスレッドが終了したことを確認したら、一連のタイマーライト起動スレッド160を終了する。なお、ここでいう閾値Thは、次の要求122が来るまでの期間においてデータがバッファ263に滞留するか否かの判定を下す際の識別値となる期間の値を示し、予め、設定されて記憶デバイス183等に記憶されている。
ステップ163で作成したライト要求は、図3に示した要求処理スレッド155のステップ157においてキューから取り出され、タイマーライト処理166で実際にライトされる。
タイマーライト処理166は、図18のフローチャートに示されるように、図14に示したバッファ263内のデータの消去ブロック105のライト操作140により実行される。この場合、並行して動作する処理のタイミングによっては、ステップ141において、バッファ263内にデータが存在しない場合もあり得る。バッファ263内にデータが存在する場合のみ、消去ブロック105のライト処理140(ステップ146)が実行される。このタイマーライト処理166により、メモリカード100のデータをバッファ263でキャッシュしながらも、閾値Thの時間以内にはメモリカード100にデータが反映されることを保証する。これにより、メモリカード100が取り外される場合でも、データの整合性を保つことができる。
本発明の利点は、メモリカード100に対して必ず消去ブロック105で一回の第3のライト要求123を行うので、メモリカード100内に論理アドレスと物理アドレスとの関連付けが細かな単位で分散して記録時の転送レートを低下させる問題を回避できる点である。これにより、本発明のデータ記録装置101でデータを記録したメモリカード100を他の機器で利用する場合でも、転送レートを保証することができる。
以下、本発明の構成が、記録時の転送レートを低下させる問題を回避できる理由を説明する。まず、従来の構成では転送記録時の転送レートが低下する理由を説明する。図19に示すように、初期状態では、メモリカード100の論理アドレスと物理アドレスとは、互いに正確に対応付けされた状態となっている。なお、図19では、次の状態とする。
・リザーブ用の領域を2個(YとZ)とする。
・論理/物理アドレスは、それぞれ記録最小単位である記録ブロックAn,Bn,〜Znから構成する。
・記録ブロックAn,Bn,〜Znは、論理アドレス上の論理記録ブロックAn,Bn,〜Znと、物理アドレス上の物理記録ブロックAn,Bn,〜Znとを有する。
・論理/物理アドレス上の消去ブロック(以下、論理/物理消去ブロックA,B,〜Zという)を、複数の論理記録ブロックAn,Bn,〜Znのグループから構成する。なお、図19の例では、論理/物理消去ブロックA,B,〜Zそれぞれを4つの論理/物理記録ブロックAn,Bn,〜Znから構成し、同一の論理/物理消去ブロックA,B,〜Zを構成する論理/物理記録ブロックを、論理/物理記録ブロックA1〜4,B1〜4,〜Z1〜4と称する。
・初期状態では、論理消去ブロックA,B,〜Zと物理消去ブロックA,B,〜Zとは、1対1(A−A,B−B,C−C)に対応付けられており、さらには、対応付けられた論理消去ブロックと物理消去ブロックとの間において、論理記録ブロックAn,Bn,〜Znは、1対1(A1〜Z1−A1〜Z1、A2〜Z2−A2〜Z2、…)に対応付けられている。
なお、論理消去ブロックA〜Zに記録されるデータは、次のようにして生成される。メモリカード100とアプリケーションプログラム300との間にバッファ263を中間記録媒体として配置したうえで、バッファ263とアプリケーションプログラム300との間やバッファ263とメモリカード100との間で、データの読み/書き操作を実施する。このような操作の実施を通じてバッファ263上に論理消去ブロックA〜Zのデータを生成してメモリカード100に供給する。
従来の構成での記録操作を図20に示す。1回目の記録操作において論理記録ブロックA1にデータが書き込まれたとする。その際、物理記録ブロックA1にデータが存在しない。そのため、論理記録ブロックA1に書き込まれたデータは、そのまま、物理記録ブロックA1に記録される。
2回目の記録操作において論理記録ブロックA3にデータが書き込まれたとする。その際、1回目の記録操作により論理記録ブロックAに対応付けされている物理消去ブロックAの物理記録ブロックA1には既にデータが格納されている。そのために、物理記録ブロックA1を消去せずに物理記録ブロックA3をオーバーライトすることはできない。したがって、論理記録ブロックA3に書き込まれたデータは、リザーブ用の領域として確保されている物理消去ブロックYを構成する物理記録ブロックY1に記録される。
このとき、論理記録ブロックA3に対応付けられる物理記録ブロックは、物理記録ブロックY1に変更される。さらには、リザーブ用の領域を確保するために、次の処置が施される。
論理記録ブロックY1をリザーブの領域から解放したうえで、任意の他の論理記録ブロック(図20では、論理記録ブロックX1)を新たにリザーブ用の領域として確保する。
3回目の記録操作において論理記録ブロックA2にデータが書き込まれたとする。その際、1回目の記録操作により論理記録ブロックAに対応付けされている物理消去ブロックAの物理記録ブロックA1には既にデータが格納されている。そのために、物理記録ブロックA1を消去せずに物理記録ブロックA2をオーバーライトすることはできない。したがって、論理記録ブロックA2に書き込まれたデータは、リザーブ用の領域として確保されている物理消去ブロックZを構成する物理記録ブロックZ1に記録される。
このとき、論理記録ブロックA2に対応付けられる物理記録ブロックは、物理記録ブロックZ1に変更される。さらには、リザーブ用の領域を確保するために、次の処置が施される。
論理記録ブロックZ1をリザーブの領域から解放したうえで、任意の他の論理記録ブロックを新たにリザーブ用の領域として確保する。
以上の記録操作が実施されたうえで、論理消去ブロックAにデータに上書きする場合を想定する。この場合、物理消去ブロックA,Y,Zは全て消去しなければならなくなり、転送レートは低下してしまう。このように記録ブロックで記録を行うために、メモリカード100内でデータが分散してしまって、そのために転送レートが低下する。
なお、メモリカード100に対するライト処理の時間間隔や、ターゲットとするアドレスの相違や、メモリカード100のコントローラの相違や、さらにはメモリカード100の内部の状態の相違等に基づいて転送レートの低下の程度は変動する。しかしながら、記録領域に記録ブロックと消去ブロックとが設定された状態で読み書きが実施されるメモリカード100において転送レートの低下は共通の課題となっている。
次に、本発明を実施することで、転送レートの低下を抑制できる理由を説明する。図21は本発明の構成での記録操作を示す。
1回目の記録操作において論理消去ブロックAの論理記録ブロックA1にデータが書き込まれたとする。1回目のデータは一旦バッファ263にキャッシュされる。2回目の記録操作において論理記録ブロックA3にデータが書き込まれたとする。バッファ263にあるA1に書き込むべきデータと今回のA3は連続しないので、次の処理を行う。まず、バッファ263内を論理消去ブロックAに対応させて、物理消去ブロックAの物理記録ブロックA2、A3、A4に格納されているデータを、バッファ263内の論理記録ブロックA2、A3、A4に対応した位置に読み出す。これにより、バッファ263内のデータ内容は、論理消去ブロックAのデータを反映したものであると同時に物理消去ブロックAのデータを反映したものとなって、メモリカードのコントローラは、デバイスドライバから受けた論理消去ブロックAに対するライト要求をそのままの状態で物理消去ブロックAに書き込み可能となる。
2回目の記録操作において論理記録ブロックA3に書き込まれたデータが後にライトされる際においても、まず、バッファ263内を論理消去ブロックAに対応させて、物理消去ブロックAの物理記録ブロックA1、A2、A4に格納されているデータを、バッファ263内の論理記録ブロックA1、A2、A4に対応した位置に読み出す。これにより、バッファ263内のデータ内容は、論理消去ブロックAのデータを反映したものであると同時に物理消去ブロックAのデータを反映したものとなって、メモリカードのコントローラは、デバイスドライバから受けた論理消去ブロックAに対するライト要求をそのままの状態で物理消去ブロックAに書き込み可能となる。
これにより、本発明では、論理アドレスと物理アドレスとの間の対応付けが所期状態のままで変動することなく維持されることとなり、その結果、転送レートの低下を低減することができる。
参考例は、図6に示したプログラム構成に基づいているが、図22に示すように、デバイス独自のI/O処理のみデバイスドライバで行い、本参考例で説明したデバイスドライバのライト処理110をデバイスドライバの上位に位置するフィルタドライバ115で実行することも可能である。フィルタドライバ115を用いた構成の場合、メモリカード100の種類やメモリカードのインターフェースなどハードウェアに依存する部分をデバイスドライバ110が吸収するので、本発明の記録処理はより汎用的に利用できる。
参考例では、図8のライト処理130において、今回のデータとバッファ263内のデータとが連続するかどうかを判定するステップ132の操作は、図10に示すように、バッファ263内のデータの終端アドレスと第2のライト要求122のターゲットアドレスとが完全に一致するか否かで、両データの連続性を判定している。
しかしながら、ターゲットアドレスがバッファ263内のデータの終端アドレスより小さく、先頭アドレスより大きい場合にも連続していると判定することができる。例えば図10の例の場合、ターゲットアドレスが0x81000のような場合でも、バッファ263内のデータの0x81000以降を上書きしてコピーすることができる。この場合、最終的なバッファ263内のデータの終端アドレスは0x8F000となる。
参考例では、図15に示すようにデータの先頭アドレス及び終了アドレスが消去ブロック105の境界に合っていない要求の場合、バッファ263内のデータを消去ブロック105にしてからメモリカード100に書き込む例を示した。しかしながら、この場合、そのデータをバッファ263にコピーする前に、消去ブロック105のデータをメモリカード100から読み出してバッファ263にコピーする処理(リード処理)を行って、バッファ263全体を消去ブロック105サイズのデータで埋める処理を行い、その上から前記要求のデータをバッファ263にコピーすることもできる。この処理は、将来、ライト操作140において行うべきリード操作を、前もって行うものである
このようなバッファ263上の上書き処理を行った場合、前記連続性の判定を変更することにより、バッファ263内に存在する消去ブロック105の範囲内のターゲットアドレス(及びレングスを加えて求められる終端のターゲットアドレス)を持つライト要求が到着し続けている間は第2のライト要求122を行わなくて済む。そのため、ファイルシステムドライバ200からの一連の第2のライト要求122をより高速に処理することが可能となる。
本実施形態では消去ブロック105でライト処理を行う例を示したが、消去ブロック105の整数倍の単位でライト処理を行っても同様の効果を得ることができる。メモリカード100をRAIDディスク状に個(は自然数)だけ並列に接続した記憶媒体として使用する場合には、消去ブロック105の倍のサイズでライト処理を行うことで本発明を適用できる。
参考例では、メモリカード100を別のメモリカード100'に差し替えた場合、消去ブロックサイズを可変とすることが可能である。メモリカード100を抜いた際にデバイスドライバ110のアンロード処理179が行われ、別のメモリカード100'を差した際にデバイスドライバ110のロード処理170が行われる。ロード処理170(図4参照)のステップ173で、別のメモリカード100'に対する消去ブロックサイズを新たに決定することができる。また、ロード処理170においてメモリカード固有の情報を用いることで、消去ブロックサイズと異なるブロックサイズを用いることも可能である。
参考例では、常に一定の消去ブロックサイズでメモリカード100に書き込む例を示したが、論理アドレスの領域毎に異なるブロックサイズで書き込むことも可能である。例えば、ファイルシステムのシステム領域に相当するアドレスの場合は、より小さいブロックサイズでライト処理を行うことができる。この場合、メモリ182上に割り当てるバッファ263は、可変となるサイズの最大値を割り当てておけば良い。
ファイルを記録するアプリケーションは、データ記録装置のOS上で動作するものであれば、利用することができる。アプリケーションプログラム300がファイルシステムドライバ200の処理やデバイスドライバ110の処理を包含する構成も可能である。また、ユーザ空間とカーネル空間の処理を区別しないOS上でも、本発明を実施できる。FATファイルシステムを例にとって説明したが、ファイルをクラスタのような一定のサイズに分割して記録するものであれば、他のファイルシステムにも適用できる。クラスタの境界と消去ブロックの境界が一致しない場合を例にとって説明したが、それらが一致する場合にも適用できるのは明らかである。
参考例では、図1のようなデータ記録装置101に適用する例を示したが、OSが搭載されたデータ記録装置であれば、この形態に限るものではない。
参考例では半導体メモリカードに適用する例を説明したが、半導体メモリカード以外の記録デバイスの場合でも、オーバーライト動作ができず、記録の際に消去動作が必要となるような記録デバイスに適用することが可能である。
第2の参考例
参考例は、第1の参考例において、データ記録装置101のメモリ182上に確保された複数の物理メモリ領域を1つのメモリ記述子リストとして記述でき、かつ2つ以上のメモリ記述子リストを連結できる場合に適用できる例である。本参考例は、デバイスドライバ110'が第1の参考例と異なり、データ記録装置101の構成は第1の参考例と同じである。
メモリ記述子リストを図23を参照して説明する。ターゲットアドレス0x42000、レングス0x6000の第2のライト要求122がある場合、通常レングス0x6000のデータは、OSのメモリ空間260上に格納されている。仮想記憶ではメモリ領域をページ単位に分割するため、データを連続領域に確保せずに図23のように分散した領域に格納する。メモリ記述子リスト270は、この分散した領域を記述するためのリストである。図23ではメモリアドレスがカーネル空間にある例を示しているが、ユーザ空間にあってもよい。
参考例のデバイスドライバ110'におけるロード処理170Cを図24に示す。最初にデバイスドライバ110のインスタンスをメモリ182上にロードする(ステップ171C)。次に、デバイスドライバ110'の初期化操作を行う(ステップ172C)。次に消去ブロックサイズを決定する(ステップ173C)。ここで、第1の参考例とは異なり、バッファ263を確保する代わりにライト処理用のバッファリストの領域を確保する(ステップ176C)。バッファリストは、図23のメモリ記述子リスト270と同様のリストであり、リストの行数の上限を設定し、情報の格納に十分な量のバッファリストの領域を確保すれば良い。バッファリストは、アンロード時に解放される。
参考例のデバイスドライバ110'におけるライト処理130Cを図25に示す。なお、本参考例のライト処理130Cは、図8を参照して説明した第1の参考例のライト処理130と同様の構成を備える。そのため、図25のライト処理130Cにおいて、図8のライト処理と同一の操作には同一の符号を付し、それらについての説明は省略して、ライト処理130Cの特徴となる操作のみ説明する。
まず、今回のデータの先頭アドレスとバッファリスト内にあるデータの終端アドレスとが連続するかどうかを判定する(ステップ132C)。アドレスが連続しない場合は、バッファリストのデータの消去ブロックの第1のライト操作を行う(ステップ140C)。連続する場合は、バッファ263内で以前のデータと今回のデータとを連結させるため、消去ブロック境界以内の部分データのメモリ記述子リストをバッファリストにコピーする(ステップ134C)。
ここで、今回のライト要求270Aが、バッファリスト280Aと連続する場合、図26に示すように、リストをコピーして拡張することで、バッファリスト280Aをバッファリスト280Bに更新する。
図25のフローチャートに戻って説明する。ステップ134Cの操作を実施したのち、データがバッファ263の終端に到達したかどうかを判定し(ステップ135)、到達していなければ終了する。到達していればバッファリストのデータの消去ブロック105のライト処理(ステップ140D)を行う。
最後に、今回の要求データが残っているかどうかを判定し(ステップ136)、残っていればステップ134Cに戻る。残っていなければ操作を終了する。
但し、バッファリスト内にあるメモリアドレスの範囲は、データがバッファ263内で有効な間、ロックしておく必要がある。以上のようにして、デバイスドライバのライト処理130Cを行う。
以上説明したように、本参考例の消去ブロックのライト処理140Cにおいては、バッファ263がバッファリストで置き換わった以外は、第1の参考例における消去ブロックのライト操作140と同様の処理を行う。
参考例におけるデバイスドライバのライト以外の処理150とタイマーライト起動スレッド160とは、第1の参考例と同様である。
参考例は、データを連結させるためにリスト上でデータのリストを連結させている。そのため、メモリ182上でデータのコピーを行う必要がなくなり、複数の物理メモリ領域を1つのメモリ記述子リストとして記述できる。さらには、2つ以上のメモリ記述子リストを連結できる条件下においては、第1の参考例より高速なライト処理を行うことができる。
第3の参考例
参考例の基本構成は、図1に示す第1の参考例と同じであるため、それらについての説明は省略する。本参考例では、図27に示すように、データ記録装置は撮像記録装置101Bとして構成される。レンズ194から入力された映像信号とマイク195から入力された音声信号を、メモリカード100に記録する。
参考例の撮像記録装置101Bの動作も基本的には第1の参考例のデータ記録装置101と同様である。しかしながら、本参考例では、デバイスドライバのロード処理170(図4参照)において、メモリ182上にライト処理用のバッファ263を確保する操作(ステップ174)が、第1の参考例と異なる。第1の参考例との相違点を図28を参照して説明する。
図28に示すように、OSのメモリ空間260において、カーネル空間261上にライト処理のバッファ263を1個以上確保する。本参考例では、1個のバッファ263のサイズを256Kバイトとしており、128Kバイトとした第1の参考例と異なる。
バッファ263は、デバイスドライバ110のアンロード処理179において解放される。デバイスドライバ110のロード処理170及びアンロード処理179は、それぞれメモリカード100をデータ記録装置101に接続/取り外しするタイミングで行うのが望ましい。
次に本参考例の特徴となるメモリカード100への記録処理を、図29を参照して説明する。ファイルシステムドライバ200は、アプリケーションプログラム300からファイルをメモリカード100に記録するための第1のライト要求121を受けると、図47を参照して従来例で説明した手順に従って、ファイルをクラスタ210の単位で記録する。ファイルシステムドライバ200は、ファイル310を記録するために必要なクラスタのデータ221や管理データ220を、新たないくつかの第2のライト要求122としてデバイスドライバ110に送信する。
第2のライト要求122の列には、今回のファイル310の記録に必要なデータだけでなく、同時刻に記録すべき他のファイルのデータや管理データを含んでいても良い。
第2のライト要求122を受けたデバイスドライバ110は、ライト処理130を開始する。ライト処理130では、デバイスドライバ110はメモリカード100に記録される全てのデータを複数のピンポンバッファ113によりキャッシュする。このキャッシュ動作は、メモリカード100上の論理アドレスが連続する複数の第2のライト要求122を連結するように行われる。このキャッシュ動作によりメモリカード100に対する第3のライト要求123の数を減らすことができる。またピンポンバッファ113を用いることにより、第2のライト要求122のピンポンバッファ113へのコピー動作とピンポンバッファ113からメモリカード100への転送動作を同時並行して行うことが可能となる。さらにデータの整合性保証のため、一定時間間隔でピンポンバッファ113のフラッシュ動作を行う。ピンポンバッファ113は、バッファ263を複数用いて構成される。図29に示すように、2つのピンポンバッファ113(#1)、113(#2)を備え、さらに各ピンポンバッファ113を二つのバッファ263から構成する場合、図28に示すバッファ263を4個確保すれば良い。
ピンポンバッファ113の詳細を、図30を参照して説明する。図30は、K個(Kは自然数)のピンポンバッファ113を示している。各ピンポンバッファ113(#1〜#K)は、図29の構成と同様、2つのバッファ263を備える。以下、ピンポンバッファ113(#1〜#K)を構成するバッファ263は、#1−A、#1−B、#2−A、#2−B、…#K−A、#K−Bと記す。
ピンポンバッファ113(#1〜#K)の構成要素は、実際にバッファ領域が確保されるメモリ182上の論理アドレス264と、メモリカード100にライトすべきデータのターゲットアドレス265、及びレングス266とを有する。ピンポンバッファ113(#1)は、バッファ#1−Aにターゲットアドレス0x20000、レングス0x8000のデータが入っている。このように、ピンポンバッファ113を構成するバッファの少なくとも一つにデータが入っている時、「ピンポンバッファ113内にデータが入っている」と表現することにする。したがって、図30の状態では、ピンポンバッファ113(#1)、ピンポンバッファ113(#2)にはデータが入っており、ピンポンバッファ113(#3)にはデータが入っていないことになる。
また、ピンポンバッファ113(#1〜#K)にデータが入っている状態としては、バッファ113#(1〜K)−Aとバッファ113#(1〜K)−Bとの一方にデータが入っている場合もあれば、バッファ113#(1〜K)−Aとバッファ113#(1〜K)−Bとの両方にデータが入っている場合もある。両バッファにデータが入っている場合は片方のバッファ(例えば113#K−A)がライト中であり無効となる。そのため、この場合には実際に有効なデータはもう一方のバッファ(例えば113#K−B)のみとなる。
デバイスドライバ110によるライト処理130Bの詳細を、図31のフローチャートを参照して説明する。ピンポンバッファ113(#1〜#K)は、図30に示すように、K個(Kは自然数)確保するとする。
まず、要求データと連続するアドレスのデータを持つピンポンバッファ113#k(kは自然数、1≦k≦K)が存在するかどうかを判定する(ステップ231)。ここでアドレスとは、メモリカード100上の論理アドレス又は物理アドレスである。要求データと連続するアドレスのデータを持つピンポンバッファ113#kが存在する場合は、そのピンポンバッファ113#kを、要求データをコピーするターゲットバッファwとする(ステップ232)。存在しない場合は、要求データをコピーするターゲットバッファwを任意に決定する(ステップ233)。この決定方法は、メモリカード100上のデータが矛盾しない範囲で任意の方法が考えられる。例えば、ピンポンバッファ113#n(1≦n≦K)の中で、要求データとデータのアドレス領域が重複するn=N1が存在する場合にはw=N1とし、N1が存在しない場合にデータが入っていないピンポンバッファn=N2が存在する場合にはw=N2とする。いずれも存在しない場合にはwを任意のnとする方法がある。ターゲットバッファwが決定されると、ターゲットバッファw内のデータをメモリカード100に書き込むライト操作を行う(ステップ234A)。但し、バッファw内にデータが入っていない場合には、ライト操作を行わない。
次に、バッファ境界以内の部分データを、要求データからピンポンバッファwにコピーする(ステップ235)。バッファ境界以内とは、図30に示したピンポンバッファ113の終端アドレス以内に収まることを意味する。例えばピンポンバッファ113(#1)を構成するバッファ#1−Aをターゲットバッファwとする場合、システムファイルドライバ200が、合計のレングスが0x40000以内となる部分データをバッファ#1−Aにコピーすることを意味する。その際、ターゲットバッファwには、ステップ231でYESが選択された場合にはデータが入っており、NOが選択された場合にはデータが入っていない。そこで、ステップ231でYESが選択された場合にはデータを連続させるようにバッファ境界以内の部分データをターゲットバッファwにコピーし、NOが選択されていた場合にはピンポンバッファwの先頭から部分データをコピーする。
次に、コピーしたデータがピンポンバッファwの終端に到達したかどうかを判定し(ステップ236)、到達していなければ終了する。到達していればピンポンバッファw内のデータをメモリカード100に書き込むライト操作(ステップ234B)を行う。そのうえで、今回の要求データが残っているかどうかを判定し(ステップ237)、残っていればステップ135に戻る。残っていなければ終了する。
以上説明したデバイスドライバのライト処理130Bの効果を示す具体例を、図32と図33を参照して説明する。ここでは、2個のピンポンバッファ113(#1)、113(#2)が設けられ、さらには、各ピンポンバッファ113(#1)、113(#2)は、それぞれ2個のバッファ#1−A、#1−B、または、バッファ#2−A、#2−Bを備えているとする。さらには、デバイスドライバ110は、図32に示す4個の第2のライト要求122を連続して受信し、その結果、図31のフローチャートに示すライト処理130Bが4回実施されるとする。その際、2個のピンポンバッファ113(#1)、113(#2)には、最初は両方ともデータが入っていないものとする。
この場合、図32に示す処理では、到着順1の第2のライト要求122は、ピンポンバッファ113(#1)を構成するバッファ#1−Aにコピーされて(ステップ233、235)、終了する。到着順2の第2のライト要求122は、バッファ#1−Aに入っているデータとアドレスが連続しない。そのため、この第2のライト要求122は、ピンポンバッファ113(#2)を構成するバッファ#2−Aにコピーされて(ステップ233、235)、終了する。到着順3の第2のライト要求122は、バッファ#1−Aに入っているデータとアドレスが連続するので、バッファ#1−Aにコピーされて(ステップ232、235)、終了する。到着順4の第2のライト要求122は、ピンポンバッファ113(#1)を構成するバッファ#1−Aに入っているデータとはアドレスが連続しないが、ピンポンバッファ113(#2)を構成するバッファ#2−Aに入っているデータとアドレスが連続する。そのため、この第2のライト要求122は、バッファ#2−Aにコピーされて(ステップ232、235)、終了する。
以上の処理により、ピンポンバッファ113(#1)、113(#2)にライトすべきデータがキャッシュされる。
次に図33に示す到着順5の第2のライト要求122を受けた場合、この第2のライト要求122はピンポンバッファ113(#1)を構成するバッファ#1−Aに格納されているデータにも、ピンポンバッファ113(#2)を構成するバッファ#2−Aに格納されているデータにも、そのアドレスが連続しない。そのため、図31のステップ233において任意のピンポンバッファ113が選択される。この例では、ピンポンバッファ113(#1)が選択されたとする。この場合、バッファ#1−Aに格納されているデータを読み出してメモリカード100に書き込むライト操作を行ったうえで(ステップ234A)、到着順5のデータをバッファ#1−Bにコピーする(ステップ235)。
このとき、複数のバッファを備えたピンポンバッファ113を設けているため、バッファ#1−Aに格納されたデータのライト操作(ステップ234A)の完了を待つことなく、バッファ#1−Bにデータをコピーする操作(ステップ235)を行うことができる。バッファ#1−A内のデータは、ライト操作(ステップ234A)が完了すればクリアされる。これによりピンポンバッファ113(#1)における有効なデータの格納場所(バッファ)は、バッファ#1−Aからバッファ#1−Bに変更される。そのため、次に到着順6の第2のライト要求122を受ける場合、ステップ231の操作においてデータが連続するかどうかを比較する対象となるバッファは、バッファ#1−Bとバッファ#2−Aとに変更される。
以上、図32と図33とを参照して説明したように、デバイスドライバ110が受ける第2のライト要求122を、ピンポンバッファ113(#1〜#K)を用いてキャッシュすることで、メモリカード100へ送る第3のライト要求123の数を減らすことができ、ライトの転送レートを向上させることができることがわかる。
デバイスドライバ110のライト処理130Bを、具体例を参照して詳しく説明する。図31のライト処理130Bでは、ステップ232もしくはステップ233にてターゲットバッファw(113)を決定した後は、ターゲットバッファwに関する動作のみを考えれば良い。よってライト処理130Bは、ターゲットバッファwと要求データとの関係から、図34から図38に示す5つの場合に代表させることができる。
まず、ターゲットバッファw(113)内にデータがない場合のライト処理130Bの例を図34に示す。ターゲットバッファw(113)は、図28で予め確保したバッファ263領域のアドレスであり、0x20000バイト、即ち128Kバイトの領域としている。
第2のライト要求122が、ターゲットアドレス0x82000、レングス0xD000であるとした場合、0x82000から0xD000分のデータを、ターゲットバッファwを構成するバッファ#w−Aにコピーする(ステップ235)。このとき、バッファ#w−Aを0x82000から0xA2000までのメモリカード100上の領域に対応させる。
コピーしたデータはバッファ#w−Aの終端に到達していないので(ステップ236)、この第2のライト要求122の処理を終了する。なお、この例ではバッファ#w−Aにコピーする例を示したが、ターゲットバッファwの状態によりバッファ#w−Bにコピーする場合もある。これは、以下に示す他の場合の例でも同じである。
今回の要求がターゲットバッファw内のデータと連続する場合の例を図35に示す。ターゲットバッファwにはターゲットアドレス0x80000からレングス0x2000のデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x82000でレングスが0xD000の場合、このデータはターゲットバッファw内のデータと連続する。そのため、ターゲットバッファwにおいてターゲットアドレス0x80000からレングス0x10000までのデータ領域を、今回の第2のライト要求122で指定されるデータに更新して(ステップ235)、終了する。
今回の要求がターゲットバッファw内のデータと連続しない場合の例を図36に示す。ターゲットバッファwを構成するバッファ#w−Aにはターゲットアドレス0x6C000からレングス0x8000のデータが入っている。このデータと今回の第2のライト要求122のアドレス0x82000とは連続しない。そのため、バッファ#w−A内のデータを先に読み出してメモリカード100に書き出してから(ステップ234A)、バッファ#w−Bに今回の要求をコピーして(ステップ235)、終了する。
今回の要求がピンポンバッファw内のデータと連続し、ピンポンバッファの境界を跨ぐ場合の例を図37に示す。ターゲットバッファwを構成するバッファ#w−Aにはターゲットアドレス0x80000からレングス0x1A000のデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x9A000でレングスが0xD000の場合、バッファ#w−A内のデータと連続するが、バッファ境界のためバッファ#w−Aにはデータを0x6000だけしか挿入できない。この場合、バッファ境界以内のレングス0x6000の部分データだけをバッファ#w−Aにコピーする(ステップ235)。この場合、データのコピーにより、ピンポンバッファw(バッファ#w−A)では、格納したデータがバッファ終端に到達するので(ステップ236)、ピンポンバッファw内のデータを読み出してメモリカード100に書き込むライト操作を行う(234A)。ライト操作を実施しても、第2のライト要求122の要求データは残っているので(ステップ237)、残りのレングス0x8000の部分データを、ターゲットバッファwを構成するバッファ#w−Bにコピーする(ステップ235)。今回のコピー処理でデータはターゲットバッファwの終端に達しない(ステップ236)ので終了する。
今回の要求がピンポンバッファw内のデータと連続せず、ピンポンバッファの境界を跨ぐ場合の例を図38に示す。ターゲットバッファwを構成するバッファ#w−Aにはターゲットアドレス0x6C000からレングス0x8000のデータが入っている。今回の第2のライト要求122のターゲットアドレスが0x9A000でレングスが0x28000の場合、この第2のライト要求122で指定されるデータはバッファ#w−A内のデータと連続しない。そのため、バッファ#w−A内のデータを先に読み出してメモリカード100に書き込む(ステップ234A)。
次にターゲットバッファwの境界のため、ターゲットバッファwを構成するバッファ#w−Bにはデータを0x20000だけしか挿入できない。この場合、バッファ境界以内のレングス0x20000の部分データだけをバッファ#w−Bにコピーする(ステップ235)。コピーしたデータはターゲットバッファwの終端に到達するので(ステップ236)、ターゲットバッファw内のデータのライト処理を行う(ステップ234B)。
以上の操作を実施したのちであっても、第2のライト要求122の要求データは残っているので(ステップ237)、残りのレングス0x8000の部分データを、ターゲットバッファwを構成するもう一つのバッファ#w−Aにコピーする(ステップ235)。この際、バッファ#w−Aが使用できる状態になっているか確認する必要がある。コピーされたデータはバッファ#w−Aの終端に達しないので終了する。
以上説明したライト処理130Bの5つの場合において、図37と図38に示すように、コピーするデータがバッファ境界を跨ぐ場合は、ピンポンバッファ113を構成するバッファのサイズを十分大きく確保しておけば良い。そうすれば、コピーするデータがバッファ境界を跨ぐことがほとんどなくなる。ファイルシステムドライバ200からの要求は、いくつかの要求をキャッシュすると次に連続したアドレスの要求が来る確率が高いため、第2のライト要求122を連結して一つの要求にできる確率は高くなる。
デバイスドライバ110におけるライト以外の処理150Bを、図39のフローチャートを参照して説明する。最初に、ピンポンバッファ113(#k)(1≦k≦K)内のデータを読み出してメモリカード100に書き込むライト操作を実行する(ステップ151)。これは、K個全てのピンポンバッファ113(#k)内のデータをライトする操作である。この操作によりピンポンバッファ113(#k)内のデータをメモリカード100に確実に反映させてデータの整合性を確保する。その後ライト以外の操作を実行し(152)、終了する。ライト以外の操作には、リード要求(デバイスドライバ110がファイルシステムドライバ200から受けるリード要求)やデバイス制御の要求がある。
デバイスドライバ110におけるタイマーライト起動スレッド160は、図17を参照して説明した第1の参考例におけるタイマーライト起動スレッド160と同様であるのでその説明は省略する。
参考例のタイマーライト処理166Bを図40のフローチャートを参照して説明する。タイマーライト処理166Bでは、図39のステップ151の操作であるピンポンバッファ113(#k)(1≦k≦K)内のデータのライト操作を実行する。並行して動作する処理のタイミングによっては、ステップ151において、ピンポンバッファ113(#k)内にデータが存在しない場合もあり得る。ピンポンバッファ113(#k)内にデータが存在する場合のみ、メモリカード100へのライトが実行される。このタイマーライト処理166Bにより、メモリカード100のデータをピンポンバッファ113(#k)でキャッシュしながらも、閾値Thの時間以内にはメモリカード100にデータが反映されることを保証する。メモリカード100が取り外される場合でも、データの整合性を保つことができる。
参考例により、メモリカード100へのライト要求をキャッシュし、連続したアドレスの要求を連結することで、メモリカード100へ送られるライト要求の数を減らすことができる。本発明のデバイスドライバを用いることで、汎用のファイルシステムと汎用のメモリカードを用いる場合でも、ライトの転送レートを向上させることが可能となる。
参考例は、図6に示したプログラム構成に基づいているが、図22に示すプログラム構成においても、第1の参考例と同様に実施することができる。
参考例では、図31のライト処理130Bにおいて、今回のデータとピンポンバッファ113内のデータとが連続するかどうかを判定するステップ231の操作は、図35のようにターゲットバッファw内のデータの終端アドレスと第2のライト要求122のターゲットアドレスとが完全に一致するか否かで、両データの連続性を判定している。
しかしながら、ターゲットアドレスがターゲットバッファw内のデータの終端アドレスより小さく、先頭アドレスより大きい場合にも連続と判定することができる。例えば図35の場合、ターゲットアドレスが0x81000のような場合でも、バッファ#w−A内のデータの0x81000以降を上書きしてコピーすることができる。この場合、最終的なバッファ#w−A内のデータの終端アドレスは0x8F000となる。以上の連続性の判定を変更する場合には、図31のステップ233において、先述したバッファn=N1を選択する際の判定条件から、ターゲットアドレスがターゲットバッファw内のデータの終端アドレスより小さく、先頭アドレスより大きい場合を除外する必要がある。
参考例では、図34のようにターゲットバッファw内にデータがない場合、ターゲットバッファwの先頭から第2のライト要求122のデータをコピーする例を示したが、例えばターゲットバッファwの先頭のターゲットアドレスを0x20000の倍数である0x80000と決定し、先頭から0x2000だけ後ろの位置からデータをコピーしても良い。その場合、最終的に図31のステップ234にてターゲットバッファw内のデータをライトする前に、0x80000から0x2000だけのデータをメモリカード100からターゲットバッファwにリードすることで、常にターゲットアドレスが0x20000の倍数であるライトを行うことができる。さらに、ステップ234にてライトする前にターゲットバッファw内のデータの終端アドレスが0xA0000に合っていない場合は、実際のターゲットバッファw内のデータの終端から0xA0000までのデータをメモリカード100からリードすることで、常にレングスが0x20000のライトを行うこともできる。これは、NAND型フラッシュメモリのようにブロックでデータをライトすることが効率的な記録デバイスに適している。ブロックとしては、記録ブロック、消去ブロック、またはそれらの整数倍の単位を用いることができる。
参考例では、メモリカード100を別のメモリカード100'に差し替えた場合、ピンポンバッファ113(#1〜#K)の数K(Kは自然数)やピンポンバッファ113(#1〜#K)のサイズを可変とすることが可能である。メモリカード100を抜いた際にデバイスドライバ110のアンロード処理179が行われ、別のメモリカード100'を差した際にデバイスドライバ110のロード処理170が行われる。ロード処理170のステップ174で、別のメモリカード100'に対するピンポンバッファ113(#1〜#K)を新たに確保することができる。また、ロード処理170においてメモリカード固有の情報を用いることで、ピンポンバッファ113(#1〜#K)の数Kを決定することも可能である。
参考例では、図30のピンポンバッファ113(#1〜#K)、即ち2*K個のバッファを用いる例を示したが、m*K個(mは自然数)のバッファを用いても良い。mをバッファの並列数と呼ぶことにする。並列数mの値により、デバイスドライバ110が並列して行える処理の数が変化する。m=1の場合、例えば図29において、ファイルシステムドライバ200からの第2のライト要求122をデバイスドライバ110がバッファにコピーする処理と、デバイスドライバ110がメモリカード100に第3のライト要求123を行う処理とは、双方の処理が同一のバッファ#k(kは自然数、1≦k≦K)を用いていると同時に行うことができない。つまり図31のフローチャートにおいて、ライト操作234A、234Bの完了は必ず待たなければならないことになる。m=2の場合、1回まではライト処理234A、234Bの完了を待たずに次の処理へ進める。一般的にm=M(Mは自然数、1≦M≦m)の場合、M−1回のライト処理234A、234Bまではメモリカード100に対するライトの待ち行列に挿入することができることになる。
ピンポンバッファ113(#1〜#K)の数Kとバッファの並列数mは、デバイスドライバ110が確保できるメモリ182の容量、データ記録装置101で許容できる書き込み遅延時間、メモリカード100の物理転送レート、使用するファイルシステムドライバ200の種類などに応じて最適な値を用いることができる。例えばFATファイルシステムを用いた場合、K=2〜5、m=2を用いることができる。
ファイルを記録するアプリケーションは、データ記録装置のOS上で動作するものであれば、利用することができる。アプリケーションプログラム300がファイルシステムドライバ200の処理やデバイスドライバ110の処理を包含する構成も可能である。また、ユーザ空間とカーネル空間の処理を区別しないOS上でも、本実施形態を実施できる。FATファイルシステムを例にとって説明したが、デバイスドライバ110の処理はファイルシステムフォーマットには依存していないため、他のファイルシステムにも適用できる。
参考例では、図27のような撮像記録装置101Bに適用する例を示したが、OSが搭載されたデータ記録装置であれば、この形態に限るものではない。例えば撮像記録装置101Bに本発明を適用した場合、より高い記録レートを想定した装置にすることが可能である。つまり、レンズ194を通して撮影した映像データと、マイク195を通して集めた音声データとを、高いビットレートで高品質にメモリカード100にリアルタイム記録することが可能となる。
参考例では半導体メモリカードに適用する例を説明したが、半導体メモリカード以外の記録デバイスに対しても適用できることは明らかである。
第4の参考例
参考例は、第3の参考例において、データ記録装置101のメモリ182上に確保された複数の物理メモリ領域を1つのメモリ記述子リストとして記述でき、かつ2つ以上のメモリ記述子リストを連結できる場合に適用できる例である。データ記録装置101の構成は第1の実施の形態と同じであり、デバイスドライバ110のみが異なる。
メモリ記述子リストは、第2の参考例において図23を用いて説明したものと同じである。
デバイスドライバ110におけるロード処理170Dを図41に示す。最初にデバイスドライバ110のインスタンスをメモリ182上にロードする(171D)。次に、デバイスドライバ110の初期化処理を行う(172D)。ここで、第3の参考例とは異なり、バッファ263を確保する代わりにライト処理用のバッファリストの領域を確保する(176D)。バッファリストは、図23のメモリ記述子リスト270と同様のリストであり、リストの行数の上限を設定し、情報の格納に十分な量のバッファリストの領域を確保すれば良い。バッファリストを用いてライト中に新しいリストで上書きされるのを防ぐため、第1の実施の形態と同様にピンポンバッファリストにしても良い。バッファリスト(又はピンポンバッファリスト)の個数はK個(Kは自然数)に限定する。バッファリストは、アンロード時に解放される。
デバイスドライバ110におけるライト処理を、図42のフローチャートを参照して説明する。バッファリストは、K個(Kは自然数)確保するとする。まず、要求データと連続するアドレスのデータを持つバッファリストk(kは自然数、1≦k≦K)が存在するかどうかを判定する(ステップ231D)。ここでアドレスとは、メモリカード100上の論理アドレス又は物理アドレスである。第2のライト要求122と連続するアドレスのデータを持つバッファリストkが存在する場合は、要求データのリストをコピーするターゲットバッファwをバッファkとする(232D)。存在しない場合は、要求データのリストをコピーするターゲットバッファリストwを任意に決定する(233D)。この決定方法は、第3の参考例と同様である。ターゲットバッファリストwが決定されると、バッファリストw内のデータのライト処理を行う(234D−1)。但し、ターゲットバッファリストw内にデータが入っていない場合には、ライトを行わない。
次に、データの長さが上限に収まるように部分データのリストをバッファリストwにコピーする(235D)。データの長さの上限は、デバイスドライバ110の初期化処理172Dなどで予め設定した値を使用する。この値としては、例えばメモリカード100が受け付けるライト要求の長さの最大値を用いることができる。バッファリストwにコピーするデータの長さが上限に到達したかどうかを判定し(236D)、到達していなければ終了する。到達していればバッファリストw内のデータのライト処理(234D−2)を行う。今回の要求のデータが残っているかどうかを判定し(237D)、残っていればステップ235Dに戻る。残っていなければ終了する。以上のようにして、デバイスドライバ110のライト処理130Dを行う。
今回の要求データがバッファリストwに連続する場合のコピー処理は、第2の参考例において図26を参照して説明した通りである。
デバイスドライバ110のライト以外の処理150、タイマーライト起動スレッド160は、基本的に第3の参考例と同様である。また、デバイスドライバ110の処理111も基本的に第3の参考例と同様である。
参考例は、データを連結させるためにリスト上でデータのリストを連結させている。そのため、メモリ182上でデータのコピーを行う必要がなくなり、複数の物理メモリ領域を1つのメモリ記述子リストとして記述できる。さらには、2つ以上のメモリ記述子リストを連結できる条件下においては、第3の参考例より高速なライト処理を行うことができる。
実施の形態
本実施形態は、第1,2,3,4の参考例において、ライトの遅延時間が極めて小さいことが要求されるデータがある場合、そのライト要求のみをキャッシュせずに即座にライトする機構を設けることができるものである。
本実施形態におけるデバイスドライバの処理112を図43に示す。図43において、、第1,2,3,4の参考例と異なる点は、ライト操作130を行う前に、制約条件に当てはまるかどうかを判定するステップ231を設け、当てはまる場合には制約時のライト操作230を行うようにしたものである。この制約条件は、任意の条件で良い。例えば、メモリカードへライトするターゲットアドレスの範囲や、データのレングス、又はそれらの組み合わせなどの条件で決定することができる。この制約条件の設定方法は、デバイスドライバ110の初期化操作(図4のステップ172参照、図24のステップ172C、図42のステップ172D参照)にて設定する方法や、要求の受付処理125にて要求毎に設定する方法などがある。
制約時のライト操作230について、図44のフローチャートを参照して説明する。まず、要求データと重複するアドレスのデータを持つピンポンバッファ113が存在するかどうかを判定する(ステップ232)。存在する場合には、ピンポンバッファ113内のデータのライト操作を行う(ステップ134)。ステップ134の操作は、次の理由により実施する。要求データをライトするメモリカード100のアドレス領域と重なるライト要求がピンポンバッファ113にキャッシュされていると、後でそのピンポンバッファ113内のデータがライトされてメモリカード100上のデータに矛盾が生じるためである。ステップ232の操作を実施したのち、要求データのライト操作を行い(ステップ233)、終了する。
本実施形態は、ライトの遅延時間が極めて小さいことが要求されるデータ、例えばファイルシステムの管理データ等に対して、ライト要求をキャッシュせずに即座にライトすることができる。リアルタイムにライトするデータとキャッシュして高速にライトするデータを区別することができるため、ライトの転送レートを高めつつも高い信頼性を持つデータ記録装置を構成することが可能となる。
映像・音声などの大容量データをファイル形式で高速に記録する必要のあるビデオカメラ、カメラレコーダに有効である。 また、カメラレコーダなどリアルタイム動作が必要なデータ記録装置と共通の記録メディアを使用し、映像・音声などの大容量データを編集・記録する必要のある映像編集装置、データ記録装置に有効である。
本発明の第1の参考例におけるデータ記録装置の構成図 同第1の参考例におけるデータ記録装置の内部構成図 同第1の参考例におけるデバイスドライバの処理を示す図 同第1の参考例におけるデバイスドライバのロード処理を示すフローチャート 同第1の参考例におけるOSのメモリ空間におけるライト処理のバッファの確保を示す図 同第1の参考例におけるプログラムの階層構成図 同第1の参考例におけるライト処理を示す図 同第1の参考例態におけるデバイスドライバのライト処理を示すフローチャート 同第1の参考例におけるバッファ内にデータがない場合のデバイスドライバのライト処理を示す図 同第1の参考例におけるバッファ内のデータと連続する場合のデバイスドライバのライト処理を示す図 同第1の参考例におけるバッファ内のデータと連続しない場合のデバイスドライバのライト処理を示す図 同第1の参考例におけるバッファ内のデータと連続し、境界を跨ぐ場合のデバイスドライバのライト処理を示す図 同第1の参考例におけるバッファ内のデータと連続せず、境界を跨ぐ場合のデバイスドライバのライト処理を示す図 同第1の参考例におけるバッファ内のデータの消去ブロックのライト処理を示すフローチャート 同第1の参考例におけるバッファ内のデータの消去ブロックのライト処理を示す図 同第1の参考例におけるデバイスドライバのライト以外の処理を示すフローチャート 同第1の参考例におけるデバイスドライバのタイマーライト起動スレッドを示すフローチャート 同第1の参考例におけるタイマーライト処理を示す図 同第1の参考例のデータ記録動作の第1の説明図 同第1の参考例のデータ記録動作の第2の説明図 同第1の参考例のデータ記録動作の第3の説明図 同第1の参考例におけるプログラムの階層構成図 本発明の第2の参考例におけるメモリ記述子リストを説明する図 同第2の参考例におけるデバイスドライバのロード処理を示すフローチャート 同第2の参考例におけるデバイスドライバのライト処理を示すフローチャート 同第2の参考例におけるバッファリストを説明する図 本発明の第3の参考例のデータ記録装置を組み込んだ撮影記録装置の外観斜視図 第3の参考例におけるOSのメモリ空間におけるライト処理のバッファの確保を示す図 第3の参考例におけるライト処理を示す図 第3の参考例におけるピンポンバッファを説明する図 第3の参考例におけるデバイスドライバのライト処理を示すフローチャート 第3の参考例におけるデバイスドライバのライト処理の効果を説明する図 第3の参考例におけるデバイスドライバのライト処理の効果を説明する図 第3の参考例におけるピンポンバッファ内にデータがない場合のデバイスドライバのライト処理を示す図 第3の参考例におけるピンポンバッファ内のデータと連続する場合のデバイスドライバのライト処理を示す図 第3の参考例におけるピンポンバッファ内のデータと連続しない場合のデバイスドライバのライト処理を示す図 第3の参考例におけるピンポンバッファ内のデータと連続し、境界を跨ぐ場合のデバイスドライバのライト処理を示す図 第3の参考例におけるピンポンバッファ内のデータと連続せず、境界を跨ぐ場合のデバイスドライバのライト処理を示す図 第3の参考例におけるデバイスドライバのライト以外の処理を示すフローチャート 第3の参考例におけるタイマーライト処理を示す図 第4の参考例におけるデバイスドライバのロード処理を示すフローチャート 第4の参考例におけるデバイスドライバのライト処理を示すフローチャート 本発明の実施の形態におけるデバイスドライバの処理を示す図 実施の形態におけるデバイスドライバの制約時のライト処理を示すフローチャート FATファイルシステムの構成を説明する図 ファイルアロケーションテーブルの記録情報を説明する図 FATファイルシステムにおけるファイルの記録手順を示すフローチャート ファイルシステムのクラスタとメモリカードの消去ブロックとの一般的な関係を示す図 ライトの転送レートが低下する現象を説明する図
符号の説明
100 メモリカード 101 データ記録装置
102 PC 105 消去ブロック
109 メモリカードコントローラ
110 デバイスドライバ 111 デバイスドライバの処理
112 デバイスドライバの処理 113 ピンポンバッファ
115 フィルタドライバのプログラム
121 第1のライト要求 122 第2のライト要求
123 第3のライト要求 124 要求の受付処理
130 ライト処理 140 ライト操作
160 タイマーライト起動スレッド
170 ロード処理 179 アンロード処理
181 CPU 182 メモリ
183 記憶デバイス 184 内部バス
185 バスコントローラ 186 入力デバイスコントローラ
190 メモリカードスロット 191 外付けドライブ
192 ディスプレイ 193 入力装置
200 ファイルシステムドライバ
210 クラスタ 260 メモリ空間
263 バッファ 300 アプリケーションプログラム
310 元のファイル

Claims (2)

  1. CPUとメモリと記録デバイスとをバスにて接続してなるデータ記録装置において、記録したデータを消去する際に所定の消去ブロックで前記データを消去する制約を有する前記記録デバイスにデータを記録するデータキャッシュ方法であって、
    前記記録デバイスに記録するデータを一次保持する一時保持器を、前記メモリにおいてそれぞれ複数のバッファからなる複数のピンポンバッファにて構成するとともに、前記消去ブロックのN倍(Nは自然数)のデータ長を保持可能な記録容量でもって予め設定しておく工程と、
    記録するデータを複数個の要求データに分割する工程と、
    前記要求データを前記消去ブロックのL倍(Lは自然数)の大きさを有する複数個の部分データに分割させてから前記ピンポンバッファに保持させる工程と、
    先に実施されたデータキャッシュ処理により保持されたデータが前記ピンポンバッファに一時保持されているか否かを判定する工程と、
    前記ピンポンバッファにデータが一時保持されていない場合には、前記ピンポンバッファのアドレス終端が前記消去ブロックの境界に一致するか否かを判定し、前記ピンポンバッファの終端が前記消去ブロックの境界に一致する場合には前記要求データを記録用データとして設定し、一致しない場合には前記要求データを前記ピンポンバッファに一時保持させる工程と、
    前記ピンポンバッファにデータが一時保持されている場合には、前記ピンポンバッファが一時保持している保持データと前記要求データとが、前記記録デバイスの記録アドレス上で連続するか否かを判定する工程と、
    前記保持データと前記要求データとが前記記録アドレス上で連続する場合には前記要求データを、前記保持データに連結させた状態で前記ピンポンバッファに一時保持させ、連続しない場合には前記保持データを記録用データとして設定するとともに、前記要求データを前記ピンポンバッファの空きバッファに保持させる工程と、
    前記ピンポンバッファに設定した前記記録用データの記録アドレス領域が前記消去ブロックのN倍となるか否かを判定する工程と、
    前記記録用データが前記消去ブロックのN倍になる場合には前記記録用データを消去ブロックの境界に一致する記録用データとし、N倍にならない場合には当該記録用データを前記消去ブロックのN倍にするのに必要となる不足データを、前記記録デバイスの前記不足データに対応するアドレス領域から読み出して前記記録用データに複写することで、当該記録用データを消去ブロックの境界に一致する記録用データにする工程と、
    前記消去ブロックの境界に一致した記録用データを前記ピンポンバッファから前記記録デバイスに書き込む工程と、
    の上記各工程を前記CPUにて実行するとともに、
    前記CPUは、
    前記一時保持器に保持データが一時保持されている場合、前記要求データが、他のキャッシュ対象データより書き込み時の遅延が小さいことを求られるデータであるか否かを判断し、
    前記要求データが小さい遅延を求められるデータである場合、前記複数の一時保持器それぞれにおいて前記保持データの記録アドレスと当該要求データの記録アドレスとが重複するか否かをさらに判断し、
    前記重複が生じる前記保持データと前記要求データとが存在する場合には、当該保持データを最初に書き込む記録用データとし、当該要求データを次に書き込む記録用データとする、
    ことを特徴とする記録デバイスのキャッシュ方法。
  2. CPUとメモリと記録デバイスとをバスにて接続してなり、記録したデータを消去する際に所定の消去ブロックで前記データを消去する制約を有する前記記録デバイスにデータを記録するデータ記録装置であって、
    前記メモリにおいてそれぞれ複数のバッファからなる複数のピンポンバッファにて構成するとともに、前記消去ブロックのN倍(Nは自然数)のデータ長を保持可能な記録容量を有しておりかつ前記記録デバイスに記録するデータを一次保持する一時保持器を備えており、
    記録するデータを複数個の要求データに分割する機能と、
    前記要求データを前記消去ブロックのL倍(Lは自然数)の大きさを有する複数個の部分データに分割させてから前記ピンポンバッファに保持させる機能と、
    先に実施されたデータキャッシュ処理により保持されたデータが前記ピンポンバッファに一時保持されているか否かを判定する機能と、
    前記ピンポンバッファにデータが一時保持されていない場合には、前記ピンポンバッファのアドレス終端が前記消去ブロックの境界に一致するか否かを判定し、前記ピンポンバッファの終端が前記消去ブロックの境界に一致する場合には前記要求データを記録用データとして設定し、一致しない場合には前記要求データを前記ピンポンバッファに一時保持させる機能と、
    前記ピンポンバッファにデータが一時保持されている場合には、前記ピンポンバッファが一時保持している保持データと前記要求データとが、前記記録デバイスの記録アドレス上で連続するか否かを判定する機能と、
    前記保持データと前記要求データとが前記記録アドレス上で連続する場合には前記要求データを、前記保持データに連結させた状態で前記ピンポンバッファに一時保持させ、連続しない場合には前記保持データを記録用データとして設定するとともに、前記要求データを前記ピンポンバッファの空きバッファに保持させる機能と、
    前記ピンポンバッファに設定した前記記録用データの記録アドレス領域が前記消去ブロックのN倍となるか否かを判定する機能と、
    前記記録用データが前記消去ブロックのN倍になる場合には前記記録用データを消去ブロックの境界に一致する記録用データとし、N倍にならない場合には当該記録用データを前記消去ブロックのN倍にするのに必要となる不足データを、前記記録デバイスの前記不足データに対応するアドレス領域から読み出して前記記録用データに複写することで、当該記録用データを消去ブロックの境界に一致する記録用データに設定する機能と、
    前記消去ブロックの境界に一致した記録用データを前記ピンポンバッファから前記記録デバイスに書き込む機能と、
    前記要求データが、他のキャシュ対象データより書き込み時の遅延が小さいことを求められるデータである場合、前記複数の一時保持器それぞれにおいて前記保持データの記録アドレスと当該要求データの記録アドレスとが重複するか否かをさらに判断する機能と、
    記録アドレスが前記要求データと重複する保持データが存在する場合にはその保持データを最初に書き込む記録用データとし、その要求データを次に書き込む記録用データとする機能と、
    の上記各機能を前記CPUが備えていることを特徴とするデータ記録装置。
JP2004140315A 2004-05-10 2004-05-10 記録デバイスのキャッシュ方法及びデータ記録装置 Expired - Fee Related JP4219299B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004140315A JP4219299B2 (ja) 2004-05-10 2004-05-10 記録デバイスのキャッシュ方法及びデータ記録装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004140315A JP4219299B2 (ja) 2004-05-10 2004-05-10 記録デバイスのキャッシュ方法及びデータ記録装置

Publications (2)

Publication Number Publication Date
JP2005322074A JP2005322074A (ja) 2005-11-17
JP4219299B2 true JP4219299B2 (ja) 2009-02-04

Family

ID=35469308

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004140315A Expired - Fee Related JP4219299B2 (ja) 2004-05-10 2004-05-10 記録デバイスのキャッシュ方法及びデータ記録装置

Country Status (1)

Country Link
JP (1) JP4219299B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102017284B1 (ko) 2015-05-26 2019-09-02 삼성전자주식회사 부팅 디바이스 및 그 동작 방법

Also Published As

Publication number Publication date
JP2005322074A (ja) 2005-11-17

Similar Documents

Publication Publication Date Title
US8032724B1 (en) Demand-driven opportunistic garbage collection in memory components
JP3825465B2 (ja) メモリカード及びメモリカードシステム
US7227788B2 (en) Memory management device and memory device
KR100877448B1 (ko) 비휘발성 기억 시스템
US6571326B2 (en) Space allocation for data in a nonvolatile memory
JP5400875B2 (ja) メモリコントローラ、不揮発性記憶装置、アクセス装置、不揮発性記憶システム、データ書き込み方法、および、プログラム
USRE48983E1 (en) Memory device and controlling method of the same
US7647470B2 (en) Memory device and controlling method for elongating the life of nonvolatile memory
US8914579B2 (en) Access device, information recording device, controller, and information recording system
US20110022807A1 (en) Write once recording device
US10754549B2 (en) Append only streams for storing data on a solid state device
JP5378197B2 (ja) メモリコントローラ、メモリカード、不揮発性メモリシステム
US20070174550A1 (en) Data area managing method in information recording medium and information processor employing data area managing method
JP2006514386A (ja) ドライブ装置、プログラム
US7613892B2 (en) Recording device, recording method, recording medium, and program
JP4130808B2 (ja) フォーマット方法
US20180232154A1 (en) Append Only Streams For Storing Data On A Solid State Device
JP4308780B2 (ja) 半導体メモリ装置、メモリコントローラ及びデータ記録方法
JP2008262452A (ja) 記録デバイスのキャッシュ方法および記録装置
JP4219299B2 (ja) 記録デバイスのキャッシュ方法及びデータ記録装置
KR102003432B1 (ko) 감시 시스템의 영상 관리 장치 및 방법
KR100727399B1 (ko) 데이터 입출력 속도가 증가된 메모리 카드
JP6136939B2 (ja) メモリ制御方法、メモリ制御プログラムおよび半導体集積回路装置
JPH04111030A (ja) 情報記録装置
KR20060069118A (ko) 메모리 카드의 수선방법

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080415

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080616

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080715

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080916

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

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

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

Free format text: PAYMENT UNTIL: 20111121

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20131121

Year of fee payment: 5

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees