Linuxカーネルはデータ構造(ページテーブル、記述子など)に仮想メモリを使用しますか?だけでなく:
カーネル空間アドレスはMMU(ページテーブルワーク)から変換されますか?
カーネルメモリを交換できますか?
カーネルデータ構造へのメモリアクセスによってページエラーが発生する可能性がありますか?
これに関して、Linuxと他のUnixの間に違いはありますか?
答え1
カーネル空間アドレスはMMU(ページテーブルワーク)から変換されますか?
はい、すべてのアドレスはMMUから翻訳されています。MMUはUnix / Linuxカーネル内にありますか?それとも、独自のメモリを持つハードウェアデバイスにのみありますか?もっと学ぶ。
カーネルメモリを交換できますか?
カーネルできる理論的には、交換が可能なように設計できます。実際、これは難しいです。特にLinuxカーネルを交換できないからです。ただし、カーネルの一部のコードパスはページングを処理する必要があります。カーネルがプロセス自体と同じ仮想アドレス空間にマップされているときに「copy_from_user()」と「copy_to_user()」が必要なのはなぜですか?例えば。
カーネルデータ構造へのメモリアクセスによってページエラーが発生する可能性がありますか?
すべてではありませんが、ほとんどの場合、これが発生するとカーネルパニックが発生します。はい。そんなことが起こるかもしれませんが、間違いになります。
これに関して、Linuxと他のUnixの間に違いはありますか?
私が知る限り、他の(現在の)Unixベースの実装は似ています。初期のUnixは仮想メモリベースの交換をサポートしていません(つまりとにかくページを読み込むと問題になりません。