コンピュータシステム - 5.ソフトウェア - 1.オペレーティングシステム - 7.記憶管理

Last Update : January 02 2021 16:00:21

     

1 実記憶管理

a. 実記憶管理

実記憶管理とは、主記憶に配置するプログラムを、効率的に配置し、主記憶を有効に利用する機能
プログラムを実行するためには、補助記憶装置に記憶されているプログラムを主記憶装置に読み込む必要がある。これをロードという。
また、プログラムが終了したときには、プログラムが使用していたメモリを別のプログラムで利用できるように、使っていた領域を空き領域にする必要がある。これをメモリの開放と呼ぶ。
メモリが解放されないとメモリリークという状態が起こる。メモリリークが起こると使えるメモリの量が減ってしまう。
メモリリークを防ぐために、利用されていないのに解放されていないメモリ領域を解放する処理を行う必要がある。これをガページコレクションという。
実記憶管理手法には、区画方式、スワッピング方式、オーバーレイ方式がある。

b. 固定区画方式

主記憶をあらかじめ一定の大きさの区画に分け、その領域にプログラムを読み込む方法を固定区画方式という。
プログラムを読み込んだ後に区画上に残っている空き領域は使用されない。

単一区画方式
メモリを1つの区画とし、この区画にプログラムを読み込む。メモリ上には、1つのプログラムしか存在しない。

多重区画方式
メモリを一定の大きさの区画に分割し、区画ごとにプログラムをロードする方法。
この方法では、区画よりも大きなサイズのプログラムを読み込んで実行することはできない。


c. 可変区画方式

プログラムの大きさに応じて、メモリ上の区画の大きさも変えることでメモリを有効に利用する方式。
大きなプログラムも実行することができる。

フラグメンテーション

可変区画方式では、プログラムの必要とするサイズがそれぞれ異なるため、さまざまなプログラムを実行や終了などを繰り返すことで、メモリ上の空き領域がさまざまな領域に分かれて存在し、合計の空きメモリとしては十分な大きさがあるにもかかわらず、プログラムをロードすることができなくなってしまうことがある。
この状態を断片化(フラグメンテーション)と呼ぶ。
フラグメンテーションが起こるとプログラムをロードできなくなるため、現在のメモリ上のプログラムを再配置して、メモリの空き領域を集めて、1つの大きな空き領域とする作業が必要になる。この配置しなおすことをコンパクションという。


d. オーバーレイ方式

オーバーレイは、プログラムを同時には実行しない複数の部分に分割し(セグメント単位)、実行時に必要な部分のみメモリに読み込む方式。
メモリの容量がプログラムの大きさより小さい場合に有効な方式。



e. スワッピング方式

優先度の高いプログラムを読み込むときに、優先度の低いプログラムを補助記憶装置へ追い出して、空いた領域にロードする方式。追い出したプログラムが必要になった時には、追い出したプログラムを再度メモリ上にロードしなおして実行する。
補助記憶装置に退避しているプログラムをメモリ上に読み込みすることをスワップイン(ロールイン)、メモリ上から補助記憶装置へ退避することをスワップアウト(ロールアウト)という。




2 仮想記憶管理

f. 仮想記憶

仮想記憶とは、ハードディスクなどの補助記憶装置を利用して、主記憶の実際の容量より大きな記憶空間(仮想記憶)を作り出し、複数のプログラムを実行したり、大きなデータを使用できるようにする仕組み。
主記憶では、アドレスを実アドレスで管理するが、仮想記憶では、仮想アドレスとして管理する。そのため、プログラムを実行する場合、仮想記憶上の仮想アドレスを実アドレスに変換する必要がある。
このアドレス変換を行うハードウェアを「動的アドレス変換機構(DAT)」という。
仮想記憶を管理する方式にページング方式とセグメント方式がある。


g. ページング方式

ページング方式では、プログラムをページと呼ばれる固定長に区切り、仮想記憶と実記憶に効率的に配置する方法。

ページング方式では、仮想アドレスと実アドレスの対応(マッピング)は、ページテーブルというアドレス対応表によって管理されます。仮想アドレスは、ページ番号とページ内の相対アドレス(変位)から構成され、ページテーブルにはそのページが配置されている主記憶上のアドレスが記憶されています。また、ページフォールトビットが設けられ、主記憶上に存在しないページには0、存在するページには1といったフラグが設定されています。DATは各命令実行ごとにこのページテーブルをアクセスし、主記憶上に該当ページが存在するか否かを判断したり、仮想アドレスから実アドレスを算出します

  • プログラムを1~4Kの固定長の大きさの「ページ」に分割して「実アドレス空間(ページ枠)」と「仮想アドレス空間(ページ)」の双方に動的配置する。この方式では、ページ単位での実アドレス空間と仮想アドレス空間を対応付け(マッピング)する必要がある。この対応付け表をページテーブルという。実記憶には、「ワーキングセット(ページ数)」が設定されている。
  • プログラム実行時には、命令で使用している仮想アドレスを実アドレスに変換するため、動的アドレス変換機構(DAT)により変換する。
  • ページフォルト(実記憶上に必要なページが存在しない)が発生した場合はその必要なページを主記憶へ転送する(ページイン)。
  • 主記憶上で、最も使用頻度の低いページから順に仮想記憶に戻しページの入れ替え(ページアウト)をする。

スラッシング
ページイン・ページアウトが頻繁に起こるとディスクアクセスが増えて入出力待ち状態が続いてしまう。そのため、コンピュータ全体の処理速度(スループット)が低下してしまう。このことをスラッシングという。


h. セグメント方式

ページング方式とほぼ同様ですが、単純に一定の大きさに分けるのではなく(可変長)、「セグメント」という論理的なまとまりでプログラムを分割する。処理形態は同様である。

ブロックを「プログラムにとって意味のあるまとまり」とする場合、ブロックの長さは不定長  (つまり、ブロックの長さはブロックごとに異なる)となり、セグメントと呼ばれる。

但し、ページイン/ページアウトのことを「ロールイン/ロールアウト」と言う。


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

セグメント方式を改良した方法で、セグメントとして分割したものをさらにページに分割する方法。


j. ページ置換えアルゴリズム

仮想記憶では、不要なページと必要なページの出し入れの操作が必要になる。このことを「ページリプレースメント(ページ置き換え)」と言う。これには以下の4種類がある。

  1. FIFO方式 (First in First Out)
     一番先に入ったページを一番先にページアウトする。
  2. LIFO方式 (Last in First Out)
     一番最後に入ったページを一番先にページアウトする。
  3. LRU方式 (Least Recently Used)
     最も長い間使用されなかったページをページアウトする方法。
  4. LFU方式 (Least Frequently Used)
     参照頻度が最も少ないページをページアウトする方法。

  [ 例題 ] 
  1. 平成29年度春期 問15  ページング方式
  2. 平成28年度秋期 問17  仮想記憶
  3. 平成28年度秋期 問19  LRU
  4. 平成27年度春期 問18  仮想記憶
  5. 平成27年度春期 問20  仮想記憶
  6. 平成26年度春期 問16  ページング方式
  7. 平成26年度秋期 問16  キャッシュメモリ 置き換え方式
  8. 平成25年度春期 問19  スラッシング
  9. 平成25年度春期 問20  仮想記憶 ページ置換えアルゴリズム
  10. 平成24年度春期 問21  仮想記憶


     

www.it-shikaku.jp