組み込み入門5~メモリの大容量・高速・高信頼化~

組み込み入門第5段では、メモリの大容量化技術・高速化技術・高信頼化技術などメモリの周辺技術について解説していきます。

そもそも、メモリって?どんなものがあるの?という方はこちらの記事で基礎をまとめています。

">
組み込み入門4 ~メモリ概論を構造と原理で学ぶ~
組み込み入門4 ~メモリ概論を構造と原理で学ぶ~
2022.4.17
組み込み入門第4段では、コンピュータシステムで用いられるメモリの概要を解説していこうと思います。 メモリにはどんな役割や種類について細かく解説していきます。 また、このメモリはこう...

では、早速見ていきましょう

大容量化技術

メモリのデータ管理技術

主記憶装置(RAM)上には補助記憶装置(メモリカード、HDDやSSD)などから読み込んだプログラムやデータファイルが展開されますが、実際どのように動いているのかそのあたりを解像度高く理解していきましょうというのがこの項の内容になります。

メモリのデータ管理手法は「実記憶管理」と「仮想記憶管理」に大別されます。

実記憶管理とは、主記憶装置であるRAM上でどのようにデータを読み込むのが効率が良いのかということに着目した管理方法です。

一方で、主記憶装置以外でもプログラムを動かすことがあります。それが仮想記憶管理となります。通常、主記憶装置で行う動作を補助記憶装置の一部領域を仮想的にRAMと見立ててRAMの容量を拡張する技術となります。

実記憶管理の中には後述する「区画方式」、「オーバーレイ方式」、「スワッピング方式」などがあります。

一方で、仮想記憶管理では「ページング方式」と呼ばれる手法を用いるのが一般的です。

実記憶管理

区画方式では、RAM内にプログラムを読み込む区画を割り当てて、1区画に1プログラムを読み込む方式です。

区画の数やサイズに応じて、「単一区画方式」、「多重区画方式」、「可変区画方式」に別れます。

固定区画方式について見ていきます。

固定区画方式では、プログラムを格納する区画と呼ばれる領域のサイズを固定にする方式です。

中でも、RAMの全領域内に1つしか区画をもたない「単一区画方式」と複数の区画に分ける「多重区画方式」に別れます。

1区画には1つのプログラムしかロードできません。そのため、単一区画方式では同時に複数のプログラムを動作させることはできません。一方で、区画を分割していないため大容量のプログラムを読み込むことができます。

一方で多重区画方式では、複数の区画を持つため複数のプログラムを並列に動作することができます。しかし、1区画のサイズが小さくなるため大きいサイズのプログラムはロードできません。

固定区画方式では、区画のサイズは固定でしたが、プログラムのサイズというのは大きいものもあれば小さいものもあります。動作させるプログラムのサイズが一定であれば良いですが、通常は様々なサイズのプログラムをロードしたいです。そこで、区画サイズをロードするプログラムに合わせ可変にしたものが可変区画方式です。

直感的に分かる通り、メモリ使用効率が良いです。一方で、「フラグメンテーション」という問題が発生します。

例えば図に示すようなProgram1~3が動いている中でProgram2を終了し、新しくサイズの大きなProgram4を走らせたいとしたらどうなるでしょうProgram2のために確保していた区画には収まらないため、一度区画を整理して空き領域をまとめた後にロードすることになります。この動作をコンパクションといい、余計な処理時間が発生します。また、このように空き領域がバラバラ担ってしまうことをフラグメンテーション(断片化)といいます。

次にオーバーレイ方式について解説します。こちらは、RAMより大きなProgramをどう動かすの?という問いへの答えになります。

オーバーレイ方式では、プログラムをセグメントと呼ばれる単位に分割し、必要なセグメントのみを読み込みます。各セグメントは同時に動作することがないように分割することがポイントです。

続けて、スワッピング方式について解説します。

こちらは、優先度の高いプログラムを動かすために優先度の低いプログラムを主記憶装置から補助記憶装置に追い出して、空いた領域にロードするする手法です。

例えば、Program1〜3が動いている中で優先順位の高いProgram4を動かしたいという場合に、一旦プログラム3を補助記憶装置にコピーして領域を空けます(スワップアウトorロールアウト)。

その後、空いた領域にProgram4を展開し、Program4が終了したら、空いた領域にProgram3を戻します(スワップインorロールイン)。

仮想記憶管理

ここから、仮想記憶管理手法であるページング方式について解説します。

ページング方式では、補助記憶装置上にRAMに見立てた仮想アドレスを割り当てます。実記憶、仮想記憶ともに、固定長のページと呼ばれる区画で区切ります。仮想アドレス上のページと主記憶上のページを随時入れ替えながら動作させることで仮想記憶との協調を実現します。

また、仮想記憶→実記憶への移行をページイン、その逆をページアウトと呼びます。

基本的には、実記憶上のデータを処理しますが、要求状況に応じて仮想記憶上のアドレスを実記憶上に移して使用します。

また、深く触れませんがページのサイズを可変にしたものをセグメント方式と呼びます。

ページング方式にも課題があります。それが、スラッシングです。

実記憶上に必要なデータが存在しない状況をページフォルトといいます。このとき、ページアウトにより必要な実記憶領域を確保し、仮想記憶からデータをページインします。

ページアウト・ページインの処理は、読書速度の遅い補助記憶装置にアクセスするため時間がかかります。

これに伴いコンピュータの処理速度が低下することをスラッシングといいます。

スラッシングを起こさずページングを行うためには、不要なページと必要なページの入れ替えを上手に行うことが大切となります。

ページの置き換え規則には次の4つがあります。

FIFO方式

FIFO=First IN First Outです。最初に入ったページを先にページアウトする手法です。

LIFO方式

LIFO=Last in First Outです。最期に入ったページを先にページアウトする手法です

LRU方式

LRU=Least Recently Usedです。最も長時間使用されなかったページをページ合うとします。

LFU方式

LFU=Least Frequently Usedです。最も使用頻度が少ないページをページアウトします。

中でも、LRU方式は直近の利用状況が反映されるため最も効率が良いとされています・

高速化技術

続けてメモリへのアクセスを高速化する技術について見ていきます。

メモリインタループという技術があります。非常に力技ですが、2つのメモリを並べ同時にアクセスすれば2倍早くデータが送れますよね。というものです。

工夫されている点としては、アドレスの振り方を2つのメモリで交互に割り当てていることです。メモリへのアクセスというのは通常アドレスX〜アドレス(X+31)など連続で行うことが多いです(シーケンシャルアクセス)。そのため、交互に割り当てられたデータは同時に要求されることが多く、転送効率が上がります。また、この制御はRAM内に設けられたメモリコントローラで行われます。

高信頼化技術

続けて、メモリへの読み書き情報が間違っていないことを担保するための高信頼化技術について見ていきましょう。

データの通信や読み書きの際には電磁ノイズなどの影響により0が1 に1が0に変わってしまう場合があります。そのようなビット誤りへの対策をした高信頼メモリの1つにECC(Error Check and Correct)メモリがあります。誤りの検出と修正が可能なメモリです。長時間動かすようなサーバーPCや研究開発用のワークステーションなどで採用されています。単体では動作せず周辺機器も含めて対応している必要があります。

ECCメモリの誤り検出では「パリティ方式」や「ハミング方式」を用います。

パリティ方式では、データにパリティビットを付与することで1ビット分の誤りの検出が可能になります。原則はデータの1の数の合計が必ず偶数あるいは奇数になるようにパリティビットを立てることでデータの正しさを保証するというものになります。

例えば、偶数に揃えようというときに、「110101110」は1の数が6個であるため誤りなしと判定します。

一方で、「110111110」であれば1の数が7個であるため、誤りがあると判断します。ただしどこに誤りがあるかはわかりません。

続けて、ハミング方式について解説します。こちらはパリティ方式の発展形で1ビットの誤り修正が可能になっています。4bitのデータに対して4bitの照合符号を付与します。

4bitの例を見ていきましょう。D0〜D4のデータに対しH0〜H2のハミング符号を付与します。

このとき、

  • H2はD3,D2,D1,H2の合計が偶数になる
  • H1はD3,D2,D0,H1の合計が偶数になる
  • H0はD3,D1,D0,H0の合計が偶数になる

ように各ビットを立てます。

そうすると、

  • D3が誤りのとき、H2,H1,H0がNG
  • D2が誤りのとき、H2,H1がNG
  • D1が誤りのとき、H2,H0がNG
  • D0が誤りのとき、H1,H0がNG
  • H2が誤りのとき、H2がNG
  • H1が誤りのとき、H1がNG
  • H0が誤りのとき、H0がNG

となります。すべてのパターンでNGになる組み合わせが異なるため1bitまでの誤りであれば、逆説的に誤り箇所がわかることになります。

最期に、記憶保護について解説します。こちらはメモリ上のデータを誤った操作から保護するための仕組みになります。

例えば、リング方式というものがあります。

こちらはメモリのブロック単位で保護レベル(リングレベル)を設定し、メモリ上で動くプログラムは割り当てられたブロックの保護レベルよりも高い階層にはアクセスできないようにするものです。

このような機能はCPU上のMMU(Memory Management Unit)などに実装されています。

まとめ

本記事では、メモリの大容量化技術・高速化技術・高信頼化技術などメモリの周辺技術について解説してきました。業務に用いるメモリ上でどのようなことが起こっているのかイメージが具体的に描けるようになると嬉しいです。

次回はメモリ編の最期です。これまでも少し触れていましたが、キャッシュメモリについてまとめてい行きます。

関連記事