「メモリの仮想記憶」をシミュレーターで体感してみよう!
目次
「メモリの仮想記憶」をシミュレーターで体感しよう!
前回記事に続いて、メモリ管理について解説します!今回は仮想記憶(仮想アドレス)についてです!
おさらい:メモリを複数のタスク(アプリ)が使っていると断片化する
コンピューターは↓のようにページという区画で管理します。
この管理の上でタスク(アプリ)が起動停止を繰り返していると、、、↓のような断片化が起こります。詳しくは前回記事のシミュレーターを動かして見てください!
このような断片化がおこるため、このままだと「タスク(アプリ)がメモリが断片化して、連続でないことを意識しないといけない」ことになります!これは大変に面倒なことになります。
このために、用いるのが「仮想記憶」という方式になります!
仮想記憶は「仮想的な連続なメモリ領域」をタスク(アプリ)に提供する
今回、↓のような場合のタスク(アプリ)Aのメモリを考えます。絵を見ればわかる通り、物理的にはまったく連続しておらず断片化しています。
ここで、タスク(アプリ)Aに提供する仮想的なメモリとして↓のような連続の領域を考えます。↓の数字のように左から番地が連続で振られいます。これを「仮想記憶」といい、番地を「仮想アドレス」といいます。
↑のような物理的な環境で、上記の仮想記憶アドレスをタスク(アプリ)Aに提供するためには、、、
↓のような対応関係をOSやハードウェアが変換すればよいのです!区画ごとで管理しているので、「各区画が、実際のメモリでどこから始まるのか」の関連付けを記憶しておけばよいのです!それが↓の赤矢印の対応関係です。
つまり、仮想記憶方式とは↑の赤矢印のような変換を、タスク(アプリ)のメモリアクセス時に行うことなんです!
「メモリの仮想記憶」をシミュレーターで確認してみよう!
それではシミュレーターで実際の仮想記憶と実メモリの対応関係を確認してみましょう!
- タスク(アプリ)Aの仮想記憶とメモリの配置を図示しています
- 再配置ボタンを押すと、多数のタスク(アプリ)がメモリに配置されます
- 各タスク(アプリ)は色とアルファベットで分けて表しています
- 仮想番地をスライドすると、仮想記憶とメモリ両方で、どの位置になるのか赤線で示します
- 赤線を動かして、タスクAの仮想記憶とメモリの対応関係を確認しましょう!
「メモリの仮想記憶」シミュレーターの要点解説
↓のようにメモリが断片化していた場合、仮想記憶との紐づけが重要になります。
番地20以前は連続ですが、
番地20を超えると、3番目の領域にジャンプします。仮想記憶上では連続ですが、メモリ上ではジャンプするんです!
このような仮想的な連続領域「仮想記憶」をつくることで、タスク(アプリ)Aは楽にメモリを使うことができるんです!
- 実際の物理メモリは区画ごとで違うタスク(アプリ)が入交り、断片化する
- 仮想記憶という仮想的な連続番地を持つ領域をつくり、区画ごとで実メモリに紐づけ、変換はOSやハードウェアが行う
- タスク(アプリ)Aは連続的な仮想領域だけ意識すればよいので、楽にメモリが使える
⇒「主記憶管理」カテゴリ記事一覧
その他関連カテゴリ