メモリ管理は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が共同で新しいクラウドダイヤリング製品をリリースし、クラウドネイティブ時代のインテリジェントな運用とメンテナンスをリード

推薦する

クラウドサービスの費用管理を最適化するための4つのヒント

クラウド請求書管理により、経費をより適切に管理または削減する機会を把握し、クラウド投資が最大の利益を...

Baidu アルゴリズムのパスと包含に関する問題

主に、Baidu アルゴリズムにおけるウェブサイトのパス、インクルード、パスとインクルードの問題につ...

新しい SaaS セキュリティ レポートでは、2021 年の CISO の優先事項と計画について詳しく説明しています。

セキュリティ専門家は長年、SaaS セキュリティを強化する必要性を認識してきました。しかし、2020...

インターネット マーケティング: 企業はどのようにして検索エンジンの障壁を突破できるでしょうか?

現在、検索エンジン市場は百度が独占しているが、ウェブマスターが百度に奪われたため、ウェブサイトは他の...

racknerd: 年間 15.68 ドル、米国の高トラフィック VPS、768 MB メモリ/1 コア/20 GB ハード ドライブ/3 T トラフィック、PayPal/Alipay

Racknerd は、新しい「3 日間フラッシュ セール」プロモーションを開始しました。これは、3T...

Hostus-KVM ニュース: CN2 ネットワークに参加/ハードディスクの無料アップグレード/Alipay 支払い

Hostus.us からの最新の公式ニュース: KVM 仮想 VPS [デフォルトでWindowsシ...

EvoRack-XEN VPS 60% オフ/今すぐ購入を歓迎

EvoRack は、英国に拠点を置く ABPNI Computer Solutions Ltd. と...

北京に拠点を置く仮想通貨取引所Vircurexが次のMt. Goxになる

3月24日現在、ビットコイン取引所マウントゴックスの破産危機はまだ収まっていないが、最近苦境に陥った...

vpsag: 月額 3 ユーロ、KVM/2G メモリ/1 コア/20gSSD/3T トラフィック、ブルガリア 1Gbps 帯域幅

vpsag は、以前の vps.ag です。現在は独立したブランドとして運営されており、「Redcl...

マルチクラウド時代、クラウド間の移行はどのように行うのでしょうか?

クラウド コンピューティングは、エンタープライズ アプリケーションにおいてますます成熟しつつあります...

専用マインド - 7ドル/4コア/2IP/2gメモリ/100gハードディスク/2Tトラフィック

ヘンズは、Intel Xeon E5620 クアッドコア CPU、最低 64G のメモリ、RAID1...

ナビゲーションサイトと検索エンジンのゲーム

前世紀末のインターネットは、中国のインターネットの始まりでした。今日のインターネットの巨人であるアリ...

ユーザーがウェブサイトを離れる10の理由 エンゲージメントを維持することが鍵

ユーザーがウェブサイトを離れる10の理由インターネット上には数多くのサイトが存在するため、ユーザーを...

edgenat: 全製品 30% オフ、韓国専用サーバー、10 か月分を 24 か月分、VPS オプション - US AS4837\Korea CN2\US CN2 GIA ネットワーク

edgenatは現在、すべてのVPSと韓国のハイエンド独立サーバーに30%割引と生涯継続割引を提供し...