「今どき(2020年時点)のパソコンのメモリサイズっていくつ?」って聞いたら、何となく「4GBか8GB」と返ってくると思います。
Windows10のシステム要件上は「32ビット版では1GB、64ビット版では2GBのRAMサイズ」とありますが、経験上4GBは無いと結構重いです。。。
「このパソコンが重くなる」って症状は何故起こるのでしょうか?
その理由は「主記憶(メインメモリ)のサイズが有限だから」です。
今回は主記憶サイズが有限だからこそ、やらなければならない主記憶装置の記憶管理の種類とメリット、デメリットを学びましょう!
尚、メモリはUSBメモリに代表されるような外部の外付け媒体メモリもありますが、この記事では主記憶装置のことをメモリと表現していることをご了承ください。
メモリの記憶管理の仕組みとは?
先ずメモリの役割とは何でしょうか?
ざっくり言うとそれは「プログラムを実行する前に格納しておく場所」となります。
コンピュータはCPUでデータを計算して、命令を実行しますが、その前のデータや命令を主記憶に格納しておきます。メモリに格納することで、高速で複雑な処理を可能としております。
この方式のことを「プログラム内蔵方式」(ノイマン型コンピュータ)と呼びます。
プログラムのサイズには大小あるので、プログラムを格納することでメモリを使う量はプログラムによって違ってきますが、現在のコンピュータは並行してプログラムを走らせるので(マルチタスク)、何も考えずに全てのプログロムをメモリに読み込んでいたら、メモリはいっぱいになってしまいます。
メモリは価格も高く、容量も限られているので、このメモリの容量を効率的に使用するために、OSは「記憶管理」を行っています。
この記憶管理ですが、二つの種類があります。それが、「実記憶管理」と「仮想記憶管理」です。この二つは組み合わせて使うことができます。そして、実記憶管理には「固定区画方式」と「可変区画方式」という2種類の方式があります。
記憶管理を大雑把に分けると以下のような形になります。
記憶管理の役割
- 実記憶管理 : 主記憶そのものを効果的に使用するための管理方法
- 仮想記憶管理 : 補助記憶の一部をあたかも主記憶を使っているように見せかけて、大きなメモリ空間を使えるようにする管理方法
続いて、実記憶管理の「固定区画方式」と「可変区画方式」、「スワッピング方式」に関して解説します!
くどいですが、実記憶管理はOSが行ってます。
固定区画方式とは?
区画方式とは、メモリをいくつかの区画に分類して、プログラムを割り当てる方法のことです。
この区画方式には二つの種類がありますが、その一つが「固定区画方式」です。
メモリを決まった区画に分割して、そこにプログラムをロードします。プログラムに割り当てた区画に余りがあっても、他のプログラムはその領域を使えないので、メモリに無駄が発生しますが(デメリット)、メモリの確保や返却などの処理時間は一定で速いことがメリットです。
そして、固定区画方式には、全体を単一の区画とする単一区画方式と、複数の区画に分ける多重区画方式があります。
固定区画方式は処理時間が一定で速くなるので、単純な組み込みシステムなどで非常にうまく動作するようですね。
可変区画方式とは?
こちらの方式はプログラムのサイズに合わせた大きさでメモリの区画を分割して、割り当てる方式です。
区画のサイズが必要に応じて動的に変わるため、メモリに無駄が発生しません。
余った領域を無駄なく利用できるので効率的と言えますが(メリット)、処理手順が複雑になるため、処理時間が不定で遅くなってしまうことがデメリットです。
メモリを無駄なく利用できるので、汎用的なコンピュータで使われるようですね。
そして、可変区画方式を使うと効率的にメモリを使えるので、色々な問題が解決しそうですが、実はフラグメンテーション(断片化)という問題と、その対策としてメモリコンパクション、ガベージコレクションという用語が出てきます。
以下記事で解説してます!
スワッピング方式とは?
続いて、OSがプラグラムを読み込もうとした際、メモリの容量が足りないとロードできずに困ってしまいます。
そんな時にメモリ上の優先度の低いプログラムを一時的に中断して、そのプログラムを補助記憶(ハードディスクなど)に退避させることで、優先度の高いプログラムを実行させることができます。
このOSの機能を「スワッピング方式」と呼びます。
メモリ上からプログラムを補助記憶に送ることを「スワップアウト」、反対にメモリ上に戻すことを「スワップイン」と呼びます。
ただし、スワッピングが発生すると、メモリの代用として低速な補助記憶装置へのアクセスを行うことになるので、処理速度が極端に低下してしまいます。
オーバーレイ方式とは?
区画が効率的に記憶できるようになっても、メモリにロードするプログラムのサイズがメモリのサイズを超えていたらプログラムをロードする手段がありません。。。(メモリの空きが4MBしかないので、8MBのプログラムはロードできないです)
そのために一つのプログラムを「セグメント」と呼ばれる単位に分割しておき、その際に必要なセグメントだけをメモリ上にロードして実行することができます。これを「オーバーレイ方式」と呼びます。
一つのプログラムの中にある機能は同時にすべて使うわけではないので処理する中で必要なものだけをロードします。これによりプログラムが占有するメモリの場所を減らして、効率的にメモリを使うことができるようになります。
例えば、会議室を予約管理するシステム において、①予約をするプログラムと②予約状況を集計する機能は別のタイミングで使うので、①と②は使うときだけメモリにロードすることで、メモリの利用量を減らすことができますね。
このオーバーレイ方式、アルゴリズム(仕組み)が特殊であり、非常に複雑なオーバーレイ構造を構成してしまうこともありますね。
そして、技術の進化により利用可能な物理メモリの容量やアドレス空間が拡大され、更にはメモリの仮想記憶管理の技術(参照Wikipedia)が一般化されることによって、オーバーレイ方式は使われなくなってきたようですね。
まとめ
今回は主記憶装置(メインメモリ)の記憶管理の種類と実記憶管理の方式に関して解説しました。
限られた資源のメモリを効率的に使うために動的にメモリの区画やロードする場所を移動させる様々な工夫があるのですね。これを随時行っているOSってやっぱり凄いですねー。
固定区画や可変区画の話はネット上の「メモリプール管理」で調べると色々出てくるので、より深く知りたい方は、このキーワードで探してみてくださいね。
メモリ記憶管理のもう一つの仕組みである「仮想記憶管理」に関しては以下の記事をご参照ください!
以上です!
参考URL)
動的メモリ確保(Wikipedia)