LoginSignup
0
0

基本情報技術者試験 ソフトウェアとマルチメディア その3 記憶管理

Last updated at Posted at 2023-09-28

はじめに

こんにちは!今回は記憶管理について学習したことを記述していきます。

1.記憶管理

以前の投稿でも記載したが、プログラム記憶方式はプログラムを主記憶に読み込んでおき、CPUが順次読み出し実行する方式。現在のコンピュータのほとんどはこの方式で、プログラムは磁気ディスクなどの補助記憶に保存されているが、実行時には主記憶上に配置し、実行が終われば主記憶上から消去される(主記憶の開放)。

2.実記憶管理

主記憶そのものを効率よく管理するために、次のような方式がある。

区画方式

主記憶をいくつかの区画に分割して、プログラムに割り当てる方式。

  • 固定区画方式
    主記憶をあらかじめ決まった大きさの区画に分割する。主記憶の使用効率は悪いが、処理時間は一定で速い。

  • 可変区画方式
    主記憶をプログラムが必要とする大きさの区画に割り当てる。主記憶の使用効率は良いが、処理時間は不定で遅い。

ここで、OSが主記憶の獲得と解放を繰り返していくと、細切れの未使用領域が発生するフラグメンテーションが発生する。これによって合計では十分な未使用領域があるにも関わらず、必要とする主記憶の領域を獲得できないことがある。
その解決のために、細切れの未使用領域を連続した一つの領域にまとめ、再び利用可能にする。これをメモリコンパクションという。

フラグメンテーション.png

スワッピング方式

主記憶の容量が不足し、複数のプログラムを主記憶上に配置できない場合には、実行中のプログラムのうち優先度の低いプログラムを一時中断して磁気ディスクに退避(スワップアウト)して、優先度の低いプログラムを主記憶に配置する(スワップイン)方式。

オーバーレイ方式

あらかじめプログラムを同時に実行しない排他的ないくつかの単位(セグメント)に分割しておき、実行時に必要な部分だけを主記憶に配置して実行する方式。

オーバーレイ.png

例えば、上記の図のセグメントAは共通セグメントで、セグメントBとCはセグメントAから呼び出される排他的セグメントだとする。
このプログラム全体を主記憶上に配置すると120kバイト必要だが、セグメントBとCを必要に応じて配置すると80kバイトで済ませることができる。
つまり、大きなプログラムでも、小容量の主記憶上で実行させることのできる技術なのである。

メモリリーク

使用可能な主記憶の容量が減少すること。プログラムやOSのバグなどにより発生する。
解消するためには不要になった領域を解放するガベージコレクションを行うか、再起動する必要がある。

3.仮想記憶方式

プログラムを仮想記憶空間に格納しておき、実行時に必要なプログラムやデータを動的に実記憶に配置して実行する方式。主記憶の容量よりも大きなメモリを必要とするプログラムも実行できるようになる。
現在ではほとんどのOSが使用している。

仮想記憶.png

仮想空間に格納されたプログラムは、実行のために仮想記憶上の番地(仮想アドレス)を主記憶の番地(実アドレス)に変換する必要がある。
この変換を動的アドレス変換機構DAT:Dynamic Address Transfer)と呼ばれるハードウェアで行う。

ページング方式

仮想記憶管理の一つ。主記憶とプログラム固定長(ページ)に分割して、このページ単位で管理する方式。
実行するページが主記憶に存在しない時は、ページフォルトという割込みが発生し、不要なページを実記憶から補助記憶に追い出し(ページアウト)、必要なページを補助記憶から主記憶に配置する(ページイン)。

なお、ページフォルトが多発するとスラッシングと呼ばれる処理効率が急激に低下する現象が発生する。
この現象を抑えるためには、主記憶の増設や、ジョブの多重度を下げて主記憶の使用を抑制するなどの対策が必要になる。

ページング.png

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

ページング方式で、不要なページを決定する主な方法には、次のようなものがある。

  • FIFO方式(First-in First-Out)
    最も古くから主記憶に存在するページを置き換える。

  • LRU方式(Least Recently Used)
    最後に参照されてから最も経過時間が長いページを置き換える。

  • LFU方式(Least Frequently Used)
    参照回数が最も少ないページを置き換える。

《FIFO方式の例》

お店に並ぶ待ち行列のように、先にキューに格納されたデータから順番に取り出される。

以下の図例では、「データ1」「データ2」「データ3」「データ4」「データ5」の順番にキューに格納する。そして、キューから取り出す時は先に格納した「データ1」から順番に取り出される。

キューに格納することを「エンキュー(enqueue)」、キューから取り出すことを「デキュー (dequeue)」と呼び、キューを用いて要素の管理を行うことを「キューイング(queuing)」と呼ぶ。
FIFO.png

引用:https://medium-company.com/fifo/

今回はここまで、次回はファイル管理について学習します。

エンジニアファーストの会社 株式会社CRE-CO Y.K

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0