今天終於讀完了CSAPP(Computer Systems: A Programmer’s Perspective),花了大約2個月的時間。平時我也比較注重基礎知識的積累,特別是電腦底層的只是,所以讀完這本書剛好能豐富一下這些知識。
這本書主要特點就是“軟硬結合”。下至CPU、流水線、緩衝、儲存空間、彙編,上至C語言、編譯、連結、程式設計,讀過之後能夠在大腦中對電腦整個系統產生一棵樹。
這本書中,第3章《程式的機器級表示》,第5章《最佳化程式效能》,第6章《儲存空間階層》、第7章《連結》和第9章《虛擬儲存空間》我認為是最有價值讀的。下面對這本書進行一下總結。
第1章《電腦系統漫遊》:理解這個公式“information=bit+context”,理解編譯連結大致過程,瞭解電腦的整個結構。
第2章《資訊的表示和處理》:有符號數和無符號數,無符號數運算時溢出,有符號數如果太大也會溢出。浮點數運算要注意,我就有一次利用浮點數計算區間時導致區間個數少了一個的情況。
第3章《程式的機器級表示》:彙編和C語言之間的關係,寄存器和C語言程式的關係,程序呼叫的本質,資料對齊的原因,緩衝區溢位攻擊等等。
第4章《處理器體繫結構》:書上設計了一個簡單的流水線處理器和自訂的指令集Y86。理解CPU流水線吧。
第5章《最佳化程式效能》:不錯的內容,如何提高程式的效能(還提了一些關於引用的編譯器最佳化問題):消除引用、減少調用、迴圈展開、結合變換、條件傳送。
第6章《儲存空間階層》:利用局部性來提高緩衝的命中率,進而最佳化程式效能。理解緩衝是怎麼工作的。
第7章《連結》:很好的一章啊,理解目標檔案的格式,理解符號,理解連結器怎麼把多個目標檔案組合起來的,還有動態連結的內容。
第8章《異常控制流程》:異常、進程和訊號的概念,UNIX中進程建立和回收,訊號的阻塞和丟棄引發的問題。
第9章《虛擬儲存空間》:這一章提升到了OS的高度。虛擬儲存空間的組織(頁表,頁目錄表)、地址翻譯的過程,虛擬儲存空間和緩衝如何協調,虛擬儲存空間和異常如何配合,UNIX中的共用對象和寫時拷貝機制,動態儲存裝置器分配(隱式空閑鏈表和顯示空閑鏈表)和方法,還講了GC(記憶體回收)機制。
第10~12章《系統級I/O》、《網路編程》、《並發編程》:作為UNIX下C編程的內容還是少了一些,不過用來判斷線程之間的同步的進度圖方法倒是讓我嘗到了鮮。