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語言已經在彙編的角度上加入了記憶體等馮諾依曼機器中的概念。
1.3 了解編譯系統如何工作是大有好處的
每個人了解不一樣2333
1.4 處理器讀并解釋存儲在記憶體中的指令
一個經典的圖靈機包括:
- 記憶體memory
- ALU Processing Unit 運算單元
- IO
- Control Unit CPU
這就是一個指令在計算機執行的步驟和所需硬體。
1.5 高速緩存至關重要
cache,例如ssd中cache大小對性能影響巨大,同時會在proxy lab 中用到。
1.6 儲存設備形成層次結構
一圖勝千言
1.7 作業系統管理硬體
除了語音抽象,作業系統OS也會提供一個抽象給使用者,為了安全和相容性能。具體通過三個抽象
- 對處理器、主存和IO的抽象
- - 程序 OS對一個正在運作的程式一個抽象
- - 線程 程序的執行單元,運作在程序中,共享同樣的代碼和全局資料。(C語言沒有線程程序概念)
- 檔案 對IO的抽象 了解這句話的意思就是Linux下的一切皆檔案,包括stdin,stdout流鍵盤,目錄,網絡裝置等等
- 虛拟記憶體 為每個程序都獨占地使用主存的一個抽象(對主存和存儲器的抽象)
1.8 系統間利用網絡通信
網絡也是一個IO裝置,
類似上述,具體不表
1.9 重要主題
- amdahl定律 阿姆達爾定律
對系統的性能一個很好的解析,即提示系統性能應該從最大,最關鍵或最薄弱的部分進行
- 并行和并發
-
- 并發:指一個同時具有多個活動的系統
-
- 并行:指的是用并發來使一個系統運作更快
這會給過程性語音帶來許多麻煩,SICP中也有提3.4并發:時間是一個本質問題
1.9.3 計算機系統中抽象的重要性
這裡提到了虛拟機,java應該是對這裡的更好解釋
chap1 完