經過1個月斷斷續續的學習,已學習完《深入理解計算機系統》第四章,不得不說這本書確實無愧經典之名,能帶給自己更深層次對程式設計的理解,現總結下現階段的學習與體會:
第一章主要為後面個章節做了鋪墊,其中講述了乙個c語言程式是如何轉變為機器可以理解的語言,即可執行的目標**,其過程如下
在系統的硬體組成中,計算機通過匯流排傳遞資料,要cpu處理在磁碟的資料必須先將資料儲存到ram中,再由cpu執行,將結果再通過io橋傳輸到外部裝置。所以減少對磁碟資料的讀取可以提高程式效率。計算機系統的抽象表示如下
作業系統通過這些抽象來向應用程式簡單一致的機制來控制硬體系統。
第二章是資訊的表示與處理,intel處理器對資料的儲存方式為小端法,即最低有效位元組儲存在最前面。當signed與unsigned在等式兩側時,signed會自動轉換成unsigned。可能產生想不到的錯誤,也要小心防止資料的溢位,單精度與雙精度的表示如下
其分類如下
這是浮點數的規範表示,其精度據有一定的限制。
第三章講述了彙編的過程,即c語言都被彙編成一條或多條組合語言,其中ia32的堆疊用了%esp作為棧指標與%ebp作為幀指標,可以從棧中相對於ebp的偏移量對引數進行呼叫,可通過pop指令與push指令來向棧頂來彈出與推入內容, 函式在過程呼叫時也會用到棧,call指令會將原先的返回位址,舊的%ebp,以及被呼叫暫存器,其中呼叫函式的幀指標指向儲存的ebp位址,當碰到ret指令時,棧會返還舊的%ebp以及被呼叫暫存器值,並讓eip指向舊的位址進行操作,在64位中只使用%esp作者棧指標,用其偏移來呼叫引數,大多數系統要求資料對齊,可以提高系統表現,即某種型別物件的位址必須是某個k值的倍數,最後介紹了緩衝區攻擊以及一些防禦措施,利用較小的陣列大小來寫入超出其限量的元素,從而改寫返回位址,來實現自己的程式,防禦方法主要有棧隨機化,棧破壞檢測以及限制可讀**。64位能提供更多的ram,新增的暫存器能減少棧的使用,提高速度。
在第四章中可以看到處理器架構的實現,risc與sisc是兩種不同的指令集,risc為精簡指令,sisc為複雜指令,處理器的架構由取指階段,解碼階段,執行階段,訪存階段,寫回階段以及更新pc階段,流水線方法大大提高了執行指令的速度,可以通過hcl語言描述來控制邏輯。
想到哪就寫到哪,也沒怎麼整理邏輯,花了好多時間才寫了這麼些,希望以後能夠堅持,能提高自己的表達能力。
深入理解計算機系統總結
1 概述 檔案是i o裝置的抽象表示,虛擬儲存 器是對主存和磁碟i o裝置的抽象表示,程序則是對儲存器 主存和i o裝置的抽象表示。2 c語言static 在c語言中,c原始檔扮演模組的角色,任何宣告帶有static屬性的全域性變數或者函式都是私有的,類似於c 中的private,只能被本模組中的函...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...
《深入理解計算機系統》
知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...