スポンサーリンク

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

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

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

実記憶管理

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

固定区画方式

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

特徴

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

種類

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

メリット・デメリット

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

可変区画方式

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

メリット

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

デメリット

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

スワッピング

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

スワッピングの仕組み

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

メモリ
コンピュータがデータを一時的に保存する半導体記憶装置(主記憶装置/RAM)で、CPUの処理作業領域(机の広さ)を指します。

ページングとの違い

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

影響

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

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

ディスクI/O
HDDやSSDなどの記憶装置に対するデータの読み書き操作です。

オーバレイ方式

オーバーレイ方式とは、メモリ容量が不足している時代に、大きなプログラムを小さな部品(セグメント)に分割し、処理に必要な部分だけをその都度主記憶(RAM)に読み込んで実行する技術です。

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

仮想記憶管理

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

ページング方式

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

仕組み

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

「ページフレーム」は物理メモリ(RAM、ハード側)の分割単位であり、「ページ」は仮想メモリ(ソフト側)の分割単位です。

物理メモリ(RAM)はPCに搭載された高速な主記憶装置で、CPUが直接操作します。
仮想メモリはHDD/SSDの一部をRAMの補助として使う機能で、物理メモリ不足時に速度は遅いものの、安定して動作させるための「安全装置」です。
※物理メモリ=メインメモリ

メリット

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

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

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

役割と目的

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

主なアルゴリズムの種類

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

仕組みのイメージ

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

スラッシング

スラッシングとは、コンピュータの物理メモリが不足し、OSがメモリとストレージ(ディスク)間でデータの入れ替え(ページング)を頻繁に繰り返すことで、処理速度が著しく低下する現象です。CPUが本来の処理ではなく、データの移動に忙殺されるため、システム全体が応答しなくなる状態を指します。 

概要

  • 主な原因: 実行中のプロセスが必要とする物理メモリ量(RAM)が、実際に搭載されている容量を超えていること。
  • 現象: ページインとページアウトの連続発生。
  • 影響: パソコンやサーバーの動作が極端に重くなる、フリーズする、処理効率が激減する。 

対処法

  • 物理メモリの増設: メモリ不足を解消する最も根本的な解決策。
  • 実行プログラムの削減: 不要なアプリケーションを終了させ、メモリ負荷を軽減する。
  • 仮想メモリの設定調整: OSの仮想記憶の設定(ページファイル)を最適化する。 

よく出る問題

■① 仮想記憶(最重要)

●頻出ポイント

  • 仮想アドレス ↔ 物理アドレス変換
  • ページング方式
  • ページフォールト

●典型問題

👉「ページサイズが○○バイトのとき、ページ番号とオフセットはいくつか?」

解き方

  • ページサイズ = 2ⁿ → 下位nビットがオフセット

オフセット
ページ内の特定のデータ位置を示す、ページの先頭からの相対的な番地です。

下位ビット(LSB): 右端。最も小さい位
上位ビット(MSB): 左端。最も大きい位 


■② ページ置換アルゴリズム

●頻出アルゴリズム

  • FIFO
  • LRU(最重要)
  • LFU

●典型問題

👉「参照列:1,2,3,1,4,5… のとき、LRUでページフォールトは何回?」

コツ

  • LRUは「一番最近使ってないやつを追い出す」
  • 表を書いて地道にやる(ほぼ確実に出る)

■③ スラッシング

●頻出ポイント

  • 原因:多重度が高すぎる
  • 対策:ワーキングセット

ワーキングセット
実行中のプログラム(プロセス)が、ある時点ですぐに使えるように物理メモリ(RAM)上に常駐させているメモリ領域の集合です。

●典型問題

👉「スラッシングが発生する原因はどれか?」

CPU使用率低下+ページフォールト増加

特徴は、メモリ不足によるページフォールト急増で、CPUはスワップ処理に忙殺される一方、アプリケーション処理は進まず、CPU使用率が極端に低下します。


■④ メモリ管理方式

●種類

  • 固定区画方式
  • 可変区画方式
  • ページング
  • セグメンテーション

●典型問題

👉「外部断片化が発生するのはどれか?」

可変区画方式

👉「内部断片化が発生するのは?」

固定区画・ページング


■⑤ アドレス変換(計算問題)

ここは計算問題として頻出

例👇
「ページサイズ4KB、仮想アドレス16ビットのとき」

👉オフセット
→ 4KB = 2¹² → 下位12ビット

👉ページ番号
→ 残り4ビット


■⑥ キャッシュメモリ

●頻出ポイント

  • ヒット率
  • 平均アクセス時間

●典型問題

👉「ヒット率90%、キャッシュ10ns、主記憶100nsのとき平均時間は?」

計算👇
0.9×10 + 0.1×100 = 19ns


■⑦ TLB(変換ルックアサイドバッファ)

●頻出ポイント

  • アドレス変換高速化
  • ヒット率絡みの計算

👉キャッシュとほぼ同じ考え方でOK

変換ルックアサイドバッファ(TLB: Translation Lookaside Buffer)
CPU内のメモリ管理ユニット(MMU)に搭載された高速なキャッシュメモリです。

メモリ管理ユニット(MMU: Memory Management Unit)
CPUと物理メモリ(RAM)の間に配置され、仮想アドレスを物理アドレスに変換するハードウェアです。


■⑧ フラグメント(断片化)

●頻出

  • 内部断片化
  • 外部断片化

👉応用では「どの方式で発生するか」問題が多い


■試験での“勝ちパターン”

正直ここだけやれば点取れる👇

  1. LRUの手計算を完璧にする
  2. ページサイズ→ビット分解を即答
  3. キャッシュ平均時間の計算
  4. 断片化の区別を暗記

■よくある引っかけ

  • FIFOとLRUを混同
  • ページサイズ=オフセットのビット数を間違える
  • スラッシング=CPU高負荷と勘違い(逆)

コメント