今日の質問: システムには明らかに大量のメモリがありますが、大きなメモリを割り当てることができませんか? ######どうしてこれなの?
この質問にはメモリ管理の側面、つまりメモリの断片化が関係しています。
32MB のメモリがあると仮定すると、図 (a) に示すように、オペレーティング システムは最初に最小のメモリ (4MB) を使用し、残りのメモリは 4 つのプロセス用に予約されます。
。ある時点で、システムに十分なメモリがないため、オペレーティング システムがプロセス D を実行する必要があるとします。そのため、プロセス D 用に十分なスペースを確保するには、スワップアウトするプロセスを選択する必要があります。図 (c) に示すように、オペレーティング システムがスワップアウトするプロセス B を選択し、プロセス D が元のプロセス B のアドレス空間にロードされ、2 番目のホール が作成されるとします。
# オペレーティング システムがある時点でプロセス B を実行する必要があり、スワップアウトするプロセスを選択する必要があるとします。プロセス A がスワップアウトされると仮定すると、次に 3 番目のプロセスがスワップアウトされます図 (d) に示すように、このプロセスはオペレーティング システム時間の経過とともに、メモリはますます増加します。減少すると、これらのメモリ ホールは、よく
これを見た後は、メモリの断片化とは何か、またメモリ管理メカニズムである動的分割方法についても理解していることになります。上記の例は、実際には 動的パーティショニング方式 です。オペレーティング システムの初期には、動的パーティショニング方式がメモリの管理に使用されていました。
メモリの断片化の問題を解決するにはどうすればよいですか?
アイデアは実際には非常に単純です。複数の小さなメモリ ブロックを 1 つの大きなメモリ ブロックに配置します。
動的パーティショニングを使用していた初期のオペレーティング システムでは、断片化の問題を解決するために、プロセスが占有する領域が連続し、すべての空き領域も連続するようにプロセスを動的に移動しました。 , このようにして、複数の小さなメモリ ブロックがまとめられます。しかし、欠点も非常に明らかであり、 プロセスの移行には多くの時間がかかります。
外部断片化内部断片化
: プログラムに割り当てられたが使用されないメモリの部分外部断片化
: システム 使用できない小さなメモリ ブロック (上記の動的パーティショニング方法によって生成されたフラグメントなど)現在、オペレーティング システムはページングまたはセグメンテーション メカニズムを使用してメモリを管理していますが、一部のメモリ フラグメントは必然的に発生します。生成される。
内部断片化と外部断片化の問題を解決するために、Linux はパートナー システム
とslab という 2 つのものを導入しました。 パートナー システムは外部断片化の問題を解決するために使用され、スラブは内部断片化の問題を解決するために使用されます。
パートナーシステムとスラブもメモリ管理の中核となるコンテンツですので、興味のある方は勉強してみてはいかがでしょうか。
以上がシステムには明らかに大量のメモリがありますが、大きなメモリを割り当てることができないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。