Linuxカーネルモジュールは一種のLinuxシステムページングプールですか?

Linuxカーネルモジュールは一種のLinuxシステムページングプールですか?

私はいつもLinuxカーネルがページング可能ではないことを読んだ。
私の記憶が正しい場合、Windowsはシステム仮想メモリをページングプールと非ページングプールに分割します。
ページングされていない部分は物理メモリに直接マッピングされ、カーネルが完了する必要がある最も重要な作業を担当しますが、それほど重要ではない部分はそうでない可能性があるため、常にそこに残ります。代わりに、Linuxカーネルはロード可能なモジュールに分かれていますが、これらのモジュールがどのように実装されているかについての情報は収集していません。
一時的にディスクに転送できるようにページングされたかどうかはわかりません。私が主に読んでいるのは、メモリをアンロードすることでメモリを「解放」できることです。これが意味するのはまだ私にあいまいです。
この記事で「ページング済み」または「ページング可能」と書いたことは、ディスク上でこれらのページを交換できることを意味します。通常、Linuxカーネルはページングされていると見なされますが、交換できないため、この問題を解決しました。

ベストアンサー1

Linuxカーネルのどの部分も呼び出すことはできず、モジュールの一部も呼び出すことはできません。

モジュールでサポートされている場合は、カーネルモジュールをロードおよびアンロードできます。これは、ユーザー空間プロセスがシステムコール(通常はロードユーティリティ、アンロードユーティリティを介して)を介して明示的な要求をするinit_moduleときに常に発生します。delete_moduleinsmodmodprobermmod

モジュールがロードされると、カーネルの他の部分と同様にカーネルの一部になります。特に、特定のモジュールで使用されているメモリを切り離す方法はありません。カーネルは特定のモジュールのコードを含むメモリ部分を追跡しますが、モジュールがデータを保存できる場所は追跡しません。結局のところ、モジュールはすべてのカーネルデータ構造を変更できます。

モジュールは、すべてのカーネルサブシステムにいくつかのコードを追加できます。ほとんどのモジュールはハードウェアドライバですが、一部はそうではありません(セキュリティ機能、ファイルシステム、ネットワーク機能などを提供できます)。モジュールが使用するデータまたはコードを交換できる場合は、必要に応じて残りのカーネルがそれをロードする必要があるため、システム設計が複雑になります。さらに、カーネルは交換されたメモリ部分を再交換する必要がないことを確認する必要がありますが、これは困難です。スワップがネットワークファイルシステムのスワップファイルにあり、そのモジュールがファイルが保存されているサーバーとの通信に関連するファイアウォール機能を提供する場合はどうなりますか?

モジュールが何もする必要がないようにするコードを提供することはモジュールの作業であるため、モジュールを完全に削除することが可能です。カーネルはモジュールの終了関数を実行し、その関数がモジュールをアンロードしても安全であると報告する場合にのみモジュールをアンロードします。シャットダウン関数は、モジュールが「所有している」残りのデータメモリ(つまり、モジュールには必要ですがカーネルの他の部分には不要なデータ)を解放し、場合によっては呼び出すコードがモジュールに登録されていないことを確認する必要があります。発生します。交換のためにモジュールのデータを保存する方法はありません。モジュールは、残っているデータがない場合にのみRAMから削除できます。

おすすめ記事