深刻理解計算機系統 第一章 計算機系統漫遊

第一章 計算機系統漫遊

1.1 信息就是位+上下文

系統中的全部信息,包括磁盤文件,內存中的程序,內存中存放的用戶數據以及網絡上傳送的數據,都是由一串比特表示的。區分不一樣數據對象的惟一方法是咱們讀到這些數據對象的上下文。linux

1.2 程序被其餘程序翻譯成不一樣格式

一個程序的生命週期是從一個高級C語言程序開始的,爲了能在系統上運行該程序,每條語句都必須被其餘程序轉換成一系列低級機器語言,而後這些指令按照可執行目標程序的格式打包好,並以二進制文件的形式存儲起來。獲得可執行目標文件。shell

這個翻譯過程可歸爲四個階段,預處理,編譯,彙編,連接,四個階段構成了編譯系統。編程

1.png

預處理階段緩存

預處理器根據預編譯指令,對C程序進行文本替換。獲得.i文件。安全

編譯階段網絡

編譯器將.i翻譯成.s,獲得一個彙編語言程序。C語言和Fortran編譯器產生的輸出文件都是同樣的彙編語言。架構

彙編階段併發

將.s文件翻譯成機器語言指令,並打包成可重定位目標程序,把存在目標文件.o中。.o是二進制文件。函數

連接性能

C語言頭文件中中的函數存在了預編譯好的目標文件,所以該階段將調用的函數合併到咱們的.o文件中,獲得可執行目標文件。該文件能夠被加載到內存中由系統執行。

1.3 瞭解編譯系統如何工做的益處

  1. 優化程序性能

    咱們須要瞭解一些機器代碼以及編譯器如何將C轉換爲機器代碼的方式。不一樣循環語句的比較,switch和ifelse的比較等。

  2. 理解連接時出現的錯誤

  3. 避免安全漏洞,如緩衝區溢出等

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

當程序被編譯完成後,咱們可經過shell指令

linux> ./hello

來運行程序

1.4.1 系統的硬件組成

爲了理解運行hello程序時發生了什麼,咱們須要瞭解系統的硬件組織。

這是一張近期Intel產品族的模型

2.png

總線

貫穿於整個系統的電子管道,攜帶信息字節並負責在各個部件間傳遞。總線傳輸的數是個重要的系統參數。

IO設備

IO設備是系統與外部的聯繫通道,每一個IO設備經過控制器或適配器與IO總線相連。控制器和適配器的差異在於他們的封裝方式。控制器是IO設備自己或系統的主印刷電路板,適配器是插在主板插槽上的卡。

主存

主存用來存放程序和數據,由DRAM構成。按字節編址。

處理器

處理器按照指令模型來操做,該模型由指令集架構決定。指定按照嚴格的順序執行,並更新PC寄存器。

1.4.2 運行hello程序

shell將hello文件加載到內存中,經過dma技術,文件能夠直接從磁盤到內存,不通過cpu。

3.png

hello程序將字符串中的字節從主存複製到寄存器,再從寄存器複製到顯示設備,輸出到磁盤。

4.png

1.5 高速緩存相當重要

如上的簡單示例說明了一個重要問題,計算機會常常進行IO操做。這些開銷減慢了程序運行的速度。所以系統設計者的一個重要目標就是使IO操做盡快完成。

處理器與主存之間存在着巨大的速度差距,而且還在一直擴大。針對這種差別,系統設計者採用了更小更快的高速緩衝存儲器做爲暫時存儲。L1高速緩存一般可達數萬字節,訪問速度幾乎和訪問寄存器同樣快。經過該方案,能讓內存操做基本都在緩存中完成,基於程序局部性原理。

5.png

1.6 儲存器的層次結構

計算機的各儲存部件間造成了層次結構,底層速度快,造價高,容量小,高層相反。經過該層次結構,就能夠用高層的價格和容量,達到底層的速度。

6.png

1.7 操做系統管理硬件

當咱們執行程序時,程序並無直接訪問計算機硬件,而是經過操做系統提供的服務來訪問。咱們能夠把操做系統看做是應用程序和硬件之間插入的一層軟件。

操做系統有兩個基本功能:

防止硬件被應用程序濫用,嚮應用程序提供簡單一致的機制來控制硬件設備。操做系統經過幾個抽象服務來實現,如進程,虛擬內存,文件等。

7.png

1.8 系統之間利用網絡通訊

現代系統常常經過網絡和其它系統鏈接到一塊兒,網絡可視做一個IO設備,數據流能夠經過網絡直接發給另外一臺機器,不通過本地磁盤,也可經過網絡直接讀取數據到主存中。

1.9 重要主題

1.9.1 Amdahl定律

對系統的某一部分加速時,其對系統總體性能影響取決於該部分的重要性和加速程度。

8.png

由此可知,想要顯著加速整個系統,必須提高全系統中至關大部分的速度

1.9.2 併發和並行

  1. 線程級併發

    構建在進程抽象之上,咱們可以設計出同時有多個程序執行的系統,這就致使了併發。自20世紀60年代出現時間共享以來,計算機系統就開始有了對併發執行的支持,但只是簡單的使任務按時間切換。這種配置稱爲單處理器系統。

    後來隨着多核處理器,超線程的出現,咱們普遍使用了多處理器系統,將多個CPU(核)集成到集成電路芯片上,每一個核都有本身的L1和L2緩存,而共用L3緩存.

9.png

而超線程技術則容許一個核並行執行多個控制流。在使用超線程的核中,程序計數器核寄存器有多個備份,共用其餘資源。

  1. 指令級並行

    在CPU中,使用流水線技術來極大加快指令的執行。若是指令速度快於一週期一條,則可成爲超標量處理器。

  2. 單指令,多數據並行

    許多處理器擁有特殊的硬件,容許一條指令產生多個並行的數據操做。如SIMD指令能夠並行加法,一般須要在編程時顯式聲明。

相關文章
相關標籤/搜索