記憶管理

この記事での学習内容 基本情報 応用情報

  • 記憶領域の管理方式である固定区画方式,可変区画方式など,実アドレス空間の割当て方式の特徴,フラグメンテーションとその対策を理解する。また,主記憶装置を効率良く使うためのスワッピングとオーバレイを理解する。
  • 実記憶と仮想記憶の関係,仮想記憶の有効性,仮想記憶方式の種類と特徴,動的アドレス変換の仕組みを理解する。また,ページング方式の代表的なページ置換えアルゴリズムについて,ページ置換え手順を理解する。

用語例:実アドレス方式,単一連続割当て方式,記憶域管理アルゴリズム(ファーストフィット,ベストフィット,ワーストフィット),メモリコンパクション,ロールイン,ロールアウト,スワップイン,スワップアウト,セグメント方式,コンパクション、ベースアドレス方式,セグメント方式,セグメントページング方式,単一仮想空間方式, 多重仮想空間方式, スラッシング, DAT ( Dynamic Address Translator:動的アドレス変換),TLB(Translation Lookaside Buffer),ページフォールト,ページイン,ページアウト,デマンドページング,ページリプレースメント,LRU,FIFO,ワーキングセット

実記憶管理

実記憶管理とは、それぞれのプログラムとそのためのデータが使用する主記憶装置の領域の確保および解放の管理です。基本的な領域の区画方法の管理、限られた主記憶装置領域の有効利用、および領域の制約の解消などを行います。

固定区画方式

固定区画方式とは、主記憶管理の区画方式の一種であり、主記憶を固定長の区画として管理する方式です。管理が簡単ですが、それぞれのプログラムが使用する領域は可変なので、使用されない部分が無駄になります。固定区画方式には区画が一つだけの単一区画方式と多重区画方式とがあります。

単一区画方式は、区画が一つだけであり、最も簡単な方式です。

多重区画方式は、複数の区画を設けて、それぞれのプログラムに割り当てます。単一区画方式より少し管理が複雑になりますが、複数のプログラムを処理できます。

いずれの方法でも、プログラムが使用しない部分が無駄になります。

可変区画方式

可変区画方式とは、主記憶管理の区画方式の一種であり、それぞれのプログラムに必要なだけの可変長の領域を割り当てるため、主記憶装置の利用効率が高まります。

各プログラムの実行が終了すると、使用していた領域は開放されます。次々に実行されるプログラムの使用領域の大きさはそれぞれ異なるので、空き領域が細分化されて利用しにくくなるという、フラグメンテーションが発生します。

フラグメンテーション対策

主記憶装置や仮想記憶用の外部記憶装置の空き領域は、次々とプログラムを実行して、領域の確保と開放を繰り返しているうちに、領域が細分化されて再利用しにくくなるという、フラグメンテーションが発生します。

使用中の領域を移動させて隣り合わせに配置し直して、細分化されていた空き領域を隣り合わせにまとめて再利用しやすく処理をデフラグメンテーション又はコンパクションといいます。

ガベージコレクション

ガベージコレクションとは、「ゴミ集め」という意味の言葉であり、プログラムが使用しなくなった主記憶領域を集めて、再利用に備えることです。主記憶領域の再利用に備える処理には次のような種類があります。

  • プログラムの実行終了時に、一括して領域を解放する。解放のためのオーバーヘッドが少なくて済みますが、きめ細やかな再利用はできません。
  • プログラムの実行中に、関数実行などによって、きめ細かく領域の確保と解放を行う。領域の有効利用ができますが、開放のためのオーバーヘッドが多くなります。

ガベージコレクションは、専用のプログラムが使用しなくなった領域を開放するので、領域の有効利用とオーバーヘッドのバランスをとることができます。

オーバーレイ方式(セグメント方式)

オーバーレイ方式は、一つのプログラムを主記憶装置の区画に収まる大きさのセグメントに分割しておき、実行するセグメントをその都度外部記憶装置からロードする方式です。オペレーティングシステムの主記憶管理よりも、プログラム側とプログラム管理が主記憶装置の使用方法を考慮する方式です。

仮想記憶

仮想記憶とは、領域の物理的なアドレスとは別に仮想的なアドレスを設けて管理される記憶領域です。飛び飛びの領域を一連の領域として利用したりします。

フラグメンテーション対策として、プログラムやデータを移動したり、空き領域をまとめたりする必要が無いことと、主記憶装置の全体の大きさや区画の大きさを気にせずに、大きな領域を使用できることが仮想記憶のメリットです。

処理しなければならないプログラムやデータが主記憶装置の空き領域に格納しきれない時、一旦ハードディスク上の仮想記憶領域へ一部を書き出し、必要に応じて主記憶装置と仮想記憶の間でプログラムやデータを入れ替えながら処理を進める方法で、この入れ替えをスワッピングといいます。

補助記憶装置は主記憶装置よりも低速なので、スワッピングが多発すると処理に時間がかかるのが仮想記憶のデメリットです。

スワップイン(ロールイン)

仮想記憶のスワッピングにおいて、プログラムやデータを補助記憶装置から主記憶装置へ読み込むことをスワップイン又はロールインといいます。

スワップアウト(ロールアウト)

仮想記憶のスワッピングにおいて、プログラムやデータを主記憶装置から補助記憶装置へ書き出すことをスワップアウト又はロールアウトといいます。

スワッピングの欠点

仮想記憶と、主記憶装置の容量不足で実行できなかったプログラムを動かせるようになります。その反面、転送速度の遅いハードディスクなどの補助記憶装置に繰り返しアクセスしなければならないという欠点があります。そのため、スワッピングが多発すると、全体の処理速度が低下してしまいます。

スラッシング

スラッシングとは、仮想記憶にロードされたプログラムの数が多すぎたり、巨大なプログラムがロードされたりして、主記憶装置と補助記憶装置との間のプログラムやデータのやり取りが頻繁になり、補助記憶装置が激しく作動していながら、プログラムの実行がなかなか進まないことです。

スラッシングへの対策としては、プログラムの数や大きさを制限したり、主記憶装置を容量の大きいものに取り替えるといったことがあります。

仮想記憶管理

仮想記憶管理とは、仮想記憶を取り扱う管理のことです。ハードウェア側の仮想記憶管理の機構が処理する場合があります。また、オペレーティングシステムの記憶管理プログラムが介在する方式もあります。

仮想記憶管理を行うために必須なのが、動的アドレス変換機構(DAT:Dynamic Address Translator)と呼ばれるものです。

動的アドレス変換の代表的な方式としては、ページングという方式があります。(他の方式として、セグメント方式、セグメントページング方式など)

ページング方式

ページング方式は、主記憶とプログラムを固定長であるページに分割し、効率よく記憶管理する方法です。「大きなプログラムの実行でも、ごく短い時間を見れば、必要なのはほとんど一部のみである」という性質を利用したもので、この場合のプログラムの実行は下記の手順で行われます。

  1. 主記憶とプログラムをページ単位に分割
  2. 実行に必要なページを補助記憶から主記憶にロード(ページイン)
  3. 必要なページが主記憶上にない場合、ページ不在の割り込み(=ページフォルト)が発生します。この時、補助記憶から主記憶城の空きスペースにページインします。
  4. どんどんロードしていくと、主記憶に空きスペースがなくなります。
  5. ページ置き換えアルゴリズムに従い、置き換え対象のページを決定します。
  6. 実行に必要のないページを補助記憶に退避します(ページアウト)
  7. 実行に必要なページを主記憶上にロードします(ページイン)

ページイン、ページアウトの操作を総じて、ページングと呼んでいます。また、ページングが多発する現象をスラッシングといいます。

ページフォールト

ページフォールトとは、必要な仮想記憶のページが主記憶装置上にない状態です。ページフォールトは、割込みの形で仮想記憶管理の機構に知らされます。

ページ置き換え

ページ置き換えとは、ページング方式の記憶管理において、主記憶装置の空き領域が不足した時、ページの置き換えをする処理です。ページ置き換えアルゴリズムが使われます。

ページ置き換えアルゴリズム(FIFO,LRU)

ページ置き換えアルゴリズムとは、ページング方式の記憶管理において、主記憶装置の空き領域が不足した時、ページを置換する処理のアルゴリズムです。

FIFOやLRU、LFUというページ置き換えアルゴリズムがあります。

FIFO(First In First Out)
最初に読み込まれたページを最初に補助記憶装置へ書き出すというアルゴリズムです。処理は簡単ですが、頻繁に使われているページが書き出されると性能が低下します。
LRU(Least Recently Used)
最も長く使われていないページを補助記憶装置へ書き出すというアルゴリズムです。使用履歴が必要なのでアルゴリズムは少し複雑ですが、頻繁に使われているページは主記憶装置にある確率が高いので、性能が良くなります。
LFU(Least Frequency Used)
最も使用頻度の低いページを補助記憶装置へ書き出すというアルゴリズムです。使用履歴が必要なのでアルゴリズムは少し複雑ですが、頻繁に使われているページは主記憶装置にある確率が高いので、性能が良くなります。

セグメント方式

セグメント方式は、プログラムやデータをセグメントという可変の大きさの区分で記憶管理をする方式です。セグメントが仮想記憶やメモリ保護の単位になります。各セグメントの先頭アドレスと大きさは、セグメントテーブルで管理されます。

一定の大きさのページという区分を用いるページング方式より、手間はかかりますが、領域のムダは少なくなります。

セグメントページング方式

セグメントページング方式は、ページング方式とセグメント方式を組み合わせた方式です。セグメントテーブルの各セグメントにページテーブルをリンクします。

ページング方式の簡潔さを活かしつつ、セグメントの種類によってプログラムのセグメントを書き換え禁止にしたり、リードオンリーのセグメントを共有したりすることができます。