1. 程式人生 > >深入理解計算機系統第一章學習筆記

深入理解計算機系統第一章學習筆記

1 一個程式的編譯過程

預處理階段:將程式中include的系統檔案插入程式文字中。

編譯階段:編譯器將hello.i翻譯成組合語言程式。

彙編階段:彙編器將hello.s翻譯成機器語言指令,生成二進位制檔案hello.o。

連結階段:將標準庫中的函式連結進來,生成可執行檔案hello(在Linux下執行./hello可以執行)

2 程式執行過程


匯流排:攜帶資訊位元組並負責在各個部件間傳遞。

I/O裝置:通過控制器或介面卡與匯流排相連。

主存:就是記憶體,臨時儲存裝置。

CPU:解釋(或執行)儲存在主存中指令的引擎。核心為大小為1個位元組的程式計數器(PC),指向主存中的某條指令,ALU為計算單元。CPU常見操作:載入,儲存,操作,跳轉。

執行hello程式步驟:鍵盤讀入命令到暫存器中,再存到主存中。按回車後通過DMA將hello檔案和資料載入到記憶體中。載入完成後,CPU開始執行hello程式,將輸出的資料複製到顯示裝置。

快取記憶體:儲存處理器近期可能會需要的資訊,相當於一個小而快的記憶體,在CPU內部。



3 作業系統管理硬體:

作業系統可以看成應用軟體和硬體之間的一層軟體。作業系統有兩個基本功能:1)防止硬體被失控的應用程式濫用。2)嚮應用
程式提供簡單一致的機制來控制複雜而又通常大相徑庭的低階硬體裝置。

程序:是作業系統對一個正在執行的程式的抽象,多個程序併發執行,一個CPU會在多個程序間切換,這種機制稱為上下文切換。

核心:作業系統程式碼常駐主存的部分,是系統管理全部程序所用的程式碼和資料結合的集合。

執行緒:一個程序有多個執行緒組成,共享程序的程式碼和全域性資料。

虛擬記憶體:為每個程序提供一個假象,即每個程序都在獨立地使用主存。每個程序看到的記憶體是一致的,稱為虛擬地址空間。圖中地址是從下往上增大的。

程式程式碼和資料:程式碼是從同一固定地址開始,緊接著的是全域性變數對應的資料位置。

堆:程式碼和資料區之後是堆,生長方向是從低地址向高地址,動態分配。

共享庫:存放C標準庫和數學庫。

棧:使用者棧,生長方向是從高地址向低地址,編譯器動態分配。

核心虛擬記憶體:不允許程式讀寫這個區域。


併發和並行:併發指一個同事具有多個活動的系統。並行是指用併發來使一個系統執行得更快。

執行緒級併發:超執行緒,允許一個CPU執行多個控制流的技術。某些硬體有多個備份,如PC和暫存器檔案。

指令級並行:現代處理器可以同時執行多條指令。一個週期可以執行2-4條指令。流水線技術。

單指令、多資料並行:允許一條指令產生多個可以並行執行的操作。