基本情報技術者 ~メモリ[2]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



前回はメモリの全体像について触れました。



まだご覧になっていないという方は以下から



ぜひご覧になってください!



 

potato-head0809.hatenablog.com



では、早速今回の内容に入っていきたいと思います!



主記憶装置と高速化の為の手法



まずは以下の図を見てください。



f:id:potato_head0809:20200825184340p:plain




上記の画像ではCPUのレジスタとメモリとハードディスクの



関係性について書かれています。



ここに書かれてある通り、大きな速度差が存在します。



CPUはメモリへの読み書きが発生すると待たされることがあり、



メモリはハードディスクへの読み書きが発生すると待たされる



といったような感じです。



そこで、「すべてを高速にしてしまおう!」と思うかもしれませんが、



高速なものは高価になり、かつ小容量です。



何だか残念ですね〜。



そこで、今回の大事な内容に入ります。



ここで扱う手法には「キャッシュ」というものがあります。



それはどんなものかを簡単に説明すると...。



   

「キャッシュ」


   

装置間の速度ギャップを緩和させる為に用いる手法。


キャッシュメモリ

レジスタとメモリの間に設けるキャッシュ


「ディスクキャッシュ」

メモリとハードディスクの間に設けるキャッシュ





CPUはコンピュータの動作に必要なデータやプログラムを



メモリ(主記憶装置)との間でやりとりします。



しかし、先ほどのCPUやメモリとの関係性を書いた図のように



メモリはCPUに比べて遅いものです。



その為、読み書きの為にCPUがメモリへアクセスすると、



待ち時間ばかり発生してしまうということはイメージできるでしょうか。



速度差を無くしたいためには工夫が必要になります。



そこで、メモリとCPUの間に、より高速にやりとりできるメモリを置きます。



それこそが、「キャッシュメモリ」というものです。



以下の図を見てください。



f:id:potato_head0809:20200825214520p:plain




このようにCPUの中にはキャッシュメモリが入っているのです。



そして処理の高速化が図られています。



そしてそして、キャッシュというものは1つだけとは限りません。



1次キャッシュ、2次キャッシュというように、いくつか設置出来ます。



もう少し、詳しく見ていきましょう。



CPUに内蔵できる容量は小さいものになります。



そこで、「それよりは低速だが、容量を大きく持てるメモリ」を



CPUの外側にキャッシュとして増設した場合、キャッシュの効果に期待できます。



この時に用いられるのが「SRAM」です!



f:id:potato_head0809:20200825215319p:plain




これまで説明したキャッシュメモリの同じ役割を



主記憶装置と磁気ディスク装置の間で担うのがディスクキャッシュです。



ディスクキャッシュは専用に半導体メモリを搭載したり、



主記憶装置の一部を借りて実装します。



以下の図を見てイメージしてください。



f:id:potato_head0809:20200825215640p:plain




主記憶装置へ書き込む方法



キャッシュメモリは読み出しだけで使われるわけではありません。



書き込みでも使われます。



書き込みの場合、書いて終わりというわけにはいきません。



更新した内容を主記憶装置にも反映させなくてはいけません。



f:id:potato_head0809:20200825220010p:plain




主記憶装置を書き換える方式は2つあります。



「ライトスルー方式」と「ライトバック方式」です。



図で説明しますので、見てみてください!



f:id:potato_head0809:20200825220132p:plain




図で見たように、主記憶装置への書き込み内容を



反映させるタイミングで方式が変わります。



同時に反映させるか、必要な時に反映させるか。



です。



ヒット確率と実効アクセス時間



CPUがデータを探すとき、キャッシュメモリがあれば



高速化が図れるという話をしてきました。



しかし、キャッシュメモリは容量が小さいですよね。



なので、目的とするデータが必ずしもそこに入っているとは限りません。



そこで次のような考え方があります。



f:id:potato_head0809:20200825220619p:plain




つまり、「80%の確率でキャッシュの中身がヒットしてくれる」場合、



「主記憶装置に読み込みにいかなければいけない確率が20%」



というような感じです。



キャッシュメモリを利用したコンピュータの平均的なアクセス時間のことを



実効アクセス時間と言います。



この実効アクセス時間はヒット率を使用して以下のように求められます。



f:id:potato_head0809:20200825220955p:plain




メモリインタリーブ



高速化についてこれまでも触れましたが、



もう少し主記憶装置へのアクセスの高速化について見ていきましょう。



キャッシュメモリ以外に「メモリインタリーブ」というものがあります。



メモリインタリーブとは...。



   

「メモリインタリーブ」

   
   

主記憶装置の中を複数の区画(バンク)に分割



まずは図で見ていきましょう。



f:id:potato_head0809:20200825221454p:plain




主記憶装置の番地は、図のように



区画を横断するように割り当てられています。



そのため、複数のバンクにアクセスすると



連続した番地のデータを一気に読み出せるのです。



f:id:potato_head0809:20200825221649p:plain




ここで注意が必要なのは、ランダムアクセスなど



連続しないデータを扱いたいときには向かないということです。



まとめ



今回でメモリについての内容は終了です。



どうだったでしょうか。



まずはメモリについて全体像をイメージし、



今回の記事では高速化について触れました。



似たような名前がたくさん出てきたので



難しかったかもしれません。



実際に私もまだ完璧には理解していません。笑



しかし、仕組みが分かれば面白いと感じることができると思います!



次回も基本情報技術者の試験について記事を書きたいと思っています。



ぜひ次回も役に立てて頂ければ幸いです。



最後までご覧いただきありがとうございました!