PC 教室ハードウエア外部装置HDD とキャッシュ

ハードウエア~外部装置~HDD とキャッシュ

HDD は、 メモリと比べると、アクセススピードが遅いという話をしました。 HDD へのアクセスが始ると、 CPU は、メモリ以上に酷く待たされてしまうことになります。

ここまでで、ピンと来たかもしれませんね。 同じような話を、CPU とメモリの間のことでも書きましたね。 解決策は? そうです。キャッシュです。

CPU とメモリの間では、 アクセス動作の遅い DRAM を補うために、 動作が早い DRAM 以外のメモリチップをキャッシュとして使用しました。 HDD におけるキャッシュは、 ハードウエアで実現している部分と、ソフトウエアで実現している部分があります。

HDD の記憶場所を示すのは、セクター番号でしたね。 そのセクターに対してどういうアクセスの仕方をするかによって、 HDD のアクセススピードは大きく変わってきます。

セクター番号 0123... と若い番号から順番に読み込んだり、もしくは、書き込んだりするアクセスは、 シーケンシャルアクセス(Sequential Access)と言います。 また、セクター番号を無秩序な順番で読み込んだり、書き込んだりするアクセスは、 ランダムアクセス(Random Access)と言います。 RAM は、Random Access Memory の略でしたね。 RAM に関しては、無秩序にアクセスするのは、メモリ番地でした。 HDD に関しては、セクター番号が、アクセスにおけるキーになります。

HDD は、シーケンシャルアクセスの方が、 圧倒的にアクセススピードが速くなります。 HDD のキャッシュは、HDD へのアクセスを、 可能な限りシーケンシャルアクセスにするような、 手助けをする効果もあります。

ハードウエアで実現しているキャッシュは、HDD に搭載されています。 CPU から見れば、インタフェースの向こう側にあるキャッシュです。 ただし、CPU にとっては、 このキャッシュが存在するのかしないのかを知ることは出来ません。

キャッシュが搭載された HDD では、 HDD への読み込み要求があった際、 読み込むべきデータが、キャッシュ内に貯えられている場合は、 HDD にアクセスすること無く、 貯えられたデータを使います。

読み込むべきデータがキャッシュに無い時は、HDD から読み込みますが、 CPU のキャッシュと同じように、 キャッシュがいっぱいになるまで、余分に読み込んでおきます。

HDD への書き込み要求の場合は、 一度書き込むべきデータをキャッシュに貯え、 HDD へのアクセス要求が無くなった時、 もしくは、キャッシュが一杯になってしまった時に、 一気に書き込むようになっています。

これによって、ランダムアクセスが、シーケンシャルアクセスに近づけるようになります。

ソフトウエアで実現するキャッシュは、 メインメモリの一部を、二次記憶装置のキャッシュとして使うようにします。 これを実現するのは、OS の役割です。

HDD そのものに搭載されるキャッシュより、 こちらのキャッシュの方が、大きな効果をもたらします。 何故なら、二次記憶装置とのインタフェースを通じて交換されるデータの転送スピードより、 メモリと交換されるデータの転送スピードの方が、圧倒的に早いからです。

Windows NT の場合、 この二次記憶装置のためのキャッシュの存在すら、普通ならば、意識できないでしょう。 キャッシュに関する処理を、全て自動的にやっているからです。

CPU をアップグレードするりも、メモリを十分に搭載した方が、 トータルで考えた場合、快適になる」というような話を耳にしたことがあると思います。

メモリの容量に余裕がある場合、NT は、 二次記憶装置のためのキャッシュのサイズを、 自動的に大きなものにしてくれます。 二次記憶装置のためのキャッシュのサイズが大きくなれば、 HDD へのアクセスの頻度が減り、 CPU が待たされる時間も減ります。 トータルな処理能力が上がるわけです。

こういう点でも、メモリは多く搭載した方がメリットが大きいわけです。 逆に、メモリの容量が足らないシステムの CPU をいくら処理能力の高いものと交換しても、 CPU が待たされてしまう時間が短くなるわけではないので、 殆ど効果が無いのです。 ボトルネックを正しく見極め、効果的な対策を取ることが肝心です。