スポンサーリンク

【応用情報技術者試験】ソフトウェアの基礎を固めよう!      ~第3章~記憶管理

近年のコンピュータは高性能なCPU、大容量のメモリ、高速通信が行えるネットワークカードなど、様々な高度な装置によって構成されています。これらの装置の性能を十分に発揮させるためには、しっかりとした管理が必要です。基本ソフトウェア(オペレーティングシステム,OS)は、コンピュータに備わるさなざまな装置を管理するソフトウェアです。

画像参照:https://pc-yougo.com/software/

実記憶管理

実記憶管理とは、コンピュータがプログラムを実行する際に、限られた主記憶装置(メインメモリ)にプログラムを効率よく配置(ロード)し、不要になったら解放して再利用する仕組みや機能のことです。複数のプログラムを同時に動かすマルチプログラミング環境で、メモリ空間を無駄なく使うために重要な役割を担い、固定区画方式可変区画方式スワッピングオーバーレイ方式など様々な手法があります。 

固定区画方式

固定区画方式(こていくかくほうしき)とは、コンピュータの主記憶装置(メモリ)をあらかじめ決まった大きさの区画(パーティション)に分割し、そこにプログラムを読み込んで実行する方式です。単純で高速ですが、プログラムサイズと区画サイズが合わない場合にメモリの無駄(外部断片化)が発生しやすいという特徴があり、単一区画方式と多重区画方式に分かれます。 

特徴

  • 固定長区画: メモリを一定サイズの区画に分割します。
  • 単純な管理: 仕組みが単純なため、メモリの確保・解放処理が速いです。
  • メモリの無駄: 区画より小さいプログラムだと余りが発生し、その領域は使えません(外部断片化)。
  • プログラムサイズの制限: 区画サイズより大きなプログラムはロードできません(複数の区画にまたがる場合はあり)。 

種類

  • 単一区画方式: メモリ全体を一つの区画として扱う方式で、多重プログラミングには対応できません。
  • 多重区画方式: メモリを複数(同じサイズ)の区画に分割し、複数のプログラムを同時にロードします。 

メリット・デメリット

  • メリット: 管理が簡単で、処理速度が速い。
  • デメリット: メモリの利用効率が悪く(無駄が発生)、断片化しやすい。 

可変区画方式

可変区画方式とは、コンピュータのメモリ(主記憶)管理方法の一つで、プログラムを実行する際に、そのプログラムが必要とする分だけの可変サイズの領域を割り当てる方式です。メモリを固定長で区切るのではなく、実行されるプログラムのサイズに合わせて区画サイズを変えるため、メモリの無駄がなく利用効率が高いのが特徴ですが、処理の複雑化や「フラグメンテーション(断片化)」という問題が発生する可能性があります。 

メリット

  • メモリ利用効率が高い: プログラムのサイズに合わせて領域を確保するため、無駄な空き領域(余剰スペース)が発生しにくい。 

デメリット

  • 処理が複雑: 実行のたびにサイズが変わるため、メモリの管理(どこに空きがあるか、どう割り当てるかなど)が複雑になり、処理時間が不定になることがある。
  • フラグメンテーション(断片化): プログラムのロードと解放を繰り返すうちに、メモリ上に小さな未使用領域がいくつも発生し、大きな領域が確保しにくくなる問題が生じる。 

スワッピング

スワッピングとは、メモリ(RAM)が不足した際に、現在使われていないプロセス全体やメモリの一部(ページ)を一時的にストレージ(HDD/SSD)の「スワップ領域」へ退避(スワップアウト)させ、メモリに空き領域を作り、他のプログラムを動かす機能です必要になったらストレージからメモリへ戻す(スワップイン)ことで、物理メモリ以上の容量があるかのように見せかけ、システムが停止しないようにする仮想記憶の重要な仕組みですが、ディスクアクセスはメモリより遅いため、頻発するとシステムが遅くなります。 

スワッピングの仕組み

  1. メモリ不足の発生: 複数のプログラムを同時に実行したり、メモリを大量に使うプログラムが動いたりすると、物理メモリが足りなくなります。
  2. スワップアウト (Swap Out): OSは、使われていないメモリ領域(プロセス全体やページ単位)を選んで、ディスク上のスワップ領域に書き出します(退避)。
  3. スワップイン (Swap In): 退避させたメモリ領域が必要になったとき、ディスクからメモリへ読み込み直します。
  4. 目的: 物理メモリの容量を超えてプログラムを実行可能にし、システムの安定性を保つことです。 

ページングとの違い

  • スワッピング: プロセス(プログラム)全体を単位として扱うことが多い(あるいは大きな塊)です。メモリが不足したときだけ発生します。
  • ページング: ページ(数KB程度の小さな単位)ごとにメモリを管理する、より細かな仮想記憶の技術です。スワップと組み合わせて使われることが多いです。 

影響

  • メリット: メモリが足りなくてもシステムが動作し続けられる。
  • デメリット: ディスクへの読み書きはメモリよりはるかに遅いため、スワップが頻繁に発生するとディスクI/Oが増え、システム全体の処理速度が著しく低下する(メモリ不足のサイン)。 

つまり、スワッピングはメモリを拡張する技術ですが、根本的な解決にはならないため、常にスワップ領域を使っている場合はメモリ増設の検討が必要です。 

オーバレイ方式

オーバーレイ方式とは、メモリ容量が不足している時代に、大きなプログラムを小さな部品(セグメント)に分割し、処理に必要な部分だけをその都度主記憶(RAM)に読み込んで実行する技術です。現代では仮想記憶の普及で使われなくなりましたが、「画面に情報を重ねて表示する」という意味でも使われ、ゲームのオーバーレイ表示やARアプリなどが該当します。 

  • 目的: メモリに乗り切らない巨大なプログラムを、限られたメモリで実行可能にする。
  • 仕組み: プログラムを複数の「セグメント(ブロック)」に分割し、必要なセグメントだけを主記憶にロードする。不要になったセグメントがあった場所(領域)に、次の必要なセグメントを上書きしてロードする(オーバーレイ)。
  • 特徴: プログラマが手動で管理する必要があり、仮想記憶のように透過的ではない。
  • 現代での位置づけ: 仮想記憶が一般的になったため、現在はほとんど使われない技術。 

補足

「オーバーレイ方式」という言葉は、「メモリ節約のための古典的なプログラム分割技術」と、「現代的なUI/UXのための情報重ね合わせ技術」の2つの意味で使われるため、文脈によってどちらを指すか注意が必要です。特に後者は、ゲーミング、AR、映像処理などで広く使われています。 

仮想記憶管理

仮想記憶管理とは、ハードディスクなどの補助記憶装置の一部を「仮想的な主記憶装置(メモリ)」として使い、実際のメモリ容量よりも大きなメモリ空間を提供して、大容量プログラムの実行や複数アプリの同時動作を可能にするOS(オペレーティングシステム)の仕組みです。これにより、物理メモリの制約を超えて、プログラムはあたかも十分なメモリがあるかのように動作でき、「ページング」などの技術で仮想アドレスと物理アドレスを対応付け、データを主記憶と補助記憶間で自動的に入れ替えて管理します。 

ページング方式

ページング方式とは、コンピュータのメモリ(主記憶装置)と補助記憶装置(ハードディスクなど)の間でデータをやり取りする際に、プログラムやデータを「ページ」と呼ばれる固定サイズの小さな単位に分割して管理・転送する仮想記憶管理方式です。これにより、物理メモリ容量以上の大きなプログラムを実行でき、メモリの断片化(フラグメンテーション)を抑制し、効率的なメモリ利用を可能にします。 

仕組み

  • 分割: 仮想メモリ空間と物理メモリ空間を、同じサイズの「ページ」と「ページフレーム」という単位に分割します。
  • マッピング: ページテーブル(マッピングテーブル)を使って、仮想アドレスと物理アドレス(実アドレス)を対応付けます。
  • ページイン・ページアウト: 実行に必要なページだけを補助記憶装置から主記憶装置に読み込む(ページイン)し、必要に応じて主記憶から補助記憶へ退避させる(ページアウト)処理を行います。
  • ページフォルト: プログラムが必要とするページが主記憶にない場合、ページフォルトという割り込みが発生し、ページイン処理が実行されます。 

メリット

  • メモリ効率の向上: 連続した領域を確保する必要がなく、メモリを無駄なく利用できる。
  • 大容量メモリの実現: メインメモリの容量を超えた大きなプログラムも実行可能。 

関連用語

  • ページ: プログラムやデータを分割した固定サイズの単位(例: 4KB)。
  • ページフレーム: 主記憶装置側で、ページを格納する固定サイズの領域。
  • ページテーブル: 仮想アドレスと物理アドレスを対応付ける変換表。
  • デマンドページング: プログラムが要求したときに初めてページを主記憶に読み込む方式。

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

ページ置き換えアルゴリズムとは、仮想記憶システムで、物理メモリ(RAM)がいっぱいになった際、どのデータ(ページ)をメモリから追い出して(ページアウトして)、新しいデータを効率的に読み込むかを決定する手法の総称です。メモリ使用の効率を高め、プログラムの実行速度を向上させる目的で使われ、FIFO、LRU、LFU、LIFOなどの種類があります。 

役割と目的

  • メモリ不足の解消: プログラムが必要とするデータが物理メモリに収まらない場合に、空き領域を作る。
  • パフォーマンス向上: 最近使われたページは再利用される可能性が高いという予測に基づき、将来使われなさそうなページを追い出すことで、メモリのヒット率(再利用率)を高める。 

主なアルゴリズムの種類

アルゴリズム名説明
FIFO (First-In, First-Out)最も単純で、最初にメモリに入れた(ページインした)ページを最初に追い出す方式(先入れ先出し法)です。
LRU (Least Recently Used)最も長い間参照されていない(最後に使われてから最も時間が経過した)ページを追い出す方式です。
LFU (Least Frequently Used)これまでの使用頻度が最も低いページを追い出す方式です。
LIFO (Last-In, First-Out)最後にメモリに入れたページを追い出す方式(後入れ先出し法)です。 

仕組みのイメージ

  1. ページフォルト発生: プログラムがメモリにないページを参照しようとする(ページフォルト)。
  2. メモリ確認: 物理メモリに空きがあるか確認する。
  3. 置き換え判定: 空きがなければ、アルゴリズムに従って追い出すページ(置き換え候補)を決定する。
  4. ページアウトとページイン: 決定したページを補助記憶装置に退避させ(ページアウト)、要求されたページを物理メモリに読み込む(ページイン)。 

スラッシング

仮想メモリの容量が不足し、ディスクとメモリ間でデータの入れ替え(ページイン/ページアウト)が頻繁に発生し、システム全体の処理速度が著しく低下する状態を指します。

  • 原因: 主記憶装置(物理メモリ)の容量が足りないのに、大容量のメモリを要求するアプリケーションを同時に多数実行した場合に発生します。
  • 仕組み: 物理メモリが不足すると、使用されていないメモリ内容をストレージ(仮想記憶)に退避させ(スワップアウト)、必要なデータを読み込む(スワップイン)処理が繰り返されます。スラッシング状態では、この入れ替え処理にCPUの多くの時間が費やされ、本来のプログラム実行が滞ります。
  • 対策: 物理メモリの増設や、不要なアプリケーションの終了などが基本的な対策となります。 

コメント