3秒でわかる
データを保持しておく装置の総称。速いが電源で消えるメモリと、遅いが残るSSDやHDDを役割で使い分けるのが設計の基本です。
もう少し詳しく
どういうものか
記憶装置は、データを保持しておくための装置の総称です。電源を切ると内容が消える主記憶装置と、電源を切っても残る補助記憶装置に大きく分かれます。前者の代表がメモリで、後者の代表がSSDやHDDです。CPUに近いほど高速で容量が小さく、遠いほど低速で容量が大きいという関係があり、レジスタ、キャッシュ、メモリ、SSD、テープの順に階層をなしています。
なぜ必要か
すべてを最速の記憶装置でまかなえば理想ですが、容量あたりの価格が桁違いに高く現実的ではありません。よく使うものだけを速い場所に置き、残りを安い場所に置くことで、価格と速度を両立させます。この考え方は記憶階層と呼ばれ、CPUキャッシュからブラウザのキャッシュまで同じ発想で作られています。速い場所は容量が小さいので、何を置いて何を追い出すかを決める規則が要ります。最近よく使われたものを残す方式が代表的で、これが当たっているあいだは遅い装置まで取りに行く回数が減り、体感速度が上がります。
具体例
体感しやすいのは読み書き速度の差です。
レジスタ 1ナノ秒未満 数百バイト 揮発
キャッシュ 数ナノ秒 数MB 揮発
メモリ 約100ナノ秒 数GB〜数十GB 揮発
SSD 数十マイクロ秒 数百GB〜数TB 不揮発
HDD 約10ミリ秒 数TB 不揮発メモリとHDDでは10万倍ほど差があります。プログラムがファイルを1行ずつ読むたびにディスクへ行くと遅いのは、この差が理由です。
# 一度メモリへ読み込んでから何度も使う
with open("access.log") as f:
lines = f.readlines() # ここだけがディスクアクセス
errors = [l for l in lines if "ERROR" in l]つまずきやすいところ
容量の単位で混乱しがちです。SSDの表記にある1TBは1兆バイトを指し、OSが1024進で数えると約931GBと表示されます。壊れているわけではありません。もうひとつ、SSDには書き換え回数の上限があります。ログを毎秒書き続けるような設計は寿命を削るので、まとめて書く工夫が必要です。不揮発だから安心とも限りません。装置はいつか必ず壊れるものとして、別の場所へ複製を持つ前提で設計します。
覚え方
速い順に並べると、そのまま高い順、そして容量の小さい順になります。この3つは常に同じ向きです。
似た用語との違い
| 語 | 内容 |
|---|---|
| 主記憶装置 | CPUが直接読み書きするメモリ 電源で消える |
| 補助記憶装置 | SSDやHDDなど電源を切っても残る装置 |
| キャッシュ | よく使うデータを速い場所へ写しておく仕組み |