讀完了csapp(中文名:深入理解計算機系統) - 台部落

文章推薦指數: 80 %
投票人數:10人

上個星期終於把csapp看完了。

我買的是中文版的,因爲除了貌似評價不錯以外,由於涉及到些自己不瞭解的底層東西,怕是看英文會雲裏霧裏。

請輸入正確的登錄賬號或密碼 註冊 忘記密碼 首頁 csapp 正文 讀完了csapp(中文名:深入理解計算機系統) 原創 shaorui_ 2019-06-2401:34 上個星期終於把csapp看完了。

我買的是中文版的,因爲除了貌似評價不錯以外,由於涉及到些自己不瞭解的底層東西,怕是看英文會雲裏霧裏。

現在看來,大概不能算是個優點,但是的確能夠加快我的看書速度,否則一星期還真不大可能把這書搞定。

對csapp慕名已久,主要在於據說這本書儘量的做到相對實用,不去講那些和實際編程沒多大關係的計算機原理(畢竟是著名計算機院校裏面最偏軟件的cmu的作品),重點非常得當,像我這種沒有本科科班出生又不想去死讀些不知道以後有沒有用的東西的人來說,最是適合了。

感興趣的東西就可以再加深,不感興趣的就算了,正好。

在csapp的序言裏有個課程列表,其中推薦了幾種教學課程,對應使用不同的章節。

我參考選用的是ICS+的規劃。

ICS+的cmu課號爲15-213,據說正好和cmu的郵編相同,然後就有了這句“15-213:TheClassThatGivesCMUItsZip!”。

以這句爲關鍵詞,能夠找到ICS+的slide。

ICS+的課程基本上涵蓋了全書,除了第4章“處理器體系結構”以外。

我自己除了跳過這個的確不太感興趣的章節(太偏硬件)以外,還有第9章“測量程序執行時間”是略略翻過,其他的都是認真讀完寫完習題的。

書的確是難得的書。

我第一次試圖讀這本書是幾個月以前,當時第2章“信息的表示和處理”沒看完就放下了,覺得講了一大堆數字表達方式很沒意思……這次稍微堅持了一下,沒想到就一口氣讀下來了…… 重點推薦第3章“程序的機器級表示”、第5章“優化程序性能”、第6章“存儲器層次結構”、第10章“虛擬存儲器”。

覺得這四章乃是全書之精華,看得人欲罷不能。

“程序的機器級表示”一章幾乎是一種教授逆向工程的方法在講授,剖析編譯器產生的彙編代碼,以此來加深對具體代碼實現的理解。

大量的習題都是根據彙編來猜源程序是什麼,有趣極了。

這一章還覆蓋了緩衝區攻擊——但是這點講得太少了,不解渴,有時間自己弄弄…… 講底層離不了彙編這個有點棘手的東西,我還一度擔心自己彙編學得不太過關,會碰到障礙。

但這裏作者提出一個很實際的要求:以前要求程序員都會寫彙編,現在要求程序員都會讀彙編。

這裏以一種“讀”的方式教人用匯編,不侷限於很多細小的語法,讓僅僅懂得C的程序員也毫無障礙。

僅僅100多頁,不僅初步講了彙編的語法和使用,還配合大量的例子分析來解讀產生的彙編代碼,讓人理解深刻,實在是技高一籌。

“優化程序性能”是全書最閃光的章節。

作者對一個例子不斷優化,講循環效率和過程調用,到講存儲器引用,一直講到現代處理器的結構,講到IA32處理器的侷限,一路下來,暢快淋漓。

還將IA32處理器的優化結果和CompaqAlpha21164做對比,一目瞭然的看出哪些優化是處理器相關的,最後講到profiling(程序剖析)指導優化,可以說平時能夠用到的最高技巧(畢竟我還不是編譯器開發人員……)和流程走了一邊,現實意義相當之高。

這章把能夠用到的所有技巧的原理全部講解得清清楚楚,不做不必要的挖深,結合代碼,讓人絲毫不覺枯燥,真是佩服得五體投地。

雖然章節後對編譯器優化還提供了參考文獻以及加深的內容,不過我覺得這章的內容已經足夠我受用很久了。

“存儲器層次結構”實際上可以看作是“優化程序性能”一章的延伸,以及爲之後的“虛擬存儲器”做鋪墊。

這章主要詳細解釋了高速緩存(cache)的工作方式,以及利用局部性使得cache達到最好效果的方法。

而“虛擬存儲器”(VirtualMemory)則上升到了操作系統層面,詳細解析了VM的實現以及Linux系統上VM組織方式。

自己覺得最受用的是malloc/free實現的動態存儲器分配的具體方法以及對進程中具體存儲結構的瞭解,還有GC的策略。

這些讓我感覺自己能夠做到的事情似乎又多了一點,一直無法理解的valgrind之類軟件的原理似乎也有了點眉目。

這兩章講得比較細緻,以至於稍微顯得有點枯燥。

其實我自己喜歡這兩章的主要原因是解了我多年來關於存儲器的困惑。

不過存儲器方面的內容實在博大精深,自己這完全是得了點皮毛就沾沾自喜。

其實在學計算機方面我還是挺實用主義的,一直抱着碰到了再去仔細研究好了的態度,所以看書普遍不認真,只是求到時候能夠找得到參考。

不過這本書我覺得格外有趣,所以也看得格外認真,把每節後的習題都做了,家庭作業則等着過兩天覆習(計劃是這樣的……)的時候加深印象。

不過一直沒找到csapp的實習手冊。

其中有個“二進制炸彈”實驗非常吸引人,典型的反彙編作業,有點點實現我小時候破解願望的感覺——希望找到以後不要讓我太失望,呵呵。

不過這本書還是有些不足之處。

讓人感到最大的遺憾是最後三章“系統級I/O”、“網絡編程”、“併發編程”講得比較簡略——自己正好是在這方面稍微熟悉點,覺得少了很多東西,有點遺憾。

不過“併發編程”教給我了一個以前我根本不知道的東西——進度圖,用來解釋爲什麼會出現死鎖以及如何解決實在是好極了(自己也是太孤陋寡聞……)。

另外還有個仔細讀了apue2以後還讓我非常困惑以至於還得上網查才弄明白的一件事,csapp當頭一句話就解決了,那就是csapp寫到pthread_detach函數時,說“爲了避免存儲器泄露,每個可結合的線程都應該要麼被其他線程顯式地回收,要麼通過調用pthread_detach函數被分離”。

而apue2關於detach的那段話硬是讓我雲裏霧裏,僅僅解釋了thread的行爲和怎麼用,不講爲什麼,害得我還得去查……不過apue2的thread部分不是W.RichardStevens寫的,是Rago後加的,的確有質量差別…… 想來書也是有輕重之分,csapp的重點還是再講硬件和軟件的結合部,後面系統偏應用級的東西只是做拋磚引玉之用,也是難怪。

儘管是這樣,csapp有時還是會讓人眼前一亮。

這本書另外的問題就是雖然中文翻譯還算不錯——也是過了個修訂版的緣故,但是排版經常出錯,尤其是排彙編代碼和註釋的時候。

而且這個書名翻譯得特別沒勁,愣像是混雜在一堆國產計算機結構書裏的東西…… 不過還是那句,瑕不掩瑜,csapp的確是我看過的最好的計算機書之一了(本來想不加之一的,不過不加至少有點對不起apue^_^)。

說回來,csapp的致謝裏面有這樣一句話: 最後,我們衷心感謝偉大的技術作家BrianKernigam以及後來的W.RichardStevens,他們向我們證明了技術書籍也能寫得如此優美。

發表評論 登录 所有評論 還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布. 相關文章 CSAPP官方網站 官網:http://csapp.cs.cmu.edu/ PS:網站目錄第二項網絡旁註:這裏有書上標註網絡旁註內容處的詳細解釋,例如關於INT_MIN爲什麼寫成-2147483647-1而不是-2147483648。

why-214 多磕盐不怕齁 2020-07-0706:39:35 深入理解計算機第二次實驗(LAB2-datalab)CSAPPbuflab湖南大學 buflab 文章目錄buflab提前準備level0:**蠟燭**任務函數反彙編和思路答案level1:**煙火**任務代碼反彙編和思路答案level2:**爆竹**任務代碼反彙編和思路答案level3:**炸藥**任 石渊友 2020-07-0505:30:12 CSAPPbitcount 題目描述: bitCount-returnscountofnumberof1'sinword Examples:bitCount(5)=2,bitCount(7)=3 Legalops:!~&^| 矢月 2020-07-0308:23:48 深入理解計算機系統CSAPP-perfLab:kernels.c性能優化實驗:rotate優化詳細實驗日誌(含六個優化版本) 目錄一、實驗內容二、相關知識三、實驗步驟四、程序優化各個版本初始版本版本一:分塊,旨在提高空間局部性版本二:在分塊的基礎上,循環展開(降低了循環開銷,但犧牲程序的尺寸)版本三:在前兩個版本的基礎上,改善讀寫順序版本四:修改pix 乔卿 2020-06-3004:25:31 關於CSAPP6.18的習題分析 關於CSAPP6.18的習題分析 下面的站點能找到我搜集的所有和CSAPP有關的學習資料. https://github.com/jasonleaster/CSAPP 問題背景:          強調一下,問 JasonLeaster 2020-06-2810:12:31 計算機舍入問題 最近在學習CSAPP(2e)的時候才第一次意識到計算機中的舍入也不是一個簡單的內容。

現做總結如下: 向整數舍入: 向整數舍入比較簡單理解,直接去掉小數,僅取整數部分,對於正負數均是如此,正數向下舍入,負數向上舍入,因此我們可以 revilwang 2020-06-2722:29:59 [CSAPP學習筆記]棧幀 CSAPP第三章的重點在我看來就集中在對棧幀的理解上了。

IA32過程調用就是通過各種棧幀來實現的。

  棧幀(StackFrame):爲單個過程(Procedure)分配的那部分棧。

因此棧幀存在於棧上,每個過程又各自擁有自己獨自的棧幀 revilwang 2020-06-2722:29:59 csapp深入理解計算機系統:第五章優化程序性能幾個優化的java實現 packagecombine; importjava.util.Random; /** *csapp優化程序性能從不同角度 *@authorAdministrator * */ publicclassCombin zawdcxsa 2020-06-2421:03:06 CSAPP(二) 磁盤 磁盤是廣爲應用的保存大量數據的存儲設備,在OS和計組課程中也曾經提到過,但是對於基本的概念我認爲總是沒有清楚地瞭解和區分,直到看了CSAPP纔有醍醐灌頂的感覺,下面簡單總結下 基本術語 磁盤是由盤片構成的,每個盤片有兩個表 计算机的感性面 2020-06-2414:11:12 CSAPP(一) 簡介 CSAPP全名是《深入理解計算機系統》,是CMU的教材,也被很多國內外著名的大學選用作教材,我們的408考研使用的《計算機組成原理》其中的一篇參考書目就是經典的CSAPP。

其中涉及到計算機系統結構、操作系統、編譯器、網絡、併 计算机的感性面 2020-06-2414:11:01 csapp:鏈接 從c源代碼變爲可執行文件的四個步驟 預處理:得到.i文件。

預處理之後還是一個可讀文本文件,裏面不存在宏定義。

所以預處理做的事情有:(1)刪除#define並展開所定義的宏(2)處理預編譯指令如#ifdef(3)刪掉所有註釋(4)插 wangqianqianya 2020-06-2305:54:12 csapp:內存層級與緩存機制 半導體存儲器有 RAM:隨機訪問、可讀可寫、易失的存儲器 ROM;非易失性存儲器 隨機訪問存儲器RAM,斷點信息會丟失。

分爲兩類: 靜態SRAM,更快,用作高速緩存存儲器cache 動態DRAM,用作主存及圖形系統的幀緩衝區。

1、靜態R wangqianqianya 2020-06-2305:54:00 MSH:一個簡單SH工具實現 本文將分爲不同的Part,分別實現Shell的一部分功能。

msh從CSAPP的SHLAB出發,逐漸完善SHELL功能,並移植到自己的OS上。

Github:https://github.com/He11oLiu/msh He11o_Liu 2020-06-2213:31:42 爲什麼SSD隨機讀和寫性能差別大?      SSD是一種基於閃存的存儲技術,有着與旋轉磁盤不同的性能特性。

由於CPU按順序訪問邏輯磁盤塊,故SSD的順序讀和寫的性能相當,順序讀比寫稍微快一點。

不過,當CPU按隨機順序訪問邏輯塊時,寫比讀慢一個數量級。

    SCAU_Jimmy 2020-06-2113:42:24 CSAPP實驗-datalab 簡介 csapp的datalab配套實驗,要求修改bits.c源文件使所有給定函數滿足功能並通過btest的所有測試用例,每個實現函數內均對使用的運算符種類和數量有所限制,可以用dlc程序進行檢查。

該實驗主要爲了強化理解整形和浮 古玩 2020-06-2004:56:45 S shaorui_ 24小時熱門文章 數據透視表上線!如何在純前端實現這個強大的數據分析功能? 最新文章 RTFSC C++hasbecomemorepythonic 讀完了csapp(中文名:深入理解計算機系統) Java包裝類、拆箱和裝箱詳解 重寫、覆蓋、重載、多態幾個概念的區別分析 最新評論文章 QualifiedWritingServiceinAustraliacanallowstudentstoachievebettergrades Takeassignmenthelpertoresolvethepaperquerieseasily UpdatedCompTIADA0-001ExamQuestions(2022) 美國黑金效果和其它速效藥的不同之處 MicrosoftDP-500PDFQuestion[2022]-SecretToPassExamInFirstAttempt-[PremiumDumps]



請為這篇文章評分?