vmalloc() がどのように動作するかは知っています。(カーネル空間の) プロセスが vmalloc() に属するメモリにアクセスしようとすると、ページ フォールトが発生し、同期が行われます。</p>
しかし、vfree() を呼び出すと、どのようにプロセスがページ テーブルを更新して、マスター カーネルのページ テーブルと同期するのでしょうか。
ありがとう。
vmalloc() がどのように動作するかは知っています。(カーネル空間の) プロセスが vmalloc() に属するメモリにアクセスしようとすると、ページ フォールトが発生し、同期が行われます。</p>
しかし、vfree() を呼び出すと、どのようにプロセスがページ テーブルを更新して、マスター カーネルのページ テーブルと同期するのでしょうか。
ありがとう。
メモリ割り当てに関するあなたの理解は間違っているようです。vmalloc に属するメモリはありません。起動時に (カーネル空間の) 固定仮想アドレスが vmalloc に割り当てられます。後で vmalloc が呼び出されると、仮想アドレスは固定割り当て範囲から選択され、物理メモリ ページはバディ システムから割り当てられます。
仮想アドレスと物理ページは 1 対 1 でマッピングされます。
vfree() が呼び出されると、仮想アドレス範囲が再び解放され、物理ページもバディ システムに戻ります。
これがあなたの理解を正すことを願っています。
カーネルメモリに関するオンラインチュートリアルを読んで、今すぐ読むことをお勧めします。