《深入理解計算機系統》是通過程式設計師的視角來介紹計算機系統,首先把高階語言轉換成計算機所能理解的一種中間格式(如組合語言),然後描述計算機如何解釋和執行這些中間格式的程式,是系統的哪一部分影響程式的執行效率。在講述計算機系統知識的同時,也給出了關於 c 語言和組合語言的程式設計、閱讀技巧以及基本的系統程式設計工具,還給出一些方法幫助程式設計師基於對計算機系統的理解來改善程式的效能等問題。本書強調對計算機系統概念的理解,但並不意味著不動手。如果按照本書的安排做每一章後面的習題,將有助於理解和加深正文所述的概念和知識,更可以從實際動手中學習到新的知識。
本書的主要內容是關於計算機體系結構與編譯器和作業系統的互動,包括:資料表示;組合語言和彙編級計算機體系結構;處理器設計;程式的效能度量和優化;程式的載入器、鏈結器和編譯器;包括 i/o 和裝置的儲存器層次結構;虛擬儲存器;外部存貯管理;中斷、訊號和程序控制。
本書的最大優點是為程式設計師描述計算機系統的實現細節,幫助其在大腦中構造乙個層次型的計算機系統,從最底層的資料在記憶體中的表示(如大多數程式設計師一直陌生或疑惑的浮點數表示),到流水線指令的構成,到虛擬儲存器,到編譯系統,到動態載入庫,到最後的使用者態應用。貫串本書的一條主線是使程式設計師在設計程式時,能充分意識到計算機系統的重要性,建立起被所寫程式可能被執行的資料或指令流圖,明白當程式被執行時,到底發生了什麼事。從而能設計出乙個高效、可移植、健壯的程式,並能夠更快地對程式排錯、改進程式效能等。
原書是卡耐基-梅隆大學( cmu )的教材,現在很多國內外著名的大學也選用其為教材或輔助性資料,因此,本書的讀者不僅僅是那些因為工作和興趣而關注本書的人,還包括一些在校的大學生。我們認為,在校學生越早接觸本書的內容,將越有利於他們學習計算機的相關課程,培養對計算機系統的研究興趣。
總的來說,《深入理解計算機系統》一書是乙個橋梁,它幫助程式設計師銜接了計算機系統的各個領域的知識,為程式設計師構造了乙個概念性框架。對於各個領域,如計算機系統結構、作業系統、編譯器、網路、併發程式設計的知識進一步獲取,還需要進一步閱讀相關書籍。
《深入理解計算機系統》從第一版到第二版,已經是七年的時光了。由於計算機技術的飛速發展,第二版相對於第一版做了大量的修改。首先,針對硬體技術和編譯器技術的變化,第二版對系統的介紹,特別是實際使用部分,做了增加和修改。例如,既保持了原有的針對 32 位系統的說明,又增加了對 64 位系統的描述。其次,第二版增加了很多關於由算術運算溢位以及緩衝區溢位造成安全漏洞的內容。第三,更詳細講述了處理器對異常的發現和處理,這是計算機系統中的乙個重點和難點。第四,對儲存器的描述改為了基於 intel core i7 處理器的儲存器層次結構,還增加了固態硬碟的內容。第五,強調了併發性,併發性既體現在處理器的實現中,也體現在應用程式程式設計中。
這次我們不僅對第二版較第一版有改動之處做了仔細的翻譯,而且對第一版之譯稿做了重新審視,重新校正,精益求精。比如,在保證原意正確的情況下,對一些句式做了變動,還有儘量減少被動語態的使用等,以符合中文的習慣。再如,根據我這幾年教授《計算機體系結構》課程的經驗,改變了某些術語的翻譯,使之更接近於中文教科書中的術語使用。
本書中有些術語的翻譯還是讓我們難以抉擇。在此,我們預先做一些解釋和說明。 operator 這個詞,如果根據上下文,它表示的是乙個運算,我們就翻譯成運算子。如果它對應於乙個操作,我們就翻譯成操作符。 local variable ,可以翻譯成區域性變數,也可以翻譯成本地變數。考慮到還有 local data 、 local buffer 等詞,我們選擇統一將 local 翻譯成「區域性的」。 chunk 這個詞是一片或者一塊的意思,常常用來表示一塊連續的記憶體區域。它在第 6 、 7 和 9 章中出現較多。為了使之區別於 block (塊),我們選擇將其翻譯成「片」。
由於本書內容量大,翻譯時間緊迫,儘管我們盡量做到認真仔細,但還是難以避免出現錯誤和不盡如人意的地方。在此歡迎廣大讀者批評指正,我們也會把勘誤表及時在網上更新,便於大家閱讀。
龔奕利,雷迎春
2010 年 9 月於珞珈山
七年之後的《深入理解計算機系統》CSAPP
深入理解計算機系統 是通過程式設計師的視角來介紹計算機系統,首先把高階語言轉換成計算機所能理解的一種中間格式 如組合語言 然後描述計算機如何解釋和執行這些中間格式的程式,是系統的哪一部分影響程式的執行效率。在講述計算機系統知識的同時,也給出了關於 c 語言和組合語言的程式設計 閱讀技巧以及基本的系統...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...
《深入理解計算機系統》
知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...