深入理解計算機系統(tǒng) 第一章

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

1.1 信息就是位+上下文

系統(tǒng)中的所有信息裕寨,包括磁盤文件,內(nèi)存中的程序,內(nèi)存中存放的用戶數(shù)據(jù)以及網(wǎng)絡上傳送的數(shù)據(jù)宾袜,都是由一串比特表示的捻艳。區(qū)分不同數(shù)據(jù)對象的唯一方法是我們讀到這些數(shù)據(jù)對象的上下文。

1.2 程序被其他程序翻譯成不同格式

一個程序的生命周期是從一個高級C語言程序開始的庆猫,為了能在系統(tǒng)上運行該程序认轨,每條語句都必須被其他程序轉(zhuǎn)換成一系列低級機器語言,然后這些指令按照可執(zhí)行目標程序的格式打包好月培,并以二進制文件的形式存儲起來嘁字。得到可執(zhí)行目標文件。

這個翻譯過程可歸為四個階段杉畜,預處理纪蜒,編譯,匯編此叠,鏈接纯续,四個階段構(gòu)成了編譯系統(tǒng)灭袁。

1.png

預處理階段

預處理器根據(jù)預編譯指令,對C程序進行文本替換烤芦。得到.i文件。

編譯階段

編譯器將.i翻譯成.s铜涉,得到一個匯編語言程序芙代。C語言和Fortran編譯器產(chǎn)生的輸出文件都是一樣的匯編語言盖彭。

匯編階段

將.s文件翻譯成機器語言指令召边,并打包成可重定位目標程序,把存在目標文件.o中片挂。.o是二進制文件音念。

鏈接

C語言頭文件中中的函數(shù)存在了預編譯好的目標文件,因此該階段將調(diào)用的函數(shù)合并到我們的.o文件中整葡,得到可執(zhí)行目標文件掘宪。該文件可以被加載到內(nèi)存中由系統(tǒng)執(zhí)行攘烛。

1.3 了解編譯系統(tǒng)如何工作的益處

  1. 優(yōu)化程序性能

    我們需要了解一些機器代碼以及編譯器如何將C轉(zhuǎn)換為機器代碼的方式坟漱。不同循環(huán)語句的比較,switch和ifelse的比較等腥寇。

  2. 理解鏈接時出現(xiàn)的錯誤

  3. 避免安全漏洞赦役,如緩沖區(qū)溢出等

1.4 處理器讀并解釋儲存在內(nèi)存中的指令

當程序被編譯完成后栅炒,我們可通過shell指令

linux> ./hello

來運行程序

1.4.1 系統(tǒng)的硬件組成

為了理解運行hello程序時發(fā)生了什么赢赊,我們需要了解系統(tǒng)的硬件組織。

這是一張近期Intel產(chǎn)品族的模型

2.png

總線

貫穿于整個系統(tǒng)的電子管道叭披,攜帶信息字節(jié)并負責在各個部件間傳遞涩蜘≈逄常總線傳輸?shù)臄?shù)是個重要的系統(tǒng)參數(shù)豆巨。

IO設(shè)備

IO設(shè)備是系統(tǒng)與外部的聯(lián)系通道,每個IO設(shè)備通過控制器或適配器與IO總線相連熊户】苑控制器和適配器的差別在于他們的封裝方式艇棕。控制器是IO設(shè)備本身或系統(tǒng)的主印刷電路板北苟,適配器是插在主板插槽上的卡友鼻。

主存

主存用來存放程序和數(shù)據(jù)闺骚,由DRAM構(gòu)成僻爽。按字節(jié)編址。

處理器

處理器按照指令模型來操作敦捧,該模型由指令集架構(gòu)決定绞惦。指定按照嚴格的順序執(zhí)行洋措,并更新PC寄存器杰刽。

1.4.2 運行hello程序

shell將hello文件加載到內(nèi)存中贺嫂,通過dma技術(shù),文件可以直接從磁盤到內(nèi)存糜俗,不經(jīng)過cpu悠抹。

3.png

hello程序?qū)⒆址械淖止?jié)從主存復制到寄存器楔敌,再從寄存器復制到顯示設(shè)備,輸出到磁盤庆聘。

4.png

1.5 高速緩存至關(guān)重要

如上的簡單示例說明了一個重要問題伙判,計算機會經(jīng)常進行IO操作澳腹。這些開銷減慢了程序運行的速度杨何。因此系統(tǒng)設(shè)計者的一個重要目標就是使IO操作盡快完成危虱。

處理器與主存之間存在著巨大的速度差距,并且還在一直擴大蕊玷。針對這種差異弥雹,系統(tǒng)設(shè)計者采用了更小更快的高速緩沖存儲器作為暫時存儲剪勿。L1高速緩存通常可達數(shù)萬字節(jié)酱固,訪問速度幾乎和訪問寄存器一樣快运悲。通過該方案项钮,能讓內(nèi)存操作基本都在緩存中完成希停,基于程序局部性原理脖苏。

5.png

1.6 儲存器的層次結(jié)構(gòu)

計算機的各儲存部件間形成了層次結(jié)構(gòu)棍潘,底層速度快亦歉,造價高畅哑,容量小,高層相反赛蔫。通過該層次結(jié)構(gòu)呵恢,就可以用高層的價格和容量媚创,達到底層的速度钞钙。

6.png

1.7 操作系統(tǒng)管理硬件

當我們執(zhí)行程序時芒炼,程序并沒有直接訪問計算機硬件,而是通過操作系統(tǒng)提供的服務來訪問鲸湃。我們可以把操作系統(tǒng)看作是應用程序和硬件之間插入的一層軟件唤锉。

操作系統(tǒng)有兩個基本功能:

防止硬件被應用程序濫用别瞭,向應用程序提供簡單一致的機制來控制硬件設(shè)備株憾。操作系統(tǒng)通過幾個抽象服務來實現(xiàn)晒衩,如進程听系,虛擬內(nèi)存靠胜,文件等毕源。

7.png

1.8 系統(tǒng)之間利用網(wǎng)絡通信

現(xiàn)代系統(tǒng)經(jīng)常通過網(wǎng)絡和其它系統(tǒng)連接到一起霎褐,網(wǎng)絡可視作一個IO設(shè)備冻璃,數(shù)據(jù)流可以通過網(wǎng)絡直接發(fā)給另一臺機器,不經(jīng)過本地磁盤娘纷,也可通過網(wǎng)絡直接讀取數(shù)據(jù)到主存中跋炕。

1.9 重要主題

1.9.1 Amdahl定律

對系統(tǒng)的某一部分加速時枣购,其對系統(tǒng)整體性能影響取決于該部分的重要性和加速程度。

8.png

由此可知涩堤,想要顯著加速整個系統(tǒng)胎围,必須提升全系統(tǒng)中相當大部分的速度

1.9.2 并發(fā)和并行

  1. 線程級并發(fā)

    構(gòu)建在進程抽象之上白魂,我們能夠設(shè)計出同時有多個程序執(zhí)行的系統(tǒng)上岗,這就導致了并發(fā)。自20世紀60年代出現(xiàn)時間共享以來敬锐,計算機系統(tǒng)就開始有了對并發(fā)執(zhí)行的支持,但只是簡單的使任務按時間切換径玖。這種配置稱為單處理器系統(tǒng)颤介。

    后來隨著多核處理器,超線程的出現(xiàn)丰泊,我們廣泛使用了多處理器系統(tǒng)瞳购,將多個CPU(核)集成到集成電路芯片上亏推,每個核都有自己的L1和L2緩存,而共用L3緩存.

9.png

而超線程技術(shù)則允許一個核并行執(zhí)行多個控制流盏浇。在使用超線程的核中绢掰,程序計數(shù)器核寄存器有多個備份童擎,共用其他資源顾复。

  1. 指令級并行

    在CPU中,使用流水線技術(shù)來極大加快指令的執(zhí)行萧芙。如果指令速度快于一周期一條假丧,則可成為超標量處理器包帚。

  2. 單指令,多數(shù)據(jù)并行

    許多處理器擁有特殊的硬件擎场,允許一條指令產(chǎn)生多個并行的數(shù)據(jù)操作几莽。如SIMD指令可以并行加法章蚣,通常需要在編程時顯式聲明。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矾策,一起剝皮案震驚了整個濱河市贾虽,隨后出現(xiàn)的幾起案子吼鱼,更是在濱河造成了極大的恐慌,老刑警劉巖地粪,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟆技,死亡現(xiàn)場離奇詭異质礼,居然都是意外死亡织阳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門妻坝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刽宪,“玉大人圣拄,你說我怎么就攤上這事毁欣≡榔” “怎么了串述?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵纲酗,是天一觀的道長新蟆。 經(jīng)常有香客問我,道長吮螺,這世上最難降的妖魔是什么规脸? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任熊咽,我火速辦了婚禮,結(jié)果婚禮上被因,老公的妹妹穿的比我還像新娘衫仑。我一直安慰自己,他們只是感情好粥鞋,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布呻粹。 她就那樣靜靜地躺著苏研,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摹蘑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天过咬,我揣著相機與錄音掸绞,去河邊找鬼。 笑死集漾,一個胖子當著我的面吹牛砸脊,可吹牛的內(nèi)容都是我干的纬霞。 我是一名探鬼主播诗芜,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孩哑!你這毒婦竟也來了翠桦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤丛晌,失蹤者是張志新(化名)和其女友劉穎澎蛛,沒想到半個月后蜕窿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡斤贰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年荧恍,在試婚紗的時候發(fā)現(xiàn)自己被綠了送巡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡次氨,死狀恐怖煮寡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幸撕,我是刑警寧澤外臂,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布宋光,位于F島的核電站,受9級特大地震影響逛漫,放射性物質(zhì)發(fā)生泄漏赘艳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一阔馋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呕寝,春花似錦婴梧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至这刷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間似袁,已是汗流浹背咐刨。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工定鸟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仔粥。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓躯泰,卻偏偏與公主長得像麦向,于是被迫代替她去往敵國和親客叉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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