Chapter01-計算機(jī)系統(tǒng)漫游-上

一物咳、整本書的結(jié)構(gòu)

  • 1.Chapter01:計算機(jī)系統(tǒng)漫游
  • 2.Chapter02~Chapter12
    • Part I:程序結(jié)構(gòu)和執(zhí)行(Chapter02~Chapter06)
    • Part II:在系統(tǒng)上運行程序(Chapter07~Chapter09)
    • Part III:進(jìn)程間的交互和通信(Chapter10~Chapter12)

二、程序編譯流程

  • 1.編譯系統(tǒng)工作流程
程序編譯.jpg
詳細(xì)過程.jpg
  • Stage1(預(yù)處理):預(yù)處理器會根據(jù)以#開頭的代碼,來修改原始程序,預(yù)處理器會讀取頭文件中的內(nèi)容,將頭文件中的內(nèi)容直接插入到源程序中,結(jié)果就得到了另一個C程序。經(jīng)預(yù)處理器處理后得到的文件通常以.i為后綴結(jié)尾闹丐,它仍然是一個文本文件;

  • Stage2(編譯):編譯器將hello.i文件翻譯成hello.s文件被因,這一過程稱為編譯卿拴。其中編譯這一階段包括詞法分析衫仑、語法分析、語義分析堕花、中間代碼生成及優(yōu)化等一系列的中間操作文狱;

  • Stage3(匯編):匯編器根據(jù)指令集將匯編程序hello.s翻譯成機(jī)器指令,并且把這一系列的機(jī)器指令按照固定的規(guī)則進(jìn)行打包得到可重定位目標(biāo)文件hello.o航徙。此時如贷,雖然hello.o是一個二進(jìn)制文件,但是還不能執(zhí)行還需要進(jìn)行鏈接操作到踏;

  • Stage4(鏈接):在hello這個程序中,調(diào)用了標(biāo)準(zhǔn)C庫中的函數(shù)printf尚猿,每一個C語言的編譯器都會提供窝稿。當(dāng)調(diào)用printf函數(shù)時,編譯器就知道你要在屏幕上打印輸出內(nèi)容凿掂,它會將這行代碼翻譯成計算機(jī)可以理解的指令伴榔。printf函數(shù)在名為printf.o文件中,這個文件是一個提前編譯好的目標(biāo)文件庄萎。鏈接器ld負(fù)責(zé)把hello.o和printf.o進(jìn)行合并踪少,但合并需要遵循一定的規(guī)則。正是由于鏈接器要對hello.o和printf.o進(jìn)行調(diào)整糠涛,所以hello.o才會稱為可重定位目標(biāo)文件援奢,最終經(jīng)過鏈接階段可以得到可執(zhí)行目標(biāo)文件hello。此時忍捡,得到的hello就可以被加載到內(nèi)存中執(zhí)行了集漾。

  • 2.理解編譯系統(tǒng)工作流程的意義

    • 優(yōu)化程序性能;
    • 理解鏈接時出現(xiàn)的錯誤砸脊;
    • 避免安全漏洞(緩沖區(qū)溢出)具篇;

三、計算機(jī)系統(tǒng)的硬件組成

計算機(jī)系統(tǒng)的硬件組成.jpg
  • 1.CPU的結(jié)構(gòu)

    • 程序計數(shù)器PC:一個字即4字節(jié)(32位系統(tǒng))或一個字即8字節(jié)(64位系統(tǒng))的存儲空間凌埂,里面存放的是某一條指令的地址驱显。從系統(tǒng)上電的那一瞬間到系統(tǒng)斷電,處理器就不斷地在執(zhí)行PC執(zhí)向的指令瞳抓,然后更新PC埃疫,使其指向下一條要指向的指令。注意:下一條執(zhí)行的指令與剛剛執(zhí)行過的指令不一定是相鄰的地址挨下。

    • 寄存器文件:它是CPU內(nèi)部的一個存儲設(shè)備熔恢,寄存器文件是由一些單字長的寄存器構(gòu)成,每個寄存器都有自己唯一的名字臭笆。換句話說叙淌,寄存器可以理解為一個臨時存放數(shù)據(jù)的空間秤掌。

    • 算術(shù)邏輯單位ALU:例如,計算兩個變量a鹰霍、b的和闻鉴,處理器從內(nèi)存中讀取a的值暫存在寄存器X中,讀取b的值暫存在寄存器Y中茂洒,這個操作會覆蓋寄存器中原來的數(shù)值孟岛。處理器完成加載的操作后,ALU會復(fù)制寄存器X和Y中保存的數(shù)值督勺,然后進(jìn)行算術(shù)運算渠羞,得到的結(jié)果會保存在寄存器X或寄存器Y中。此時智哀,寄存器中原來的值會被新的值所覆蓋次询。

  • 2.主存/內(nèi)存

    • 處理器在執(zhí)行程序時,內(nèi)存主要存放程序指令和數(shù)據(jù)瓷叫。從物理上來說屯吊,內(nèi)存就是由隨機(jī)動態(tài)存儲芯片組成;從邏輯上來說摹菠,內(nèi)存可以看成是一個從0開始的大數(shù)組盒卸,每個字節(jié)都有相應(yīng)的地址。
  • 3.總線

    • 內(nèi)存和處理器之間通過總線來進(jìn)行數(shù)據(jù)傳遞次氨,總線貫穿了整個計算機(jī)系統(tǒng)蔽介,它負(fù)責(zé)將信息從一個部件傳遞到另一個部件,通吃阈瑁總線被設(shè)計成固定長度的字節(jié)塊即字word屉佳。字表示多少個字節(jié),各個系統(tǒng)是不一樣的洲押。
  • 4.輸入輸出設(shè)備

    • 例如:鍵盤武花、鼠標(biāo)、顯示器等杈帐,每個輸入輸出設(shè)備都通過一個控制器或者適配器與IO總線相連体箕。

四、hello程序執(zhí)行時挑童,究竟發(fā)生了什么累铅?

  • 1.鍵盤輸入./hello時,shell程序會將輸入的字符逐一讀入寄存器站叼,處理器會把這個hello字符串放入內(nèi)存中娃兽;
第1步.jpg
  • 2.當(dāng)完成輸入,按下回車鍵時shell程序已經(jīng)知道我們已經(jīng)完成了命令的輸入尽楔,然后執(zhí)行一系列的指令來加載可執(zhí)行文件hello投储。 這些指令將hello中的數(shù)據(jù)和代碼從磁盤復(fù)制到內(nèi)存第练。數(shù)據(jù)就是要在屏幕上顯示的“hello world\n”,這個復(fù)制的過程將利用DMA技術(shù)玛荞,數(shù)據(jù)可以不經(jīng)過處理器娇掏,從磁盤直接到達(dá)內(nèi)存;
第2步.jpg
  • 3.當(dāng)可執(zhí)行文件hello中的代碼和數(shù)據(jù)被加載到內(nèi)存中勋眯,處理器就開始執(zhí)行main函數(shù)中的代碼婴梧。CPU會將“hello world\n”這個字符串從內(nèi)存復(fù)制到寄存器文件,再從寄存器文件復(fù)制到顯示設(shè)備即屏幕上客蹋;
第3步.jpg

五塞蹭、緩存問題

  • 1.通常情況下,大容量的存儲設(shè)備存取速度要比小容量的慢讶坯;運行更快設(shè)備的價格相對于運行速度慢的設(shè)備的價格要貴浮还;

  • 2.內(nèi)存的層級結(jié)構(gòu)

內(nèi)存層級結(jié)構(gòu).jpg
  • 針對處理器和內(nèi)存之間的讀寫速度差異,系統(tǒng)設(shè)計人員在寄存器文件和內(nèi)存之間引入了高速緩存cache闽巩。比較新且處理能力比較強(qiáng)的處理器,一般有三級高速緩存:L1 cache担汤、L2 cache涎跨、L3 cache。L1 cache的訪問速度與訪問寄存器文件幾乎一樣快崭歧,L2 cache的訪問速度是L1的5倍隅很,L3 cache的容量更大,訪問速度與L2 cache相比更慢率碾。
    寄存器文件Register File           100~1000B
        L1 cache                     10~100KB
        L2 cache                     0.1 ~10MB
        L3 cache                     10~100MB
    內(nèi)存Main Memory                   1~100GB
    磁盤Disk                          1~1000TB
    

六叔营、參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末所宰,一起剝皮案震驚了整個濱河市绒尊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仔粥,老刑警劉巖婴谱,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躯泰,居然都是意外死亡谭羔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門麦向,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘟裸,“玉大人,你說我怎么就攤上這事诵竭』案妫” “怎么了兼搏?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長超棺。 經(jīng)常有香客問我向族,道長,這世上最難降的妖魔是什么棠绘? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任件相,我火速辦了婚禮,結(jié)果婚禮上氧苍,老公的妹妹穿的比我還像新娘夜矗。我一直安慰自己,他們只是感情好让虐,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布紊撕。 她就那樣靜靜地躺著,像睡著了一般赡突。 火紅的嫁衣襯著肌膚如雪对扶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天惭缰,我揣著相機(jī)與錄音浪南,去河邊找鬼。 笑死漱受,一個胖子當(dāng)著我的面吹牛络凿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昂羡,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼絮记,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虐先?” 一聲冷哼從身側(cè)響起怨愤,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赴穗,沒想到半個月后憔四,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡般眉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年了赵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甸赃。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柿汛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情络断,我是刑警寧澤裁替,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站貌笨,受9級特大地震影響弱判,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锥惋,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一昌腰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膀跌,春花似錦遭商、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丛忆,卻和暖如春祠汇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熄诡。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工座哩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粮彤。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像姜骡,于是被迫代替她去往敵國和親导坟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容