1.全書結構
(1).Chapter01:計算機系統漫游
(2).Chapter02~Chapter12分為三部分
- Part I:程序結構和執行(Chapter02~Chapter06)
- Part II:在系統上運行程序(Chapter07~Chapter09)
- Part III:進程間的交互和通信(Chapter10~Chapter12)
2.程序編譯流程
(1).編譯系統工作流程
程序編譯
詳細過程
- Stage1(預處理) :預處理器會根據以#開頭的代碼來修改原始程序,預處理器會讀取頭文件中的內容,將頭文件中的內容直接插入到源程序中,結果就得到了另一個C程序。經預處理器處理后得到的文件通常以.i為后綴結尾,它仍然是一個文本文件;
- Stage2(編譯) :編譯器將hello.i文件翻譯成hello.s文件,這一過程稱為編譯。其中編譯這一階段包括詞法分析、語法分析、語義分析、中間代碼生成及優化等一系列的中間操作;
- Stage3(匯編) :匯編器根據指令集將匯編程序hello.s翻譯成機器指令,并且把這一系列的機器指令按照固定的規則進行打包得到 可重定位目標文件hello.o 。此時,雖然hello.o是一個二進制文件,但是還不能執行還需要進行鏈接操作;
- Stage4(鏈接) :在hello這個程序中,調用了標準C庫中的函數printf,每一個C語言的編譯器都會提供。當調用printf函數時,編譯器就知道你要在屏幕上打印輸出內容,它會將這行代碼翻譯成計算機可以理解的指令。printf函數在名為printf.o文件中,這個文件是一個提前編譯好的目標文件。鏈接器ld負責把hello.o和printf.o進行合并,但合并需要遵循一定的規則。正是由于鏈接器要對hello.o和printf.o進行調整,所以hello.o才會稱為可重定位目標文件,最終經過鏈接階段可以得到 可執行目標文件hello 。此時,得到的hello就可以被加載到內存中執行了。
(2).理解編譯系統工作流程意義
- 優化程序性能;
- 理解鏈接時出現的錯誤;
- 避免安全漏洞(緩沖區溢出);
3.計算機系統硬件組成
計算機硬件系統組成
(1).CPU的結構
程序計數器PC :一個字即4字節(32位系統)或一個字即8字節(64位系統)的存儲空間,里面存放的是某一條指令的地址。從系統上電的那一瞬間到系統斷電,處理器就不斷地在執行PC執向的指令,然后更新PC,使其指向下一條要指向的指令。注意:下一條執行的指令與剛剛執行過的指令不一定是相鄰的地址。
寄存器文件 :它是CPU內部的一個存儲設備,寄存器文件是由一些單字長的寄存器構成,每個寄存器都有自己唯一的名字。換句話說,寄存器可以理解為一個臨時存放數據的空間。
算術邏輯單位ALU :例如,計算兩個變量a、b的和,處理器從內存中讀取a的值暫存在寄存器X中,讀取b的值暫存在寄存器Y中,這個操作會覆蓋寄存器中原來的數值。處理器完成加載的操作后,ALU會復制寄存器X和Y中保存的數值,然后進行算術運算,得到的結果會保存在寄存器X或寄存器Y中。此時,寄存器中原來的值會被新的值所覆蓋。
(2).主存/內存
處理器在執行程序時,內存主要存放程序指令和數據。從物理上來說,內存就是由隨機動態存儲芯片組成;從邏輯上來說,內存可以看成是一個從0開始的大數組,每個字節都有相應的地址。
(3).總線
內存和處理器之間通過總線來進行數據傳遞,總線貫穿了整個計算機系統,它負責將信息從一個部件傳遞到另一個部件,通常總線被設計成固定長度的字節塊即字word。字表示多少個字節,各個系統是不一樣的。
(4).輸入輸出設備
例如:鍵盤、鼠標、顯示器等,每個輸入輸出設備都通過一個控制器或者適配器與IO總線相連。
4.程序運行背后的故事
(1).鍵盤輸入./hello時,shell程序會將輸入的字符逐一讀入寄存器,處理器會把這個hello字符串放入內存中;
第1步
(2).當完成輸入,按下回車鍵時shell程序已經知道我們已經完成了命令的輸入,然后執行一系列的指令來加載可執行文件hello。這些指令將hello中的數據和代碼從磁盤復制到內存。數據就是要在屏幕上顯示的“hello worldn”,這個復制的過程將利用DMA技術,數據可以不經過處理器,從磁盤直接到達內存;
第2步
(3).當可執行文件hello中的代碼和數據被加載到內存中,處理器就開始執行main函數中的代碼。CPU會將“hello worldn”這個字符串從內存復制到寄存器文件,再從寄存器文件復制到顯示設備即屏幕上;
第3步
5.內存層級結構
(1).通常情況下,大容量的存儲設備存取速度要比小容量的慢;運行更快設備的價格相對于運行速度慢的設備的價格要貴;
寄存器文件Register File 100~1000B
L1 cache 10~100KB
L2 cache 0.1 ~10MB
L3 cache 10~100MB
內存Main Memory 1~100GB
磁盤Disk 1~1000TB
(2).針對處理器和內存之間的讀寫速度差異,系統設計人員在寄存器文件和內存之間引入了高速緩存cache 。比較新且處理能力比較強的處理器,一般有三級高速緩存:L1 cache、L2 cache、L3 cache。L1 cache的訪問速度與訪問寄存器文件幾乎一樣快,L2 cache的訪問速度是L1的5倍,L3 cache的容量更大,訪問速度與L2 cache相比更慢。
內存層次結構
-
計算機
+關注
關注
19文章
7626瀏覽量
90163 -
C語言
+關注
關注
180文章
7630瀏覽量
140267 -
計算機系統
+關注
關注
0文章
290瀏覽量
24519 -
編譯器
+關注
關注
1文章
1654瀏覽量
49886 -
程序編譯
+關注
關注
0文章
9瀏覽量
5533
發布評論請先 登錄
評論