• ベストアンサー

メモリアクセスにつきまして

PC/AT互換機においてのメモリマップの仕組みについて質問があります。 例えばIO空間には0x00~0x100までのアドレスが割り当てられているとしたら、そのアドレスにアクセスがあった場合メインメモリにおけるアドレス0x00~0x100間には物理的には何にも読み書きされないのでしょうか? また、VRAM領域というのがありますがその領域にアクセスするということは物理的にビデオカードにあるVRAMに読み書きが行われるのであって、メインメモリのその領域には一切アクセスされないという解釈で正しいのでしょうか?? 何かご存知の方がいらっしゃいましたらお助け下さいませ。。

質問者が選んだベストアンサー

  • ベストアンサー
  • kusa_mochi
  • ベストアンサー率76% (1597/2087)
回答No.1

>例えばIO空間には0x00~0x100までのアドレスが割り当てられているとしたら、そのアドレスにアクセスがあった場合メインメモリにおけるアドレス0x00~0x100間には物理的には何にも読み書きされないのでしょうか?  基本的な考え方はそれでOK。  だから32bitOSの場合、4GBのメモリを搭載しても4GB全てが使えないということになる。 >また、VRAM領域というのがありますがその領域にアクセスするということは物理的にビデオカードにあるVRAMに読み書きが行われるのであって、メインメモリのその領域には一切アクセスされないという解釈で正しいのでしょうか??  こちらの話は、チップセット内蔵グラフィックでUMA方式の場合と外部ビデオカードを使う場合で話が違ってくる。  質問主殿がどちらを想定しているかは知らないが、  《チップセット内蔵グラフィックの場合》   あるアドレス領域のメインメモリ自体がそのままVRAMとして扱われているので、質問の前提自体が違う。  《外部ビデオカードの場合》   ビデオカード側のVRAMはGPU側のアドレス空間にあり、CPUからはアクセス出来ないと思われる。   なので、大量データの受け渡しはバッファ領域を使っていると思う。   CPU側でバッファ領域にデータを書き込んだ後で、GPU側に通知という風に。 ということになるだろうか。  【GPU】   ビデオカードに載っている専用プロセッサをそう呼ぶ

taka_mari
質問者

お礼

kusa_mochiさん、親切なご回答ありがとうございました! それでまたまた疑問に思ったのですが、 >だから32bitOSの場合、4GBのメモリを搭載しても4GB全てが使えないということになる。  プログラムを書く際、16bitOSの場合は64KBの壁が存在しましたが、32bitOSになってからは”フラットな4GBのメモリ空間”が使えるようになったとよく書籍などで見かけるのですが、実際には4GBをフルに使うようなプログラム(そんなプログラムはあまりないでしょうが...)は作れないということでしょか?? >チップセット内蔵グラフィックでUMA方式の場合と外部ビデオカードを使う場合   自分のPCがどちらの方式なのかPC本体の中身を開けないでもわかる  ものなのでしょうか?また、アセンブラで直接VRAMに書き込んで画  面制御をしたい場合、チップセット内蔵グラフィックの場合と外部  ビデオカードの場合では書く命令が違ってくるのでしょうか? 度々すみませんがどうぞよろしくお願いいたします。。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kusa_mochi
  • ベストアンサー率76% (1597/2087)
回答No.2

フォローしておくと、 > プログラムを書く際、16bitOSの場合は64KBの壁が存在しましたが、32bitOSになってからは”フラットな4GBのメモリ空間”が使えるようになったとよく書籍などで見かけるのですが、実際には4GBをフルに使うようなプログラム(そんなプログラムはあまりないでしょうが...)は作れないということでしょか??  Linux等の他のOSの場合はどうかは知らないが、32bit版のWindowsだとユーザー側のアプリケーションで使えるメモリ空間は2GBという制限があったと思う。  (上位2GBはOS側が予約だったかな)  【参考:メモリ確保】   http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31379&forum=7 >  自分のPCがどちらの方式なのかPC本体の中身を開けないでもわかる  ものなのでしょうか?  まあ色々やり方はあるのだが、一番簡単な見分け方(極一部の例外あり)はモニターのケーブル端子が何処に繋がっているか確認する事かな。  オンボード端子(LANとかUSBとかプリンタポート端子とか)の一群の中に接続されているなら、殆どの場合チップセット内蔵グラフィックだ。  逆に増設スロットの一番上にあるカードの端子に繋がれていれば、間違いなく外部ビデオカード。 >また、アセンブラで直接VRAMに書き込んで画  面制御をしたい場合、チップセット内蔵グラフィックの場合と外部  ビデオカードの場合では書く命令が違ってくるのでしょうか?  現在のWindowsアプリであれば、直接VRAMに書き込むということは出来ません。  (ドライバ以外はハードウェアに対する直接アクセスは許されていないのです)  Windowsでは実際のハードウェアがどのような構成であろうと、同一プログラミングモデルで済むようになっています。  (それがWindowsのメリットなのです。100種類のハードがあったら、そのハード毎に100種類のロジックを組まなければいけないとしたら、悪夢ですよね(笑))  詳しくはDirectXプログラミングの書籍を購入して勉強してもらうとして、簡単に言うと論路的なVRAM(フレームバッファと言います)を用意し、そちらに対して色々な操作を行うというイメージです。  

taka_mari
質問者

お礼

kusa_mochiさん 再度親切にお答え下さいまして 本当にありがとうございました!! ほんと色々なことを幅広くご存知で感服いたしております。。 自分も早く他の皆さんのお役に立てるようにもっともっと勉強しなければと痛感いたしております。

すると、全ての回答が全文表示されます。

関連するQ&A