• ベストアンサー

プロセスと仮想メモリについて

Sigotoganaiの回答

回答No.3

別物になったり同一になったりします。 「仮想メモリ」ってのは物理メモリを直で扱わない 間接的な操作すべてに対して言えますので、ごっちゃになるんでしょうね。 --- 以下、WindowsNT系+VCの話限定です --- 正確に言えば、4GB割り当てられるのではなく、4GBまでアクセス出来る可能性がある、です。 アクセスするためにはメモリの確保なりスタック積むなりの手続きが必要です。 で、例えばプロセスがNewだのAllocだのでメモリを確保しようとした場合、 物理メモリが足りない場合はページングファイルで確保します。 ページングファイルでも足りない場合は例外か0が返ります。 (これはOSの機能を使いますが、基本的には言語が担当します。) 1プロセスがそんなにメモリを確保しなくても、全プロセスが確保するトータルメモリが 物理メモリを超えた場合もページングファイルで確保しようとします。 (こっちはOSが担当します)

YT0925
質問者

お礼

どうもありがとうございました。 仮想メモリーが物理的なものだと勘違いしておりました。

関連するQ&A

  • 仮想メモリについて

    今、物理メモリがちょうど1Gあるんですが、仮想メモリが異常に働いて、物理メモリの負担がほとんどないような状態です。 ページングファイルを無しにするなど、いろいろ試してみました。 どうすれば仮想メモリの値を0にできるんでしょうか?

  • 仮想メモリは要らないのですけど・・・

    WindowsXPを使っている者ですが、システムのプロパティでページングファイルを無効にしても、タスクマネージャのプロセスの所を見ると、全てのプロセスで仮想メモリが使われています。 タスクマネージャによると、コミットチャージの制限値+カーネルメモリの合計が物理メモリの合計にほぼ等しいので、それらの数値によると仮想メモリは使われていないみたいなのですが・・・。 仮想メモリを殆ど使わせないようにはできないのでしょうか。

  • プロセスについて

    アプリを起動するとプロセスが発生すると思うのですが、そのプロセスはまず仮想メモリアドレス空間に待機しその後物理メモリにて処理され、いっぱいだった場合はページングファイルが使われると思います。 その場合、1つのアプリでのプロセスが物理メモリとページングファイルに分かれることはあるのでしょうか?

  • 仮想メモリをリムーバブルドライブで…

    メモリ不足に悩んでいます。 今は出来る限りの増設はしたのですがそれでも足りません。 そこで仮想メモリ領域を増やそうと思うのですが 調べると、ハードディスクだと断片化がどうのこうの… そこで、仮想メモリをDVDRAMとか、USBフラッシュメモリなどに領域を作ることはできないのでしょうか? また、仮にできたとして、仮想領域を物理的に取り外してしまった場合、コンピュータはどうなるのでしょうか? お願いします。教えて下さい。

  • 仮想メモリ

    物理メモリが960MB(VRAM64MB)あるので仮想メモリの[ページングファイルなし]にしても大丈夫でしょうか?  ある程度は残しといた方がいいですかね・・。?

  • 仮想メモリは無くてもかまわない?

    HDDなどへのアクセスやパフォーマンスが気になるため、仮想メモリは切って(ページングファイルを0に)してもかまいませんか? Pentium4 2.8GHz メモリ1GBです。 1GBならば、仮想はいらないといっていた方もいらっしゃいました。

  • 仮想メモリ

    ハードディスクの領域を多くとる仮想メモリ。 最近のパソコンには多くのメモリ積まれています。 仮想メモリは未だ必要でしょうか。

  • Windowsの仮想メモリシステムについて

    こんにちは。 OSは現在、WindowsVistaと、Windows7を使っています。 こういったWindows系OS全てに共通している、仮想メモリなどのメモリ関係の用語について、かなり詳しく調べたのですが、最近、それらをきちんと理解できていない事に気づきましたので、今回の質問をさせて頂きます。 まず僕は、メモリ関係の各用語について、以下のように解釈しています。 ---------------------------------------------------------------------------------- ●物理メモリ 基本的にはRAM上にあるメモリの事であり、OSによってアクセスされる。 OSは起動後、各物理メモリに、物理アドレス(物理アドレス空間におけるアドレス)を割り当てる。 ●仮想メモリ領域 仮想メモリ領域は、各プロセスが、メモリを使うためにアクセスするアドレス空間の事であり、物理メモリと、次で説明するページファイルで構成されてる。 現在のWindows系OSでは、プロセスが起動すると、そのプロセスとセットになる、4GBの仮想メモリ領域 (仮想アドレス空間とも呼ばれる) が割り当てられ、実行するプログラムコードと、そのコードが参照して操作するデータが、そこにマップされる。 プロセスの持つ仮想メモリ空間4Gバイトの内、ユーザが使用可能なメモリ領域は、下位2Gバイトであり、上位2Gバイトはシステムによって使用される、「カーネルメモリ」となる。 OSと、コンピュータ上の専用のハードウェアコンポーネントは、プロセスが使用している仮想アドレスを、物理アドレスに変換する処理を行っている。 Windowsの場合、仮想メモリの各フラグメントを、「ページ」といい、サイズは通常 4KB である。 ●ページファイル 物理メモリの不足を補うために、HDDに用意されたメモリ領域の事である。 デフォルトではC:\pagefile.sys というファイルが、ページファイルとなっている。 これによって、RAM容量よりも大きなサイズの、仮想メモリ空間を利用することができる。 ページファイル上に置かれたページにアクセスするには、そのページをRAM上に読み込まなければならないため、現在使われていないRAM上のページとの入れ替えが、OSによって行われる。 このとき、RAM上の不要なページをページファイルに書き出し、RAMから消去することを「ページアウト」あるいは「スワップアウト」と呼び、必要なページをページファイルから読み出し、RAM上に配置することを「ページイン」あるいは「スワップイン」という。 ●コミットページ(コミットチャージ) プロセスに割り当てられた、使用可能な仮想メモリページ全てを表す。 これには、RAMからページアウトされたメモリページも含まれまれる。 コミットページの合計サイズと現在使用中のサイズは、タスクマネージャのパフォーマンスタブにある[ページファイル]の部分で確認できる。 この[ページファイル]という部分は、上で説明したページファイルの事ではなく、 RAMとページファイルの両方に存在している、メモリページのサイズを意味する。 ●ワーキングセットページ プロセスから最も頻繁かつ直近にアクセスされる、常にRAM上にあるメモリページの事である。 ワーキングセットページには、そのプロセスしか使えない部分(プライベートワーキングセット)と、他のプロセスと共有可能な部分がある。 共有可能なワーキングセットは、他のユーザープロセスで、物理メモリが不足し始めた場合に使用できる。 ----------------------------------------------------------------------------------- まず、以上の解釈で、おかしいと思う部分がありましたら、どしどし突っ込んで下さい。 次に、以下のようなコードブロックを含む、C++プログラムを作成して実行しました。 ------------------------------------------------------------ char *p; for(int i=1; i<=2000 ; i++) p=new char[1024*1024]; ------------------------------------------------------------ このコードブロックは、pというポインタに対し、1024×1024B = 1MB のメモリの割り当て作業を、2000回行います。 つまり、このプログラムをビルドして作成された、a.exeという実行ファイルを実行すると、 約2000MBのメモリがa.exeに割り当てられるという事が予想できます。 プログラムの実行中に、タスクマネージャのプロセスタブにある、a.exeの行を見ていると、 メモリに関する列項目値は、 コミットサイズ:2012.928KB=1965.75MB ワーキングセット:4616KB=4.51MB プライベートワーキングセット(a.exeしか使えないワーキングセット):2656KB=2.59MB となっていました。 ワーキングセットページのサイズが4.51MBとしかない事から、約2000MBのメモリの割り当ての大半は、RAM上にはないメモリページ、つまりページファイル上のメモリページを使って行われたのだと、僕は思いました。 ところが、ページファイル上のメモリページの使用量を、専用のソフトで調べてみると、 a.exeの実行前から全く変化していなかったので、実際はページファイル上のメモリページを使用しなかったのだという事になります。 では一体、どこにあるメモリページが、a.exeで使用されたのかという事になります。 この件について、皆さんはどう思われるでしょうか? 長くなりましたが以上です。 何か御存じの方がいらっしゃれば、是非、アドバイスして頂きたく思います。 では、よろしくお願い致します。

  • 仮想メモリは小さいほうが良い??

    仮想メモリを大きくすると起こる現象 ↓ 仮想メモリ領域を必要とするソフトがあり、 そのソフトの実行時にハードディスク上でファイルの断片化が発生してしまう。 しばらくその状態で使用していると、 ハードディスクに断片化されたファイルが多く存在してしまうことになり、 結果パフォーマンスが低下する。 また、仮想記憶領域自体がハードディスクを圧迫し、データのやり取りの際に処理速度が低下する。 と認識していますが正しいのでしょうか? もしこの推測が正しいのであれば、 パソコン上での日常の作業は物理メモリ(768メガバイト)で十分まかなえているので、 出来るだけ仮想メモリを小さい値に設定しようと思っています。 (ちなみに上記の現象も自身の予測です。)

  • 仮想メモリの設定は、どのくらいにしたらいいのか分かりません。

    ずっとインターネットラジオを聴いていたのですが、最近になってしょっちゅう「仮想メモリの最小値が小さすぎます」という表示が現れるようになり、時にはネットが切断されることがあります。 同時に他のソフトを利用しているわけでもありませんし、どうしてなのか見当もつきませんが、一応「仮想メモリ」の設定を変えようと思います。 WindowsXP HE です。ローカルディスクC:36.2GB、ローカルディスクD:1GB です。また、256MB RAMです。 RAMメモリーを追加したいのですが、できないタイプです。また、メモリーを解放したすぐ後でも、「仮想メモリの最小値が小さすぎます」という表示が現れますので、途方に暮れています。 現在の仮想メモリの設定は、以下のようになっています。 [ドライブCのページングファイルサイズ] ドライブCの空き領域:23851MB。カスタムサイズ、初期サイズ:384MB、最大サイズ:768MB。 [すべてのドライブの総ページングファイルサイズ] 最小限:2MB、推奨:382MB、現在の割り当て:768MB。 私自身がが仮想メモリーやページングファイルというものを本当に理解しているかは疑問です。が、カスタムサイズをどの程度にしたらいいのか、アドバイスを頂けませんでしょうか? どうか、よろしくお願いします。