デバイスドライバはカーネル論理アドレス空間を使用しますか、またはカーネル仮想アドレス空間を使用しますか?

デバイスドライバはカーネル論理アドレス空間を使用しますか、またはカーネル仮想アドレス空間を使用しますか?

可能であれば、ドキュメントを教えてください。カーネル空間メモリのレイアウトについて説明できますか?

デバイスドライバが変数をインスタンス化するとき、変数はカーネルスペースに存在しますか、それとも特別な権限を持つユーザースペースにありますか?

ベストアンサー1

カーネル空間のメモリレイアウトは次のとおりです。少なくともx86_64についてはカーネルに文書化されています。。多くのアーキテクチャでは、これには、カーネルインスタンスの存続期間中に変更されない固定オフセットを使用する直接的な物理マッピングが含まれます。カーネルコードはMMU(MMUマウントアーキテクチャ)を使用してCPU上で実行されるため、実行コード(変数ポインタ、スタックなど)によって参照されるすべてのアドレスはMMUが理解するアドレスです。つまり通常、直接物理マッピングの外部に割り当てられる仮想アドレスです。

デフォルトでは、デバイスドライバの変数はカーネル空間にマップされます。デバイスドライバは、さまざまな方法(ユーザースペースにsysfsマッピング)でユーザースペースのデータを提供することもできます。procfs仮想DSO...

おすすめ記事