0

kmallocLinuxのデバイスドライバーでメモリのブロックを割り当てています。私が取得するアドレスはです0xffff880000180000。46ビットの物理アドレス空間を持つIvyBridgeプロセッサを使用しています。つまり、CPUには46個を超えるアドレス指定ピンがないため、上記のアドレスにはアクセスできません0x00003fffffffffff。私が取得しているアドレスは、ビット47が設定されているため、明らかにそれよりも大きくなっています。

が物理ポインター(つまり、仮想アドレス、線形アドレス、物理アドレスが同じポインター)を返すと仮定するとkmalloc、CPUからアクセスできない場合、どのようにしてそのようなアドレスを取得できますか?


この質問は、「LinuxでGFP_DMAでkmallocを使用すると、なぜ高いアドレスを取得するのですか?」に関連しています。ただし、同じではありません。この質問はkmalloc、一般的な物理アドレスの返送に関するものですが、リンクされた質問は、返送されGFP_DMAたアドレスの使用とその関係に関するものです。

4

1 に答える 1

3

これは明らかに物理アドレスではなく、線形または仮想アドレスであり、ビット47の値がビット63まで「符号拡張」されている「標準形」です。

于 2012-09-10T05:57:21.043 に答える