- ベストアンサー
仮想メモリアドレスについて
OSが管理している仮想メモリアドレスについて質問させて下さい。 物理メモリのアドレスといわれるものと、 仮想メモリのアドレスといわれるものは、 いずれもハードディスク上に存在し、ハードディスク上で OSによって管理されている情報(アドレス)ということになりますか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・物理メモリとは これはPCに実際に搭載されているメモリ(チップ)のことです。 メモリを増設すれば容量を増やせます。 このアドレスが『物理メモリのアドレス』となります。 ・仮想メモリとは これはPCに実際に搭載されているメモリ(チップ)とハードディスク上に 一時退避されたメモリデータの両方を合わせた全体としてのメモリです。 この『仮想メモリ』の技術により実際に搭載されているメモリ以上の メモリを仮想的に扱えるようになります。 ・たとえば 256MB のメモリを搭載しているPCであるプログラムで 512MBの データを扱いたいとき、普通に考えれば 256MB のメモリを増設する必要があります。 でも仮想メモリの仕組みにより瞬間的にアクセスするメモリは一部であるため アクセスしない部分をハードディスクに保存(退避)します。→スワップ・アウト このようにすることで搭載メモリが256MBでも512MBの巨大なデータを扱えます。 (※詳しくはネットなどで調べましょう) ・OSはどのメモリデータをハードディスクに退避して、退避したハードディスクの どのデータを実際の物理メモリにスワップ・インするかを管理しています。 プログラマは物理メモリを気にしないで良い。正しくはプログラムから物理メモリを 直接アクセスするのは難しい。→出来なくはないがすべきではない。 ・1つのプログラムで使用できる仮想メモリは32ビットOSなら4GBまで。 この4GBのうち上位2GBはOSや共有メモリとして使われます。 下位の2GBがプログラムで使用できる最大の仮想メモリとなります。 ちなみに プログラムAの仮想アドレス 0x12345678 と プログラムBの仮想アドレス 0x12345678 は 仮想アドレスとしては同じ値でも物理メモリにマップ(割り当て)しているアドレスは 異なっています。よって仮想アドレスを利用して他のプログラムのデータには基本的に 直接アクセスできません。共有メモリとしてなら可能です。 まとめ: ・『物理メモリのアドレス』は実際に搭載されているメモリのアドレス 『仮想メモリのアドレス』は仮想的に利用されるメモリのアドレスで 実際の物理メモリのアドレスではない。このアドレスが実際にはメモリや 退避されているハードディスク上のデータかはOSが勝手に切り替えるため 知る必要もない。などなど。
その他の回答 (7)
- gyrocompas
- ベストアンサー率23% (24/104)
参考までに、こんな違いはどうでしょう CPUとメモリは「メモリーバス」という 何本かの線でつながっています メモリーバスに送出される情報が 物理メモリのアドレスです。 またCPUには、アセンブラ命令というものがあり たいていは、次の形式です <命令コード> <オペランド1>,<オペランド2> このオペランドに記述されるアドレスが、仮想アドレスです 従って、アドレス変換はCPUが実行していて、ハードディスクは 何ら、関与していません ここから、イメージがつかめれば、幸いです 参考までに
お礼
詳細情報を提供して頂きましてありがとうございます。 なんとなくですが、イメージがつかめました。
- jacta
- ベストアンサー率26% (845/3158)
> このアドレス情報(データ)自体はハードディスク上に存在するの > でしょうか? どこにアドレス情報を格納しているのでしょうか? 通常、MMU内部のレジスタに格納されています。 仮想アドレスがダイレクトマッピング方式の場合には、どこにもアドレス変換情報は格納されず、ハードウェアで決めうちされています。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★次のリンクをどうぞ。 ・第4回 メモリー管理のキー技術「仮想メモリー」を知る http://itpro.nikkeibp.co.jp/article/COLUMN/20070816/279802/ このページの下のほうに図解されています。 (2ページ以降も読んでみると良いでしょう)
お礼
参照してみましたが、非常に参考になる内容でした。 ありがとうございます。
- chirubou
- ベストアンサー率37% (189/502)
「「仮想アドレスは実際の物理アドレスを指しているのではない」 ということは理解できました。 このアドレス情報(データ)自体はハードディスク上に存在するの でしょうか? どこにアドレス情報を格納しているのでしょうか?」 OS の内部に「この仮想アドレスは物理アドレスのこれこれである」というテーブルがメモリにあって、このテーブルをNo.4さんのいうところのMMUに設定することで変換しています。この変換は、仮想アドレスを使ってメモリにアクセスする際に、必ず行われるので、高速に変換されるようメモリにテーブルを置きます。 CPUにもよりますが、i386系(例えばペンティアム)だと、I/O するためには物理アドレスが必要で、OS内部の一部では物理アドレスを使っていたりします。
- jacta
- ベストアンサー率26% (845/3158)
具体的に何のOSの話かを書かないと、漠然とした話になるか、回答者が勝手に想定したプラットフォームに特化した話になってしまいます(PCとは書いていませんしね)。 まず、物理アドレスというのは、物理的にハードウェアの結線によって決まるアドレスのことです。必ずしもメモリが実装されているとは限らず、I/Oやデバイス無しの領域も存在します。 次に、仮想アドレスというのは、MMU(Memory Management Unit)を搭載したハードウェア上で、物理アドレスをTLB等の仕組みによって再配置することで作られます。ハードウェアに退避云々の話は関係ありません。 仮想記憶(仮想メモリ)は、仮想アドレスのしくみを利用して、ハードウェア等の外部記憶装置とスワップしながら、見かけ上大きなメモリを使用できるようにする仕組みのことです。 もちろん、退避先はハードディスクである必要はありません(現時点ではそういう実装が多いというだけです)。 カーネル領域や他のプロセス等を保護する目的で仮想アドレスは使うけれども、仮想メモリは使わないというOSも実在します。 今回は「仮想メモリ」のアドレスとのことですが、このあたりを混同しているといけませんので念のため。
- okormazd
- ベストアンサー率50% (1224/2412)
物理メモリは、物理的に実装されているメモリモジュールで、CPUが直接アクセスします。ハードディスクではありません。 アドレスはプログラムを動かすための位置の情報で、固定した通し番号がつけてあります。OSは管理に便利なように、相対的な位置情報も使います。 仮想メモリは、ハードディスク上にとられた、物理メモリが足りなくなったときの一時的な退避領域です。CPUが直接アクセスすることはできません。 仮想メモリのアドレスといえば、ハードディスク上の位置を示すものです。もちろん、仮想メモリの中身にはプログラムを動かすための位置の情報もはいっています。
- 2kaku34
- ベストアンサー率30% (101/329)
仮想メモリ http://e-words.jp/w/E4BBAEE683B3E383A1E383A2E383AA.html 仮想メモリの設定 http://www003.upp.so-net.ne.jp/shigeri/speedup/speedup2.html Win高速化 PC+ http://www.vector.co.jp/soft/win95/util/se301488.html X-TUNE http://www.vector.co.jp/soft/win95/util/se276338.html 窓の手 http://www.vector.co.jp/soft/win95/util/se049651.html 窓使いの友 http://www.vector.co.jp/soft/winnt/util/se289588.html 窓の足 http://www.vector.co.jp/soft/winnt/util/se417215.html 以上、レジストリを触るので注意が必要です。 メモリそこそこ(1G以上)あれば、仮想メモリは最低限だけで十分だと思います。
お礼
非常にわかりやすいご説明ありがとうございます。 なんとか理解できました。
補足
繰り返しになってしまったら申し訳ございません。 「仮想アドレスは実際の物理アドレスを指しているのではない」 ということは理解できました。 このアドレス情報(データ)自体はハードディスク上に存在するの でしょうか? どこにアドレス情報を格納しているのでしょうか?