オペレーティングシステムの概念には次のように記載されています。 仮想アドレス空間の一部がファイルに論理的に関連付けられるようにするメモリマッピングファイル
私の哲学は次のとおりです。
通常、プロセスが標準システムコールopen()read()write()を使用してディスク上のファイルを読み取るとき、すべてのファイルアクセスに対するシステムコールとディスクアクセスがあります。ディスクにアクセスしているので時間がかかります。
この場合、メモリマッピングファイルを使用できます。
ここでは、仮想メモリ技術を使用し、ファイルをプロセスの仮想アドレス空間にマッピングします。
このプロセス中に、プロセスはファイル記述子とファイルブロックをマッピングする仮想メモリ領域(ヒープとスタックの間の領域)内の位置をカーネルに割り当てます。
その後、カーネルは特定のファイルをプロセスの仮想アドレスにマップし、ファイルは複数のページに分割されます。ファイルへのアクセスは要求時にページングされます。 CPUがページの仮想アドレスを生成すると、ファイルはプロセス仮想メモリにマップされます。最初はページにエラーが発生し、ファイルページはファイルシステムから空きメモリフレームにロードされ、プロセスのページテーブルはそのアドレスを使用します。ページテーブルエントリのフレーム番号を更新します。以降のプロセスは、ディスクにアクセスすることなく、通常のメモリアクセスルーチンを使用してファイルを読み書きできます。
メモリ内のマップされたファイルへの書き込みは、ディスク上のファイルにすぐに書き込まれません。一部のオペレーティングシステムは、定期的にページテーブルエントリのダーティビットをチェックします。ファイルが閉じられると、メモリにマップされたすべてのデータがディスクに書き戻され、プロセスの仮想メモリから削除されます。
複数のプロセスはページ共有を使用し、メモリマップされたファイルを互いに共有することもできます。
彼らがしなければならないのは、仮想アドレスをマップされたファイルの物理アドレスにマップすることだけです。
メモリマッピングファイルがどのように機能するのですか?