###「コンピューターシステムの理論と実装」
読んだ本のまとめと紹介です。
コンピューターサイエンスを学ぶ為に手に取りました。この本では、コンピューターが動く仕組みを理解し、実際にバーチャル上にコンピューターを作り上げて学ぶことができます。必要なツールなどはWebサイトに用意されています。この記事では、読んだ内容を要約し概要や大まかな流れなどを書いていきます。各実装の詳細はこの記事では書いていません。
目次:
1、学習計画
2、本の目次紹介
3、概要
4、コンピューターが実装される流れ
#1、学習計画
1、一通り読んで知識をインプット(知識が無さすぎて読みながらの実装は難しかった)
2、内容をまとめブログに書いてアウトプット
3、実装し、経験を通して知識・技術を身につける
#2、本の目次紹介
1章 ブール論理
2章 ブール算術
3章 順序回路
4章 機械語
5章 コンピューターアーキテクチャ
6章 アセンブラ
7章 バーチャルマシン#1:スタック操作
8章 バーチャルマシン#2:プログラム要素
9章 高水準言語
10章 コンパイラ#1:構文解析
11章 コンパイラ#2:コード生成
12章 オペレーティングシステム
13章 さらに先へ
付録
本で学べる実装の流れとしては、
・コンピューターを構成するハードウェアの実装
(NANDという電子ゲート、論理回路、加算器、ALU、CPU)
・実装したハードウェア上で動くソフトウェアの実装
(アセンブラ、バーチャルマシン、OS、プログラミング言語など)
このように、コンピューター全体を構成する要素を実際に作ることによって、コンピューター全体の仕組みを理解できる構成となっています(なっているそうです)。
本書は”発見の旅”である。本書によって、読者は次の3つのことを学ぶことになる。それは、「コンピューターの動く仕組み」「複雑な問題を扱いやすいモジュールに分割する方法」そして「ハードウェアとソフトウェアからなる巨大なシステムを開発する方法」である。
#3、概要
”Hello World”を表示する為には数行のコードを書けば表示することができますが、実際それがどのように実行されているのでしょうか。
コードを書いてからその裏でコンピューターがどのように動きているのか見ていきます。
プログラムはテキストファイルに格納された文字列のデータです。最初にすべき作業は、このテキストに書かれている構文を解析し、その内容を明らかにすること。
そして、それをコンピューターが理解できる低水準の言語に直す必要があります。その変換する作業が「コンパイル」と呼ばれます。
コンピューターが理解できる機械語とは何でしょうか。
その中身はある規則に基づくバイナリーコードの集合です。バイナリーコードは0と1の2進数で表現されるコードです。そのバイナリーコードは何らかのハードウェアアーキテクチャによって具現化します。
では、そのアーキテクチャはどのように実装されるのか。それはレジスタやメモリ、ALUといった回路集合が用いられます。さらにこれらにハードウェアデバイスは、集積されパッケージされた基本論理ゲートから構成されます。これらのゲートはNANDやNORなどのゲートから構築していきます。
このように、様々な実装が必要であると初めて読んだとき、コンピューターの奥の深さを実感しました。これ以上深く掘り下げると物理学の領域になる為、この本で扱うものはここまでとなっています。
#4、コンピューターが実装される流れ
コンピューターシステムを支える抽象化の集合は、上位レベルの抽象化から、より単純なものへとトップダウン的に全体を捉えることができる。また、下位レベルの抽象化から、より複雑なものへとボトムアップ的な視点で捉えることもできる。
この本では、ボトムアップに実装していくことになります。
逆にトップダウンから(つまり私たちが実際にコーディングしたところから)見てみると、
まず頂上で高水準のプログラムを書き、それを実行する。その後ハードウェアの世界へ下り、高水準プログラム(私たちが書いたプログラム)が機械語へ変換される。最後に麓へたどり着き、一般的なハードウェアのプラットフォームが構成されている。
概要でも少し触れた内容ですが、より細かく流れを見ていきます。
##頂上:
####「高水準のプログラムを書き、それを実行する場所」
プログラミングをする際、「高水準言語」と「ライブラリ」という2つのツールを常用します。これらによってプログラミングし、文字などをディスプレイに表示できますが、それが実現されるのはOS(オペレーティングシステム)と標準言語ライブラリによってそのサービスが提供されているからです。では、そのOSはどのような仕組みで動いているのか。それは様々なアルゴリズム(数学ファンクション、文字列操作、メモリ配置、入出力(I/O)処理など)により完成されます。
##中間地点:
####「機械語への変換を行う場所」
概要でも触れましたが、変換作業は「コンパイル」と呼ばれます。このコンパイルを行う為にコンパイラ、バーチャルマシン、アセンブラという3つの変換器が関わっています。
コンパイラが行う変換作業:
#####1、構文解析
まず、ソースコードが解析され、意味的なグループ化が行われます。ここでの結果は「構文木」と呼ばれるデータ構造に格納されます。このパース作業が構文解析と呼ばれています。
#####2、コード生成
このパース木を再帰的に処理し、中間言語で書かれたプログラムを生成します。それがアセンブリコードです。このアセンブリコードはアセンブラによってバイナリコードに変換します。
##一番下:
####「ソフトウェアとハードウェアが交わる場所」
最下層では、Hackと呼ばれる汎用コンピュータシステム(ハードウェア)が活躍します。これは、様々な回路セットにより構成されます。コンピューターを設計する為に必要な基本的な原理や要素を兼ね備えています。