1 実記憶管理
実記憶管理とは、主記憶に配置するプログラムを、効率的に配置し、主記憶を有効に利用する機能
プログラムを実行するためには、補助記憶装置に記憶されているプログラムを主記憶装置に読み込む必要がある。これをロードという。
また、プログラムが終了したときには、プログラムが使用していたメモリを別のプログラムで利用できるように、使っていた領域を空き領域にする必要がある。これをメモリの開放と呼ぶ。
メモリが解放されないとメモリリークという状態が起こる。メモリリークが起こると使えるメモリの量が減ってしまう。
メモリリークを防ぐために、利用されていないのに解放されていないメモリ領域を解放する処理を行う必要がある。これをガページコレクションという。
実記憶管理手法には、区画方式、スワッピング方式、オーバーレイ方式がある。
主記憶をあらかじめ一定の大きさの区画に分け、その領域にプログラムを読み込む方法を固定区画方式という。
プログラムを読み込んだ後に区画上に残っている空き領域は使用されない。
【 単一区画方式 】
メモリを1つの区画とし、この区画にプログラムを読み込む。メモリ上には、1つのプログラムしか存在しない。
【 多重区画方式 】
メモリを一定の大きさの区画に分割し、区画ごとにプログラムをロードする方法。
この方法では、区画よりも大きなサイズのプログラムを読み込んで実行することはできない。
プログラムの大きさに応じて、メモリ上の区画の大きさも変えることでメモリを有効に利用する方式。
大きなプログラムも実行することができる。
【 フラグメンテーション 】
可変区画方式では、プログラムの必要とするサイズがそれぞれ異なるため、さまざまなプログラムを実行や終了などを繰り返すことで、メモリ上の空き領域がさまざまな領域に分かれて存在し、合計の空きメモリとしては十分な大きさがあるにもかかわらず、プログラムをロードすることができなくなってしまうことがある。
この状態を断片化(フラグメンテーション)と呼ぶ。
フラグメンテーションが起こるとプログラムをロードできなくなるため、現在のメモリ上のプログラムを再配置して、メモリの空き領域を集めて、1つの大きな空き領域とする作業が必要になる。この配置しなおすことをコンパクションという。
オーバーレイは、プログラムを同時には実行しない複数の部分に分割し(セグメント単位)、実行時に必要な部分のみメモリに読み込む方式。
メモリの容量がプログラムの大きさより小さい場合に有効な方式。
優先度の高いプログラムを読み込むときに、優先度の低いプログラムを補助記憶装置へ追い出して、空いた領域にロードする方式。追い出したプログラムが必要になった時には、追い出したプログラムを再度メモリ上にロードしなおして実行する。
補助記憶装置に退避しているプログラムをメモリ上に読み込みすることをスワップイン(ロールイン)、メモリ上から補助記憶装置へ退避することをスワップアウト(ロールアウト)という。
2 仮想記憶管理
仮想記憶とは、ハードディスクなどの補助記憶装置を利用して、主記憶の実際の容量より大きな記憶空間(仮想記憶)を作り出し、複数のプログラムを実行したり、大きなデータを使用できるようにする仕組み。
主記憶では、アドレスを実アドレスで管理するが、仮想記憶では、仮想アドレスとして管理する。そのため、プログラムを実行する場合、仮想記憶上の仮想アドレスを実アドレスに変換する必要がある。
このアドレス変換を行うハードウェアを「動的アドレス変換機構(DAT)」という。
仮想記憶を管理する方式にページング方式とセグメント方式がある。
ページング方式では、プログラムをページと呼ばれる固定長に区切り、仮想記憶と実記憶に効率的に配置する方法。
ページング方式では、仮想アドレスと実アドレスの対応(マッピング)は、ページテーブルというアドレス対応表によって管理されます。仮想アドレスは、ページ番号とページ内の相対アドレス(変位)から構成され、ページテーブルにはそのページが配置されている主記憶上のアドレスが記憶されています。また、ページフォールトビットが設けられ、主記憶上に存在しないページには0、存在するページには1といったフラグが設定されています。DATは各命令実行ごとにこのページテーブルをアクセスし、主記憶上に該当ページが存在するか否かを判断したり、仮想アドレスから実アドレスを算出します
【 スラッシング 】
ページイン・ページアウトが頻繁に起こるとディスクアクセスが増えて入出力待ち状態が続いてしまう。そのため、コンピュータ全体の処理速度(スループット)が低下してしまう。このことをスラッシングという。
ページング方式とほぼ同様ですが、単純に一定の大きさに分けるのではなく(可変長)、「セグメント」という論理的なまとまりでプログラムを分割する。処理形態は同様である。
ブロックを「プログラムにとって意味のあるまとまり」とする場合、ブロックの長さは不定長 (つまり、ブロックの長さはブロックごとに異なる)となり、セグメントと呼ばれる。
但し、ページイン/ページアウトのことを「ロールイン/ロールアウト」と言う。
セグメント方式を改良した方法で、セグメントとして分割したものをさらにページに分割する方法。
仮想記憶では、不要なページと必要なページの出し入れの操作が必要になる。このことを「ページリプレースメント(ページ置き換え)」と言う。これには以下の4種類がある。
www.it-shikaku.jp