2016-10-18 3 views
3

ファイルがシステムコールにマッピングされている:ファイルのどのバイトがマップされたままですか?

mmap(65536, 32768, READ, FLAGS, fd, 0) 

ページ8キロバイト、そうファイルの価値は4ページをマッピングした(32768/8K = 4ページ)です。次に、次の呼び出しが実行されます。

munmap(65536, 8192) 

メモリマップの指定された部分を削除します。ファイルのどのバイトがマップされたままですか?答えキーは、ページ2とページ3が残っているので、バイト16384〜32767だけが残ります。しかし、私はこれが正しいとは確信していません。 munmapコマンドのlen引数(2番目の引数)は8192バイトであるため、8192バイトから32767バイトのまま、ページ0だけを削除する必要はありませんか?

+1

あなたのロジックは私にとって正しいようです。 'munmap'のサイズが' '8193 ''だったら彼らの答えは正しいでしょう。 – Barmar

+0

@duskwuff http://pubs.opengroup.org/onlinepubs/009695399/functions/munmap.htmlによると、 'addr'はページサイズの倍数でなければなりませんが、' len'について何も言わないのです。 – Barmar

+0

@Barmar私の間違い。ドキュメントを誤解します。 – duskwuff

答えて

1

あなたと答えのキーはどちらも間違っていますが、異なる方法です。

ほとんどのシステムのメモリページは、8 KBではなく4 KB(4096バイト)です。私は8KBのメモリページを持つシステムについて聞いたことがありません。

これにより、32768バイトのマッピング全体が8ページになります。最初の8192バイト(2ページ)をアンマップすると、残りの6ページ(2〜8)が残ります。

関連する問題