CS:APP 第一章 コンピューターシステムツアー
gccコンパイラがcソースコードを翻訳する際、その翻訳は4つの手順にて行われる。
- プリプロセス
- コンパイル
- アセンブリ
- リンク
1.プリプロセス
#
をソースコードに含める。つまりincludeの記述から実コードを持ってくる
この際、.cファイルは.iファイルに変換されテキストファイルになる。
2.コンパイル
.iファイルをアセンブリ言語のプログラムに変換する。
拡張子は.s
(この段階で、言語間の差異がなくなる場合がある c/fortranのアセンブリ後に出力されるコードは同じ)
3.アセンブリ
.sファイルをリロケータブル・オブジェクト・プログラム(.oファイルのこと)に変換する。
ここからバイナリファイルとなる。
4.リンク
別にコンパイルされた.oファイルを組み合わせる。
例えば.cファイル内でprintfなどを使用していたら、その.cファイルはprintf.oファイルの中身を読み取らないといけない。
この結合を行うのがリンカ(ld)である。
キャッシュの性能
基本的にプログラムを動かす際にはプログラムファイルをバイナリファイルにして、それをメモリにコピーして実行する。
よくいうメモリ〜GBというあのメモリ。
そのメモリのコピーした値をCPUと通信を行い演算処理を行う。
ただメモリからCPUまでの通信時間が長いことを受けて、CPU内部にプロセッサ用のメモリを配置して高速に演算を出来るようにしている。これをSRAMと呼ぶ。
またよく言うメモリ、これをDRAMと呼ぶ。
基本的に価格帯はSRAM > DRAM
になっている。
OSの目的
- 暴走したアプリからハードウェアを守ること
- 様々なデバイスに対応できるような統一された仕組みを提供すること
これらを3つの要素により達成している
- プロセス
- 仮想メモリ
- ファイル
マルチプロセッサシステム
近年のコンピューターは並行処理を実現させるために以下の2つの要素を実現させている
- マルチコア
- ハイパースレッディング
マルチコア
よく言う「Core i7, Core 2 duo」みたいなものがこれに当たる。
複数のCPU Unitを持つことにより、別々のCPUで演算処理を行えるようにすることで、並行処理を実現させる
ハイパースレッディング
一つのCPUの中で複数の処理を実行出来るようにする技術
プロセッサがスレッドを切り替える処理速度を処理時間によって変更出来る。
以前まではスレッドを変更するのに、一定で20000サイクル程かかっていた。
Intel Core i7は各コアが2スレッド実行でき、それが4Coreあるので
8つの処理を同時に実行出来る。
M1のスレッド数
今はCorei7においても、スレッド数/Core数が伸びているっぽい