天天看點

讀書筆記Pt.1——《深入了解計算機系統》

目錄

  • ​​傳統藝能????​​
  • ​​初衷????​​
  • ​​==資訊就是上下文+位==????​​
  • ​​程式的翻譯????​​
  • ​​益處????​​
  • ​​指令的了解????​​
  • ​​系統的硬體組成????​​
  • ​​高速緩存????​​

傳統藝能????

小編是雙非大學大一菜鳥不贅述,歡迎大佬指點江山 

此前部落格​​點我!點我!請搜尋部落客 【知曉天空之藍】​​

 ​

????????非科班轉碼社群誠邀您入駐????????

小夥伴們,打碼路上一路向北,背後煙火,彼岸之前皆是疾苦

一個人的單打獨鬥不如一群人的砥砺前行

這是我和夢想合夥人組建的社群,誠邀各位有志之士的加入!!

社群使用者好文均加精(“标兵”文章字數2000+加精,“達人”文章字數1500+加精)

直達: ​​社群連結點我​​

讀書筆記Pt.1——《深入了解計算機系統》

-----------------------------------------------

咕了芥末久的讀書筆記,終于盤上了,為什麼出這個讀書筆記一是因為我想在讀的同時記錄下重要知識點,二是想要督促自己記錄學習曆程,三是借此分享知識,我會做成一個專欄友善閱讀,四就是想趁機水文(不演了嘿嘿)

-----------------------------------------------

初衷????

我之是以拜讀這本書是因為我時常思考,寫下某個代碼後,是如何運作出來的,絕不是代碼本身的展現,他隻是指令的載體,一些人想深入了解計算機系統是如何工作的,硬體和軟體又是如何影響程式的正确性和性能的.下面這句話摘自于原書:完全了解底層的原理來一次有趣的漫遊,你會逐漸成為鳳毛麟角的“權威”程式員。

我會選取最精華的知識點來精簡陳述,短小精悍,做到精簡不失其義

資訊就是上下文+位????

什麼意思?比如我們一個最簡單的hello world 程式,生命周期是從一個.c檔案(源檔案)開始的,源檔案實際上是0和1組成的位序列,8個位為一組。

讀書筆記Pt.1——《深入了解計算機系統》

我們了解過ASCII碼,知道每個字元有對應的整數值,而 hello world 程式中每個位元組為一個整數值,再對應成字元,像這樣由ASCII組成的檔案我們就稱之為 文本檔案 或者 二進制檔案

這就是一個基本思想,系統中所有資訊——磁盤檔案,存儲器的檔案,網絡上傳輸的資料都是一連串位表示的,而區分他們的唯一方法就是對象的上下文,不同的序列中一個同樣的位元組序可能表示一個整數,浮點數或者機器指令等等。

程式的翻譯????

一個源檔案的每一條語句都會被不同的程式轉化成不同低級機器語言指令,然後按照一種被稱為可執行目标程式的格式打包好,再以二進制磁盤檔案的形式存起來。

編譯器驅動程式讀取源檔案,并翻譯成一個可執行目标檔案,這個翻譯過程其實就是

程式的編譯問題(預處理,編譯,彙編,連結),有點搞忘了就請移步我之前的部落格,編譯系統大緻就是這樣:

讀書筆記Pt.1——《深入了解計算機系統》

益處????

了解編譯系統工作原理有啥好處啊?

  1. 優化程式性能
  2. 了解連結時出現的錯誤
  3. 避免安全漏洞

    (感覺都很廢話但又不能不要~)

    讀書筆記Pt.1——《深入了解計算機系統》

指令的了解????

計算機裡,需要依靠處理器讀取并解釋儲存在存儲器裡面的指令,此時源程式 hello.c 已經被翻譯成了可執行目标檔案 hello,并放在磁盤上。

系統的硬體組成????

要了解 hello 程式運作時發生了什麼,就需要了解一個典型的系統硬體組織,我們以 Intel Pentium 産品模型為例,其他系統也有相同的外觀和性能,這裡不細講因為有巨量的細節,書上也說了後面會細講。

讀書筆記Pt.1——《深入了解計算機系統》

CPU 即中央處理單元,ALU 即算術/邏輯單元,PC 即程式計數器,USB 即通用串行總線

接下來就精煉的講一講一些基本概念呐:

讀書筆記Pt.1——《深入了解計算機系統》

1.總線

貫穿整個系統的一根電子管道,稱作總線,作用就是攜帶資訊并在各個部件之間傳遞,通常總線被設計傳送定長位元組的位元組塊,也就是字,字裡面的位元組數就是基本的系統參數,這就是為什麼有我們之前講到的32位機器字長4位元組,64位機器字長為8位元組。為了讨論友善,假設字長就是4,總線每次隻傳1個位元組。

2.I/O裝置

即輸入/輸出裝置,老四樣還是鍵盤,滑鼠,顯示器以及存儲資料和程式的磁盤驅動。

每個I/O裝置會通過控制器或擴充卡與I/O總線相連,控制器和擴充卡之間的主要差別就是封裝方式不同,前者位于裝置本身或者主機闆的晶片組後者則是一個插在主機闆插槽上的卡。

3.主存

主存是一塊臨時儲存設備,實體上講就是一組動态随機存儲存儲器(DRAM)組成的,邏輯上講就是一個線性的位元組數組,每個位元組都有其唯一的位址,位址從0開始,組成程式的每條機器指令都是由不同數量的位元組構成的,是以,C程式變量相對應的資料項的大小是根據類型變化的,比如 int 需要4位元組,short 需要2位元組,double 需要8位元組。

3.CPU

即中央處理器,是解釋或執行存儲在主存中指令的引擎。他的主要結構是一個字長的儲存設備(或寄存器),稱為程式計數器(PC),任何時刻PC都指向主存中的某條機器語言指令,即含有該指令的位址。

處理器會從計數器指向的存儲器中讀取指令,并解釋其中的位,執行指令中的簡單操作,然後更新計數器讓他指向下一個指令,注意指令之間不一定相鄰。

當然這種簡單的操作并不多,還會圍繞寄存器檔案(一些1字長的寄存器組成),ALU(算術/邏輯單元,用于計算新的資料和位址)執行加載,存儲,操作,跳轉這些操作。

一句話,看上去隻是指令集結構的簡單實作,實際上是處理器使用了非常複雜的機制來加速程式運作。

讀書筆記Pt.1——《深入了解計算機系統》

高速緩存????

在 hello world 程式裡,資料串初始是在磁盤上,然後複制到主存,最後從主存上複制到顯示裝置。從程式員的角度看,這些位址就是開銷,減緩了程式“真正”工作。

讀書筆記Pt.1——《深入了解計算機系統》

上帝不會允許十全十美的東西出現,較大的儲存設備比較小的運作的更慢,而高速裝置的成本又十分的高,比如磁盤驅動器可能比主存大 1000 倍,但磁盤讀取時間開銷卻是主存的 1*10^7 倍,是以更小更快的高速緩存存儲器就應運而生了!

讀書筆記Pt.1——《深入了解計算機系統》

作為暫時的集結區域,用來存放處理器近期可能會處理的需要的資訊,通路速度基本上與寄存器相媲美,這是位于處理器晶片的L1高速緩存,還有一個通過特殊總線連接配接到處理器的L2高速緩存,容量更大,通路時間是L1的5倍,但仍然比通路主存快 5-10倍。

L1和L2是依靠靜态随機通路存儲器的硬體技術實作的,現在比較新的系統甚至還有三級高速緩存,系統可以獲得一個很大的存儲器,同時通路速度也很快,原因是利用了高速緩存的局部性原理即程式具有通路局部區域的資料和代碼的趨勢。

今天就到這裡,讀書筆記可能會一周一更吧。

繼續閱讀