プログラムはなぜ動くのか?を読んだ
こんにちは、 @kz_morita です。
今回は、プログラムはなぜ動くのかという本を読んだので、その感想を書いていきます。
プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識 全体的な概要 この本は、普段書いているプログラムが PC 上でどのような原理で動作するのか?といったことが書かれている本になります。
プログラムを 命令 と データ にわけ、CPU がどのように命令を解釈するのか?や、データはどうメモリに配置されるのか?などが平易な文章で書かれているので Computer Science にぴったりな本だと思いました。
第 1 章では、プログラムにおける演算や、条件分岐、繰り返しなどがどのように CPU で解釈されるかや、演算に使われるレジスタの紹介などが書かれています。
第 2 章、第 3 章, 第 4 章ではデータをコンピュータ上でどう表現するかが書かれています。データの 2 進数での表現や 2 の補数や、算術演算、論理演算について知ることができます。不動小数点についてもこの章で学ぶことができます。 メモリ上でのデータの表現として、スタック、キュー、ポインタ、リスト、2 分探索木などのデータ構造の紹介もされています。
第 5 章、第 6 章ではメモリとディスクの関係性について書かれています。プログラムが実行時にディスクからメモリにロードされることや、ディスクキャッシュ、仮想メモリ、ページイン、ページアウトなどについても概要を知ることができます。
ディスクについてはその物理構造であるセクタ、クラスタなどの紹介がされています。
また、メモリを節約するという文脈で、Dynamic Link,や Static Link や、データの圧縮法(ランレングス符号化、ハフマン符号化)が簡潔に紹介されています。
第 7 章、第 8 章では、プログラムの動作環境としての、OS とハードウェアや、ソースコードを実行ファイルになるまでのコンパイラや、リンカについて説明がなされています。
プログラムを実行するために、ディスクからメモリにロードし、変数の領域、関数の領域、スタック領域と、ヒープ領域が確保され、再配置情報から実行時のメモリアドレスが決まることについて書かれています。
第 9 章、第 10 章、第 11 章では、アプリケーションがどのように OS 上で動き、また、ハードウェアを制御したりするかが書かれています。
OS がアプリケーションに API を提供し、ハードウェアが抽象化されていることや、高級言語がどのようにアセンブリコードに変換されるかや、CPU からハードウェアをどのように制御しハードウェアからの割り込み要求を CPU がどう扱うかなどの外観を掴むことができます。