學習筆記:CSAP 第一章:計算機系統漫遊

CSAP-計算機系統漫遊

信息就是位+上下文

計算機系統中所有的信息——包括磁盤文件、內存中的程序、內存中存放的用戶數據以及網絡上傳輸的數據,都是一串 bit 表示的。區分不同數據對象的唯一方法是我們讀到這些數據對象時的上下文 。同樣的一個字節序列可能是整數、浮點數、字符串或機器指令

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

  • 預處理階段 hello.c + 預處理命令 => hello.i
  • 編譯階段 hello.i + 彙編指令 => hello.s
  • 彙編階段 hello.s + 不同實現平臺 => hello.o (可重定位目標程序-二進制)
  • 鏈接階段 hello.o + *.o => hello.exe (可執行目標程序-二進制)

瞭解編譯系統如何工作是大有益處的

  • 優化程序性能:我們可能沒有編譯器優化的好,但是我們至少不應該拖後腿(C++編程規範 第9條:不要進行不成熟的劣化)
  • 理解鏈接時出現的錯誤
  • 避免安全漏洞

處理器讀並解釋存儲再內存中的指令

系統的硬件組成

  • 總線 : 它攜帶信息字節並負責在各個部件間傳遞。
  • I/O:系統與外部世界的聯繫通道。
  • 主存: 存放程序和程序處理的數據。
  • 處理器:解釋存儲在主存中指令的引擎

hello 程序的運行流程

  1. 從I/O設備(磁盤)拷貝到主存
  2. CPU從主存中獲取指令執行
  3. 將字符串從主存複製到寄存器
  4. 將字符串從寄存器複製到顯示器

存儲設備形成層次結構

一個存儲器層次結構

操作系統管理硬件

操作系統的兩個功能:

  1. 防止硬件被失控的應用程序濫用
  2. 嚮應用程序提供簡單一致的機制來控制複雜而又通常大不相同的低級硬件設備

進程

進程是操作系統對一個正在運行的程序的一種抽象。在一個系統上可以同時運行多個進程,而每個進程都好像在獨佔地使用硬件

併發運行,則是說一個進程地指令和另一個進程地指令是交錯進行地,一個CPU看上去都像是在併發地執行多個進程,這是通過處理器進行進程間地切換來實現地。操作系統實現這種交錯執行的機制稱爲上下文切換

線程

一個進程實際上可以由多個稱爲線程的執行單元組成,每個線程都運行在進程的上下文中,並共享相同的代碼和數據。

虛擬內存

每個進程看到的內存都是一致的,稱爲虛擬地址空間

  • 程序代碼和數據。
  • 堆:運行期間動態使用malloc 和 free 動態申請和釋放的區域
  • 共享庫:存放共享庫代碼和數據的地方
  • 棧:編譯器用它實現函數調用
  • 內核虛擬內存:爲內核保留。

文件

文件只是字節序而已。 每個I/O設備都可以被視爲文件。

重要主題

系統是硬件和系統軟件相互交織的集合體,它們共同協作以運行應用程序

Amdahl 定律

當我們對系統的某個部分加速時,其對整體性能的影響取決於該部分的重要性和加速程度。若系統執行某應用程序的時間爲 ToldT_{old} 。假設系統某部分所需執行時間和總時間的比例爲 α\alpha , 而該部分性能提升爲 kk 。即該部分所需時間爲 αTold\alpha T_{old} ,現在所需時間爲 (αTold)/k(\alpha T_{old} ) / k。因此總的時間爲:

Tnew=(1α)Told+(αTold)/k=Told[(1α)+a/k]T_{new} = (1 - \alpha) T_{old} + (\alpha T_{old}) / k = T_{old}[(1-\alpha) + a/k]

加速比 S=Told/TnewS=T_{old}/T_{new} 爲:

S=1(1α)+(α/k)S = \frac{1}{(1-\alpha) + (\alpha / k)}

併發和並行

併發(concurrency) 是一個通用概念,指一個同時具有多個活動的系統;

並行(parallelism) 指的是用併發來使一個系統運行的更快。

  1. 模擬併發:單處理器,通過上下文切換模擬出來同時執行多個控制流的現象
  2. 線程級併發: 超線程/同時多線程(simultaneous multi-threading),運行一個CPU執行多個控制流的技術。
  3. 指令級並行:在較低的抽象層次上,現代處理器可以同時執行多條指令的屬性稱爲指令級並行
  4. 流水線(pipelining):將執行一條指令所需要的活動劃分成不同的步驟,將處理器的硬件組織成一系列的階段,每個階段執行一個步驟。這些階段可以並行地操作,用來處理不同指令地不同部分。
  5. 超標量(superscalar):比一個週期一條指令更快地執行速率。
  6. 單指令、多數據並行(SIMD):允許一條指令產生多個可以並行執行地操作。

抽象地重要性

  1. 文件時對I/O設備的抽象
  2. 虛擬內存時對程序存儲器的抽象
  3. 進程是對一個正在運行的程序的抽象
  4. 虛擬機是對整個計算機的抽象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章