コンピュータ
書いたプログラムが電気回路の動作になるまでの層。抽象化は便利だが、性能を詰めるときには漏れる。
書いたプログラムが、どうやって実際の電気回路の動作になるのか。
層#
プログラミング言語 ← 人間が書く
↓ [[言語処理系]]
機械語 / 実行ファイル
↓ [[プログラムの実行]]
命令セット
↓ [[コンピュータアーキテクチャ]]
論理回路 → トランジスタ各層が下の層を隠す(抽象化)。 普段は上の層だけ見ていればよいが、 性能を詰める場面では抽象が漏れる。
キャッシュに乗るかどうかで 100 倍変わる、 分岐予測を外すと数十サイクル無駄になる、といった現象は 下の層を知らないと説明できない。
構成#
- コンピュータアーキテクチャ — CPU、メモリ、キャッシュ
- プログラムの実行 — 機械語から起動まで
- プログラミング言語 — 構文と意味
- 言語処理系 — コンパイラとインタプリタ
- オペレーティングシステム — 資源の管理
- 並行・並列処理 — 同時に動かす
参考文献#
- David A. Patterson, John L. Hennessy. Computer Organization and Design: RISC-V Edition, 2nd ed. Morgan Kaufmann, 2020.
- Randal E. Bryant, David R. O’Hallaron. Computer Systems: A Programmer’s Perspective, 3rd ed. Pearson, 2016. https://csapp.cs.cmu.edu/
この階層のノート
コンピュータアーキテクチャ 8 / 8 ハードウェアとソフトウェアの境界の設計。フォン・ノイマン・ボトルネックへの対処が多くの技術の動機。 プログラムの実行 7 / 7 ソースコードがCPUで動くまでの段階。分割されているのは分割コンパイルと再利用のため。 プログラミング言語 7 / 7 テキストが意味を持つまでの3層。字句・構文・意味の分離は形式言語の階層に対応した必然。 言語処理系 8 / 8 ソースコードを実行可能にする処理系。コンパイラとインタプリタは「いつ機械語にするか」の軸上の位置の違い。 オペレーティングシステム 7 / 7 ハードウェアを抽象化し資源を管理する層。仮想化・並行性・永続化の3つに役割が整理できる。 並行・並列処理 9 / 9 クロック頭打ち以降、性能向上の唯一の道。アムダールの法則が並列化の上限を規定する。