コンピュータ・システム プログラマの視点から(Computer Systems: A Programmer’s Perspective)の練習問題を解いたリポジトリ
- Ch 3 - なぜアセンブリを学ぶのか?
"現代の最適化コンパイラを用いれば、通常は、生成されたコードは少なくとも熟練のアセンブリ言語プログラマが手で書いたコードと同等に効率的である。" p129 ->昨今のAIの状況と似ている
...
アセンブリを調べることで、どの程度効率的にプログラムされるか、並行プログラムの共有データがどこでアクセスされるか、プログラムの脆弱性はどのようにして生じ、保護するか理解するにはマシン・レベル表現の知識が必要であある。 - Ch 3 - 分岐予測ロジック
"最新のマイクロプロセッサの設計では、90%オーダの成功率を達成することを目指している" p171 - Ch 3 - 共用体が確保するサイズ p2 581D 13
- Ch 3 - バッファ・オーバーフロー攻撃
スタック・ランダマイゼーション, スタック破壊の検出(カナリア) - Ch 4 - パイプライン
PC(プログラム・カウンタ)の計算、命令間に依存関係がある場合の問題-パイプライン・ハザード - Ch 5 - プログラムの最適化
インライン展開、不要なメモリ参照の削除、ループアンローリング。並列処理(パイプライン化されたコンピュータ)の場合:複数の累積機、再結合変換(演算によって命令数が違うため) - Ch 6 - キャッシュに優しいコード
キャッシュ・ミスの数を最小化する、内側ループへ着目、メモリマウンテン - Ch 7 - リンカは重複するシンボル名をどのように解決するのか
同名のstrongシンボルは禁止、strong or weakシンボル場合はstrong、同名weakシンボルは任意の一つ - Ch 7 - 共有ライブラリを再配置なしにロード可能なPIC(ポジション非依存コード)
- Ch 8 - 例外のクラス
割り込み(interrupt)、トラップ(trap)、フォールト(failt)、アボート(abort) - Ch 9 - 仮想メモリのアドレス変換
TLB(トランスレーション・ルックアサイド・バッファ)による高速化 - Ch 9 - アロケータの実装
- Ch 10 - カーネルのファイル共有
デスクリプタ・テーブル、ファイル・テーブル、v-ノード・テーブル、プロセス共有はFalse, True, True - Ch 11 - Tiny Web Server
CGIを使った動的コンテンツの適用 - Ch 12 - I/Oマルプレクシング(多重化)による並行プログラミング
Select、監視。Node.js, nginx, Tornadoで使われている