generated at
コンピュータアーキテクチャのエッセンス [第 2 版]


本書は、プログラマが知っているべきハードウェアの基本的側面を説明する書籍
コンピュータアーキテクチャのテキストの大半は、ハードウェア設計を学ぶ学生に向けてハードウェア技術者が書いたものなので、本書は珍しい
1 部はデジタル回路の基礎、2 部から 4 部まではプロセッサメモリ入出力、5 部は高度な話題
テキストとラボの課題はパデュー大学で扱っているもの

1 章 序論と概要
ハードウェアを理解することで、より小さく、高速で、エラーを起こしにくいコードを書けるから

1 部 基礎
2 章 デジタル論理回路の基礎
複数の要素を扱うために、ソフトウェアでは反復するが、ハードウェアでは複製する
ほとんどのデジタル回路集積回路 (IC : integrated circuit) から作られる

3 章 データとプログラムの表現
ブール代数論理値 (0 と 1) という抽象
ビット列を人間が扱いやすいように 16 進記法を用いることが多い

2 部 プロセッサ
4 章 さまざまなプロセッサと計算エンジン
コンピュータ構成の 2 つの基本アプローチ
クロックが速ければ処理速度も高いが、クロック周期と取得・実行サイクルの進行周期は同一ではない
命令によって必要なサイクルは違う

5 章 プロセッサの種類と命令セット
プログラマブルなプロセッサの設計において、アーキテクトは次の決定的な判断を下す

6 章 データパスと命令実行

7 章 オペランドのアドレッシングと命令表現
明示的なオペランド符号化 : 型情報をオペランドに紐づける

8 章 CPU : マイクロコード、保護、プロセッサモード
コンピュータの歴史では、初期に集中という考えが生まれ、できるだけ多くの機能を 1 つのプロセッサに集めようとした → 中央処理装置 (CPU)
現在のコンピュータシステムは分散アプローチになったが、CPU という言葉は残っている
CPU の実行モード、特権と保護
複雑な CPU を構築するため、CPU を 2 つに分けて構築する場合がある
マイクロコントローラと呼ばれる高速で小さなプロセッサ
マイクロコードによってマクロ命令セットが実装される
命令のアウトオブオーダー実行、スコアボードでの追跡

9 章 アセンブリ言語とプログラミングパラダイム
低水準プログラミングやそのプログラミング言語はコンピュータアーキテクチャの一部ではないが、密接な関係

3 部 メモリ
10 章 メモリとストレージ
メモリと聞いて多くのプログラマが思い浮かべるのは主記憶 (メインメモリ) のこと

11 章 物理メモリと物理アドレッシング
ほとんどのコンピュータで主記憶システムとして使われる種類のメモリをランダムアクセスメモリ (RAM) という
メモリの性能
演算の連なりを、どれだけ速く実行できるか? → メモリサイクル時間
複数の物理メモリの利用
メモリバンク : 複数の物理メモリで大きな 1 つのメモリを構成
メモリのインターリーブ (相互配置) : アドレスが連続するワードを、別々のメモリモジュールに互い違いに配置

12 章 キャッシュとキャッシング

13 章 仮想メモリ技術と仮想アドレッシング

4 部 入出力
14 章 入出力の概念と用語
コンピュータと外部デバイスの相互作用は 2 種類
コンピュータがデバイスを制御
コンピュータとデバイスがデータを交換
I/O インターフェイスは 2 つのカテゴリ
パラレルインターフェイス : 複数のデータビットを同時に転送できる
シリアルインターフェイス : どの瞬間も 1 ビットのデータしか転送できない
クロック周期の違いをインターフェイスでどう調停するか?
全二重交信 : 双方向の転送を同時に進行可能
反二重交信 : 同時に一方向の転送しかできない
多重化のテクニック : 大きなデータをハードウェアで細分化して 1 片ずつ転送する
マルチプレクサデマルチプレクサというハードウェア

15 章 バスとバスアーキテクチャ
バスは一度に 1 つの転送しかできないが、スイッチングファブリックは複数の転送を同時にできる

16 章 プログラム駆動と割り込み駆動の入出力
最初期のコンピュータはプログラム駆動の入出力
デバイスに存在する回路を CPU が動かしていく
プロセッサが入出力デバイスとの同期に使う基本的な方法はポーリング
デバイスが使うアドレスの集合を CSR (Control and Status Register) と総称する
1950 年代から 1960 年代にかけて、プロセッサと入出力装置の処理速度の違いが意識される → 割り込み駆動の入出力
最近のバスはコンピュータの実行中にデバイスを抜き差しできる
USB はいつでもユーザーがデバイスを装着できる
USB はメインバスのひとつのデバイスのように振る舞い、USB ハンドラが 2 次的なデバイス固有のハンドラを扱う
スマートな I/O デバイスが CPU を使わずにメモリにデータを転送 → Direct Memory Access (DMA)
ほとんどのアーキテクチャではメモリとデバイスの両方が中心的なバスに接続されている
I/O デバイスに入っているプロセッサが、フェッチやストアの命令を出す
DMA のさらなる最適化の技法としてバッファの連鎖と呼ばれるテクニック

17 章 デバイス入出力とバッファのプログラミング
プログラマの視点から入出力を考察する章
デバイスに依存しないこと (隠蔽、あるいはカプセル化)
多くのプログラミングシステムにおいて、入出力はプログラマから隠される
ハードウェアデバイスを操作する代わりに、プログラマが使うのは、ファイルやウィンドウのような抽象
埋め込みシステムでも、デバイスドライバと直接やりとりする代わりに仲介となるランタイムライブラリに依存することが多い
柔軟性と変更の容易さという利点
デバイスドライバと通信するためにシステムコールを使う際のオーバーヘッドは大きい
性能を最適化するためには、システムコールの回数を最小化すること
バッファリング : システムコールの回数を減らすために、データをバッファに蓄積する
flush 関数による明示的なシステムコールの呼び出し

5 部 高度な話題
18 章 並列処理
並列処理は性能を上げる主なテクニックのひとつ
並列処理においてプログラマが利用できる機構と機能
並列ハードウェアは、信頼性を向上させ、故障を防ぐためにも利用できる
並列処理スーパーコンピュータで重要な役割を果たしてきた

19 章 パイプライン処理
パイプライン処理は性能を上げる 2 つめの主なテクニック

20 章 電力とエネルギー
電力消費と総合的なエネルギー消費がコンピュータシステムの設計で重要性を増している
電力エネルギーの消費率
瞬時の電力消費は、ピーク電力の利用が重視されるデータセンターや、その他の大規模な設備に関連して語られることが多い
電力の消費に関して設計者が重視すべき側面
ピークでも十分な電力を供給できるようにするメガワット単位の給電の問題

21 章 性能評価
コンピュータは汎用的に使えるので、あるシステムの性能は実行するタスクに依存する

22 章 アーキテクチャのサンプルと階層構造
アーキテクチャは複数の抽象レベルで表現できる

23 章 ハードウェアのモジュール化

付録