「メモリ不足」は、物理メモリを意味するものではありません

私は、Intelのプロセッサ対応のメモリ管理戦略が受け途方もないと急激な変化があり、x86コンピュータでプログラミングを始めました。幸い、私の記憶にも明確な差があったが、時間の経過とともに痛み「拡張メモリ」と「拡張メモリ」の違いを知っているし、徐々に消えてしなければなりません。
初期の経験の結果として、時折、この事実に驚いI:多くのプロのプログラマは、あなたが何のメモリ管理を持っていた前に、「80286保護モード」からアイデアを持っているようです。
例えば、私は時折、マシンに十分なメモリを持って、私はエラー『メモリのうち』を持っていますが、私がチェック」、尋ね、どのようにこれが起こっていますか?

あなたは、メモリ・マシンを使い果たしたとき、あなたはメモリの量に関係していると思うだろう、想像してみて!そして、もっと魅力的なああ!
「物理メモリ」である、「メモリ」はRAMに等しく、「仮想メモリ」は、単に物理メモリ参照をすることができますです-私は方法のほとんどは、近代的な仮想メモリ管理の問題は、彼らは世界がDOSから始まったと仮定していることである記述するために使用される、と思いますより巧妙なトリックアップ。歴史が、これは合理的なアプローチであるWindowsの開発モデル、上の仮想メモリですが、私は個人的に仮想メモリ管理のこの概念が好きではありません。
だから、私はすぐに仮想メモリの概念をどのようなスケッチ。しかし、最初の事は注意します。現代のWindowsのメモリ管理システムは、スケッチの目的は、一般的な感覚の仮想メモリ管理システムだけでなく、心理的なツールのストレージと明確な思考の数に取り組むとの関係を与えることです、スケッチはるかに複雑で面白いです。もちろんメモリマネージャの真されるものではありません。
ディスク上のシステム管理ファイルを操作し、オペレーティングシステムのプロセス管理:第一に、私は次の2つの追加説明の概念を理解する必要がないことを前提としています。
各プロセスは、それが必要とする、データ・ストレージ・スペースを持つことができます。それがあるとして、オペレーティング・システムがそうすることであるが、保存されている一定量のデータを作成するために、オペレーティング・システムが必要です。
今、私は、神話や先入観が洪水に始まったと確信しています。もちろん、このプロセスは、「それが望んでいるどのくらいの。」求めることはできません もちろん、32ビットプロセスは、2GBの最大値のみを主張することができます。または必要な32ビットプロセスデータストレージスペースは確かにだけそんなにRAMであること。これらの2つの仮定が正しいではありません。データストレージは、オペレーティングシステムで利用可能なスペースの量は、唯一のディスクによって制限されるために予約プロセスです。
これは重要なポイントです:私の意見では、我々は最高のディスク上の大きなファイルとして見られているデータ・ストレージの「プロセスのメモリを」何を呼び出します。
したがって、32ビットプロセスを仮定すると、大量のメモリを必要とし、それが複数の要求を格納します。これは、ストレージスペースの5ギガバイトの合計が必要な場合があります。オペレーティングファイルに十分な5ギガバイトのディスクスペースを見つけるためのシステム、およびストレージスペースのプロセスが実際に利用可能であるように指示します。プロセスは、その後どのように店に書き込みますか?32ビット・プロセスへのポインタが、少なくとも33の各バイトに必要な記憶空間の一意の識別5ギガバイトだけ。
この問題を解決するには、物事は少しトリッキーな場所を得るために開始しています。

ストレージ容量5GBのは、いくつかのブロックに分割されると呼ばれる各ブロック、通常4キロバイト、「ページ。」プロセスは32ビット・ポインタによってアドレス指定することができるために4ギガバイトのオペレーティングシステムは、(100万)、「仮想アドレス空間」を提供します。このプロセスは、オペレーティングシステムがどのディスク・ストレージのページ5ギガバイトを32ビットのアドレス空間に「マッピング」する必要があります教えてください。
マッピングが完了した後、プロセスの試みは、そのアドレス空間内のポインタ0x12340000を使用する場合、例えば、ページの先頭、およびオペレーティング・システムに2477バイトページの位置は、ディスク上に格納されている知っているために、オペレーティング・システム98は、この対応を知っています。オペレーティング・システムからの書き込みポインタやリードポインタはバイト参照ディスクストレージ、および実行対応する読み出しまたは書き込み動作を決定することができる場合。
十分な使用可能な記憶領域がないため、「アウトメモリの」エラーは、起こることはほとんどない。我々が見てきたように、収納スペースは、ディスク容量、そして今ディスクがたくさんあります。プロセスが仮想アドレス空間にマッピング要求ページを実行するための十分な大きさの連続した未使用部分を見つけることができないので、これとは対照的に、「アウトメモリの」エラーが発生します。
4GBのアドレス空間(または、いくつかのケースでは、四分の一)は、プロセスへのストアデータの特定にオペレーティングシステム用に予約されているの半分。「利用者」のアドレス空間の残りの半分では、アプリケーションコードの大部分は、EXEやDLLファイルが占めるように構成されています。でも十分なスペースがありますが、アドレス空間は、プロセスのニーズを満たすために十分な大きさのマップされていない「穴」ではないかもしれません。
プロセスの仮想アドレス空間の一部は、「アンマップ」、このような状況に対処することはもはや必要性を識別するためにそれらをしようとしないことでマッピングされ、その後、他のページ数のファイルを格納するためにそれらをマッピングすることができます。32ビットプロセスは、データストレージの大規模なマルチGBを処理するように設計されている場合は、何をしなければならないかということは明らかです。通常、このようなプログラムは、ビデオ処理を行っている、または他の同様のもの、との「メモリー・ファイル」の他の部分に安全かつ簡単にアドレス空間の再マップチャンクすることができています。
しかし、そうでない場合は、それ?プロセスは、プロセスのより正常かつ優れたパフォーマンスである場合は、ストレージスペースのバイト数百万の唯一の何百、そして何が起こりますか?このようなプロセスのみ正常に機能して、文字列の数が多いの一部を割り当てようとされている場合は、オペレーティングシステムは、ほぼ確実にディスクスペースを提供することができるようになります。しかし、このプロセスは、文字列、それのアドレス空間に多数のページをマップする方法ですか?
それは十分な連続アドレス空間が存在しないことが起こる場合、プロセスはデータを指すポインタを取得することができなくなり、それが実際に無用です。この場合、プロセスはエラー「メモリ不足」が発行されます。今誤称。メモリは同じディスク容量であるため、十分なメモリがある。それは本当にエラー「十分な連続アドレス空間を見つけることができません」である必要があります。

私はラムを言及していません。RAMは、パフォーマンスの最適化として見ることができます。情報は、はるかに高速ディスク上のデータにアクセスするよりも、光の速度近傍の電界に格納されているRAM内のデータにアクセスする、ディスク上に格納された情報は、移動速度にロードスター大きな重い金属分子に接近します。
オペレーティング・システムは、最も頻繁にメモリページにアクセスするプロセスを追跡し、速度を上げるためにRAMにコピーします。プロセスは現在、ディスクのうち、「ページフォールト」操作は、オペレーティング・システムが実行に対応するRAMページポインタにキャッシュアクセスしていない場合は再び訪問する間もなくことを想定することは合理的で、別のRAMに1枚のディスクからページをコピーしますページ。
読み取り専用の共有リソースでシステムを操作することも非常に巧妙です。二つのプロセスがDLLからのコードで同じページにロードされている場合は、オペレーティングシステムは、2つのプロセス間のRAMキャッシュを共有することができます。コードは、任意の方法で変更されなくてもよいので、それほど重複ページを格納するRAMを共有することによって、それは非常に賢明です。
しかし、たとえ共有巧妙で、キャッシュシステムは、最終的にはRAMが不足します。これが発生すると、オペレーティングシステムは、彼らが変更されている場合は、それらがディスクに書き込まれます、すぐに再び参照する最も可能性がありますどのようなページを推測、そして可能性が高く、すぐに再びアクセスできるようにしている読み取るためにRAMを解放しますコンテンツ。
場合は、オペレーティングシステムの推測が間違っ、または、より多くの可能性が高い頻繁に訪問したすべての実行中のプロセスのすべてのページを格納するための十分なメモリがないとき、マシンは「バンプ。」を開始します システムのすべての時間が費やされている書き込みを操作すると、高価なディスクストレージに読んで、ディスクは走り続け、あなたはすべての作業を完了しませんでした。
「メモリ不足」めったに「メモリ不足」エラーが発生しないことが、この手段も。それはバグではないですが、実際にそれは突然の関連になっているという事実のディスクフルコストに保存されているので、パフォーマンスの低下が生じました。
別のビューには、彼らのパフォーマンスにほとんどない素晴らしい関係を消費する仮想メモリの総量です。利用できるよりも、すべてのアクティブなプロセスのかどうかは、仮想メモリの総消費量に関連するが、他のプロセスと共有されていませんどのくらいのメモリ(1)、(2)「ワーキングセット」の共通ページどのくらいの、および(3)ワーキングセットRAM。
「メモリ不足」エラーがあなたもかかわらず、使用可能なストレージの量を、持っている通常どのくらいの物理メモリである理由それは今明確にする必要があります。それはほとんど常にウィンドウ32内のアドレス空間に関連して、アドレス空間は比較的小さく、かつ簡単に分割することができます。
64ビットのアドレス空間は、時間の元のウィンドウ十億であるため、当然のことながら、これらの問題の多くは、ウィンドウ64に表示されなくなり、それを分割することは困難です。(物理メモリが少ないトータルワーキングセットを超える場合もちろん、その後、いくらのアドレス空間、ジッタが存在します。)
仮想メモリを概念化するこの方法は、通常の仮定に完全に反しています。一般的には、物理メモリがいっぱいになると、物理メモリの内容がディスクにスワップされ、物理メモリと考えられています。しかし、私は、ストレージディスクストレージとして見られることを好む、と物理メモリは、インテリジェントなキャッシングメカニズムである、あなたはディスクが速く見えるようにすることができます。たぶん私はクレイジーだが、それは私がそれをよりよく理解するのに役立ちます。

まあ、私は嘘をつきました。32ビットWindows 64ビットWindowsは256 TBにそれを制限する、16 TBに合計ディスク・ストレージ・リミットに処理します。あなたは十分なディスク容量を持っている場合でも、1つのプロセスでない理由は、ディスクスペースのGB以上を割り当てることはできませんがあります。多くの電気技師は、当然のことながら、私にすべての不幸で移動する単一電子を指摘し、それはとても速く、電界を動かしています。私は、私はあなたが今満足している願って、テキストを更新しました。仮想メモリシステムの一部では、ページは、「それゆえ、常にRAMに保持されている必要があり、このページが重要なパフォーマンス。」としてマークすることができます 利用可能なRAMのページよりも、このようなページであれば、あなたは十分なRAMと、「メモリ不足」エラーを持っていない可能性があるため。しかし、この場合には、はるかに困難なアドレス空間の不足よりもです。

おすすめ

転載: www.cnblogs.com/yilang/p/12586125.html