ryo’s blog

日々学んだことをまとめています.

第1章 コンピュータ・システム・ツアー

そもそもCSAPPとは?

コンパイラやリンカ、メモリの仕組みからネットワーク・プログラミングなど、幅広く多様な側面から学べる1冊です。

コンピュータ・サイエンスで有名なカーネギー・メロン大学で教科書としても扱われています。

1000ページ近くあり、内容も盛りだくさんです。

今後、各章ごとに軽いまとめと感想を書いていきます。

今後購入を検討している方の参考になれば幸いです。

 

1章について

この章では、プログラムの基本である「hello world!」はどのように実行されているのか。

抽象化や、メモリの仕組み、並行性など、今後の章で学んでいくことについての軽い説明がされていました。

以下まとめです。

 

コンピュータ・システムとは?

ハードウェアとシステム・ソフトウェアが連携してアプリケーション・プログラムを走らせるように構成されたもの。

 

.cファイルからa.outを作成する

プリプロセッサ(cpp)→コンパイラ(cc1)→アセンブラ(as)→リンカ(ld)の順に処理される。

プリプロセス : 文字'#'で始まる(#includeなど)情報を解釈する。

コンパイル : テキストファイルをアセンブリ言語に翻訳する。

アセンブリ : マシン語に翻訳してオブジェクト・ファイルへ格納する。

リンク : オブジェクトファイルの結合を行う。

 

システムのハードウェア構成

バス : 各構成要素の間で情報を行き来させる。

I/Oデバイス : キーボード、マウス、ディスプレイなど。

メインメモリ : 一時的な記憶デバイスDRAMチップの集合体。

プロセッサ : CPUのこと。命令を実行するエンジン。

 

キャッシュの重要性

キャッシュを利用し、頻繁にアクセスするデータを保持させることで、高速なアクセスを可能にさせる。

L1~L3キャッシュはSRAMで実装されている。L1が最も高速だが容量が小さい。

 

オペレーティング・システム

以下の2つの目的がある。

     1. アプリケーションの間違った使用からハードウェアを守る。

     2. ハードウェア・デバイスを操作するための仕組みをアプリケーションに提供する。

プロセス、仮想メモリファイルという抽象化を利用している。

 

プロセス : 実行中のプログラムを抽象化したもの。

スレッド : プロセスはスレッドと呼ばれる複数の実行単位から成り立っている。

仮想メモリ : メインメモリを独占的に使っているように各プロセスに見せる仕組み。

ファイル : 一連のバイトのこと。

 

平行性と並列性

平行性 : 複数処理を同時に行うシステムという概念のこと。

並列性 : システムを速く走らせるために並行性を利用すること。

 

並行性は3つの階層に分けられる。

スレッドレベル : (抽象化レベル: 上)

スレッドを使うことで、一つのプロセス内で複数の制御フローを実行できる。

一台のウェブサーバから複数のユーザが同時にやり取りすることを可能にする。

 

命令レベル : (抽象化レベル: 中)

複数の命令を同時に実行することができること。

最近プロセッサは同時に100もの命令処理ができる。

 

SIMDレベル : (抽象化レベル: 下)

プロセッサが一つの命令で複数の演算を並列に行うハードウェアを持っていること

SIMD命令は主に、画像や音声、動画データの処理の高速化に役立っている。

 

抽象化って?

内部の働きを知らなくても扱えるようにすること。

抽象化により、技術的な複雑さが軽減され、効率的な設計と実装が可能になる。

例)APICのプロトタイプ宣言、Javaのクラス宣言、仮想マシンなど

 

感想

実際には図や練習問題もあり、楽しみながら学べています。

また、C言語はどのようにして生まれたか。UNIXPOSIXの起源といったコラムもあり、飽きずに取り組めそうです。

まだ一章で先は長いですが、引き続き読み進めていきます。