1

物理メモリ/ページの割り当てに関する Linux デバイス ドライバーを試しています。どのアプリケーションでも呼び出すことができる単一の ioctl があります。これは、物理ページを割り当て、vm_insert_page を使用してプロセス メモリにマップするだけです。alloc_page() を使用して物理ページを割り当てています。私が知りたいのは、 alloc_page() によって割り当てられた物理ページが IOCTL を作成するプロセスに対してカウントされるかどうか、または単にドライバーに属する物理ページであるかどうかです。

私が言及しているカウントは、アンドロイドのメモリ不足のキラーやメモリ不足のキラーのようなものです。これらのコンポーネントは、メモリ不足またはメモリ不足の状況でどのプロセスを強制終了するかを決定する前に、プロセスによる物理メモリの使用状況を追跡します。

別の質問: GFP_HIGHUSER と GFP_HIGHUSER_MOVABLE の違いは何ですか? alloc_page(GFP_HIGHUSER) を使用すると、ページング不可の (ディスクにスワップされない) ページが得られることを理解しています。GFP_HIGHUSER_MOVABLE はこれを変更しますか? ソースを指摘しないでください。私がこれを見たソースには不十分なドキュメントがあるか、提供されたドキュメントから理解できないため、この質問をしています。

4

1 に答える 1

1

alloc_pages()連続した物理ページを割り当てると思い(1<<order)ます。したがって、それはカーネル空間に属する物理ページであり、したがってドライバーに属し、それが存在するゾーンは、渡すゾーン修飾子に依存します。そのため、割り当てたページのみを解放するように注意する必要があります。間違った構造体ページまたはアドレス、または間違った順序を渡すと、破損する可能性があります。カーネルが自分自身を信頼しているようなものです。ユーザー空間とは異なり、恐ろしいことをすると、カーネルは喜んでハングアップします。

于 2013-06-22T10:14:58.527 に答える