none
物理アドレスについて RRS feed

  • 質問

  • 物理アドレスについて質問させてください。

    ドライバ内で仮想アドレスをMmGetPhysicalAddress関数で物理アドレスに変換する処理を行っていますが、

    「PCに搭載されているメモリサイズより大きい物理アドレス」が取得できています。

    具体的にはPC搭載メモリ8GBなのに対して0x200000000より大きい物理アドレス値が返ってくる状況です。

    これが仮想アドレスなら理解できますが、物理アドレスでこのような現象が起きるのは何故なのでしょうか?

    PC環境

    Windows 8.1 x64

    メモリ8GB

    intel H57 chipset

    core i3-530 2.93GHz

    以上、よろしくお願い致します。

    2016年1月27日 5:15

回答

  • ちょっと大きい程度(+2GBとか)なら、PCI Hole Mappingによって、PCIのメモリが<4GBにマッピングされたりして、ホントのメモリがずらされるからかもしれません。

    jzkey

    2016年1月27日 22:48

すべての返信

  • 実際に 0x200000000 よりも大きな物理メモリが搭載されているか、MmGetPhysicalAddress() の使い方を間違えているかの、どちらかだと思います。

    そもそも MmGetPhysicalAddress() 使わなければならない理由が、私には思い浮かびませんけど。

    2016年1月27日 10:17
  • ちょっと大きい程度(+2GBとか)なら、PCI Hole Mappingによって、PCIのメモリが<4GBにマッピングされたりして、ホントのメモリがずらされるからかもしれません。

    jzkey

    2016年1月27日 22:48
  • PCI Hole Mappingで調べてみたら、メモリホール分を搭載メモリより上のアドレスにマッピングすることで全領域を使えるようにする機能のようですね。得られた物理アドレス値が搭載メモリ8GB+400MB辺りまでのアドレスだったのでこれが原因のように思いました。

    BIOSにMemory Reclaimという項目があり、それでEnable/Disableを切り替えられるというのも知りましたが、使用しているGIGABYTE H57Mというマザーボードにはその項目がないものの、比較的最近のものなのでEnable固定になっているのだと理解しました。(特にDisableにする必要もないでしょうし)

    回答、ありがとうございました。

    2016年1月28日 1:28