より多くのデータを保存するために利用可能なスペースがあるにもかかわらず、部分的にフルRAM(たとえば80%)でデバイスが大幅に遅れるのはなぜですか?私が期待しているのは、99%までうまく機能し続けることです。
モバイルの方がPCよりもRAMが小さいことに気付きます。たとえば、私のモバイルには2 GBのRAMがあります。RAMの空き容量が1 GB未満の場合、かなり遅れます。使用する〜1 GBがまだあるのに、なぜそれが起こるのですか?
より多くのデータを保存するために利用可能なスペースがあるにもかかわらず、部分的にフルRAM(たとえば80%)でデバイスが大幅に遅れるのはなぜですか?私が期待しているのは、99%までうまく機能し続けることです。
モバイルの方がPCよりもRAMが小さいことに気付きます。たとえば、私のモバイルには2 GBのRAMがあります。RAMの空き容量が1 GB未満の場合、かなり遅れます。使用する〜1 GBがまだあるのに、なぜそれが起こるのですか?
回答:
ここには多くのことが関係していますが、できる限り簡単に、あらゆるOSに適用できる方法で説明するようにします。
ここには2つの基本原則があります。
RAMに格納する必要があるすべてのものと、RAMに格納することで恩恵を受けるものの合計は、ほとんどの場合RAMのサイズよりも大きくなります。RAMに配置することでメリットが得られるのは、プロセスのワーキングセットとスタンバイリストです。後者には、かつてアクティブに使用されていたが、その後非アクティブになったデータとコードが含まれています。この多くは再び使用されますが、一部はすぐに使用されるため、RAMに保存しておくと便利です。このメモリは一種のキャッシュとして機能しますが、実際には必須ではないため、使用可能なメモリのカテゴリに含まれます。空きメモリのように、それを必要とするプログラムにすぐに与えることができます。パフォーマンスのために、スタンバイメモリは大きくする必要があります。
メモリブロックの使用頻度はランダムではありませんが、かなりの精度で予測できます。メモリは、多くの場合4Kバイトのブロックに分割されます。一部のブロックは1秒あたり何回もアクセスされますが、他のブロックは、システムが十分に長く稼働している場合、何分、何時間、何日、さらには何週間もアクセスされていません。これら2つの両極端の間には、幅広い使用法があります。メモリマネージャは、最近アクセスされたブロックとアクセスされなかったブロックを認識します。最近アクセスされたメモリブロックがすぐに再び必要になるのは合理的な仮定です。最近アクセスされていないメモリは、おそらくすぐに必要になることはないでしょう。長い経験から、これが有効な原則であることが証明されています。
メモリマネージャは、2番目の原則を利用して、最初の原則の望ましくない結果を大幅に軽減します。これを行うために、最近アクセスされたデータをRAMに保持し、めったに使用されないデータを元のファイルまたはページファイルに保持するというバランスの取れた動作を行います。
RAMが十分にある場合、このバランスを取ることは簡単です。最近使用されていないデータの多くは、RAMに保持できます。これは良い状況です。
ワークロードが増加すると、事態はさらに複雑になります。使用中のデータとコードの合計は大きくなりますが、RAMのサイズは変わりません。これは、これの小さいサブセットをRAMに保持できることを意味します。最近使用されていないデータの一部は、RAMに保存できなくなりますが、ディスク上に残しておく必要があります。メモリマネージャは、アクティブな使用中のメモリと使用可能なメモリとのバランスを維持しようと非常に努力します。ただし、ワークロードが増加すると、メモリマネージャは実行中のプロセスにより多くの使用可能なメモリを割り当てるように強制されます。これは良い状況ではありませんが、メモリマネージャには選択肢がありません。
問題は、プログラムの実行中にRAMとの間でデータを移動するには時間がかかることです。RAMが十分にある場合、それはあまり頻繁に発生せず、気付かれることさえありません。しかし、RAMの使用率が高いレベルに達すると、はるかに頻繁に発生します。状況は非常に悪化する可能性があるため、実際に使用するよりもRAMとの間でデータを移動するのに時間がかかります。これはスラッシングであり、メモリマネージャが回避しようと非常に努力しますが、作業負荷が高い場合は回避できないことがよくあります。
メモリマネージャーはあなたの側にあり、常に悪条件の下でも最適なパフォーマンスを維持するのが最善です。しかし、ワークロードが大きく、使用可能なメモリが不足すると、機能を維持するために悪いことをしなければなりません。それが実際、最も重要なことです。優先順位は、最初に物事を実行し続けてから、可能な限り速くすることです。
memory manger
は私のOS
権利の一部ですか?ポインタとこれらの非常に低いレベルのことを扱っていた場合、それでもページングを行うことができますか?
最新のオペレーティングシステムはすべて、データをキャッシュするために未使用のメモリを使用するため、低速なストレージではなく高速なRAMからアクセスできます。アプリケーションは必要に応じてキャッシュをクリアして使用できるため、通常は空きメモリとしてこれを報告しますが、実際にはまだ使用されています。少なければ少ないほど、キャッシュできるデータが少なくなり、コンピューターの速度が遅くなります。
この答えは、構造を再編成し、メッセージを明確にするために大部分が書き直されました。また、コミュニティWikiの回答として公開しました。編集してください。
ページングは、メモリの固定サイズブロックにプロセスが割り当てられるメモリ管理スキームです。メモリ使用量が高レベル(つまり80%の容量)に達すると、ページングがRAMからvRAM(仮想RAM)に拡大し始めます。
vRAMは、通常はハードドライブ内のシステムストレージ、またはその他のサイズの大きいストレージの場所にあります。
プロセスは、メモリとして実行するためにハードドライブの一部に割り当てられ、そのセクションをRAMとして扱います。これは完全に正常なプロセスですが、vRAMとの間でデータを転送するのにかかる時間が長くなると、システムのパフォーマンスが低下します。
専用RAMは、高速接続を提供するCPUからマザーボードを介して直接アクセスされますが、仮想RAMは、ボードとvRAMの場所の間のケーブル接続を横断する必要があります。
ただし、これはパフォーマンスにわずかな影響しか与えません。vRAMへのページングが発生する割合が大幅に増加すると(専用RAMが容量に近づくと)、スラッシングが発生します。
スラッシングは、メモリのページを仮想メモリに迅速かつ迅速に転送する方法です。これは、データのフェッチとアドレス指定により多くの時間を費やさなければならないため、パフォーマンスに多大な損害を与えます。
たとえば、30桁の数字を書き留めたいとします。メモ帳を使用して画面の横に座ってそれを書き込む(専用メモリを使用)か、5個のチャンクを覚えて隣の部屋に移動し、そこにあるメモ帳にメモします(仮想メモリを使用)。両方とも仕事を成し遂げますが、どちらが早くなるでしょうか?
解凍の詳細については、こちらをご覧ください!
これは、OSがソフトウェアを実行し続けるために、多くのページング(アクティブなプログラムの一部の読み込み)とスワッピング(RAM内のデータのHDへの移動、またはその逆)を行う必要があるためです。使用可能な20%よりも多くのスペースを必要とする可能性がある新しいページをロードする必要がある場合、OSはRAM内の既存のページをスワップアウトする必要があります。特に他のプログラムの起動時。ページのスワップアウトとバックインには時間がかかり、RAMではなくHDの速度で作業しているため、PCのパフォーマンスが大幅に低下します。
HDDでHDに特別なパーティションを作成し、それを専用の「スワップ」(「実際の」ファイルに使用しない)スペースとして割り当てると、スワップがHDの断片化の影響を受けにくくなります。
覚えておいて、ハードドライブはRAM よりも桁違いに遅く、RAM自体は最初からそれほど高速ではありません(アーキテクチャ全体では)。アクセス速度の順に(各ラングは上記のものよりも桁違いに遅い)、あなたは持っています
Virtual Memory Managerはギャンブラーです。常にすべてのRAMを必要としているわけではないので、知識に基づいた推測を行い、ドキュメントプログラム(これを読んでいる間、最後の10分間はバックグラウンドにあった)がサイコロを振る本当に重要で、HDDに押し込みます。
しかし、その後、ドキュメントに戻ります!ここで、VMMはすべてのデータをHDDからロードする必要があります。さらに悪いことに、RAMが少ない場合は、他のデータ(ギャンブルが多い)をHDDにプッシュして、使用可能なスペースを解放する必要があります。Linuxは、ここの端に住むのが好きです。RAMの大部分を頻繁に使用されるデータで満たします(プロセスが少ないサーバーに最適)。