2017-08-02 12 views
0

プロセスがmmapに50バイトのメモリしか要求しないとします。このプロセスのためにページ全体が割り当てられますか?残りの部分はちょうど無駄ですか?また、カーネル割り当て関数でこれをどのように扱うのですか?kmallocman 3p mmapからLinuxでのメモリ割り当てはPAGE_SIZEよりもどのように小さくなりますか?

+0

* "just 50 bytes" *のmmap()リクエストはどこからでも開始することはできませんが、ページの位置を合わせる必要があるため、何が起こっているかについての強いヒントです。 IOWでは、ページの後半の割り当てを要求または取得することはできません。また、仮想メモリはページテーブルを使用し、セグメントテーブルは使用しません – sawdust

答えて

0

実装は、ページ全体の上にマッピング操作を実行します。したがって、引数lenは、サイズまたは配置制約を満たす必要はないが、実装では、任意のマッピング操作で範囲[pa,pa+len)で指定された部分ページを含めるものとする。

したがって実際には、mmapの50バイトを使用すると、ページ全体がマップされます。

カーネルの状況については、ページアロケータ(get_free_pages()/alloc_pages()など)がありますが、主にメモリ管理コードで使用される低レベル関数です。

通常のkmalloc()の機能は、ユーザスペースmalloc()と多少似ています。内部ページ全体が割り当てられますが、呼び出し元が使用するために小さなページに分割されます。

関連する問題