1

ログ ファイルとして NAND ファイルシステムに書き込む永続的な辞書 (文字列 -> 文字列マップ) があります。私のバイナリ形式は次のとおりです。

1 byte - key size
<key size> bytes - key without the terminating nul-character
2 bytes - value size and flags
<value size> bytes - value without terminating nul-character

通常、辞書を変更するたびに 20 ~ 100 バイトを書き込みます。しかし、これは NAND に永続化されているため、この設計では毎回新しいページが割り当てられ、使用可能な NAND スペースが反復ごとに 2k 減少します。

このデータを失うことができないため、書き込みをキャッシュできません。POS端末を実行し、取引データを保存しています。私のアルゴリズムは効果的にフラッシュを書き込んで呼び出すので、これは起こりません。

さて、この問題を解決するためのデファクトまたは標準のアルゴリズムはありますか? ターゲット プラットフォームでのパワーダウン トリガーを確認しましたが、SDK は NAND を永続レイヤーとして使用することを提案しています。

4

2 に答える 2

0

ええと...ページのどこにいるかを追跡し、書き込む前に最後のページを読み取り、新しいデータをメモリに追加して、同じページを書き戻します。

新しいデータがページ制限を超えた場合は、新しいページから開始します。これは、最後に書き込まれたページの残りのスペースに新しいデータが収まらない場合に発生します。完了したら、最後の書き込みが発生した場所に関する情報を更新します。

追加すると「毎回新しいページが割り当てられる」とのことですが、バイトシーケンスに追加している場合になぜそうなるのかわかりません。

もちろん、これにはメモリへのページレベルのアクセスが必要です。ファイル レベル (C のFILE *関数など) のアクセスしかない場合は、ファイル レイヤーがある程度巧妙であることがわかっていない限り、これを行うことはできません。

于 2012-09-26T13:57:36.173 に答える
0

NAND FLASH は書き込み時のページ粒度に制限されているため、運が悪いです。外部の永続的なデバイスやオン シャットダウン ルーチンに依存することはできますが、他のセカンダリ メモリにアクセスすることはできず、古い POS 端末には最終手段ルーチン用のコンデンサさえありますが、トランザクションに対して十分な信頼性はありません。データ。

FLASHの制限に耐えなければなりません。

于 2012-10-05T18:14:52.427 に答える