CSAPP(第三版)第一章計算機系統漫遊學習筆記
阿新 • • 發佈:2022-03-24
一.資訊就是位+上下文
整個計算機系統中的所有資訊都可以用一串位元串的形式表示,區分不同的資料物件的唯一方法就是我們讀到的這些物件時的上下文(context)
二.程式被其他程式翻譯成不同的格式
一個高階語言寫的程式(這裡以C語言為例),從原始碼到最終的機器中的可執行檔案會經過一下幾個階段:
- 預處理階段,處理原始碼的中的預處理語句(比如說#include)
- 編譯階段,將c語言編譯成組合語言
- 彙編階段,把組合語言翻譯成機器指令
- 連結階段,把在程式中呼叫的庫函式的相關檔案引入
三.瞭解編譯系統如何工作室大有益處的
促使程式設計師要知道編譯系統是如何工作的原因:
- 優化程式效能,我們需要對組合語言以及編譯器如何將不同的C語句轉化為組合語言有基本的瞭解
- 理解連結時出現的錯誤
- 避免安全漏洞,其中一個比較典型的是緩衝區溢位錯誤
四.處理器讀並解釋儲存在儲存器中的指令
一個計算機系統的硬體主要由以下幾個部分組成:
- 匯流排,負責攜帶資訊位元組並在各個部件之間進行傳輸
- I/O裝置,負責系統和外界的聯絡
- 主存,執行程式時存放程式以及程式中含有的資料
- 處理器,解釋(或執行)儲存在主存中的指令
執行一個hello程式的過程有一下幾部:
- shell程式執行其指令,等待我們輸入命令
- 我們輸入完命令以後,shell執行一系列指令,將hello程式的程式碼以及其資料載入到主存中
- 處理器開始執行hello程式中的機器指令,將“hello world”輸出到螢幕上
五.快取記憶體
我們使用的儲存裝置通常是較大的儲存裝置比較小的儲存裝置執行地要慢,所以就使用一個較小的速度較快的儲存裝置作為CPU和Main Memory交換資料的橋樑,這個裝置就是快取記憶體(cache memories)
六.形成層次結構的儲存結構
在計算機系統的儲存裝置被組織成了一個金字塔形的儲存層次模型,其中從上到下,裝置速度越來越慢,空間越來越大,每位元組的造價越來越便宜。
七.作業系統管理硬體
作業系統可以看成是一個應用程式和硬體之間的一個軟體,其有兩個基本功能: 防止硬體被失控的程式濫用; 為應用程式提供控制硬體的簡單一致的方法
- 程序:程序可以看成是作業系統對正在執行的程式的一種抽象,在一個系統中可以執行多個程序,這些程序對外表現好像是獨佔硬體,實際上是通過不同程序之間程序的互動執行實現的,這個過程叫上下文切換(context switch)
- 執行緒:一個程序可以由多個執行緒組成,執行在一個上下文環境中,共享程式碼以及全域性資料。因為共享資料,使得其比一般的程序更加高效(花在context switch的時間少)。
- 虛擬儲存器:給程序提供的一個好像自己獨佔主存的假象,對於程序的所使用的虛擬儲存器可以分成一下幾個部分:
- 程式程式碼和資料
- 堆,可以動態擴充套件或者收縮,供像malloc和free這樣的C語言中的庫進行呼叫
- 共享庫
- 棧,可以動態擴充套件或者收縮,用於編譯器的函式呼叫
- 核心虛擬儲存器
- 檔案:檔案可以看成位元組序列,每一個I/O裝置從本質上來看都可以看成是檔案
八.系統之間利用網路通訊
九.重要主題
- Amdahl定律:Gene Amdahl,計算領域的早期先鋒之一,對提升系統某一部分效能所帶來的效果做出了簡單卻有見底的觀察。
- 併發和並行
- 執行緒級併發
- 指令級並行
- 單指令,多資料並行
- 計算機系統中抽象的重要性