Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

【読書】コンピューターシステムの理論と実装を読んで

「コンピューターシステムの理論と実装」

読んだ本のまとめと紹介です。

コンピューターシステムの理論と実装

コンピューターサイエンスを学ぶ為に手に取りました。この本では、コンピューターが動く仕組みを理解し、実際にバーチャル上にコンピューターを作り上げて学ぶことができます。必要なツールなどは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と呼ばれる汎用コンピュータシステム(ハードウェア)が活躍します。これは、様々な回路セットにより構成されます。コンピューターを設計する為に必要な基本的な原理や要素を兼ね備えています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?