直接当ページへの来訪者は

   図解 スマホのROMとRAMの関係/違い/役割


                             (イラストは「かわいいフリー素材 いらすとや」他より援用 Thanks !)
▲ スマホの
  CPU のコアは働く人に例えられます。
  ROM はデータファイル及びプログラムファイルの保管庫に例えられ、
  ROM が大容量であれば多くのアプリプログラムファイルと多くのデータファイルを記憶することができます。
  ROM と呼称しているにも拘らず、データファイルとプログラムファイルは随時書き換えられています。
  RAM は作業机に例えられ、
  RAM が大容量であれば同時に多くのファイルを開くことができます。
  RAM が小容量の場合は、
          症状1:アプリの起動に異様な時間がかかる
          症状2:アプリの実行に異様な時間がかかる
          症状3:データファイルを開くまでに異様な時間がかかる
          症状4:「このアプリは応答していません」「終了する/待機する」の状態になってしまう
          症状5:スマホがフリーズして無反応になってしまう
          症状6:最悪 OS がシャットダウンしてしまう
  そこで見かけ上の RAM を多くするために脇机を設置します。
  例えば或る作業中に割込み作業が入った場合は、作業途中のデータファイルとプログラムファイルを保管庫へ戻すのではなく、
  作業途中のファイルを脇机へ一時退避して作業机を空けます。
  割込み作業終了後、一時退避した作業途中のファイルを脇机から作業机へ復帰して中断された作業を続行します。
          
  この脇机をスワップRAM (スワップメモリ)と呼びます。スワップRAMはROMの一部を拝借して利用します。
  Motorola 社ではこの仕組みをRAMブーストと呼んでいます。
  スワップRAMへ一時退避されたデータファイルとプログラムファイルは閲覧・編集も実行もできませんが、
  タスクキル (アプリ終了) よりも作業の続行がスムーズに進むというメリットがあります。

  CPUのコア数が多ければ同時に複数のアプリをスムーズに実行できます。
  常に1コアが1タスクを分担するのではなく、状況により1コアが複数タスクを分担したり、
  1タスクが複数コアを稼働させることがあります。
  CPUのコアへのクロック周波数が高速なほど働く人の処理速度が速くなります。
  但し処理速度と消費電力とはトレードオフの関係にあるので、賢いスマホはコアを使い分けています。
  データファイルとプログラムファイルは保管庫から原本を持ち出すのではなく、コピーをとってRAMに置きます。
  このようにすると或るアプリが既に開いているデータファイルとかプログラムファイルを、別のアプリが同時に開くことができます。
  以上は巷で良く見られる説明ですが、仕組みの本質を下に記します。


▲ 先ず、RAM (Randam Access Memory) の説明です。
  ファイルという概念は無く、アドレスでアクセスします。
  RAM はCPUが直接にアドレスを指定してピンポイントでアクセスできます。
  RAM は揮発性メモリーですのでスマホの電源を切ると内容は保持されません。
  RAM 内でフラグメントが発生してもページ単位であれば、
  MMU(Memory Management Unit) の論理(仮想)アドレス→物理アドレス変換により正しくアクセスできます。
  CPUはRAMに記憶されたアプリのプログラムコードを実行でき、アプリが生成したデータを閲覧・編集できます。


▲ 次に、ROM (Read Only Memory) の説明です。           (イラストは https://www.pngwing.com/ja より援用)
  ランダムアクセス可能なメモリーであってもスマホ内のROMとかPC内のRAMディスクの如く
  UFS(Universal Flash Storage)等のファイルシステム支配下に置かれるとSAM(Sequential Access Memory) として動作します。
  SAMはアドレスという概念は無くファイル名でアクセスします。
  SAMはCPUが直接にアドレスを指定してピンポイントでアクセスできません。
  SAMはファイルシステムの特性上随所にフラグメントが発生します。
  SAMはファイルシステムの支配下にあってMMU(Memory Management Unit) の効力が及ばないので、
  CPUはSAMに記憶されたアプリのプログラムコードを実行できず、アプリが生成したデータを閲覧・編集もできません。

        ■ ランダムアクセスとシーケンシャルアクセスの微妙なところ
        
        ▲ 但し、「ITパスポート試験」ではHDDは「ランダムアクセスが可能」が正解なっています。
          ランダムアクセスとシーケンシャルアクセスの用語の定義は状況によりかなり曖昧なところがあります。
          状況1:新品のHDDへファイルを記録するとクラスターは連続しているので、
              このファイルを読む時はシーケンシャルアクセスとなり、
              使い込んだHDDへファイルを記録するとクラスターは離散しているので、
              このファイルを読む時はランダムアクセスとなる。
          状況2:クラスタを直接に指定できるので、クラスタ単位で見るとランダムアクセスである。
          状況3:セクターを直接に指定できないので、セクター単位で見るとシーケンシャルアクセスである。
          状況4:アドレスを直接に指定できないので、バイト単位で見るとシーケンシャルアクセスである。
          従って、試験に出題された場合は出題者が期待する回答をするのが良いでしょう。


▲ ROM(ファイル空間)とRAM(メモリー空間)とCPUの関係のまとめ。
  ROMを支配するUFS等のファイルシステムは幾万というファイルを如何にROMに納めるかに専念するあまり、
  それらファイルの実行可能形態とか閲覧・編集閲覧可能形態は保持されません。
      状況1:ファイルの断片化。
      状況2:ファイルシステムが支配するSAM (Sequential Access Memory) は
          CPUがピンポイントで指定したアドレスを直接アクセスできません。
  この状況は MMU(Memory Management Unit) の論理(仮想)アドレス→物理アドレス変換では対応できません。
  CPUはROMに記憶されたアプリのプログラムコードを実行できず、アプリが生成したデータを閲覧・編集もできません。
  それらファイルを実行・閲覧・編集するにはCPUが直接支配するRAM(メモリー空間)へコピーして利用します。
  RAM 内でフラグメントが発生してもページ単位であれば、
  MMUの論理(仮想)アドレス→物理アドレス変換により正しくアクセスできます。
  CPUはRAMに記憶されたアプリのプログラムコードを実行でき、 アプリが生成したデータを閲覧・編集できます。
  これがROM(ストレージ)とRAM(メインメモリ)が棲み分けして役割分担する根本理由です。

■ 他方、プリンターとかデジカメとか電子ピアノとかのスタンドアロン単能機の場合
  ROM上のプラグラムコードは連続固定していて、ファイル空間ではなくメモリー空間に配置されるので
  CPUは ROM上のプログラムコードを直接読込んで命令を実行できます。
  ROMからRAM へコピーしてから利用するという無駄な処理はしません。


▲ 断片化の発生状況の模式図です。

@ スマホのROMはPCのHDDに相当します。即ち不揮発性メモリーです。
  日本ではROMと呼称していますが世界標準は Internal Memory Storage (内部ストレージ)です。
  スマホのROM内にはプログラムコードとデータ (文書.txt・画像.bmp・動画.mp4・音楽.mp3 等) が順次前詰めで記憶されます。
  購入当初は隙間なく一本のファイル毎に連続して記憶されていますが、

A プログラムファイル又はデータファイル(e.g. 画像ファイル)の削除・編集等をすると元有った場所は空き領域になります。
  これを繰り返すとROM内に虫食いのような空き領域が多数発生します。

B この虫食い状態のROMに新しいファイルを書くと空き領域を埋めるように順次前詰めで記憶されます。
  その結果書込まれた一本のファイルは連続していない断片化(フラグメント)状態です。
  ROM内ではMMUの論理(仮想)アドレス→物理アドレス変換で対応できません。

C そこで、アプリAを起動するとROM内の断片化されたプログラムコードと
  閲覧・編集対象のデータ(.txt .bmp .doc .mp4 .mp3 等ファイル)を各々RAMへコピーします。
  この時RAM内でも断片化が起こり得ますが
  RAM内ではMMU(Memory Management Unit) の論理(仮想)アドレス→物理アドレス変換で対応できます。
  但し、物理メモリの断片化はページ単位ならば MMUの論理(仮想)アドレス→物理アドレス変換で
  吸収できますが、ページ内での断片化はMMUでは対応できません。



▲ 画像データの断片化と復元(MMUが機能しない場合の模式図)


▲ moto G52J SPECIAL の
  概略スペックです              
▲ RAM の状況です
  4GB では不足です
  8GB は必要です              
▲ ROM の状況です
  256GB 有れば余裕です              
▲ SDカードの状況です
  64GB を差しています              


▲ 参考として、PCのHDDの断片化(フラグメント)の様子です。
  フラグメントとは断片化したクラスタにフラグを(旗)を立てることです。
  フラグが立っているクラスタには離れた位置に連続したクラスタが有るという目印です。
  デフラグメントとは旗の立っているクラスタを寄せ集めて一塊の連続した状態にすることです。
  連続した状態になると旗を降ろします。
  多くのデフラグメントソフトウェアは同時にガベージコレクションも実行されます。
  1000GB のHDDをデフラグメントするには約30分かかります。


▲「キャッシュ」の思想。                       (イラストは https://www.pngwing.com/ja より援用)
  Cache は現金をしまう所
  Cash は現金そのもの


▲ YouTube 初見時と再見時のデータフローです。
  通常はキャッシュの読み書きはバックグラウンドで暗黙的に行われますが、
  電波の届かない山の中でも使える登山地図 GPSアプリ「YAMAP」では明示的にキャッシュ操作が行われます。
  元気良く弾んでいる AMU さんをご覧になれます →【AMU】千本桜 踊ってみた【坂道で】




 スマホのクロックを遅くすると消費電力が減る理由


▲ 巷で良く言われている“クロックを低速にすると消費電力が減少する”という説明を図示したものです。
・ 確かに低速クロックでは消費電力が減少しているのはわかりますが、
  残念ながら、どうして消費電力が減少するかの説明には成っていません。
・ 巷で良く言われている“高負荷”とか“低負荷”という意味も、この図からでは釈然としません。


▲ 単相クロックの立上りエッジ同期型デジタルシステムの消費電力のようすです。
・ クロック同期型システムの場合は、クロックの立上りエッジで瞬間的に電力を消費します。
・ 低速クロックの場合はクロックの立上りエッジの頻度が減少するので、結果的に電力を消費する頻度が減少します。
・ この図ならば低速クロックで消費電力が減少する説明が付きます。“眼から鱗が落ちる”ことでしょう。
・ どうしてクロックの立上りエッジで瞬間的に電力を消費するのかを下の図で説明します。


▲ 最もシンプルな NOT ゲートです。
・ この回路に次の三つの所望しない電流が流れます。
  (1) P−MOSとN−MOSを貫通する電流(この下の図で説明します)
  (2) Cs(浮遊容量)を充電/放電する電流
  (3) リーク電流(定常的に流れる漏れ電流)


▲ ゲートの入力論理値が変化する時に流れる貫通電流とCs充放電電流の説明図。
・ ゲートの論理値が完全に“0”または“1”の場合は、
  片側のMOSは完全にON状態で、別のMOSは完全にOFF状態です。
  MOSが完全にオンまたはオフの場合は電力を消費しません。
  ただし、定常なリーク電流による電力消費はあります。
・ ゲートの論理値が“0”または“1”でない過渡状態の場合は、
  両方のMOSが能動動作状態になってしまいます。デジタル動作ではなくアナログ動作です。
  この時に貫通電流が流れてしまいます。
  メカスイッチに例えると「メイク ビフォア ブレーク」式です。
・ 同時にCs(浮遊容量)の充放電電流が流れます。
・ 以上のことから、



▲ 消費電力計算のオーソドックスな原理式です。
  巷で“1秒間のクロック数[無名数]”“周波数[/SEC]”で表記されている計算式を散見しますが、
  そのような式の右辺は左辺のディメンジョン[W]=[J/S]と合致しません。
  物理式において右辺と左辺のディメンジョンが違う式は、何か重要な要素が欠落している可能性があります。
  また、ディメンジョンの違う量の乗除算はできますが加減算はできません。
  例えばMKS系において 2[Kg]+3[M]=? のような演算はできません。
 “周波数[/SEC]”で表された便宜式でも計算はできますが、物理事象の本質を理解するためには原理式を用いましょう。


▲ GPU(Graphics Processing Unit)のBUSY/READYの状態遷移図です。
 グラフィック演算のために1クロックで積が得られるパラレル乗算器などをフル稼動させると、
  膨大な数のゲートで論理値変化が起きて消費電力が増大します。
 “高負荷”とか“高稼働率”とは、このような状態を指します。


▲ SOC(System On a Chip)のブロックダイアグラムの一例です。
・ 消費電力制御は、停止させるブロックへのクロックの供給を停止する。・・・・・ 貫通電流を低減のため
    〃         〃      電力の供給を停止する。・・・・・・・ リーク電流低減のため
・ Main - CPU さえも停止させてしまうことができるSOCがあります。

■ 余談ですが、現役時代に8000ゲート規模のLSIベーシックロジックをTTLランダムロジックで動作検証したことがあります。
  当時の半導体製造プロセスはサブミクロン以前の1μルールでした。

■ Link:LSIの低消費電力設計 沖テクニカルレビュー PDF資料
     低消費電力LSIを実現するSOIデバイス技術 沖テクニカルレビュー PDF資料
     コンデンサ物語(5) 公益社団法人日本電気技術者協会
     スマートフォンを支えるハードウェアプラットフォーム 富士通