
[閱讀本書的目的]
? ? ?我們傻傻的編寫程序,其實(shí)并不知道計(jì)算機(jī)是如何將源代碼文件編譯鏈接成可執(zhí)行的程序,也不知道指令是如何被加載,如何一條一條的執(zhí)行,到最后顯示出結(jié)果。在這一過(guò)程中,寫代碼的人如何能編寫出健壯的代碼、如何很好的利用操作系統(tǒng)的特性優(yōu)化代碼、發(fā)生了問(wèn)題如何學(xué)會(huì)自己去分析,而不做拿來(lái)主義google式的程序猿。這本書也許是這些終極問(wèn)題的最好解答,正如作者在開篇說(shuō)的一樣:“如果你全力投入學(xué)習(xí)本書的概念中去,完全理解底層計(jì)算機(jī)系統(tǒng)以及它對(duì)程序的影響,那么你將逐漸成為鳳毛麟角的權(quán)威程序猿”。
[筆記內(nèi)容]
? ? ?本章從一個(gè)程序的生命周期講起,分別對(duì)程序的創(chuàng)建、編譯、執(zhí)行、輸出、終止進(jìn)行了詳細(xì)的解讀,從中引出了關(guān)于信息上下文、編譯系統(tǒng)、高速緩存、操作系統(tǒng)等重要概念,并對(duì)上述問(wèn)題進(jìn)行了簡(jiǎn)單的講解,其中作為程序猿應(yīng)該要好好理解和利用的部分正是:高速緩存。
1.信息就是如何解釋:

在我們編寫程序源代碼的時(shí)候,計(jì)算機(jī)系統(tǒng)其實(shí)為我們完成了源碼與 ascii碼的一一對(duì)應(yīng)

2.編譯系統(tǒng)

這里簡(jiǎn)單講解了從源程序:hello.c到可執(zhí)行文件到四個(gè)階段。每個(gè)階段完成的工作和對(duì)應(yīng)生成文件。
1]預(yù)處理的工作比較簡(jiǎn)單:對(duì)應(yīng)的就是展開#include中的.h頭文件;
2]編譯器其實(shí)包含了一個(gè)匯編語(yǔ)言程序,講程序語(yǔ)言轉(zhuǎn)化成匯編語(yǔ)言;
3]匯編階段:生成可重定位的.o二進(jìn)制目標(biāo)文件,這一步完成匯編語(yǔ)言轉(zhuǎn)機(jī)器指令;
4]鏈接階段:合并許多的.o文件,主要是我們?cè)谠闯绦蛑杏玫竭^(guò)的如:printf.o
3.高速緩存

舉一個(gè)例子來(lái)講述我們?yōu)槭裁葱枰咚倬彺婕夹g(shù):“我們?cè)谠虑蛏辖⒘艘婚g廚房,可以做出許多美味的食物。由于月球離地球的距離太遙遠(yuǎn),我們要炒一個(gè)番茄炒蛋,需要大老遠(yuǎn)大從地球上通過(guò)宇宙飛船運(yùn)輸過(guò)去,而廚師真正開始炒菜需要的時(shí)間并不多。如果這樣來(lái)回的運(yùn)輸食材,廚師大部分時(shí)間上空閑的在等待食材,這對(duì)高薪聘請(qǐng)的廚師來(lái)說(shuō),實(shí)在是太浪費(fèi)了。有沒(méi)有什么辦法能夠加快廚師做菜的速度呢?在這個(gè)例子中廚師就相當(dāng)于cpu,而食材就相當(dāng)于數(shù)據(jù),而解決方案就是:高速緩存”
我們先來(lái)看看沒(méi)用高速緩存中一個(gè)程序的運(yùn)行干了什么:

當(dāng)我們從外殼執(zhí)行hello程序的時(shí)候,首先是將程序的數(shù)據(jù)和代碼從磁盤復(fù)制到主存,處理器開始執(zhí)行指令,并將需要顯示的數(shù)據(jù)從主存復(fù)制到寄存器中,最后需要顯示是將寄存器的數(shù)據(jù)復(fù)制到顯示設(shè)備,最終顯示出來(lái)的。這些復(fù)制操作就是開銷,減緩了程序真正的工作。因此就需要高速緩存技術(shù):暫時(shí)集結(jié)區(qū)域。
我們來(lái)看看高速緩存存儲(chǔ)器的位置:

由于機(jī)械原理,訪問(wèn)速度越快的存儲(chǔ)設(shè)備造價(jià)相對(duì)越高,拿硬盤和主存來(lái)說(shuō)。硬盤的造價(jià)可能是主存的1000倍,但是訪問(wèn)的開銷卻要比主存大10000000倍。高速緩存就是為了存放可能經(jīng)常訪問(wèn)到的數(shù)據(jù),這就大大提高了訪問(wèn)的速度,減小了開銷。
主要思想是:一層上的存儲(chǔ)器作為低一層存儲(chǔ)器的高速緩存

4.操作系統(tǒng)

操作系統(tǒng)提供了軟件與硬件之間的一層抽象,既可以防止程序?yàn)E用硬件也方便了我們對(duì)于程序的編寫。這里的抽象主要是指:1]對(duì)運(yùn)行中程序的抽象(進(jìn)程);2]對(duì)于存儲(chǔ)器的抽象(虛擬存儲(chǔ)器);3]對(duì)輸入輸出的抽象(文件)甚至包括網(wǎng)絡(luò);4]虛擬機(jī)等。
這里的很多內(nèi)容都是簡(jiǎn)單的提了一下,后續(xù)章節(jié)中還有詳細(xì)的講解。
漫游至此,對(duì)于本書要講解的內(nèi)容有了大概的了解,本書的出發(fā)點(diǎn)是很好的,正如《圣經(jīng)》約翰福音中說(shuō)的一樣:你們必曉得真理,真理必叫你們得以自由。