《深入理解計(jì)算機(jī)系統(tǒng)》| 計(jì)算機(jī)系統(tǒng)漫游

[閱讀本書的目的]

? ? ?我們傻傻的編寫程序,其實(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)

其實(shí)在計(jì)算機(jī)系統(tǒng)的內(nèi)部,所有的信息——包括磁盤文件、程序、以及網(wǎng)絡(luò)中的數(shù)據(jù)都是由一串位表示的,區(qū)分不同信息的關(guān)鍵在于對(duì)于這些內(nèi)容如何解釋,就比如同樣的一串01010101,可以解釋成:整數(shù)、浮點(diǎn)數(shù)甚至指令。

2.編譯系統(tǒng)

預(yù)處理-編譯器-匯編器-鏈接器

這里簡(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.高速緩存


產(chǎn)生原因是:程序需要大量復(fù)制信息

舉一個(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)行干了什么:


從程序的加載執(zhí)行到最后顯示結(jié)果:大量到復(fù)制信息

當(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ǔ)器的位置:


高速緩存存儲(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)是軟硬件之間的抽象

操作系統(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ō)的一樣:你們必曉得真理,真理必叫你們得以自由。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 計(jì)算機(jī)系統(tǒng)是由硬件和軟件系統(tǒng)組成的,它們共同工作來(lái)運(yùn)行應(yīng)用程序。作為程序員,也需要了解這些組件是如何工作的,以及這...
    knightaoko閱讀 768評(píng)論 0 2
  • 匯編語(yǔ)言:一種用于電子計(jì)算機(jī)、微處理器、微控制器,或其他可編程器件的低級(jí)語(yǔ)言。在不同的設(shè)備中,匯編語(yǔ)言對(duì)應(yīng)著不同的...
    9ba348473cee閱讀 2,000評(píng)論 0 0
  • 計(jì)算機(jī)系統(tǒng)是由硬件和系統(tǒng)軟件組成的,它們共同工作來(lái)運(yùn)行應(yīng)用程序。 系統(tǒng)中的所有信息都是由一串位表示的,區(qū)分不同對(duì)象...
    長(zhǎng)仙人閱讀 333評(píng)論 0 0
  • 一.感恩今天的風(fēng)和日麗,感恩下午野外執(zhí)勤時(shí)一切順利。 二.感恩公司人力資源部主管的熱心講解,感恩你的付出。 三.感...
    龍驍閱讀 146評(píng)論 0 3

友情鏈接更多精彩內(nèi)容