読むだけでいい基本情報技術者対策13:ハードディスク
今回はハードディスクについて勉強していきます。
ハードディスクはPCや大型コンピュータなどまで使われる磁性体を塗布した円盤状のディスクです。アクセスアームの先端にある磁気ヘッドを移動させてデータを読み取ります。データ転送は高速で、大容量です。HDD(Hard Disk Drive)とも呼ばれます。
磁気ディスクの構造はこの動画を見てもらうと一発で分かります。
ディスクの表面にはデータを記述できる最小単位であるセクタがあり、それが一周分でトラックになります。トラックの縦方向に同じ位置のものをまとめてシリンダといいます。
ですので、ディスクの容量は、セクタに容量をaバイト、セクタの数をb個、トラックの数をc個、シリンダの数をd個とすれば
a × b × c × d
で表されますね。
セクタ方式ではセクタには複数のデータは書き込むことができないため、余った部分は無駄なスペースとなります。
ディスクへの書き込みと消去を繰り返すと、使っているセクタと使っていないセクタがトラック上にバラバラに位置してしまうことがあります。このような現象をフラグメンテーションといいます。こうなると、磁気ヘッドがあっちこっちに行く必要があり、無駄に時間使ってしまい、アクセス速度が落ちます。このような場合には最適化ソフトを使うことが推奨されています。
磁気ヘッドが目的のデータを見つけ出して、データを転送するまでの時間をアクセス時間といいます。
ハードディスクはアクセス時間に次のような挙動をします。
①まず、磁気ヘッドを目的のセクタがあるトラックまで伸ばします。これをシーク時間といいます。平均位置決め時間が使われます。
②次に、目的のセクタまでディスクを回転させます。これはサーチ時間や平均待ち時間といい、一回転に必要な時間の半分がかかるとされています。
③データ転送時間です。これは目的のセクタをヘッドが通過するのに要する時間です。
①~③の時間をすべて足すとアクセス時間になります。
次はハードディスク以外の補助記憶装置を見ていきます。
読むだけでいい基本情報技術者試験対策12:記憶装置3ーライトスルー方式、ライトバック方式
今回はキャッシュメモリにデータを書き込む命令が実行されたときの、キャッシュメモリとメインメモリの動作について学んでいきます。
まず、ライトスルー方式です。
これは、キャッシュメモリにデータ書き込み命令が実行されたとき、キャッシュメモリの内容も、メインメモリの内容も変えてしまう方式です。これはキャッシュメモリとメインメモリの内容が同一なので、データの一貫性が保たれるというメリットがありますね。制御や回路も簡単になるというメリットがあります。しかし、これが仇となり、書き込み速度が落ちてしまいます。
次にライトバック方式です。
これは、キャッシュメモリだけをまず書き換え、一定量データが蓄積されたらメインメモリを書き換えるという方式です。単純に書き込み頻度が減るため、高速になりますが、一定の状況下ではキャッシュされたデータが消えることになります。
どちらの方式を採用しても、アクセスするデータはいずれかのメモリに必ず存在していることになります。
アクセスするデータがキャッシュメモリにある確率をヒット率といいます。ですので、メインメモリに存在する確率(NFP:Not Found Probabilityといいます)は(1-ヒット率)ですね。どちらのメモリでどれだけの速度でアクセスできるかが分かれば、これらを掛けることで、メインメモリへのアクセス時間とキャッシュメモリへのアクセス時間が求まります。データはどちらかに必ずあるので、両者を足すと実際にアクセスにかかる時間が求められます。これを実行アクセス時間といいます。
ヒット率:r
メインメモリのアクセス時間:b
とするなら
実行アクセス時間=a×r+b×(1-r)
となります。
ここまで、キャッシュメモリ、メインメモリ、ストレージという記憶装置を見てきましたが、アクセスの時間は次のようになっています。
レジスタ く キャッシュ く メイン く デスク く ストレージ(ハードディスク)
レジスタはCPUの中に作られるものなので一番早くて当たり前ですよね。
メインメモリはストレージからデータを引っ張ってくるので、ストレージへのアクセスが一番長くかかるのも納得行くでしょうか。
次回は記憶装置で唯一まで見ていないハードディスクを見ていきます。
読むだけでいい基本情報技術者試験対策10:記憶装置1ーメインメモリとキャッシュメモリ
今回からは記憶装置について学んでいきます。
まずはメモリというものは何かというところから始まりますが、その前に、
メモリ と ストレージ は全く違うものであることに気をつけましょう。
これからやるメモリとは、CPUが処理する内容を「一時的に」記憶しておくための装置です。CPUには制御機能、処理機能がありますが、処理することや処理した結果を覚えておくことはできません。処理している間CPUの記憶の補助をするのがメモリの役割です。ですので、容量はストレージに比べるとかなり小さいですし、処理が終わったり、電源を切ったりするとメモリは記憶を失います。その代わり、アクセスの速さはストレージよりもずっと高速です。
対してストレージ、補助記憶装置とも言ったりしますが、これは電源を切っても記憶を失わない性質があります。ストレージは容量が大きいですが、メモリよりもアクセスは遅いです。
メモリには2種類あり、メインメモリとキャッシュメモリがあります。
まず、メインメモリについてお話しましょう。
メインメモリには後述する、DRAMというものが使われています。メインメモリは容量が比較的大きいという特徴がありますが、アクセス時間があまり早くありません。CPUが処理する時間のほうが圧倒的に速いため、待ち時間が生じてしまいます。もしすべての処理をメインメモリのみで行っていたら処理能力はかなり落ちるでしょう。
そこで、考え出されたのが、、
キャッシュメモリというものです。
キャッシュメモリは小容量ですが、メインメモリより高速です。この特性を生かして、
メインメモリ→→キャッシュメモリ→→CPU
↘→→→→→→→→→→↗
というようにCPUとメインメモリの間にキャッシュメモリを置きます。メインメモリから読み込んだデータをキャッシュメモリに保持しておき、もし同じデータが要求されたら、即座に取り出せるようにしたものです。
このキャッシュメモリを数個連結させて他レベルの階層構造を構築することで、CPUとメモリの時間のギャップを埋める効果はより上がります。CPUがアクセスする順番によって1次キャッシュ、2次キャッシュと呼ばれます。
このキャッシュの考え方は実はウェブブラウザにも応用されています。
履歴を見ると、キャッシュという欄を見つけることができると思いますが、これは一度訪れたウェブページのデータをキャッシュに記録しておき、再度訪れた際に読み込み時間を縮めることができます。
しかし、キャッシュもデータなので、これが大きすぎるとウェブブラウザの挙動に支障をきたすことがあるので、定期的に消すと動きが軽くなることが知られています。
このように、動作の速度に差がある装置間の差を埋める働きをするものをバッファといいます。
実は記憶装置に関してはもう一種類知っておかないといけないものがあります。それは、デスクキャッシュというものです。これはメインメモリとストレージの間のアクセス時間を補うためにキャッシュメモリのような位置づけで設置されるものです。PCのストレージはハードディスクなどが使われていることが多いですが、これはアクセス時間がメモリに比べて低速です。そのため、デスクキャッシュというものが置かれます。ハードディスクの一部を使用する場合、メインメモリのいち部を使用する場合の2種類があります。
次はこのメインメモリとキャッシュメモリについて、使われてる半導体などの踏み込んだ話をしていきます。
読むだけでいい基本情報技術者試験対策11:記憶装置2ー半導体メモリ
今回は、前回学んだメインメモリとキャッシュメモリというのは実際にどんなもので作られ、どのような性質を持っているのかを学んでいきます。
コンピュータの中の記憶装置は半導体メモリで構成されています。これには主に2つの分類があります。RAM(Random Access Memory)とROM(Read Only Memory)です。RAMは電源を切るとそれまで保持していた記憶を失う性質があります。この性質は揮発性と呼ばれています。対してROMは記憶が失われないため、不揮発性ということになります。一長一短があるということですね。
まず、RAMの話をしていきましょう。
RAMはさらに2つに分類されます。DRAM(Dynamic RAM)とSRAM(Static RAM)です。両者は性質がかなり異なります。
DRAMはコンデンサに電荷を備えているか備えていないかで1ビットを表現します。例えば電荷を持っていれば1で持っていなければ0というなやり方です。電荷で情報を表現するため、電源が供給されなくなれば記憶は失われてしまうのですね。DRAMは構造が簡単で、高集積化に適しているためSRAMよりも安価になります。たくさん重ねて使うことでより賢くなれるということです。コンデンサは電荷を情報単位としているため、放置すると自然放電してしまいます。そのため、一定時間ごとに記憶内容を維持するためのリフレッシュという作業を行う必要があります。これは記録を再書き込みするということです。DRAMは主にメインメモリに使用されます。
SRAMはフリップフロップ回路で構成されます。そのため、高速だが、構造は複雑になり、集積度を高めにくく、小容量で高価になってしまいます。電源が供給される限りは記憶内容を保持できるため、リフレッシュは不要です。キャッシュメモリに使われます。
次にROMです。ROMは本来読み出し専用ですが、ユーザーが自由に消去、書き込みができるPROM(Programmable ROM)というものも出てきています。
ROMはPROMも含めて4つ種類があります。
マスクROMは書き込みも消去もできません。製造時に書き込まれたデータ以外、ユーザーは書き込むことができない仕組みになっています。
EPROM(Erasable ROM)は紫外線を当てることで中身を全消去できます。書き込みも可能です。
EEPROM(Electrically Erasable ROM)は電圧をかけることで部分消去が可能です。消去・書き込みは1バイト単位で行えます。
最後にフラッシュメモリも電圧をかけて全消去や部分消去が可能です。書き換えはブロック単位ででき、消去後に書き込むことができます。
今回はここまでです。次はこのような素材からなるメインメモリやフラッシュメモリは実際にどのような運用がされているのかを見ていきます。
読むだけでいい基本情報技術者試験対策9:CPUの種類
今回はCPUの種類や亜種について学んでいきます。
CPUにはその用途に応じて、2つに分類されます。
1つは、CISC(Complex Instruction Set Computer)です。シスクと呼ばれています。これは複雑な命令を処理することに優れています。PCに入っているCPUはこれです。
もう1つはRISC(Reduced ISC)です。これは命令体系は単純で命令長も固定のものしか扱えません。組込みシステムでよく利用されているものです。
このCISCとRISCの話を聞くと、どうもRISCの方が先にできていて、CISKはRISCの単純な上位互換なのではないかと思ってしまいますが、実はそうではありません。
もともとSICSは1970年代に計算機の性能を上げるために採用されていたものです。当時は、1つの複雑な命令をいかに効率よく行えるかで全体の効率を上げようという流れでした。しかし、ある時、逆に簡単な命令を組み合わせて複雑な計算を行えば全体として処理能力が速くなるのではないかと考えた人がいました。これを実装するために、命令長を揃えたパイプライン処理というものが考案されたのです。
このため、CISCには命令長や命令フォーマットには決まりがないことや、1つの命令を複数のクロックに渡って実行できるという柔軟さがあるという特徴があります。逆にRISCには命令長は固定サイズで、単一クロック処理を行うという特徴があります。
この当たりはこのサイトが詳しいです。
次に、マルチコアプロセッサというものについて説明していきます。
これは、1つのCPU内に複数のコアを集積したマイクロプロセッサです。シングルコアと比較して消費電力を押さえながら処理速度を高速化できるというなんとも都合のいいやつです。コアが2つでデュアルコア、4つでクアッドコアと呼びます。
最後にGPUの話題にも触れておきます。
GPUとは3D画像処理を高速に実行する演算装置です。数千のコアでデータを並列処理できます。近年のPCのCPUにはGPUが内蔵されたモデルが使用されています。
このGPUは暗号通貨のマイニングで使われることでも有名です。
CPUほど命令の実行に柔軟性はありませんが、特定の用途には強力な処理能力を持つのが特徴です。PlayStationなどの中にも入っており、ここでは刻一刻と変化する画面を生成する処理をしています。簡単に言えば、大量の行列計算を並列で、とてつもなく速い(リアルタイム)で処理しているのです。
今回はここまでです。
ここでコンピュータの5つの装置の処理に関係するCPUの話題が終わりました。次からは記憶装置について学んでいきます。
読むだけでいい基本情報技術者試験対策8:CPUの処理速度の高速化
今回はCPUにおける処理をどのよういに高速化できるかということを勉強していきましょう。
我々のPCが高速化していく中で、処理すべき情報は幾何学級数的に増えていきます。命令の実行過程を工夫することで、このような大量の処理を効率良く行い、CPUによる処理を高速化できます。
前回、前々回の復習ですが、命令の実行過程には6つの段階がありました。
①命令取得→②命令解読→③実行アドレス計算→④オペラント取得→⑤命令実行→⑥演算結果の保存
でしたね。これらの段階を実行するやり方には幾つかあります。
大別して2つあり、一つは逐次制御方式、もう一つはパイプライン処理です。
逐次制御方式とは、命令サイクル①~⑥までを1命令ずつ繰り返し実行する方式です。これが基本的なやり方であり、イメージもしやすいと思います。
例
命令1 処理①~⑥ → 命令2 処理①~⑥ →命令3 処理①~⑥→…
次にパイプライン方式です。これは命令実行サイクルの各段階を並行して実行することで処理速度を上げるやり方です。この処理方法では、分岐命令が出現すると、先読みしていた命令を破棄して新たに分岐先の命令を実行し直す必要があります。このようにして処理の順序が乱れることをパイプラインハザードといいます。このため、分岐命令に対処するための方法がいくつかあります。1つは分岐予測といい、実行される確率が高い方を予測しておくものです。もう1つは投棄実行といい、予想した分岐先の命令を予め処理し、その結果を保持して、分岐先が正しければその結果を採用し、異なればやり直すという処理があります。
例
命令1 ①→②→③→④→⑤→⑥
命令2 ①→②→③→④→⑤→⑥
パイプライン処理には幾つかの種類があります。
スーパーパイプラインとは、命令の実行段階をさらに細分化してパイプラインの動作効率を向上させる方式です。
例
命令1 ①→→②→→③→→④→→⑤→→⑥
命令2 ①→→②→→③→→④→→⑤→→⑥
スーパースカラとは、複数のパイプラインを設け、複数の命令を同時並行で実行する方式です。
例
命令1 ①→→②→→③→→④→→⑤→→⑥
命令2 ①→→②→→③→→④→→⑤→→⑥
命令3 ①→→②→→③→→④→→⑤→→⑥
命令4 ①→→②→→③→→④→→⑤→→⑥
今回はここまでです。次回はCPUの種類などについて勉強していきます。
読むだけでいい基本情報技術者試験対策7:命令の実行過程その2
前回は命令文がCPUとメインメモリの間でどのように行き来するかを学びました。名レジスタは命令部とアドレス部に分割されそれぞれの場所で処理されます。
このとき、アドレス部は、命令部が演算装置に行わせる演算に必要なデータを引き渡す手助けをします。すなわち、データのありかを演算装置に教えてあげるわけですね。
ですので、もっと平たく言えばアドレス部の役割は演算装置にデータを渡してあげることなのです。この「データの渡し方」というのは様々なやり方があります。
この際、アドレスを特定のところ、あるいは特定のところから一定値感覚をあけたアドレスなど、アドレスに様々な変更を加えることがあります。このことをアドレス指定、あるいはアドレス修飾といいます。このアドレス修飾のやり方をいくつか紹介していきます。
まず、直接アドレス指定です。これは命令のアドレス部を実行アドレスとする方式です。つまり一番スタンダードなやり方ですね。
次に、即値アドレス指定です。命令レジスタは命令部とアドレス部の2つに別れていますが、このうちアドレス部に、命令の実行に必要なデータが直接入っているという方式です。この場合、メインメモリのアドレスを参照することはありませんよね。何故なら、アドレスが入ってるはずの箱にデータが入っているのですから。
次は間接アドレス指定です。これは命令のアドレス部に「実行アドレスが入っているアドレス」を格納する方式です。演算装置的には、「お、データのアドレスはここAだな。データはAに入っているんだろ、多分。→ん、データがないぞ。でもなんかここAにもアドレスが入ってるぞ、データはどこなんだろ。とりまこのアドレスBに飛んでみるか。→ここBにデータあるんかーい。」という感じでしょうか。たらい回しをイメージしてください。
次に、相対アドレス指定です。自己相対アドレス指定とも言います。アドレス部にはある値が格納されています。これを仮に5としましょう。そして、別なところに命令アドレスレジスタ(プログラムカウンタ)があります。こちらには10という数字が格納されています。この方式では両者の数値を足し合わせたアドレスを実行アドレスとします。つまりアドレス15ですね。これが実行アドレスです。ここに実行に必要なデータが入っています。5でも10でもなく15です。この指定方式で来るとこのような処理を経ます。
次に、インデックスアドレス方式(指標アドレス指定)とベースアドレス指定(基底アドレス指定)を一気にいきます。これらの指定方式は相対アドレス指定とほぼ同じです。ただ、足し合わせる数値がインデックスレジスタ(指標レジスタ)かベースレジスタ(基底レジスタ)かという違いだけです。
今回はここまでです。これで命令の実行過程は終了です。次回からはCPUをどうやって高速化するかという話をしていきます。