第一章筆記:計算機系統(tǒng)漫游

知識點整理:

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ū)分。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容