天天看點

CSAPP Note chap1

CSAPP Note chap1

CSAPP 讀書筆記系列chap1

這些讀書筆記為個人讀CSAPP所寫,除了簡單的書上重點外,也會加一些自己對計算機的感受。

文章順序為書上目錄的順序,個人了解,應該有偏頗,請見諒。

chap1 是一個很重要的章節,這裡提及了在計算機體系中最重要的一個概念——抽象。可惜過去三年的大學教育中,這個概念老師很少提及,具體下面再提。

1.1 資訊就是位加上下文

在ITer眼裡,和計算機打交道往往比和人打交道簡單,因為計算機中隻有兩個概念:0 和1。0和1組成了資訊,在機器眼裡,0和1永遠都不會搞混。0和1更具體是在電路中的三極管的開閉。

但在人類面前,面對一大串0和1可能就很出錯。之前上計算機系統概論的時候,老師曾經讓我們把彙編LC-3語音翻譯成01機器碼,過程巨蛋疼。是以,我們要對0和1進行抽象,把計算機的語音抽象成人類所能懂的語音。

對于01,第一個抽象應該就是彙編了。參考孟岩老師的回答幾個問題中的四個半抽象

軟體搞了60年,我認為真正被實踐證明了的抽象,一共有四個半,分别是:

1. 機器抽象,或者稱語言抽象,構造一台新的計算機或程式語言,使其能了解領域特定的語言,進而最妥帖地解決問題。這是最有力的抽象,是軟體開發中的“火箭科技”。

2. 過程抽象,把一件事情看成是一系列嵌套和串接執行的标準化過程的總和,就像流水線一樣。這是極為有力的抽象,是以C語言無所不能。但是層次偏低,規模增大以後帶來一些挑戰。

3. 函數抽象,最玄妙的一種,這個我不多說,有興趣的去看 Structure and Interpretation of Computer Programs.

4. 面向對象抽象,把一件事情看成是一組各負其責的對象彼此之間互相收發消息,根據消息互相協作完成工作的過程。這個抽象也極為有力。

4.5 僵化的面向對象抽象,把世界看成是由層次分明、龐雜萬端的類型體系“執行個體化”而出的對象組成的,把事情看成是這些對象之間互相收發消息、協作而成的過程。
           

1.2 程式被其他程式翻譯成不同的格式

這裡說的是C系語音翻譯成機器語言的過程,我認為是比彙編更高的抽象。因為C語言已經在彙編的角度上加入了記憶體等馮諾依曼機器中的概念。

CSAPP Note chap1

1.3 了解編譯系統如何工作是大有好處的

每個人了解不一樣2333

1.4 處理器讀并解釋存儲在記憶體中的指令

一個經典的圖靈機包括:

  • 記憶體memory
  • ALU Processing Unit 運算單元
  • IO
  • Control Unit CPU

這就是一個指令在計算機執行的步驟和所需硬體。

1.5 高速緩存至關重要

cache,例如ssd中cache大小對性能影響巨大,同時會在proxy lab 中用到。

1.6 儲存設備形成層次結構

一圖勝千言

CSAPP Note chap1

1.7 作業系統管理硬體

除了語音抽象,作業系統OS也會提供一個抽象給使用者,為了安全和相容性能。具體通過三個抽象

- 對處理器、主存和IO的抽象

- - 程序 OS對一個正在運作的程式一個抽象

- - 線程 程序的執行單元,運作在程序中,共享同樣的代碼和全局資料。(C語言沒有線程程序概念)

- 檔案 對IO的抽象 了解這句話的意思就是Linux下的一切皆檔案,包括stdin,stdout流鍵盤,目錄,網絡裝置等等

- 虛拟記憶體 為每個程序都獨占地使用主存的一個抽象(對主存和存儲器的抽象)

CSAPP Note chap1

1.8 系統間利用網絡通信

網絡也是一個IO裝置,

類似上述,具體不表

1.9 重要主題

  • amdahl定律 阿姆達爾定律

對系統的性能一個很好的解析,即提示系統性能應該從最大,最關鍵或最薄弱的部分進行

  • 并行和并發
    • 并發:指一個同時具有多個活動的系統
    • 并行:指的是用并發來使一個系統運作更快

這會給過程性語音帶來許多麻煩,SICP中也有提3.4并發:時間是一個本質問題

1.9.3 計算機系統中抽象的重要性

CSAPP Note chap1

這裡提到了虛拟機,java應該是對這裡的更好解釋

chap1 完

繼續閱讀