0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】メモリのアーキテクチャ【5分で読める】

Posted at

メモリのアーキテクチャ

理解のために小咄形式でまとめました。

登場人物

  • 太郎(後輩):入社1年目の若手エンジニア。
  • 花子(先輩):システムエンジニア歴3年の先輩。

場面:オフィスの開発ルーム
太郎が メモリのアーキテクチャ に関する資料を見ながら、花子に質問する。

太郎:「花子先輩、メモリのアーキテクチャ って、 具体的にどんな仕組みで動いているのか よく分からなくて…。ハードウェアとソフトウェアの両面 から教えてもらえませんか?」

花子:「なるほどね。メモリのアーキテクチャ は、 ハードウェアの設計OSのメモリ管理2つの視点 から考えると分かりやすいわ。 ハードウェアとソフトウェアの両面 から説明するわね。」


メモリのアーキテクチャ

花子:「メモリのアーキテクチャ を理解するには、 3 つの主要なコンセプト を押さえておくことが大切よ。」

  1. ハードウェアアーキテクチャ
  2. ソフトウェアアーキテクチャ
  3. プロセスの仮想アドレス空間

1. ハードウェアアーキテクチャ

花子:「まず ハードウェアアーキテクチャ について説明するわね。」

(1) メモリの種類

  • メインメモリ(RAM)一般的に DRAM(Dynamic RAM)が使われる。
  • キャッシュメモリCPU 内にある高速メモリ(L1, L2, L3 キャッシュ)。
  • 仮想メモリ物理メモリが不足したときにディスクをメモリの代わりに使う仕組み。

(2) DDR メモリと帯域幅

  • DDR(Double Data Rate)DDR4 や DDR5 など、世代ごとに高速化。
  • マルチチャネルメモリデュアルチャネル、トリプルチャネル、クアッドチャネルなどの構成。
  • 帯域幅(メモリバスの速度)メモリのデータ転送速度を示す。

花子:「これは 飲食店の厨房 みたいなもので、調理場(メモリ)が広いほど効率よく料理(データ)を提供できる のよ。」

太郎:「なるほど! メモリの帯域幅が広いほど、一度に多くのデータを処理できる んですね!」


2. ソフトウェアアーキテクチャ

花子:「ソフトウェアアーキテクチャ では、 OS がどのようにメモリを管理するか を考えるの。」

(1) 仮想メモリとページング

  • 仮想メモリ各プロセスに対して、広大なアドレス空間を提供する技術。
  • ページング物理メモリを小さなブロック(ページ)に分割し、管理する方法。
  • TLB(Translation Lookaside Buffer)仮想アドレスと物理アドレスの対応をキャッシュする仕組み。

(2) NUMA(Non-Uniform Memory Access)

  • NUMA アーキテクチャCPUごとに専用のメモリ領域を持ち、アクセス速度を最適化。
  • UMA(Uniform Memory Access)すべての CPU が同じメモリにアクセスする方式。

花子:「これは 本社と支店の倉庫の違い みたいなもので、 近くの倉庫(メモリ)にアクセスすれば速い けど、 遠くの倉庫にアクセスすると遅くなる のよ。」

太郎:「NUMA を理解すれば マルチプロセッサ環境でのメモリアクセス最適化 ができそうですね!」


3. プロセスの仮想アドレス空間

花子:「最後に、プロセスの仮想アドレス空間 について話すわ。」

  • カーネル空間とユーザー空間OS のカーネルが管理する領域と、アプリケーションが使う領域。
  • スタックとヒーププログラムの実行中に確保されるメモリ領域。
  • スワップメモリ物理メモリが不足した際に、ディスクに退避させるメモリ領域。

花子:「これは スマホのアプリ管理 みたいなもので、 よく使うアプリはメモリ上に保持 し、 使わないアプリは一時的にストレージに退避 するのと同じよ。」

太郎:「プロセスのメモリ管理も スワップを適切に使えば、メモリ不足を防げる んですね!」


花子:「これらの メモリのアーキテクチャ図書館の管理 に例えると、こんな感じね。」

  1. ハードウェアアーキテクチャ図書館の本棚の設計

    • 本棚 = メインメモリ(RAM)
    • カウンターに置く数冊 = キャッシュメモリ
    • 倉庫の予備の本 = 仮想メモリ
  2. ソフトウェアアーキテクチャ本の貸出管理

    • 本の貸出カード = TLB(アドレス変換)
    • 貸し出し中の本 = スワップ
  3. プロセスの仮想アドレス空間利用者ごとに借りられる本の種類

    • 一般の読者が読める本 = ユーザー空間
    • 職員だけが扱える本 = カーネル空間

太郎:「めちゃくちゃ分かりやすいです! メモリの管理は、図書館の本の管理とよく似てる んですね!」


花子:「メモリのアーキテクチャ を理解すると、 パフォーマンス分析やチューニングの基礎 が分かるわ。」
太郎:「ありがとうございます! `NUMA の影響を調べるために numactl コマンドを試してみます!」

参考リンク

システムパフォーマンス関連記事の目次

システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?