第一章 計算機系統漫游
1.1 資訊就是位+背景關系
系統中的所有資訊,包括磁盤檔案,記憶體中的程式,記憶體中存放的用戶資料以及網路上傳送的資料,都是由一串位元表示的,區分不同資料物件的唯一方法是我們讀到這些資料物件的背景關系,
1.2 程式被其他程式翻譯成不同格式
一個程式的生命周期是從一個高級C語言程式開始的,為了能在系統上運行該程式,每條陳述句都必須被其他程式轉換成一系列低級機器語言,然后這些指令按照可執行目標程式的格式打包好,并以二進制檔案的形式存盤起來,得到可執行目標檔案,
這個翻譯程序可歸為四個階段,預處理,編譯,匯編,鏈接,四個階段構成了編譯系統,

預處理階段
前處理器根據預編譯指令,對C程式進行文本替換,得到.i檔案,
編譯階段
編譯器將.i翻譯成.s,得到一個匯編語言程式,C語言和Fortran編譯器產生的輸出檔案都是一樣的匯編語言,
匯編階段
將.s檔案翻譯成機器語言指令,并打包成可重定位目標程式,把存在目標檔案.o中,.o是二進制檔案,
鏈接
C語言頭檔案中中的函式存在了預編譯好的目標檔案,因此該階段將呼叫的函式合并到我們的.o檔案中,得到可執行目標檔案,該檔案可以被加載到記憶體中由系統執行,
1.3 了解編譯系統如何作業的益處
-
優化程式性能
我們需要了解一些機器代碼以及編譯器如何將C轉換為機器代碼的方式,不同回圈陳述句的比較,switch和ifelse的比較等,
-
理解鏈接時出現的錯誤
-
避免安全漏洞,如緩沖區溢位等
1.4 處理器讀并解釋儲存在記憶體中的指令
當程式被編譯完成后,我們可通過shell指令
linux> ./hello
來運行程式
1.4.1 系統的硬體組成
為了理解運行hello程式時發生了什么,我們需要了解系統的硬體組織,
這是一張近期Intel產品族的模型

總線
貫穿于整個系統的電子管道,攜帶資訊位元組并負責在各個部件間傳遞,總線傳輸的數是個重要的系統引數,
IO設備
IO設備是系統與外部的聯系通道,每個IO設備通過控制器或配接器與IO總線相連,控制器和配接器的差別在于他們的封裝方式,控制器是IO設備本身或系統的主印刷電路板,配接器是插在主板插槽上的卡,
主存
主存用來存放程式和資料,由DRAM構成,按位元組編址,
處理器
處理器按照指令模型來操作,該模型由指令集架構決定,指定按照嚴格的順序執行,并更新PC暫存器,
1.4.2 運行hello程式
shell將hello檔案加載到記憶體中,通過dma技術,檔案可以直接從磁盤到記憶體,不經過cpu,

hello程式將字串中的位元組從主存復制到暫存器,再從暫存器復制到顯示設備,輸出到磁盤,

1.5 高速快取至關重要
如上的簡單示例說明了一個重要問題,計算機會經常進行IO操作,這些開銷減慢了程式運行的速度,因此系統設計者的一個重要目標就是使IO操作盡快完成,
處理器與主存之間存在著巨大的速度差距,并且還在一直擴大,針對這種差異,系統設計者采用了更小更快的高速緩沖存盤器作為暫時存盤,L1高速快取通常可達數萬位元組,訪問速度幾乎和訪問暫存器一樣快,通過該方案,能讓記憶體操作基本都在快取中完成,基于程式區域性原理,

1.6 儲存器的層次結構
計算機的各儲存部件間形成了層次結構,底層速度快,造價高,容量小,高層相反,通過該層次結構,就可以用高層的價格和容量,達到底層的速度,

1.7 作業系統管理硬體
當我們執行程式時,程式并沒有直接訪問計算機硬體,而是通過作業系統提供的服務來訪問,我們可以把作業系統看作是應用程式和硬體之間插入的一層軟體,
作業系統有兩個基本功能:
防止硬體被應用程式濫用,向應用程式提供簡單一致的機制來控制硬體設備,作業系統通過幾個抽象服務來實作,如行程,虛擬記憶體,檔案等,

1.8 系統之間利用網路通信
現代系統經常通過網路和其它系統連接到一起,網路可視作一個IO設備,資料流可以通過網路直接發給另一臺機器,不經過本地磁盤,也可通過網路直接讀取資料到主存中,
1.9 重要主題
1.9.1 Amdahl定律
對系統的某一部分加速時,其對系統整體性能影響取決于該部分的重要性和加速程度,

由此可知,想要顯著加速整個系統,必須提升全系統中相當大部分的速度
1.9.2 并發和并行
-
執行緒級并發
構建在行程抽象之上,我們能夠設計出同時有多個程式執行的系統,這就導致了并發,自20世紀60年代出現時間共享以來,計算機系統就開始有了對并發執行的支持,但只是簡單的使任務按時間切換,這種配置稱為單處理器系統,
后來隨著多核處理器,超執行緒的出現,我們廣泛使用了多處理器系統,將多個CPU(核)集成到集成電路芯片上,每個核都有自己的L1和L2快取,而共用L3快取.

而超執行緒技術則允許一個核并行執行多個控制流,在使用超執行緒的核中,程式計數器核暫存器有多個備份,共用其他資源,
-
指令級并行
在CPU中,使用流水線技術來極大加快指令的執行,如果指令速度快于一周期一條,則可成為超標量處理器,
-
單指令,多資料并行
許多處理器擁有特殊的硬體,允許一條指令產生多個并行的資料操作,如SIMD指令可以并行加法,通常需要在編程時顯式宣告,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246781.html
標籤:其他
上一篇:2021--等待年底的收割
下一篇:正經人誰寫日記啊
