2011-01-10 7 views

答えて

8

カーネルは、プロセスの仮想アドレス空間内の固定された場所から開始します。 Linuxカーネルは通常、[あなたのシステムアーキテクチャに応じて] 4GBの仮想アドレス空間の上位1GBにあります。したがって、3G/1Gスプリットを持つシステムアーキテクチャのカーネルは、アドレス0xC0000000から開始します。プラットフォームのメモリマップに応じて、これは物理メモリの物理アドレスにマップされます。

system.mapファイルはカーネルシンボルテーブルです。それには仮想アドレスと共に記号が列挙されています。これらのシンボルがメインメモリにロードされている場所を調べるには、シンボルアドレスからPAGE_OFFSET [3G/1Gシステムの場合は0xC00000000]を引いてオフセットを取得し、このオフセットを物理メモリのカーネルの開始物理アドレスに追加します。システムメモリマップから決定される。

4

カーネルの仮想アドレスです。つまり、アドレス変換が有効になっているカーネル、つまりカーネルの観点から見ると、メモリ内のシンボルのアドレスです。 ではなく、のリアルモードです。

ほとんどの(?)プラットフォームには、これらのアドレスを実際のアドレスに変換するための簡単な式があります。 RAMの実際のアドレスですが、必ずしもそうである必要はありません。