知識點整理:
1. 背景了解:
gnu項目開發(fā)了包含unix操作系統(tǒng)的所有主要部件的環(huán)境,而內(nèi)核是由linux項目單獨開發(fā)的,gnu環(huán)境包含EMACS編輯器,GCC編譯器,GDB調(diào)試器,匯編器,鏈接器,處理二進制文件的工具以及其他的部件等,支持不同語言。
2. 編譯器編譯的四個階段:

1)預(yù)處理階段:
預(yù)處理器(cpp)需要根據(jù)以字符#開頭的命令修改原始的c程序,將頭文件的內(nèi)容插入程序文本中
2)編譯階段:
編譯器(ccl)將文本文件hello.i翻譯成hello.s,變成一個匯編語言程序
3)匯編階段:
匯編器(AS)將程序翻譯成機器語言指令格式,打包成可重定位目標程序(relocatable object program)格式,并保存在二進制文件上。
4)鏈接階段:
鏈接器(Id)將已預(yù)編譯了的目標文件合并在此文件中,得到可執(zhí)行目標文件,可以加載到內(nèi)存中,由系統(tǒng)執(zhí)行。
3.系統(tǒng)的硬件組成:
總線,i/o設(shè)備,主存,處理器。
主存是用來存放程序和程序處理的數(shù)據(jù),從物理上來看,主存是由動態(tài)隨機存取存儲器DRAM芯片組成。
處理器:CPU,是解釋存儲在主存中指令的引擎。核心是一個字長的存儲設(shè)備,稱為程序計數(shù)器PC,在任何時刻,PC都指向主存中的某條機器語言指令,即含有該條指令的地址。

4.程序運行中機器做了什么?
當我們在鍵盤中輸入“./hello"時候,shell就會將字符讀入到寄存器文件中,當我們輸入回車鍵之后,shell知道輸入結(jié)束,就會開始執(zhí)行指令來加載hello程序文件,將hello目標文件中的代碼和數(shù)據(jù)從磁盤復(fù)制到主存上,然后處理就會開始執(zhí)行程序中的機器語言指令,輸出結(jié)果先是在主存中,然后被復(fù)制到寄存器文件最終被顯示在屏幕上。

5. 緩存的重要性
適配器 是在擴展槽上,控制器在主板上。
高速緩存存儲器是為了解決處理器與主存之間的差距而設(shè)計的更小更快的存儲設(shè)備。
高速緩存的層次結(jié)構(gòu)圖:

6. 相關(guān)概念:
進程:操作系統(tǒng)對一個正在運行的程序的抽象,可以由多個線程組成,線程運行在進程的上下文中,并共享同樣的代碼和全局數(shù)據(jù)。
虛擬存儲器:每個進程都可以看到同樣的存儲器,成為虛擬地址空間,由大量準確定義的區(qū)組成,每個區(qū)都有專門的功能。最上面是操作系統(tǒng)的代碼和數(shù)據(jù)保留的區(qū)域,底部區(qū)域是存放用戶進程定義的代碼和數(shù)據(jù),地址是從下到上增大的。
用戶棧:編譯器用它實現(xiàn)函數(shù)調(diào)用,可動態(tài)擴展和收縮,調(diào)用時候棧增大,返回時候,棧收縮。
內(nèi)核虛擬存儲器:不允許應(yīng)用程序讀寫這個區(qū)域的內(nèi)容或者直接調(diào)用內(nèi)核代碼定義的函數(shù)。
并發(fā):線程式并發(fā),指令級并發(fā),單指令多數(shù)據(jù)并發(fā)。
待解決問題:線程和進程的區(qū)分。
