《深入理解計算機系統》--notes--day one

Content

1.1 信息就是位 + 上下文

hello 程序的生命週期是從一個源程序(或者說是源文件)開始的。源程序由 0 和 1 組成的位(bite),8 個位爲一個字節。

hello.cASCII文本表示

# i n c l u d e SP < s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62
\n \n i n t \n m a i n ( ) \n { \n SP SP SP
10 10 105 110 116 10 109 97 105 110 40 41 10 123 10 32 32 32
SP p r i n t f ( h e l l o , SP w o
32 112 114 105 110 116 102 40 34 105 101 108 108 111 44 32 119 111
r l d \ n ) ; \n SP SP SP SP r e t u r
114 108 100 92 110 34 41 59 10 32 32 32 32 114 110 116 117 114
n SP 0 ; \n } \n
110 32 48 59 10 125 10

1.2 程序被其他程序翻譯成不同版本

在Unix系統上,從源文件到目標文件的轉化是由 編譯器驅動程序 完成的。

Linux$ gcc hello.c -o hello

編譯執行四個階段

Created with Raphaël 2.1.2預處理器(cpp)預處理器(cpp)編譯器(ccl)編譯器(ccl)彙編器(as)彙編器(as)鏈接器(ld)鏈接器(ld)hello.c 源程序(文本)hello.i 修改了的源程序(文本)hello.i 彙編程序(文本)hello.o 可重定位目標程序(二進制)printf.ohello 可執行目標程序(二進制)
預處理

讀取頭文件,修改源程序。

編譯階段

翻譯成文本hello.s,其中包含彙編語言程序。main函數如下:

1  main:
2      subq        $8, %rsp
3      movl        $.LC0, %edi
4      call          puts
5      movl        $0, %eax
6      addq       $8, %rsp
7      ret
彙編階段

翻譯成機器語言hello.o文件。

鏈接階段

合併其他庫函數文件到hello文件中(這裏指printf.o文件)。

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

linux$ ./hello
hello, world
linux$

1.4.1 系統的硬件組成

1. 總線

貫穿整個系統的是一組電子管道,稱作總線。

2. I/O 設備

I/O (輸入/輸出)設備是系統與外部世界的聯繫通道。
一個典型系統的硬件組成

3. 主存

主存是一個臨時存儲設備(動態隨機存取存儲器DRAM芯片組成),在CPU執行程序時,用來存放程序和程序處理的數據。

4. 處理器

中央處理單元(CPU),簡稱處理器,是解釋(或者執行)存儲在主存中指令的引擎。

1.4.2 運行 hello 程序

從鍵盤上讀取hello命令
從硬盤加載可執行文件到主存
將輸出字符串從存儲器寫到顯示器

1.5 高速緩存至關重要

高速緩存存儲器

1.6 存儲設備形成層次結構

存儲器層次結構示例

1.7 操作系統管理硬件

操作系統有兩個基本功能:
(1)防止硬件被失控的應用程序濫用;
(2)嚮應用程序提供簡單一致的機制來控制複雜而又通常大不相同的低級硬件設備。
操作系統提供的抽象表示

1.7.1 進程

進程是操作系統一個正在運行的程序的抽象。而併發運行,則是說一個進程的指令和另一個進程的指令是交錯執行的。
操作系統保持跟蹤進程運行所需的所有狀態信息。這種狀態稱爲上下文
進程的上下文切換

1.7.2 線程

一個進程可以由多個線程的執行單元組成。

1.7.3 虛擬內存

虛擬內存是一個抽象概念,其爲每個進程提供一個假象,即每個進程都在獨佔地使用主存。
每個進程看到的內存都是一致的,稱爲虛擬地址空間
進程的虛擬地址空間
幾個概念:

程序代碼和數據。
堆。
共享庫。
棧。
內核虛擬內存。

1.7.4 文件

文件就是字節序列。

網絡也是一種 I/O 設備

1.9 重要主題

1.9.1 Amdahl 定律

若系統執行某應用程序需要時間爲Told。 假設系統某部分所需執行時間與該時間的比例爲a, 而該部分性能提升比例爲k。即該部分初始所需時間爲a * Told, 現在所需時間爲(a * Told)/ k。因此,總的執行時間應爲:
Tnew = (1 - a) * Told + (a * Told) / k = Told * [(1 - a) + a / k ]
由此,可以計算加速比 S = Told / Tnew
S = 1 / [(1 - a) + a / k ]

1.9.2 併發和並行

併發指一個同時具有多個活動的系統。
並行指用併發來使一個系統運行的更快。
不同的處理器配置分類。隨着多核處理器和超線程的出現,多核處理器變得普遍了
多核處理器的組織結構。4個處理器核集成在一個芯片上
超線程有時稱爲同時多線程(simultaneous multi-threading),是一項允許一個CPU執行多個控制流的技術。
指令級並行在較低的抽象層次上,現代處理器可以同時執行多條指令的屬性。
超標量(super-scalar)處理器是指處理器可以達到比一個週期一條指令更快的執行速率。
單指令、多數據(SIMD並行)指在最低層次上,擁有特殊的硬件的處理器,允許一條指令產生多個可以並行執行的操作。

1.9.3 計算機系統中抽象的重要性

抽象的使用是計算機科學中最爲重要的概念之一。
例如: 應用程序接口(API
例如:指令集架構提供了對實際處理器硬件的抽象。
計算機系統提供的一些抽象。計算機系統中的一個重大課題就是提供不同層次的抽象表示,來隱藏實際實現的複雜性

1.10 小結

計算機系統是由硬件和系統軟件組成的,他們共同協作以運行應用程序。計算機內部的信息被表示爲一組組的位(bite),他們依據上下文有不同的解釋方式。程序被其他程序翻譯成不同的形式,開始時是ASCII文本,然後被編譯器和鏈接器翻譯成二進制的可執行文件。
處理器讀取並解釋存放在主存裏的二進制指令。因爲計算機花費了大量的時間在內存、I/O 設備和CPU寄存器之間複製數字,所以將系統中的存儲設備劃分爲層次結構——CPU寄存器在頂部,接着是多層的硬件高速緩存存儲器、DRAM主存和硬盤存儲器。在層次模型中,位於更高層的存儲設備比底層的存儲設備要更快,單位比特造價也更高。層次結構中較高層次的存儲設備可以作爲較低層次設備的高速緩存。通過理解和運用這種存儲層次結構的知識,程序員可以優化C程序的性能。
操作系統內核是應用程序和硬件之間的媒介。它提供三個抽象: 1)文件是對 I/O 設備的抽象; 2) 虛擬內存是對主存和硬盤的抽象; 3) 進程是處理器、主存和 I/O 設備的抽象。
最後,網絡提供了計算機系統間通信的手段。從特殊系統的角度來看,網絡是一種 I/O 設備。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章