<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          被 CSAPP 虐了!

          共 3349字,需瀏覽 7分鐘

           ·

          2021-10-29 00:14

          最近幾個(gè)周末去圖書館刷 CSAPP 完全停不下來(lái)啊,這種看不懂卻還是強(qiáng)忍著痛苦硬逼著自己去看的感覺(jué),真讓我著迷。

          d2d2b5309745234f518948723f78fc63.webp

          這本書從真正意義上讓我體會(huì)到了什么叫做看書五分鐘,休息倆小時(shí)。

          不過(guò)大家可千萬(wàn)別學(xué)我,我相信在坐的各位絕對(duì)比我牛批,為什么?因?yàn)楹竺嫖医o你推薦了一款神器,那么首先我們先來(lái)介紹一下這本書。

          0a4b0093bcc2064649da3fad253a11ec.webp

          這本書總共分成十二個(gè)章節(jié),我給你繪制了一個(gè)思維導(dǎo)圖,比較簡(jiǎn)單明了。

          cf785d829c287e9f0021c6af86c2fb85.webp

          第一章是提綱挈領(lǐng)性質(zhì)的一章,從一個(gè) hello world 程序來(lái)引出 C、引出 UNIX、Linux ,引出 C 語(yǔ)言程序的編譯過(guò)程,引出高速緩存、系統(tǒng)的硬件組成、存儲(chǔ)結(jié)構(gòu)、虛擬內(nèi)存、網(wǎng)絡(luò)編程、并發(fā)編程,非常 cool。第一章的內(nèi)容雖然不難理解,卻是能讓人漲自信心的一章,這一章能讓你產(chǎn)生一種激動(dòng)的心情,因?yàn)閮?nèi)容不難,但是卻能夠開(kāi)拓你的思路,把你的知識(shí)體系串聯(lián)起來(lái)。

          第一部分

          第二章的內(nèi)容比較枯燥,我個(gè)人認(rèn)為需要一定的 C 語(yǔ)言基礎(chǔ),雖然這本書的簡(jiǎn)介中說(shuō)如果你有 Java 基礎(chǔ)的話。。。。。。

          23eccc57022e61a08e0f33d3e64e594f.webp

          還是有點(diǎn)難頂?shù)?,所以建議學(xué)一波 C 。

          別擋我,C 語(yǔ)言我來(lái)了,這里推薦兩本 C 語(yǔ)言的書吧,第一本書 《C Primer Plus》 這本書是把 C 語(yǔ)言揉碎了手把手教你,另外《C 程序設(shè)計(jì)語(yǔ)言》也不錯(cuò)。

          第二章主要講的是計(jì)算機(jī)中數(shù)據(jù)的存儲(chǔ)方式,基本的數(shù)據(jù)類型和各種補(bǔ)碼、反碼的表示方式??傊催@一章如果不了解 C 的話,有點(diǎn)昏昏欲睡(原因是可能不太懂),但實(shí)際上第二章寫的很不錯(cuò),當(dāng)你閱讀了本書的第二章之后,也許會(huì)發(fā)現(xiàn),你所謂的(懂)只是你的一廂情愿而已,數(shù)值系統(tǒng)遠(yuǎn)沒(méi)有你想象的那么簡(jiǎn)單。

          第三章是程序的機(jī)器級(jí)表示,如果你把 C 學(xué)的差不多了之后(其實(shí)如果單看第二章的話,把 C 語(yǔ)言數(shù)據(jù)類型惡、運(yùn)算惡補(bǔ)一下即可),那么恭喜你,接下來(lái)你要學(xué)習(xí)一下匯編了,否則你根本看不懂第三章在說(shuō)什么(別問(wèn)我為什么知道的,因?yàn)槲乙部床欢?。你可能想知道諸如 pushq、movq、call、popq、ret、%rbx、%rdx 等等都是干嘛的,還有匯編是如何編寫的。而且你還要懂 C 語(yǔ)言。

          這么看來(lái)這本書根本就不是一本為初學(xué)者準(zhǔn)備的書,也可以說(shuō)是初學(xué)者的勸退書。

          第四章又是一個(gè)打開(kāi)新世界大門的一章,這章會(huì)直接從各種電路開(kāi)始搞起,這 TM 馬上就直接奔硬件了!主要講了 Y86-64 體系、各種門電路、引出計(jì)算機(jī)流水線的設(shè)計(jì)。畢竟現(xiàn)代微處理器可以稱得上是人類創(chuàng)造出的最復(fù)雜的系統(tǒng)之一。也會(huì)給你講解各種指令集的區(qū)別。

          與這一章節(jié)相關(guān)的書籍,可以看看《計(jì)算機(jī)組成與設(shè)計(jì):軟件/硬件接口》還有《編碼》這兩本書,都非常好,非常透徹。

          這一章也會(huì)和你聊聊指令集架構(gòu),這些架構(gòu)和宏觀意義上的應(yīng)用層架構(gòu)不一樣,非常復(fù)雜,比如下面這個(gè) ARM 架構(gòu)

          889fc4bca2e3cd17f52c0db8ea5f8e0d.webp

          這本書是一個(gè)值得熟讀 N 遍的一本書。

          第五章:優(yōu)化程序性能,現(xiàn)在普遍意義上提到的各種優(yōu)化,不論是架構(gòu)層優(yōu)化、指令集優(yōu)化等核心都離不開(kāi)這一章所介紹的內(nèi)容。優(yōu)化的難點(diǎn)在于你需要對(duì)系統(tǒng)有充分理解,當(dāng)然了在你做優(yōu)化之前首先要保證原始程序功能正確(并且有回歸測(cè)試),否則一切都是徒勞。比如你需要了解現(xiàn)在系統(tǒng)存在的性能瓶頸,才能系統(tǒng)性的進(jìn)行優(yōu)化,你才能夠編寫高效的程序。

          編寫高效程序需要做到下面這幾點(diǎn):

          • 選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)和算法。
          • 編寫出編譯器能夠有效優(yōu)化以轉(zhuǎn)換成可執(zhí)行代碼的源代碼。
          • 任務(wù)拆分,采用并行計(jì)算的方式。

          第六章:存儲(chǔ)器層次結(jié)構(gòu),這一章會(huì)向你介紹存儲(chǔ)技術(shù)的發(fā)展,磁盤、主存、高速緩存的性能差距到底有多大,然后介紹局部性原理,一項(xiàng)非常強(qiáng)大的緩存技術(shù)。高速緩存讀寫是如何映射的,高速緩存不同參數(shù)的性能影響,如何編寫高速緩存又好的代碼,存儲(chǔ)器山是個(gè)什么概念,以及你會(huì)見(jiàn)到封面的插圖。

          看這一章的時(shí)候強(qiáng)烈建議把 Ulrich Drepper 撰寫的長(zhǎng)達(dá) 114 頁(yè)的經(jīng)典論文 What Every Programmer Should Know About Memory 看了。

          以上就是 CSAPP 的第一部分,第一部分主要介紹了程序和硬件之間的交互關(guān)系。

          而第二部分則專注于程序和操作系統(tǒng)之間的交互關(guān)系,你會(huì)學(xué)到如何使用操作系統(tǒng)提供的服務(wù)來(lái)構(gòu)建系統(tǒng)級(jí)程序。

          第二部分

          第七章:鏈接,我們使用 Linux 的時(shí)候,很多情況下會(huì)出現(xiàn)很多難以理解的錯(cuò)誤,其中很多都是鏈接錯(cuò)誤。鏈接分為靜態(tài)鏈接和動(dòng)態(tài)鏈接,我們寫的 C 程序在執(zhí)行的過(guò)程中都會(huì)經(jīng)過(guò)鏈接階段。

          5729e0294bd06ab816abc20e25cae3f4.webp

          除了這一章內(nèi)容之外,大家也可以看一下一本把鏈接講的非常透徹的一本書:《程序員的自我修養(yǎng) -- 鏈接, 裝載與庫(kù)》,主要講授代碼指令是如何保存的,庫(kù)文件如何與應(yīng)用程序代碼靜態(tài)鏈接,應(yīng)用程序如何被裝載到內(nèi)存中并開(kāi)始運(yùn)行,動(dòng)態(tài)鏈接如何實(shí)現(xiàn),C/C++運(yùn)行庫(kù)的工作原理,以及操作系統(tǒng)提供的系統(tǒng)服務(wù)是如何被調(diào)用的。非常好的一本國(guó)產(chǎn)書。

          第八章:異??刂屏?,世界上不會(huì)存在完美運(yùn)行的程序,任何程序都會(huì)出錯(cuò),這些錯(cuò)誤可能是線程執(zhí)行過(guò)程中出錯(cuò)、可能是系統(tǒng)調(diào)用異常、頁(yè)面映射錯(cuò)誤等等。這一章會(huì)向你介紹各種異常出現(xiàn)之后,操作系統(tǒng)是如何處理的。

          第九章:虛擬內(nèi)存,虛擬內(nèi)存其實(shí)是存儲(chǔ)器層次結(jié)構(gòu)的衍生,至于為什么單獨(dú)拿一章來(lái)說(shuō),因?yàn)樘摂M內(nèi)存太重要了。這一章會(huì)向你介紹為什么我們的計(jì)算機(jī)內(nèi)存只有 8G(或其他)卻能夠運(yùn)行自身數(shù)倍以上的程序。虛擬內(nèi)存有的時(shí)候也是面試官比較愛(ài)問(wèn)的一個(gè)點(diǎn):虛擬內(nèi)存是如何映射的,什么是頁(yè)框、頁(yè)表諸如此類。

          第三部分

          第三部分主要介紹程序間的相互通信,主要包括 IO、網(wǎng)絡(luò)編程和并發(fā)編程。

          IO 這部分介紹類 Unix 系統(tǒng)下的 I/O 讀寫,主要介紹系統(tǒng)層面的 I/O 接口。

          今天互聯(lián)網(wǎng)中的大千世界都立足于 TCP/IP 協(xié)議之上,Socket 甚至已經(jīng)成為了網(wǎng)絡(luò)編程的同義詞。這部分主要向你介紹了網(wǎng)絡(luò)的變遷,什么客戶端-服務(wù)器編程模型、Web 服務(wù)器,最后再帶你寫一個(gè) Web 服務(wù)器。

          網(wǎng)絡(luò)這部分內(nèi)容遠(yuǎn)比這一章節(jié)介紹的復(fù)雜,網(wǎng)絡(luò)這部分內(nèi)容給大家推薦幾本書:《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》、《TCP/IP 詳解》,《UNIX 網(wǎng)絡(luò)編程》。

          你一定要知道的是 W. Richard Stevens,他的個(gè)人網(wǎng)站 http://www.kohala.com/start/

          并發(fā)這一章節(jié)主要介紹了 C 中如何編寫并發(fā)程序,如何榨干 CPU ,讓其發(fā)揮峰值性能。

          推薦一個(gè)網(wǎng)站

          讀 csapp 這本書還是需要一定基礎(chǔ)的,而且讀起來(lái)不是那么容易(起碼對(duì)于我來(lái)說(shuō)是這樣的)。

          不過(guò),業(yè)界還是有一些好資源,能讓你更快的深入這本書。

          給大家推薦一個(gè)網(wǎng)站,https://fengmuzi2003.gitbook.io/csapp3e/

          這個(gè)網(wǎng)站可以理解為是 CSAPP 的導(dǎo)讀網(wǎng)站,對(duì)每一章都進(jìn)行了介紹,而且推薦了一些不錯(cuò)的資源。

          比如他分享的深入理解計(jì)算機(jī)系統(tǒng)的 B 站課程。

          b21dbe69346c6a36c3662607344bc0b6.webp

          看到這里有沒(méi)有心潮澎湃的要馬上學(xué)起來(lái)呢?

          還有一些電子書的下載渠道:

          80d5b2d81bdd2052b58ed7548e60c678.webp

          CSAPP 不管是中英版本都有一些勘誤,有一些已經(jīng)改正了,有一些還沒(méi)改,大家可以在 http://www.yiligong.org/csapp3e/ 反饋你見(jiàn)到的勘誤,有一些是影響閱讀的,但是有一些是影響理解的。

          這里給大家一個(gè)小提示,我粗略過(guò)了一遍,就拿中文版的《深入理解計(jì)算機(jī)系統(tǒng)》來(lái)說(shuō),大家可以看一下最開(kāi)頭處的印刷時(shí)間,然后針對(duì)這些勘誤的提出時(shí)間進(jìn)行比較,在印刷之前的很多勘誤已經(jīng)得到修正了。

          也就是說(shuō),對(duì)于這個(gè)網(wǎng)站的使用方法,大家可以從后往前看。

          29077f3692f757f053355a1ff5ef00ea.webp

          總結(jié)

          上面只是我對(duì)這本書一個(gè)粗俗的理解,書我還沒(méi)看完,不過(guò)我已經(jīng)有相關(guān) C 語(yǔ)言、匯編語(yǔ)言的學(xué)習(xí)計(jì)劃了,另外,知乎上有一個(gè)對(duì) 《如何閱讀深入淺出計(jì)算機(jī)系統(tǒng)》 的一個(gè)總結(jié)性回答,https://www.zhihu.com/question/20402534/answer/1670374116 我認(rèn)為還是非常好的。

          這個(gè)回答里面有練習(xí)題的答案,還有學(xué)習(xí)這本書需要的前置知識(shí),這個(gè)回答給我的感覺(jué)是答主已經(jīng)刷過(guò)幾遍了,作為過(guò)來(lái)人的經(jīng)驗(yàn)還是值得學(xué)習(xí)的。

          最最最重要的就是做實(shí)驗(yàn),你可以在 http://csapp.cs.cmu.edu/3e/labs.html 上找到 csapp 的所有實(shí)驗(yàn)。


          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天射天玩天天日 | 婷婷色在线视频 | 青青草手机在线视频 | 午夜婷婷免费观看 | 国产电影三级在线观看 |