char *p = (char*) mmap(...);
....; /* check if p is not -1 */
a = *p;
、ページフォールトが発生します。カーネル内のフォルトハンドラは、物理メモリにページを割り当て、ファイルからそのページに4Kバイトをコピーし、ページエントリを変更します。今回は、*p
の命令が再度実行されます。mmapが呼ばれた後のファイルのパス名はどこですか?最後の文を実行している間
しかし、どのように障害ハンドラーは、ページに関連付けられているファイル名とパスを知っているん。ファイル名(またはfd
)はどこに保存されていますか?ファイル内のオフセット。プロセスのデータセグメント内のページがスワップアウトされた場合(スワップファイルの中に、私は推測する)何
?カーネルは、後でページをスワップする必要があるときに、どこからコピーするかをどのように知っていますか?
、ShadowRanger、ありがとうございました。その場合、私はこのスレッドで間違っていたのですか? http://stackoverflow.com/questions/38850533/how-does-the-page-fault-handler-know-where-to-get-the-4k-bytes/38975619#38975619私は答えを見つけたと思った。 – xiaokaoy