4

mmap の使用法を理解しました。ファイルに対する単純な読み取り/書き込み操作を考慮すると、ファイルを開き、バッファーを割り当て、[コンテキスト スイッチを必要とする] を読み取り、ユーザーがバッファー内でデータを使用できるようになり、バッファー内の変更は反映されません。明示的に書き込まれない限り、ファイルに。

代わりに、mmap を使用すると、バッファに直接書き込むことは、ファイルに書き込むことにほかなりません。

質問:

1) ファイルはハードディスクにあり、プロセスにマップされています。マップされたメモリに書き込むたびに、ファイルに直接書き込まれますか? . この場合、変更はファイル自体に直接行われるため、コンテキスト スイッチは必要ありません。mmap が従来のファイル アクセスより高速である場合、どこで時間を節約できますか?

親切に説明してください。私も間違っている場合は修正してください。

4

1 に答える 1

6

ファイルへの更新はディスクにすぐには表示されませんがunmap、呼び出し後またはmsync呼び出し後に表示されます。したがって、更新中にシステム コールはなく、カーネルは関与しません。ただし、ファイルは必要に応じてページごとに遅延して読み取られるため、ページ境界を越えると、OS はファイルの一部を読み取る必要がある場合があります。メモリ マッピングの最も明らかな利点は、カーネル空間からユーザー空間へのデータ コピーが不要になることです。また、システム コールでファイル内の特定の位置をシークする必要もありません。

于 2012-11-23T06:19:42.873 に答える