0

mmap() で開いた大きな (マルチ GB) ファイルの先頭近くに空白ページを挿入する方法があるかどうか疑問に思っています。最後に 1 つか 2 つのページを追加し、memcpy() を使用してすべてを前に進めることは明らかに可能ですが、これはすべてのページを汚し、最終的にディスクにフラッシュするときに非常に長い時間を必要とします。

ソリューションには、カスタマイズされたファイルシステムとページテーブルの手動操作との間の複雑な調整が必要になると思います.inodeにブロックを追加し、これを反映するためにVMM内のキャッシュされたページを何らかの方法で更新し、ページテーブルを何らかの方法でスウィズルしますマッチ。これは自明ではないように聞こえるので、もっと良い方法があるのではないかと思います。

これは、Linux でのメモリとファイル操作に関するやや深い質問を意図したものですが、他のシステムでこれがどのように行われるかを聞いてうれしいです。コピーをより効率的にする回避策には特に興味はありませんが、再マッピングが必要でディスク IO を回避する手法は良い出発点になるでしょう。

4

1 に答える 1

2

単純なFATをファイルに埋め込みます。たとえば、ファイルの最初の4kはFATページになります。データは次のページにあります。最初のFATページは、ファイルが大きくなるにつれて他のFATページにリンクする可能性があります。fatの各エントリは、データページインデックスと次のFATエントリのインデックスになります。FATエントリは、FATのページであり、エントリ自体のそのページのインデックスになります。私はあなたがその考えを理解したと思います。FATエントリはリンクリストです。FATページはリンクリストです。FATエントリはデータページをリンクします。これは、remap_file_pages()を使用して、ファイルがディスク上で連続していない場合でも、ファイルがメモリ内で連続しているように見えるようにするのに十分な情報である必要があります。

于 2011-03-29T00:22:53.303 に答える