1

vmalloc() がどのように動作するかは知っています。(カーネル空間の) プロセスが vmalloc() に属するメモリにアクセスしようとすると、ページ フォールトが発生し、同期が行われます。</p>

しかし、vfree() を呼び出すと、どのようにプロセスがページ テーブルを更新して、マスター カーネルのページ テーブルと同期するのでしょうか。

ありがとう。

4

1 に答える 1

0

メモリ割り当てに関するあなたの理解は間違っているようです。vmalloc に属するメモリはありません。起動時に (カーネル空間の) 固定仮想アドレスが vmalloc に割り当てられます。後で vmalloc が呼び出されると、仮想アドレスは固定割り当て範囲から選択され、物理メモリ ページはバディ システムから割り当てられます。

仮想アドレスと物理ページは 1 対 1 でマッピングされます。

vfree() が呼び出されると、仮想アドレス範囲が再び解放され、物理ページもバディ システムに戻ります。

これがあなたの理解を正すことを願っています。

カーネルメモリに関するオンラインチュートリアルを読んで、今すぐ読むことをお勧めします。

于 2015-09-01T09:55:02.590 に答える