コンテンツにスキップ

メモリ@ハードウェア

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. メインメモリ (主記憶装置)

DRAM:Dynamic RAM

▼ DRAMとは

メインメモリとして使用される。

データを保管できる揮発的な記憶装置のこと。

Dynamic RAM


Mask ROM

▼ Mask ROMとは

p164-1


Programmable ROM

▼ Programmable ROMとは

p164-2


02. キャッシュメモリ

キャッシュとは

データや静的コンテンツ (HTML、JavaScript、CSS、画像) をデータを保管しておき、再利用することによって、処理速度を高める仕組みのこと。


キャッシュメモリとは

▼ 一次キャッシュメモリと二次キャッシュメモリ

CPU とメインメモリの間に、キャッシュメモリを何段階か配置し、CPU とメインメモリの間の読み出しと書き込みの処理速度の差を緩和させる。

メモリキャッシュ

実際に、タスクマネージャのパフォーマンスタブで、n 次キャッシュメモリがどのくらい使われているのかを確認できる。

キャッシュメモリの実例


キャッシュメモリの仕組み

▼ 一度目

ユーザー ➔ メインメモリ ➔ 二次キャッシュメモリ ➔ 一次キャッシュメモリの順で、データがやり取りされる。

(1)

ユーザーが、パソコンに対して命令を与える。

(2)

CPU は、命令をメインメモリに書き込む。

(3)

CPU は、メインメモリから命令を読み出す。

(4)

CPU は、二次キャッシュメモリに書き込む。

(5)

CPU は、一次キャッシュメモリに書き込む。

(6)

CPU は、命令する。

メモリとキャッシュメモリ_1

▼ 二度目

メモリとキャッシュメモリ_2


キャッシュメモリへの書き込み方式の種類

▼ Write-throught方式

CPU は、命令をメインメモリとキャッシュメモリの両方に書き込む。

常にメインメモリとキャッシュメモリの内容が一致している状態を確保できるが、メモリへの書き込みが頻繁に行われるので遅い。

Write-through方式

▼ Write-back方式

CPU は、キャッシュメモリのみに書き込む。

次に、キャッシュメモリがメインメモリに書き込む。

メインメモリとキャッシュメモリの内容が一致している状態を必ずしも確保できないが、メインメモリへの書き込み回数が少ないため速い

Write-back方式


実効アクセス時間

p171-1


SRAM:Static RAM

▼ SRAMとは

キャッシュメモリとして使用される。

Static RAM


02-02. キャッシュの保管場所の種類

全体像

what_and_where_to_cache


クライアントサイドキャッシュ

クライアントのブラウザの使用するメモリ上で、レスポンスされた静的コンテンツのキャッシュを作成する。

Chrome の場合は、CacheStorage に保管される。

client_side_cache


サーバーサイドキャッシュ

▼ CDNキャッシュ

記入中...

▼ API Gatewayキャッシュ

記入中...

▼ ロードバランサーキャッシュ

記入中...

▼ Webサーバーキャッシュ

リバースプロキシサーバーの使用するメモリ上で、レスポンスされた静的コンテンツのキャッシュを作成する。

AWS では、Amazon CloudFront におけるキャッシュがこれに相当する。

▼ アプリケーションサーバーキャッシュ

オブジェクトのプロパティの使用するメモリ上で、関数処理結果のキャッシュを作成する。

必要な場合、これを取り出して再利用する。

Laravel のキャッシュ機能については、以下のリンクを参考にせよ。

▼ DBキャッシュ

記入中...


キャッシュすべきでないデータ

▼ サーバーサイド側の場合

セキュリティ上などの理由で、サーバー側でキャッシュすべきでないデータがある。

データ 理由
フォーム認証ページ 無関係のユーザーに認証済みのWebページが返信されてしまう。
緯度経度/フリーワードに基づく検索結果ページ パターン数が多く、キャッシュですべてのページを網羅することが現実的でない。


02-03. クライアントサイドキャッシュの仕組み

クライアントサイドキャッシュ使用/不使用の検証

▼ ETag値による検証

ブラウザは、Etag 値を使用してキャッシュの実現する。

EtagとIf-NoneMach

(1) キャッシュの有効時間が切れるまで

(1)

クライアントのブラウザは、リクエストをサーバーに送信する。

(2)

サーバーは、特定のアルゴリズムを使用してハッシュ値を作成し、これをコンテンツの ETag 値とする。

(3)

サーバーは、ETag ヘッダーに ETag 値を設定し、コンテンツとともにレスポンスをクライアントに送信する。

(4)

クライアントのブラウザは、コンテンツと ETag 値をキャッシュする。

(5)

キャッシュの有効時間が切れるまで、クライアントサイドキャッシュを使用し続ける。

(2) キャッシュの有効時間が切れた後

(1)

キャッシュの有効時間が切れる。

(2)

クライアントのブラウザは、リクエストをサーバーに送信する。

この時、If-None-MatchヘッダーにキャッシュしておいたETag値を設定する。

(3)

サーバーは、送信された ETag 値とコンテンツの ETag 値を比較検証する。

(3) 検証により、クライアントサイドキャッシュを使用

(1)

ETag 値の比較検証の結果、一致する。

(2)

サーバーは、両方の値が一致する場合、304 ステータスでレスポンスをクライアントに送信する。

(3)

クライアントのブラウザは、キャッシュを使用する。

(4) 検証により、クライアントサイドキャッシュを使用せず

(1)

ETag 値の比較検証の結果、一致しない。

(2)

サーバーは、両方の値が一致しない場合、ETag 値を作成し、これをコンテンツの新しい ETag 値とする。

(3)

サーバーは、ETag ヘッダーに ETag 値を設定し、コンテンツとともにレスポンスをクライアントに送信する。

(4)

クライアントのブラウザは、コンテンツと ETag 値をキャッシュする。


クライアントサイドキャッシュ時間の定義

▼ クライアントサイドキャッシュなし

レスポンスヘッダーにて、Cache-Control ヘッダーに no-store を設定する。

この場合、ETag 値が無効になり、クライアントサイドキャッシュを使用しなくなる。

HTTP/1.1 200
---
Cache-Control: no-store
---
# ボディ
ここにサイトのHTMLのコード

▼ クライアントサイドキャッシュあり (有効時間あり)

レスポンスヘッダーにて、Cache-Control ヘッダーに max-age=31536000 を設定する。

Expire ヘッダーに有効時間を設定してもよいが、Cache-Control ヘッダーの有効時間が優先される。

この場合、有効時間を過ぎると、ETag 値を比較検証するようになる。

HTTP/1.1 200
---
Cache-Control: max-age=31536000
---
# ボディ
ここにサイトのHTMLのコード

▼ クライアントサイドキャッシュあり (有効時間なし)

レスポンスヘッダーにて、Cache-Control ヘッダーに max-age=0 を設定する。

また、Expire ヘッダーに期限切れの日時を設定する。この場合、毎回のリクエスト時に ETag 値を比較検証するようになる。

HTTP/1.1 200
---
Cache-Control: max-age=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
---
# ボディ
ここにサイトのHTMLのコード


03. ディスクメモリ

ディスクメモリとは

メインメモリとストレージの間に配置される。

読み出しと書き込みの処理速度の差を緩和させる。

ディスクキャッシュ


04. GPUとVRAM

GPU

CPU より少ないパラメーターで、より高速に並列処理を実行できる。

画像処理や機械学習処理に的する。


VRAM

記入中...


サイズ

GPU と VRAM のサイズによって、扱うことのできる解像度と色数が決まる。

VRAM

富士通 PC の GPU と VRAM のサイズは、以下の通り。

本パソコンのVRAMスペック

色数によって、1 ドット当たり何ビットを要するが異なる。

p204