CSAPP第1章

より速くメモリを使わない安全なコードを書くために

 

英語版3rdを使用。

Question

P60 Amdahl's law 改善率
・60%カバーの場合、全体のパフォーマンスを1.25×から1.67×に上げるだけでも、カバー範囲を2×改善する必要がある。
・90%カバーの場合でも、全体のパフォーマンスを4×に上げるには、カバー範囲を6×改善する必要がある。

 

まとめ

・コンピュータは色んな部品からできている。より早く計算するため、より多く計算するため、色んな手法が生み出された。

・すべての元はビットであり、使う場所によって表現が違う。プログラムはテキストやバイトコードに翻訳される。

・ソースプログラムはプリプロセッサコンパイラアセンブラ→リンカを経て実行可能プログラムになる。

・CPU(PC, ALU, RegisterFile)とMainMemory, I/ODevice間でBUSによるデータの引き渡しが行われ、プログラムを実行している。(例:HelloWorldをキーボード打ち込み→RegisterFileに登録→DiskにあるファイルをMainMemoryに読み出し→CPUがMainMemoryを読む→グラフィックに出力)。データが何回も移動するので時間がかかる。

・スペースが大きくなるほど読み取りに時間がかかる。つまりRegisterFileは速いけど小さい、MainMemoryは遅いけど大きい。このスピード差を埋めるためのCache技術。RegisterFile用にCacheMemoryを設け、将来使いそうなデータをあらかじめ格納しておく。

・DiskもMainMemoryのためのCacheになる。こうしてより速い、スペースが小さいメモリのためのメモリが用意され、MemoryHierarchyの概念ができる。一般的にRegisterが頂点となり、例:L1→L2→L3(ここまでSRAM)→MainMemory(DRAM)→Disk→RemoteStorage

・Softwareであるプログラムは直接HardwareであるCPUやMainMemory,I/ODeviceにアクセスしていない。実行ステップ間にはOSの制御ステップが差し込まれる。

・OSはAbstractionsと呼ばれる概念でSoftwareとHardwareを結び付け、管理している。ProcessesはProcessor, MainMemory, I/O Devicesからなり、VirtualMemoryはMainMemory, I/O Devicesからなり、FilesはI/O Devicesからなる。

・ProcessはContextSwitchをして複数のタスクを同時にやっているように見せる。切り替え時はKernelCodeが動いている。

・今だとProcess内で複数持つことができるThreadのほうが優先して使われている。複数Threadのほうがデータ共有が簡単でネットワークサーバの要求を満たし、プログラム実行も速い。

・VirtualMemoryはアドレススペースを番号が若い順からプログラムの使用に使い、終わりの方でKernelのVirtualMemoryに使う。

・並列処理。①スレッドレベル並列処理:シングルチップに複数CPUを載せている。それぞれのCPUがL1, L2等のCacheを持ち、L3は共有Chache(図例)。スレッドが複数使える。②Instructionレベル並列処理:パイプ処理。③SIMD並列処理

・Networkもシステムのある一部から見るとI/O Deviceのようなもの。