メモリ管理は2つの部分から成ります: 仮想メモリ管理

メモリ管理は2つの部分から成ります: 仮想メモリ管理

[[402636]]

この記事はWeChatの公開アカウント「Flying Veal」から転載したもので、著者はFeitian Vealです。記事を転載する場合は飛天牛肉公式アカウントまでご連絡ください。

従来のストレージ管理の問題点

仮想メモリはなぜ登場したのでしょうか?登場の背景は何でしょうか?

前回の物理メモリ管理の記事でも述べたように、ユーザープログラムの機能が増えると、プロセスが必要とするメモリ空間はどんどん大きくなっていきます。プロセス スペースは物理メモリの実際のサイズを簡単に超過し、プロセスが実行できなくなる可能性があります。

したがって、メモリ不足の問題を解決し、大きなプログラムと小さなメモリ間の矛盾を緩和するためには、メモリ容量を拡張することが不可欠です。

メモリ容量の拡張は、物理的側面と論理的側面の両方から考えることができます。物理的な拡張にはそれほど技術的な内容は必要ありません。当然ながら、私たちが研究すべきことは、記憶容量を論理的に拡張する方法です。

いわゆる論理的拡張とは、物理メモリの容量は実際には変わっていないが、格納できるものが増え、実際のメモリよりもはるかに大きなメモリがあるようにユーザーに見えることを意味します。

メモリの主な論理拡張テクノロジには、オーバーレイ テクノロジ、スワップ テクノロジ、仮想メモリ (仮想メモリ) (仮想ストレージとも呼ばれます) の 3 つがあります。実際、これらのロジック拡張テクノロジのコアコンセプトは同じです。これらはすべて、他のプロセス (またはプロセスの一部) が占有できるメモリ領域を解放するために、どのプロセス (またはプロセスの一部) をメモリから外部メモリ (ディスク) に一時的に移動する必要があるかを検討します。

初期のオペレーティング システムに存在していた 2 つの論理拡張テクノロジであるオーバーレイとスワッピングは、今では過去のものとなりました。以下に簡単な紹介をします。

前述のように、初期のオペレーティング システムでは、メモリ空間はシステム領域 (オペレーティング システム関連のデータを格納するために使用) とユーザー領域 (ユーザー プロセス関連のデータを格納するために使用) の 2 つの部分にのみ分割されていました。メモリ内に存在できるユーザー プログラムは 1 つだけであり、ユーザー プログラムはユーザー領域全体を占有します。明らかに、メモリ空間はユーザー プログラムを収容できないことがよくあります。

オーバーレイ技術の基本的な考え方は、プログラムの実行中は、プログラムとデータのすべての部分に常にアクセスする必要はないということです(特に大規模なプログラム)。したがって、ユーザー空間 (メモリ) は、固定領域と 1 つ以上のオーバーレイ領域に分割できます。

プログラムの頻繁にアクティブになる部分を固定領域に配置し、残りの部分を呼び出し関係に従ってセグメント化します。まず、これから使用するセグメントをオーバーレイ領域に配置し、その他のセグメントを外部メモリ (ディスク) に配置します。呼び出しが必要になる前に、ユーザーは特定のシステム コールを設定して、外部メモリ内のセグメントをオーバーレイ領域に転送し、オーバーレイ領域内の元のセグメントを置き換えます。

オーバーレイ技術の欠点は明らかであり、受け入れられないと言えます。つまり、オーバーレイ技術では、メモリ容量不足の問題がユーザーに委ねられます。オペレーティング システムは、オーバーレイ セグメントをメモリにロードするためのシステム コールのみをユーザーに提供しますが、ユーザーは、上書きするセグメントとメモリにロードするセグメントを指定する必要があります。

では、コンピューターを使用するときは、プログラムがクラッシュしないようにする方法を考えなければならないのでしょうか?

カバレッジ テクノロジは、実際には同じジョブ/プロセスの異なるセグメント間で使用されていることがわかります。では、異なるジョブ/プロセス間ではどうでしょうか?

ここでスイッチング技術が役立ちます。

スワッピングの基本的な考え方は、アイドル状態のプロセス/ジョブは主に外部メモリ (ディスク) に保存されるというものです。プロセス/ジョブを実行する必要がある場合、プロセス/ジョブはディスクからメモリに完全にロードされ、プロセスは一定期間実行された後、ディスクに戻されます。したがって、プロセス/ジョブが実行されていない場合は、メモリを占有しません。

実際、オーバーレイ テクノロジとスワップ テクノロジはそれぞれ、従来のストレージ管理 (物理メモリ管理) における問題を解決します。

  • オーバーレイ技術は、ジョブ/プロセスが実行を開始する前に一度にメモリにロードされなければならないという制限を打ち破ります(1回限り)
  • スワッピング技術は、ジョブがメモリにロードされると、ジョブが完了するまでメモリ内に残る(常駐)という制限を打ち破ります。

もちろん、いずれにせよ、これら 2 つの論理拡張技術は過去のものとなり、現在は仮想メモリ技術が主流となっています。これら 2 つの古いテクノロジの特性を組み合わせ、従来のストレージ管理に存在する 2 つの問題を単独で解決します。

仮想メモリとは

上記のスワップ技術を基礎とすれば、仮想メモリを理解することはそれほど難しくないでしょう。

もちろん、その前に、仮想メモリは実際のものと見なすべきではないことを強調しておかなければなりません。それは技術です!スワップ技術やオーバーレイ技術と同様に、メモリ空間を論理的に拡張するために使用される技術です。

仮想メモリ技術は、局所性の原則という非常に重要な原則に基づいています。

1) 時間的局所性: プログラム内の命令が実行されると、その命令がすぐに再度実行される可能性が高くなります。データの一部がアクセスされた場合、そのデータはすぐに再度アクセスされる可能性があります。 (プログラム内にループがたくさんあるため)

2) 空間的局所性: プログラムがストレージユニットにアクセスすると、その近くのストレージユニットにもすぐにアクセスされる可能性が高くなります (多くのデータがメモリに連続して保存され、プログラム命令もメモリに順番に保存されるため)

この局所性の原則に基づいて、プログラムをメモリにロードするときに、すぐに使用されるプログラムの部分だけをメモリにロードし、一時的に使用されない部分は外部メモリ(ディスク)に保持したまま、プログラムを正常に実行することができます。

プログラム実行中に、CPU が必要とする情報がメモリ内にない場合、オペレーティング システムは必要な情報を外部メモリ (ディスク) からメモリにロードし、プログラムの実行を継続する役割を担います。

メインメモリにロードするときにメモリ領域が不足している場合は、オペレーティングシステムがメインメモリ内の一時的に使用されていない情報を外部メモリにスワップアウトする役割を担います。

上記は仮想メモリ技術です。

仮想メモリ技術を実装する方法

仮想メモリを使用すると、ジョブ/プロセスをメモリに複数回ロードできることがわかります。連続割り当てを使用する場合、実装が不便です。したがって、仮想メモリ テクノロジの実装は、不連続な割り当て管理に基づいています。

従来の基本ページング管理、基本セグメンテーション管理、基本セグメント ページ管理、および仮想メモリ テクノロジの組み合わせは、それぞれ、デマンド ページング管理 (ページ化仮想メモリ システム)、デマンド セグメンテーション管理 (セグメント化仮想メモリ システム)、およびデマンド セグメント ページ管理 (セグメント ページ化仮想メモリ システム) と呼ばれます。

これらの概念は混同されやすいですが、実際には区別するのは非常に簡単です。 Baidu 百科事典から抜粋したこの文章を覚えておいてください。

リクエストページングやページ置換の機能がない場合、基本ページング管理(または純粋ページング管理)と呼ばれます。仮想メモリの実装をサポートする機能はありません。各ジョブ (プロセス) は、実行する前にメモリに完全にロードされる必要があります。

リクエストセグメントのストレージ管理も同様です。セグメントストレージ管理を基盤としていますが、セグメント調整とセグメント置換を要求する機能が追加されています。

リクエスト ページング、ページ置換、リクエスト セグメンテーション、セグメント置換の概念は似ています。ここでは、リクエスト ページングとページ置換を例に挙げて説明します。

  • プログラム実行中、アクセスされた情報がメインメモリにない場合、オペレーティングシステムは必要な情報を外部メモリ(ディスク)からメインメモリにロードし、その後プログラムの実行を続行する責任があります(オペレーティングシステムは、メインメモリ内の不足しているページをディスクからメインメモリにロードするための要求ページング機能を提供する必要があります)。
  • メモリ領域が不足している場合、メモリ内の一時的に使用されていない情報をディスクにスワップアウトする責任はオペレーティング システムにあります (一時的に使用されていないページをディスクにスワップアウトするためのページ置換機能をオペレーティング システムが提供している必要があります)。

具体的には、ページ化された仮想メモリ システムでは、CPU がアクセスするページがメイン メモリに存在しない場合は常にページ フォールト割り込みが生成され、オペレーティング システムのページ フォールト割り込み ハンドラが割り込みを処理します。このとき、ページが欠落しているプロセス/ジョブはブロックされ、ブロッキング キューに配置されます。ページングが完了すると、起動され、準備完了キューに戻されます。

  • メモリ内に空きブロックがある場合は、空きブロックがプロセスに割り当てられ、不足しているページがこのブロックにロードされ、ページ テーブル内の対応するページ テーブル エントリが変更されます。
  • メモリ内に空きブロックがない場合、ページ置換アルゴリズムは削除するページを選択します。メモリ内のページが変更された場合は、外部メモリに書き戻す必要があります。変更されていないページを外部メモリに書き戻す必要はありません。

これは単純なプロセスではなく、基本的なページング管理における単純なページ テーブルではこのようなタスクを実行できなくなっていることがわかります。

まず、基本的なページ管理のページ テーブルを確認しましょう。このページ テーブルには、ページ番号とブロック番号の 2 つのフィールドしかありません。

リクエスト ページング管理のページ テーブルは当然ながらはるかに複雑です。

1) 「デマンド ページング」機能を実装するには、オペレーティング システムは各ページがメモリにロードされているかどうかを知る必要があります。そうでない場合は、ディスク上のページの場所も知っておく必要があります。

2) メモリ空間が不足している場合、「ページ置換」機能を実装するために、オペレーティング システムは特定のインジケータを使用して、スワップアウトするページを決定する必要があります。一部のページが変更されていない場合は、それらをディスクに書き戻すのに時間を無駄にする必要はありません。一部のページが変更されている場合は、ディスク上の古いデータを上書きする必要があります。したがって、オペレーティング システムは、各ページが変更されたかどうかに関する情報も記録する必要があります。

このため、リクエスト ページング管理用のページ テーブルに 4 つのフィールドが追加されます。

  • ステータスビット: ページがメモリにロードされたかどうか
  • アクセスフィールド: ページ置換アルゴリズムがページをスワップアウトするときに参照できるように、ページが最近アクセスされた回数、またはページが最後にアクセスされた時間を記録できます。
  • 変更ビット: ページがメモリにロードされた後に変更されたかどうか
  • 外部メモリアドレス: 外部メモリ内のページの保存アドレス

ページ置換アルゴリズムも非常に重要なトピックであり、この記事で一緒に書くべきでした。しかし、「ページ置換」問題は仮想メモリだけでなく、コンピュータ設計の他の領域にも存在すると考えました (たとえば、ほとんどのコンピュータは、最近使用した 32 バイトまたは 64 バイトのストレージ ブロックを 1 つ以上のキャッシュに保存します。これらのキャッシュがいっぱいになると、最近使用したスト​​レージ ブロックを保存するために、いくつかのブロックを選択して破棄する必要があります)。そのため、後で別の記事を開くことにしました。

<<:  Kafka はなぜこんなに速いのでしょうか?

>>:  Borei DataとAlibaba Cloudが共同で新しいクラウドダイヤリング製品をリリースし、クラウドネイティブ時代のインテリジェントな運用とメンテナンスをリード

推薦する

今後 SEO 最適化の方向性は変わるでしょうか?

今後 SEO の方向性が変わるかどうかは別として、検索エンジン以外のプロモーションチャネルにおいて、...

Weiboマーケティングスキル:ファンを惹きつけ、交流する方法

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス鄧超は「走れ!男」の演技...

クラウドネイティブ時代を1万語で解説、K8sコンテナプラットフォームのLB(Nginx)負荷分散システムを0から1に構築する方法

クラウドネイティブ時代において、Kubernetes をベースとしたコンテナ オーケストレーション ...

racknerd: DC5 データセンター VPS、60Gbps 防御、3 つのネットワークの完全最適化の簡単なレビュー!

Racknerd は昨日、Sharktech のロサンゼルス データ センターの VPS サービスに...

Ramnode - 独立記念日 VPS 6.8% オフ

今日はアメリカの独立記念日です。Ramnode は VPS プロモーションで 38% 割引を提供して...

SEOの黄金律とは

各検索エンジンには独自のルールがあります。適切な SEO により、ウェブサイトのランキングが効果的に...

反省:IDC業界の「熱」と「賞賛」に合理的に対処する方法

中国の情報化の発展に伴い、IDC業界は今や発展の黄金期に入っている。オンラインゲーム、情報決済、仮想...

ホストデアはどうですか?アジア最適化ラインのVPS(「アジア最適化NVMe SSD KVM」シリーズ)の簡単なレビュー

VPS マーチャントである Hostdare は、長年にわたってその安定性と速度でよく知られています...

Kubernetes を監視する際に避けるべき 4 つの落とし穴

[51CTO.com クイック翻訳] Kubernetes (K8S) は現在、マイクロサービスとコ...

ネットワークソフトウェアはマルチクラウド管理の複雑さを軽減できる

複数のパブリック クラウドでアプリケーションを展開して実行することは、多くの IT リーダーにとって...

ファーウェイクラウド最高製品責任者の郭偉関氏:フルスタックのクラウドネイティブ技術が金融業界のイノベーションのボトルネック打破に貢献

9月16日、中軟国際ホールディングス株式会社主催の「中国生命保険技術応用サミットフォーラム2021」...

「百度重量」の不正行為を見分ける方法

いわゆる「百度重み」とは、ウェブサイトにトラフィックをもたらすと予想されるウェブサイトのキーワードラ...

ソフトとハードの両方の手法を用いたウェブサイト最適化方法

ウェブサイト最適化の目的は何でしょうか? 多くの SEO 担当者は、ウェブサイトのコンバージョン率と...

extravm: 米国無制限トラフィック VPS、100G 高防御、月額 2.75 ドル、1G メモリ/1 コア/15g NVMe

extravm は現在、ロサンゼルスのデータセンターの VPS を 45% 割引で提供しており、この...