我是這樣啃《深入理解計算系統》的

2021-06-27 20:17:15 字數 1478 閱讀 1351

**:

書的確是難得的書。我第一次試圖讀這本書是幾個月以前,當時第2章「資訊的表示和處理」沒看完就放下了,覺得講了一大堆數字表達方式很沒意思……這次 稍微堅持了一下,沒想到就一口氣讀下來了……

重點推薦第3章「程式的機器級表示」、第5章「優化程式效能」、第6章「儲存器層次結構」、第10章「虛擬儲存器」。覺得這四章乃是全書之精華,看得人欲罷不能。

程式的機器級表示」

一章幾乎是一種教授逆向工程的方法在講授,剖析編譯器產生的彙編**,以此來加深對具體**實現的理解。大量的習題都是根據彙編 來猜源程式是什麼,有趣極了。這一章還覆蓋了緩衝區攻擊——但是這點講得太少了,不解渴,有時間自己弄弄……

講底層離不了彙編這個有點棘手的東西,我還一度擔心自己彙編學得不太過關,會碰到障礙。但這裡作者提出乙個很實際的要求:以前要求程式設計師都會寫彙編, 現在要求程式設計師都會讀彙編。這裡以一種「讀」的方式教人用彙編,不侷限於很多細小的語法,讓僅僅懂得c的程式設計師也毫無障礙。僅僅100多頁,不僅初步講了 彙編的語法和使用,還配合大量的例子分析來解讀產生的彙編**,讓人理解深刻,實在是技高一籌。

優化程式效能」

是全書最閃光的章節。作者對乙個例子不斷優化,講迴圈效率和過程呼叫,到講儲存器引用,一直講到現代處理器的結構,講到ia32處理 器的侷限,一路下來,暢快淋漓。還將ia32處理器的優化結果和compaq alpha 21164做對比,一目了然的看出哪些優化是處理器相關的,最後講到profiling(程式剖析)指導優化,可以說平時能夠用到的最高技巧(畢竟我還不 是編譯器開發人員……)和流程走了一邊,現實意義相當之高。

這章把能夠用到的所有技巧的原理全部講解得清清楚楚,不做不必要的挖深,結合**,讓人絲毫不覺枯燥,真是佩服得五體投地。雖然章節後對編譯器優化還 提供了參考文獻以及加深的內容,不過我覺得這章的內容已經足夠我受用很久了。      「儲存器層次結構」實際上可以看作是「優化程式效能」一章的延伸,以及為之後的「虛擬儲存器」做鋪墊。這章主要詳細解釋了快取記憶體(cache)的工 作方式,以及利用區域性性使得cache達到最好效果的方法。

「虛擬儲存器」(virtual memory)則上公升到了作業系統層面,詳細解析了vm的實現以及linux系統上vm組織方式。自己覺得最受用的是malloc/free實現的動態儲存器分配的具體方法以及對程序中具體儲存結構的了解,還有gc的策略。這些讓我感覺自己能夠做到的事情似乎又多了一點,一直無法理解的valgrind之類軟體的原理似乎也有了點眉目。

這兩章講得比較細緻,以至於稍微顯得有點枯燥。其實我自己喜歡這兩章的主要原因是解了我多年來關於儲存器的困惑。不過儲存器方面的內容實在博大精深,自己這完全是得了點皮毛就沾沾自喜。

其實在學計算機方面我還是挺實用主義的,一直抱著碰到了再去仔細研究好了的態度,所以看書普遍不認真,只是求到時候能夠找得到參考。不過這本書我覺得 格外有趣,所以也看得格外認真,把每節後的習題都做了,家庭作業則等著過兩天覆習(計畫是這樣的……)的時候加深印象。

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...

《深入理解計算機系統》

知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...

深入理解計算機系統

系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...