FE EXAM

ライトスルー方式(同時書き込み)

キャッシュへの書き込みと同時に主記憶にも書き込む方式

INTERACTIVE VISUALIZATION
CPU
キャッシュ
主記憶
値が一致
キャッシュの値
10
主記憶の値
10
一貫性
一致
シナリオ
ステップ1 / 6
書き込み内容
0x201042番地と新しい値
STEP 1/6初期状態はじめは番地 0x20 の値が、キャッシュにも主記憶にも「10」として保持されています。両方が同じ値なので一貫性がある状態です。これから CPU がこの値を「42」に書き換えます。
CPU書込む値42キャッシュ保持値10主記憶保持値10一致キャッシュと主記憶の値の一致状況
解説

📌
ライトスルー方式とは

キャッシュと主記憶に「同時」に書くCPUキャッシュ主記憶書き込みは両方に届く → 常に同じ値

ライトスルー方式(write through)とは、CPUがデータを書き込むとき、キャッシュへの書き込みと同時に主記憶にも同じ値を書き込む方式のことです。「through(通り抜けて)」という名前の通り、書き込みがキャッシュを通り抜けて主記憶まで届くイメージです。

キャッシュは普段、主記憶のデータのコピーを持っています。ここで「キャッシュだけ書き換えて主記憶は古いまま」にしてしまうと、両者の値が食い違ってしまいます(一貫性の問題)。ライトスルー方式は、書き込みのたびに主記憶も必ず更新することで、キャッシュと主記憶の値を常に一致させるのが特徴です。

身近な例で考えると、手帳に予定を書くと同時にスマホのカレンダーにも入力するようなものです。手帳(キャッシュ)だけに書いておくと、後でスマホ(主記憶)と食い違って混乱します。書くたびに両方へ反映しておけば、どちらを見ても同じ予定が確認できます。上のツールで▶ボタンを押すと、CPUの書き込みがキャッシュと主記憶の両方に反映される流れが1ステップずつ見られます。

📌
動作の流れ

1CPUが書込要求2キャッシュ更新3主記憶も更新4両方が一致ステップ2と3はほぼ同時に行われる

ライトスルー方式での書き込みは、おおむね次の流れで進みます。
① CPUが書き込みを要求:「この番地にこの値を書け」とキャッシュへ伝える
② キャッシュを更新:キャッシュ上の値を新しい値に書き換える
③ 主記憶も更新:同時に主記憶の同じ番地にも新しい値を書き込む
④ 完了:キャッシュと主記憶が同じ値になり一致が保たれる

ポイントは、②と③が「同時」に行われることです。キャッシュにだけ書いて主記憶を後回しにする、ということはしません。そのため、書き込み処理が完了した時点では必ず両者の値が一致しています。上のStats(統計)で「キャッシュの値」「主記憶の値」「一貫性」が、ステップを進めるごとにどう変わるか確認してください。途中の「キャッシュへ書き込み」の段階では一瞬だけ値が食い違いますが、すぐに主記憶も更新されて一致に戻ります。

なお、書き込みではなく読み込みのときは、これまで学んだキャッシュの動き(ヒットなら高速、ミスなら主記憶から取得)と同じです。ライトスルー/ライトバックという区別は、あくまで書き込み時の主記憶の更新タイミングについての方式の違いです。

⚖️
利点と欠点

ライトスルー方式には、はっきりとした利点と欠点があります。「常に一致させる」という性質の裏返しとして、書き込みが遅くなる、という関係です。

利点(メリット)
一貫性が保たれる:キャッシュと主記憶の値が常に一致
仕組みが単純:書き込みのたびに主記憶へ送るだけ
データが安全:停電などで内容が消えても主記憶に最新値が残る
欠点(デメリット)
書き込みが遅い:毎回、遅い主記憶への書き込みが発生
主記憶が混む:書き込みのたびにアクセスが集中する
無駄が出やすい:同じ番地に何度書いても毎回主記憶へ送る

上のツールの「主記憶の書き込み完了を待つ」ステップが、まさに欠点を表しています。書き込みのたびに遅い主記憶アクセスが発生するため、書き込みが多いプログラムでは性能が落ちやすいのです。

この欠点を改善したのがライトバック方式です。ライトバックでは書き込みをいったんキャッシュだけに留め、そのデータがキャッシュから追い出されるときにまとめて主記憶へ書き戻します。書き込みは速くなりますが、追い出すまではキャッシュと主記憶の値が食い違うため、一貫性の管理が複雑になります。「一貫性のライトスルー」対「速度のライトバック」というトレードオフ(あちらを立てればこちらが立たない関係)として対比して覚えるとよいでしょう。

📌
ライトスルーとライトバックの比較

書き込み時の主記憶の更新タイミングが違うライトスルー書込と同時に主記憶も更新一貫性 ○ / 速度 △ライトバック後でまとめて主記憶へ書き戻す速度 ○ / 一貫性 △

ライトスルーとライトバックは、「主記憶をいつ更新するか」という書き込み方式の違いです。どちらも「キャッシュに書く」という点は同じですが、そのあとの主記憶への反映タイミングが異なります。

ライトスルーライトバック
主記憶の更新書き込みと同時(毎回)後でまとめて(追い出し時)
書き込み速度遅い(主記憶を毎回待つ)速い(キャッシュだけで完了)
キャッシュと主記憶の一致常に一致追い出すまで不一致になる
仕組みの複雑さシンプル複雑(ダーティフラグ管理が必要)
データの安全性高い(停電でも主記憶に最新値)低い(キャッシュだけに最新値の期間がある)

表中のダーティフラグ(=「キャッシュの内容が主記憶と食い違っている」という目印)は、ライトバックで使われる重要な概念です。キャッシュの各行に「まだ主記憶に書き戻していない」フラグを立て、追い出すときだけ主記憶に書き戻す仕組みです。ライトスルーにはこの管理が不要な分、仕組みがシンプルになります。

📌
キャッシュとは何か — CPUと主記憶の速度差を埋める仕組み

CPUは速い・主記憶は遅い → 間にキャッシュを置くCPU超高速キャッシュ高速・小容量(SRAM)主記憶低速・大容量キャッシュが「近くに置いたコピー」として速度差を補う

キャッシュ(cache)とは、CPUと主記憶の間に置かれた、小容量だが高速なメモリのことです。なぜ必要かというと、CPUと主記憶の間には大きな速度差があるからです。

速度差の理由を整理すると次のようになります。
CPU:計算を行う装置。ナノ秒( ns =10億分の1秒)単位で動作する非常に高速な素子
主記憶(メインメモリ):データを一時的に保持する場所。DRAM でできており、CPU に比べると数十〜数百倍遅い
この速度差のせいで、CPU が計算するたびに主記憶を読みに行くと、大部分の時間を「待ち」に費やしてしまいます。

身近な例で考えると、図書館の本棚(主記憶)から必要な本をいちいち取りに行く代わりに、机の上によく使う本を手元に置いておく(キャッシュ)イメージです。手元にある(キャッシュにヒット)なら一瞬でアクセスでき、手元にないときだけ本棚(主記憶)へ取りに行きます。このキャッシュがあるおかげで、CPU はほとんどの場合、主記憶を待たずに高速でデータを読み書きできます。

関連コンテンツ