仮想アドレス空間仮想アドレス空間

「コンピュータシステム」を読んで、仮想アドレス空間の概念に遭遇し、それは以前に見た、仮想アドレス空間ですが、それゆえ我々はいくつかの詳細な概念分析なぜ、これらはありません知っている:以来、起源と発展と現状どのような役割、なぜそれを発明する必要があります。

参考リンク:

プロセスのアドレス空間と仮想記憶空間について話します

仮想アドレス空間の背景には、メモリ割り当てメカニズムを提供するために、それが派生概念であり、メモリ割り当て機構の開発を開始する必要があります。

以下の3つの段階から説明されています。

  1. 元のメモリ割り当て機構
  2. セグメント化されたメモリの割り当て
  3. ページメモリ割り当てメカニズム

1.元のメモリアロケーション

元のコンピュータは、プログラムがすべてのメモリをロードし、メモリ上で直接実行され、プログラムが実行されます。

この段階では、プログラムのメモリアドレスは、実際にアクセスすることで、物理メモリアドレスを

システムは、同時に複数のプログラムを実行している場合は、どのようにこれらのプログラムのためのメモリを割り当てるには?

例えば:

合計メモリサイズ128Mは、2番組同時AとB、必要性の10Mを実行し、Bは110Mにする必要があります。

生のメモリ割り当て戦略:

最初のメモリ前10MポイントAに、次いで110M Bに残りのサブ118M続い 下図のように:

制限

  1. プロセスのアドレス空間は、単離されていません

ABは、物理メモリに直接アクセスするので、メモリデータが互いのリスクを修正するために存在し、プロセスの独立性の原則に違反します。

  1. プログラム実行中のアドレスが不明です。

プログラムCの要件を満たすために、メモリ内のときに残りの空間、オペレーティング・システムは、ランダムにランダムに割り当てられるように、手順Cを使用して、20Mのサイズのために連続した領域内の残りの空間に配置されるので、プログラムの実行中のアドレスは不明です。

注:このプログラムのために、すなわち仮想メモリ空​​間セグメンテーションのセグメント化技術、の次たくに関してで、開始アドレスはランダムではなく、プログラマはメモリマッピングと右の透明な方法を実装し、0です。

2.セグメンテーションメモリアロケーション

セグメント化された目的:問題を特定するためのアドレス空間を解決します。

原理:中間層(仮想アドレス空間)を増やします。

物理アドレスリスクに直接アクセスするので、それは仲介によって需要を伝えるためにのみアクセス可能な物理メモリに直接アクセスし、持たないプログラムを制御するために、仲介、およびこのように直接アクセスシステムのルールに従うことに伝えることはできません。クロストークメモリ、間接的な演奏アドレス空間の分離の問題を回避します。

さて、プログラムがメモリアドレスは、実際の物理アドレスではなく、仮想アドレス、および、物理メモリアドレスへの仮想アドレスをマッピングするためのシステムで、メモリアクセスが完了するとアクセスします。

プロセスが作成されると、システムはそのための4Gの仮想アドレス空間を割り当てます。

なぜ4Gはありますか?

32ビットシステム、4バイトのポインタ長、及び4バイトのポインタのアドレス指定能力のであります。

From
0000 0000 0000 0000 0000 0000 0000 0000
to
1111 1111 1111 1111 1111 1111 1111 1111
复制代码

16は、16進0x00000000の〜0xFFFFFFFFの、すなわち0xFFFFFFFFの4Gの最大サイズの容量によって置き換えられます。

メモリは何に取り組んで、アドレス指定は何ですか?

見つけるために、アドレッシング、アドレスを検索しますアドレッシング。

アドレス指定

ポインタの長さは4バイトであり、我々は、ポインタ・メモリ・アドレスの内容を知っている、4バイトN可能なアドレス内に格納されています。Nそれはどのくらいですか?メモリアドレス空間の32ビットのこの4バイトのサイズは、どのように多くの可能性を言うことができますか?

32ビット一緒に数0101の可能性を表すことができ、アドレスの数を表すことができます。ポテンシャルエネルギーの可能性の32種類は、0101の4G、4Gすなわちアドレスまで表します。

これが唯一の4G異なるアドレスに閉じ込めることができる。これは、私は、メモリ・アドレス・ポインタにアクセスできることを意味し、アドレスが4Gは私と場所のためにあまりにも多くあることを超えた範囲です。

私にとって、それは自分の能力の範囲外であるだけで、私はこれだけのレベルに他の4軒の家の残りの部分を、対応するこの部屋の扉を開くことができますキーを4部屋、4のように私の手を取りました。対応する32ビットシステムメモリ8G、私はそれらの4Gまで使用することができます。私にとっては4Gを、残りのこのポインタは、それがドアを開けるための鍵を持っていなかった、訪問は発生しません。

ここではアドレス指定機能を私の4Gポインタがあります。

プログラムは仮想アドレス空間上のアドレス、実メモリ対応する物理アドレスへの訪問の同等のアクセスマッピングメカニズムによって。

このメカニズムの原理がマッピングされているとは何ですか?原理は、セグメント化技術を分析します。

セグメンテーションセグメント(メモリブロック技術)

考える:仮想アドレス空間と物理アドレス空間との間で1つのマッピングを行うこと。アドレス空間は、分離工程の間に実現されるように、異なるプロセスのアドレス空間は、異なる領域の物理アドレス空間にマッピングされることを保証するシステムは、物理アドレス空間は、互いに分離されています。

例:

A、B 两个进程

A需要10M,对应的虚拟地址空间分布是: 0x00000000 到 0x00A00000 

B需要100M,对应的虚拟内存地址空间分布是:0x00000000 到 0x06400000。

按照 Segmentation 的映射方法,进程 A和B 在物理内存上映射区域分别为:

进程 A:0x00100000 到 0x00B00000(分配一块 10M 大小的内存片段)

进程 B:0x00C00000 到 0x07000000(分配一块 100M 大小的内存片段)

复制代码

従って、A及びBは、異なるメモリ領域にマッピングされているプロセス、互いに分離アドレスを達成するために、互いに重なりません。

プログラマの観点からは、0x00000000のAのプロセスのアドレス空間は、プログラマ向けの仮想アドレス空間は、我々は唯一の真の物理アドレスのマッピングの後ろに、プログラムすることができる仮想アドレス空間に直面する必要がある0x00A00000に配布されます処理するためのシステムには、プログラマに対して透過的です。

技術の制限セグメント

セグメンテーションセグメントマッピング方法は不確実性の元のメモリ割り当てメモリ空間分離及びプログラムメモリアドレスの問題を解決するが、効率は依然として比較的低いです。

セグメンテーションセグメントマッピング方法は、メモリは、たびに全体のプロセスを切り替えられる粒子サイズは、ディスク・アクセス動作、パフォーマンスの低下のロットで得られた、大きすぎます。

実際には、プログラムは、一定の期間に、地域の特性を実行している、現在のプログラムで使用するデータのほとんどのプログラムだけの小さな部分のみが、一定の期間内の残りのデータのほとんどは使用されません(桶で犬、ピット廃棄物の貴重なメモリビット)。

-これに基づいて、コンピュータ科学者は、より小さなメモリサイズとセグメントマッピング方法考えページング(ページング)

3.ページングページング

ページ:アドレス空間はページに分割され、各ページのサイズはCPUによって決定されます。現在、PCは、4KBのページサイズを使用することを選択されています。プロセスは、サイズのメモリサイズに応じて分割されている方法と比較して、改ページははるかに小さいです。

セグメンテーションとページングとの間の差

フラグメント:プログラムが実行されるたびに、常にすべてのデータ・メモリブロックに現在のプログラムをロードします。

ページ:ランニング、あなたがどのページにメモリを割り当てるページで、ページが一時的にメインメモリにハードディスクではなく、1回の負荷に残ることは無駄です。

ページで使用する場合、ページング処理は次のとおりです。

- > 1ページメモリに割り当てられた物理アドレス空間を

- > 2.仮想アドレス空間内のページを作成します。

- > 3.マッピング:建物橋、物理アドレスと仮想アドレス空間ドッキング

読み込みプロセスの実行可能ファイル

以下は、実行可能ファイルによってロード処理を説明し、具体的な方法は、ページングメカニズムを説明します。

実行可能ファイル、コンパイルされたデータや命令の本質的コレクションは、それが多くのページに分割されます。これは、実装プロセスでは、ユニットは、メモリページにロードされています。

プログラムが実行されると、プログラムのための4Gの仮想アドレス空間を作成するシステムで最初のプロセス。

仮想アドレス空間は4G仮想アドレス空間を作成するには、ちょうど中間層、基本的なデータ構造である、実際に本当にただのデータ構造の量だけを必要なマッピング・メカニズムを作成し、スペースを作成していない、このデータ構造は、プロジェクトページです(ページインデックス)とページテーブル(ページ配列)。

あなたはこの層構造のデータに必要な仮想アドレス空間を作成したら、新しく作成されたプロセスは、実行可能ファイルの最初のページの読み込みを開始します。

実行可能ファイルの最初のページに、ファイルヘッダとセグメント・テーブル、応答内の仮想アドレス空間へのヘッダ情報、全てのセグメントにおいて実行可能ファイル、ページ1マッピングによる方法などの情報が含まれています。

この時点で、実際のデータおよび命令の実行ファイル(ヘッダ相対的な用語)は、メモリにロードされていない、システムの実行可能ファイルのヘッダ情報の知識によれば、ページの事前に構築された実行可能ファイルおよびプロセスの仮想アドレス空間マッピング関係のみ。

それより前の実際の内容との間に最初に構築されたカタログと今後の対応の、実際には、私は教師ですように、生徒のクラスは、人にキーを割り当てるために進めるが、部屋にあなたをできるようにします。私はあなたの名前を読むときにのみ、あなたの部屋に入るための鍵を保持することができます。

仮想アドレスは、プログラムで使用されるCPUにアクセスすると、アドレスを変更して、関連付けられた物理アドレスを見つけていない、仮想アドレスへPUCページは、空のページとして所属 - ページフォールト(CPUシステムは与えていないことを知っていますページ割り当てプログラムメモリ)、その後、CPUはシステムに制御を返します。

次に、ページの物理アドレス空間内のプログラムのページ用のオペレーティングシステムを割り当て、その後、物理メモリと仮想アドレス空間マッピングされたページのこのページを設定し、最終的に戻ってCPUへの制御は、ページ上の誤った位置から再びCPUはちょうど起こりました始めました。

私たちは、ページング通信メカニズムとしてこれらを理解することができます - プログラムの継続的な実行と、ページフォルトが発生していきます、プロセスが必要なプロセスの実行メモリを満たすための物理メモリPAGを対応する割り当てますオペレーティングシステム。

ページ付けの方法の核となるアイデア

ページNへのプログラムの実行は、このページのメモリページを割り当てる場合は、そのページの仮想メモリアドレス空間をマッピングするために追加します。このプロセスマップを通して、あなたは、対応するページのメモリにアクセスすることができます。

論理アドレス(論理アドレス)

Cにおいて、変数自体の値がポインタ(&操作)を読み取ることができ、値は、現在のプロセスデータセグメントアドレスではなく、絶対的な物理アドレスを基準とした論理アドレスです。

インテルは、唯一の真のモードでは、唯一の論理アドレスと物理アドレスは同じです。

あなたは完全に透過的であるため、プログラマはのみと論理アドレス、セグメンテーションとページングメカニズムに対処する必要があります。

これは、仮想アドレスの論理アドレスとして理解することができます。

ます。https://juejin.im/post/5d0ae862f265da1b897ad552で再現

おすすめ

転載: blog.csdn.net/weixin_34337381/article/details/93183002