基本情報技術者試験の勉強をしていると、主記憶や補助記憶、仮想記憶などに関わるややこしい現象がたくさん出てきます。
今回は、その中でも試験に頻出である、「メモリリーク」「スラッシング」「オーバーレイ」「フラグメンテーション」の違いについて説明します。
※基本情報技術者試験の概要と、私のおすすめの勉強法はこちらから。
メモリリークとは?
メモリリークとは、プログラム終了後のメモリの解放のし忘れのことをいいます。
プログラムは、実行される際にメモリ領域を確保して実行されますが、プログラム終了後にメモリを解放しないとメモリリークが起こります。メモリはよく作業机に例えられますが、メモリリークは作業後に机の上を後片付けされていない状態のことです。
メモリが解放されないと(=プログラムがメモリ領域を占領してると)どうなるのでしょうか?それは、その領域を他のプログラムが利用できないことを指します。つまり、メモリリークが発生するとメモリの利用効率が低下してしまうわけですね。
そこで、メモリリークを防いでくれるのが「ガベージコレクション」という機能です。これも基本情報技術者試験に出てくる用語で、ガベージコレクションにより占領されていたメモリ領域を解放してくれるわけです。
スラッシングとは?
スラッシングとは、主記憶容量の少なさにより主記憶と仮想記憶との間でページの出し入れ(ページイン、ページアウト)が多発し、処理速度が低下することです。
「なんとなく処理速度が下がるんだなー」ということは分かりますが、ページインとページアウトという概念が分かりにくいですよね。
そこで、一旦ページインとページアウトについて説明します。これらは、仮想記憶に関係してきます。
仮想記憶とは?
仮想記憶とは、主記憶と補助記憶を組み合わせて、仮想的に容量の大きなメモリに見立てる記憶形態のことを指します。そして、仮想記憶においてデータを記憶している領域のことをページと呼んでいます。
仮想記憶に対して、実際にプログラムを読み込んで実行するときは実記憶(主記憶)に読み込みます。
ページインとページアウトとは?
仮想記憶から主記憶へページを読み込むことを「ページイン」、主記憶から仮想記憶へページを取り出すことを「ページアウト」といいます。
プログラムを読み込む際に主記憶に読み込みますが、主記憶容量が少ない時にページアウトさせて主記憶にプログラムを読み込ませられる容量を作ります。そして、容量が空いた主記憶に読み込みたいプログラムをページインさせてプログラムを実行します。
このように、主記憶の容量が少ないと、主記憶と仮想記憶との間でページの出し入れ、つまりページインとページアウトが多発することで処理速度が低下してしまうんですね。
オーバーレイとは?
オーバーレイもスラッシングと同様に、主記憶容量の少なさに起因します。オーバーレイとは、プログラムの容量が大きすぎて主記憶に読み込めないとき、プログラムを機能ごとにセグメント分けして容量を小さくすることで主記憶に読み込めるようにすることです。
小分けにされたオーバーレイプログラムの中で、メインとなるプログラムをメインプログラムと言い、最初に主記憶に読み込まれます。そのあとは、必要な小分けのプログラム(オーバーレイモジュール)を、随時主記憶に読み込んでいきます。
こうすることで、主記憶容量が少なくてプログラムを丸々読み込ませることはできなくても、小分けにすることで(オーバーレイ方式)読み込ませることができるのです。
フラグメンテーションとは?
フラグメンテーションは日本語で「断片化」といいます。つまり、フラグメンテーションとはその名の通り、メモリの空き容量が断片的にしか空いていない状態のことです。
では、フラグメンテーションが起こると何が起こるのでしょうか。
例えば、100MBのプログラムを読み込みたいとします。メモリの空き容量は100MBあります。しかし、このメモリがフラグメンテーションを起こしていて、50MBの領域が2つあるだけでした。このような場合、全体として100MB容量があるのに、このプログラムは読めこめないという状況になります。
このように、フラグメンテーションもメモリを効率的に使うためには無駄な現象になるんですね。
まとめ
今回の内容では、「メモリリーク」「スラッシング」「オーバーレイ」「フラグメンテーション」についてそれぞれ説明しました。違いはややこしいですが、全てメモリを効率よく扱うために知っておくべき内容でした。特に、メモリの容量は大きければ大きいほど処理効率は上がるということですね!
基本情報技術者試験は、今回のように違いが分かりにくい内容が多いですが、少しずつ違いを理解して攻略していきましょう!