コンピューターの構成
CPU
記憶装置上にあるプログラムと呼ばれる命令列を順に読み込んで解釈・実行することで情報の加工を行います。
コンピュータ内での演算を行なう中心であり、CPUは通常はバスと呼ばれる信号線を介して主記憶装置や入出力回路に接続され、何段階かの入出力回路を介して補助記憶装置や表示装置、通信装置などの周辺機器が接続され、データやプログラムなど情報のやりとりを行います。
『フェッチ』、『デコード』、『実行』という3つのステップがほぼ必ず存在します。
『バス(bus)』とは?
コンピュータの内外、各回路がデータを交換するための共通の経路を指します 。
1つの信号線・通信線に複数のデバイスがぶら下がる構造を
「バス型トポロジー」と言い、「バス」の由来はこれです。
そのため、1対1で接続される専用経路(「ポイントツーポイント」)の場合はバスと言わない場合も多いです。
『バス』について詳しくは ⇒ バス(コンピューター)Wikipedia
『バスマスタ』とは?
バスマスターとは、バス上の転送制御を行うデバイスのことです。
バスマスターがバスの使用権を得て、ターゲットとなるデバイスを指定してデータ転送が行われます。
CPUやDMA(Direct Memory Access)コントローラー、PCIバスに接続されたデバイスなどがバスマスターになることができます。
多くの場合、バスマスターとなるのはCPUであるが、メモリと周辺機器との間の転送速度を向上させるため、周辺機器側にも制御機能が与えられます。
この時、データ転送はCPUが管理するが、大きなデータやCPUのパワーが少ない場合には処理に時間がかかるため、データ転送機能をSCSIコントローラーやPCIチップセットなどにも搭載しています。
デバイス 【 device 】
デバイスとは、機器、装置、道具という意味の英単語。
ITの世界では、比較的単純な特定の機能・用途のある電子部品・機器という意味と、コンピュータ内部の装置や周辺機器という意味で用いられることが多い。後者の意味では、CPUやメモリ、ハードディスク、ビデオカードなどコンピュータを構成する各装置や、キーボードやマウス、プリンタ、ディスプレイなどの周辺機器をデバイスと言う。
デバイスを動作させるには制御するソフトウェアが必要であり、これをデバイスドライバという。主要な製品のデバイスドライバはOSに同梱されていることが多いため普段はあまり意識することは無いが、新しく買ってきた機器を接続する際にはユーザがデバイスドライバを導入する作業を要求されることが多い。
主記憶装置
『主記憶装置(memory)』は、CPUなどのプロセッサーが直接アクセスすることのできる記憶装置。
メインメモリ、一次記憶装置とも。さらに短くして単にメモリとも呼ばれます。
『主記憶装置』には大きく分けて、
読み書き自由な『RAM』と、
読み取り専用の『ROM』があります。
コンピュータ関連で単に「メモリ」という場合、『主記憶装置』の中の『RAM』をいうことが多いです。
コンピュータの初期の頃は、水銀遅延線、ブラウン管記憶装置(ウィリアムス管)(1950年代)、磁気ドラムメモリ、あるいは磁気コアメモリ(1960年代)等を利用していたが、現在は一般的に半導体メモリを利用しています。
磁気コアメモリを使った『主記憶装置』は、電源の供給がなくなっても内容を保持できます。
『RAM』
半導体メモリを使った『RAM』は、ハードディスクドライブなどの補助記憶装置と比較すると高速であるものの、記憶容量が限られており、また、電源の供給がなくなると内容が消えてしまうという特徴があります。
そのため、『補助記憶装置』に内容を退避し、必要なときに再度読み込んで利用する形を取ります。
『ダイナミックRAM(DRAM)』,『スタティックRAM(SRAM)』の2種類存在。
ダイナミックRAM(DRAM)
一定時間経つとデータが消失してしまう。
スタティックRAM(SRAM)
電気を供給している限り内容を保持している。
『SRAM』は『DRAM』より高速なアクセスが可能であるが、構造上、『DRAM』の方が集積度を高められるため、現在の多くのコンピュータは『DRAM』を『主記憶装置』として利用しています。
最近のプロセッサー(以下、特にCPUについて記述)は、CPU自体の処理速度が極めて高速化しているにも関わらず、『主記憶装置』を構成する『DRAM』のアクセス速度の向上が追いつかないため、『主記憶装置』とCPUとの処理速度のアンバランスが生じています。
両者のギャップを埋め、より高速にデータを得るため、『DRAM』で構成された『主記憶装置』へのアクセスを直接行わず、高速動作が可能な『SRAM』で構成されたキャッシュメモリを経由してアクセスすることが多いです。
「Pentium 4」や「Athlon」など、おおよそ2000年以降に出回ったCPUでは、2段階及びそれ以上の段階のキャッシュメモリを経由して『主記憶装置』へアクセスする構造となっています。
補助記憶装置
記憶装置のひとつ。直接CPUがアクセスし演算できる主記憶装置に対して、CPUが直接アクセスできないものを『補助記憶装置』と呼びます。
データを保持する電子媒体と読み書きを行う駆動装置(ドライブ、またはリーダ/ライタとも呼ばれる)で構成されます。ストレージともいいます。
データを保持する記憶装置のコストバランス
通常、小容量 × 高速 ≒ 大容量 × 低速 が成り立ちます。
大容量 × 低速記憶装置の代表はハードディスクや磁気テープなどの補助記憶装置です。
記憶装置の理想は大容量×高速アクセス
通常コストパフォーマンスが悪く実現困難である。
そのため『小容量 × 高速』、『中容量 × 中速』、『大容量 × 低速』など複数段階にまたがった記憶構造とし(一般にCPUなどバスマスタに近い側を上位レベル、遠い側を下位レベルとする)、各レベルを各々下位レベルの一時記憶として用いることで代替する。
この構造を記憶階層(Memory Hierarchy)といいます。
高速度・小容量の代表CPUレジスタの『レジスタ』とは?
『レジスタ(register)』はコンピュータのプロセッサなどが内蔵する記憶回路で、制御装置や演算装置や実行ユニットに直結した、操作に要する速度が最速の、比較的少量のものを指します。
レジスターの種類
- アキュムレータ
- データレジスタ
- アドレスレジスタ
- ベースレジスタ
- インデックスレジスタ
- スタックポインタ
- ベースポインタ
- プログラムカウンタ
- ゼロレジスタ
- 汎用レジスタ(ジェネラルレジスタ)
- ページレジスタ、セグメントレジスタ
- ステータスレジスタ
レジスタとプログラミング言語
プログラミング言語において、式の評価途中の値などはいちいちメモリには書かず、『レジスタ』に保持したまま計算を続けたほうが効率が良い。
さらに、可能なら変数自体もメモリではなく『レジスタ』に割り付けてしまえば、さらに効率が良い。
そのようなレジスタのやり繰りの問題をレジスタ割り付けと言い、コンパイラ最適化の重要なテーマの一つです。
参照の局所性
実際のシステムでは、まんべんなく、ランダムにデータがアクセスされることは少なく、偏りが出て、このことを『局所性(Locality)』といいます。
1つのリソースに複数回アクセスする処理に関する情報工学上の概念。
『時間的局所性』、『空間的局所性』、『逐次的局所性』の3種類が存在。
参照の局所性を増大させて利用することは最適化の一般的な技術です。
メモリ階層(記憶階層)の各レベルで行われています。
時間的局所性 (temporal locality)
最近使われたデータであればあるほど再アクセスされる可能性が高い。
『キャッシュ』はこの特徴を利用した代表的なもの。
空間的局所性 (spatial locality)
使われたデータの近くのデータほど次に使われる可能性が高い。
読み出す際に、近くのデータも一緒に読み出す仕組み。
ブロックやページ、エクステントなどの塊で処理する時に活用されます。
『ページング方式』がこの特徴を利用した代表的なもの。
『ファイルシステム』においても『参照の局所性』を利用した最適化が行われることがあります。
(あるファイルの一部をリードしたプログラムはその続きをリードする可能性が高いため、最初のリード時に要求よりも大きめの単位で読み込んでおくといった『空間的局所性』を利用した最適化である。)
大抵のデータには『空間的局所性』が存在します。
一般的にデータ転送で『スループット』より『レイテンシ』、すなわちデータ転送帯域より転送距離が問題となる場合は、小さなデータを何度も転送するよりも少ない回数でより多くのデータを転送することで効率が向上します。
CPUキャッシュメモリの『ラインサイズ』は、この『空間的局所性』に鑑みて決定されます。
逐次的局所性 (sequential locality)
使われたデータの隣が使われる事が多いというもの。
『先読み』というI/Oの読み込みで活用。