7
Linuxおよび32ビットx86アーチを考慮すると、アクセス可能な4GBアドレス空間の3:1の区切りがあります。ユーザー空間は0〜3Gbに割り当てられ、3-4Gbはカーネルに割り当てられます。 3Gbよりも大きく、したがってカーネルアドレス空間にある仮想アドレスはどのように物理アドレスに変換されますか?ページテーブルは絵になるでしょうか?カーネル仮想アドレス変換
Linuxおよび32ビットx86アーチを考慮すると、アクセス可能な4GBアドレス空間の3:1の区切りがあります。ユーザー空間は0〜3Gbに割り当てられ、3-4Gbはカーネルに割り当てられます。 3Gbよりも大きく、したがってカーネルアドレス空間にある仮想アドレスはどのように物理アドレスに変換されますか?ページテーブルは絵になるでしょうか?カーネル仮想アドレス変換
メルゴーマンの本Understanding the Linux Virtual Memory Managerにはいくつかの情報があります。
短い答え:はい、カーネルは物理アドレス0を仮想アドレス3 GiBに変換するページテーブルを設定します。 (第3.7.1節)。これには、カーネルがロードされた物理的な場所(通常はx86では1MB)が含まれます。
答えをありがとう。いくつかのグーグルを行った後、私は、3GB(設定可能)である#define PAGE_OFFSETがあり、カーネル仮想アドレスからPAGE_OFFSETを単純に差し引いて得られた物理アドレスへの1対1マッピングがあることを発見しました。私が間違っている場合は私を修正してください。 – user593575
単純なマッピングは、virt_to_phys()の実装を簡単にします:あなたが言ったように、PAGE_OFFSETを減算するだけです。しかし、ページングが有効になります。これにより、命令がフェッチされ、データにアクセスする際に、仮想アドレスをハードウェア内の物理アドレスに変換することができます。 –
私はあなたの意見を持っています。仮想アドレスがカーネルまたはユーザー空間に属していても、ページングが有効になっているときは常にページテーブルが使用されます。 (悲しいことに、最低15ポイントが必要なので投票できません) – user593575