CSAPP復(fù)習(xí)(1月22日)

第一章 ? 計(jì)算機(jī)系統(tǒng)漫游

1 ? 以hello程序?yàn)槔裕懻摮绦虻纳芷?/b>

? ??為了在系統(tǒng)上運(yùn)行hello.c程序定欧,每條c語句都必須被其他程序轉(zhuǎn)化為一系列的低級(jí)機(jī)器語言指令辈双。然后這些指令按照一種稱為可執(zhí)行目標(biāo)程序的格式打好包烛缔,并以二進(jìn)制磁盤文件的形式存放起來馏段。

? ??從源程序到目標(biāo)程序的轉(zhuǎn)化是由編譯器驅(qū)動(dòng)程序完成的。

(1)預(yù)處理階段

? ? 預(yù)處理器根據(jù)以字符#開頭的命令践瓷,修改原始的c程序院喜。比如#include<stdio.h>命令告訴與預(yù)處理器讀取系統(tǒng)頭文件stdio.h的內(nèi)容,并把它直接插入到程序文本中晕翠。.c ?---> ? .i文件喷舀。

(2)編譯階段

編譯器把文本文件hello.i翻譯成hello.s,它包含了一個(gè)匯編語言程序淋肾。

(3)匯編階段

? ? 匯編器將hello.s翻譯成機(jī)器語言指令硫麻,把這些指令打包成一種叫做可重定位目標(biāo)程序的格式,并將結(jié)果保存在目標(biāo)文件hello.o中樊卓。hello.o文件是一個(gè)二進(jìn)制文件拿愧。(指令編碼)

(4)鏈接階段

? ? 例如,程序中調(diào)用了printf碌尔,它是標(biāo)準(zhǔn)c庫中的一個(gè)函數(shù)浇辜。printf函數(shù)存在于一個(gè)名為printf.o的單獨(dú)的預(yù)編譯好了的目標(biāo)文件中券敌,而這個(gè)文件必須以某種方式合并到我們的hello.o程序中。

? ? 鏈接器就負(fù)責(zé)這種合并奢赂。結(jié)果就得到hello文件陪白,它是一個(gè)可執(zhí)行目標(biāo)文件,可被加載到內(nèi)存中膳灶,由系統(tǒng)執(zhí)行咱士。

2 ? ?編譯系統(tǒng)如何工作 ? ?

? ? 1 ?優(yōu)化系統(tǒng)性能

? ? ?如switch 和 if-else的比較。for和while的比較轧钓。指針引用和數(shù)組索引的比較序厉。等等

? ? 2 ?理解鏈接時(shí)出現(xiàn)的錯(cuò)誤。

? ? ?靜態(tài)變量和全局變量的區(qū)別毕箍。靜態(tài)庫和動(dòng)態(tài)庫的區(qū)別弛房。等等等等(第七章)

? ? 3 ?避免安全漏洞

? ? ?堆棧原理和緩沖區(qū)溢出。(限制從不受信任的源接收數(shù)據(jù)的數(shù)量和格式)

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

? ? 1 總線

? ?貫穿整個(gè)系統(tǒng)的一組電子管道而柑,它攜帶信息字節(jié)并負(fù)責(zé)在各個(gè)部件間傳遞文捶。

? ??·通常總線被設(shè)計(jì)成傳送定長(zhǎng)的字節(jié)塊媒咳,也就是字粹排。

? ??·字中的字節(jié)數(shù)(字長(zhǎng))是一個(gè)基本的系統(tǒng)參數(shù),各個(gè)系統(tǒng)中不盡相同∩瑁現(xiàn)在的大多數(shù)機(jī)器要么是4字節(jié)(32位)顽耳,要么是8個(gè)字節(jié)(64位)。

? ? 2 I/O設(shè)備

? ? ·I/O設(shè)備是系統(tǒng)與外部世界的聯(lián)系通道妙同。

? ? ·每個(gè)I/O設(shè)備都通過一個(gè)控制器或適配器與I/O總線相連射富。控制器與適配器之間的額區(qū)別在于它們的封裝方式粥帚。主印刷電路板or插在主板插槽上的卡胰耗。

? ? 3 主存

? ? ·是一個(gè)臨時(shí)存儲(chǔ)設(shè)備,在處理器執(zhí)行程序時(shí)芒涡,用來存放程序和程序處理的數(shù)據(jù)宪郊。

? ? ·由一組動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)芯片組成。

? ? ·是一個(gè)線性的字節(jié)數(shù)組拖陆,每個(gè)字節(jié)都有其唯一的地址(數(shù)組索引)弛槐。

? ? 4 處理器

? ? ·中央處理單元(CPU),是解釋存儲(chǔ)在主存中指令的引擎依啰。

? ? ·核心是一個(gè)大小只有一個(gè)字的存儲(chǔ)設(shè)備(或寄存器)乎串,稱為程序計(jì)數(shù)器(pc)。

? ? ·處理器從程序計(jì)數(shù)器指向的內(nèi)存出讀取指令,解釋指令中的位叹誉,執(zhí)行該指令指示的簡(jiǎn)單操作鸯两,然后更新pc。(圍繞著主存长豁,寄存器文件和ALU進(jìn)行)

例子:運(yùn)行hello程序

? ? 1)在鍵盤上輸入字符串“./hello”后钧唐,shell程序?qū)⒆址鹨蛔x入寄存器,再把它存放到內(nèi)存中匠襟。

? ? 2)shell執(zhí)行一系列指令來加載可執(zhí)行的hello文件钝侠,這些指令將hello目標(biāo)文件中的代碼和數(shù)據(jù)復(fù)制到主存。

? ? 3)處理器開始執(zhí)行hello程序的main程序中的機(jī)器語言指令酸舍,這些指令將輸出復(fù)制到寄存器文件帅韧,再從寄存器文件復(fù)制到顯示設(shè)備。

4 ? 高速緩存啃勉、存儲(chǔ)設(shè)備形成層次結(jié)構(gòu)

主要思想:上一層的存儲(chǔ)器作為低一層存儲(chǔ)器的高速緩存忽舟。

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

操作系統(tǒng):應(yīng)用程序和硬件之間插入的一層軟件。所有應(yīng)用程序?qū)τ布牟僮鲊L試都必須通過操作系統(tǒng)淮阐。

兩個(gè)基本功能:1)防止硬件被失控的應(yīng)用程序?yàn)E用叮阅。2)向應(yīng)用程序提供簡(jiǎn)單一致的機(jī)制來控制復(fù)雜而又通常大不相同的低級(jí)硬件設(shè)備。

6 ? 進(jìn)程與線程

·操作系統(tǒng)會(huì)提供一種假象:好像系統(tǒng)上只有這一個(gè)程序在運(yùn)行泣特。程序看上去是獨(dú)占地使用處理器浩姥、主存和I/O設(shè)備。這些假象是通過進(jìn)程的概念來實(shí)現(xiàn)的群扶。

·進(jìn)程是操作系統(tǒng)對(duì)一個(gè)正在運(yùn)行的程序的一種抽象及刻,在一個(gè)系統(tǒng)上可以同時(shí)運(yùn)行多個(gè)進(jìn)程镀裤,而每個(gè)進(jìn)程都好像在獨(dú)占地使用硬件竞阐。并發(fā)運(yùn)行:則是說,一個(gè)進(jìn)程的指令和另一個(gè)進(jìn)程的指令是交錯(cuò)執(zhí)行的暑劝。

·無論是在單核還是多核系統(tǒng)中骆莹,一個(gè)CPU看上去都像是在并發(fā)地執(zhí)行多個(gè)進(jìn)程,這是通過處理器在進(jìn)程間切換來實(shí)現(xiàn)的担猛。操作系統(tǒng)實(shí)現(xiàn)這種交錯(cuò)執(zhí)行的機(jī)制稱為上下文交換幕垦。

·操作系統(tǒng)跟蹤進(jìn)程運(yùn)行所需的所有狀態(tài)信息。這種狀態(tài)傅联,也就是上下文先改,包括許多信息,比如pc和寄存器文件的當(dāng)前值蒸走,以及主存的內(nèi)容仇奶。當(dāng)操作系統(tǒng)決定要把控制權(quán)從當(dāng)前進(jìn)程轉(zhuǎn)移到某個(gè)新進(jìn)程時(shí),就會(huì)進(jìn)行上下文切換比驻。

·從一個(gè)進(jìn)程到另一個(gè)進(jìn)程的切換是由操作系統(tǒng)內(nèi)核管理的该溯,內(nèi)核是操作系統(tǒng)常駐主存的部分岛抄。注:內(nèi)核不是一個(gè)獨(dú)立的進(jìn)程。相反狈茉,它是系統(tǒng)管理全部進(jìn)程所用代碼和數(shù)據(jù)結(jié)構(gòu)的集合夫椭。

·在現(xiàn)代操作系統(tǒng)中,一個(gè)進(jìn)程實(shí)際上可以由多個(gè)稱為線程的執(zhí)行單元組成氯庆。每個(gè)線程都運(yùn)行在進(jìn)程的上下文中蹭秋,并共享同樣的代碼和全局?jǐn)?shù)據(jù)。

·由于網(wǎng)絡(luò)服務(wù)器中對(duì)并行處理的需求点晴,線程成為越來越重要的編程模型感凤,因?yàn)槎嗑€程之間比多進(jìn)程之間更容易共享數(shù)據(jù)。

7 ? 虛擬內(nèi)存

? ? 為每個(gè)進(jìn)程提供假象粒督,即每個(gè)進(jìn)程都在獨(dú)占地使用主存陪竿,每個(gè)進(jìn)程看到的內(nèi)存都是一致的,稱為虛擬地址空間屠橄。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 內(nèi)核虛擬內(nèi)存 ? ? ? ? ?:用戶代碼不可見的內(nèi)存 ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用戶棧(運(yùn)行時(shí)創(chuàng)建):函數(shù)調(diào)用返回

????????????????????????????????????????????????????????共享庫的內(nèi)存映射區(qū)域

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????? 運(yùn)行時(shí)堆(在運(yùn)行時(shí)由malloc創(chuàng)建):動(dòng)態(tài)擴(kuò)展伸縮大小

????????????????????????????????????????????????????????? ? ? 讀/寫數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 只讀的代碼和數(shù)據(jù):全局變量

基本思想:把一個(gè)進(jìn)程虛擬內(nèi)存的內(nèi)容存儲(chǔ)在磁盤上族跛,然后用主存作為磁盤的高速緩存。

8 ? 文件

? ? 文件就是字節(jié)序列锐墙。每個(gè)I/O設(shè)備礁哄,包括磁盤,鍵盤溪北,顯示器桐绒,甚至網(wǎng)絡(luò),都可以看成是文件之拨。

9 ? Amdahl定律

? ? 主要思想:當(dāng)我們對(duì)系統(tǒng)的某個(gè)部分加速時(shí)茉继,其對(duì)系統(tǒng)整體性能的影響取決于該部分的重要性和加速度。

? ? 若系統(tǒng)執(zhí)行某應(yīng)用程序需要時(shí)間為Told蚀乔。假設(shè)系統(tǒng)某部分所需執(zhí)行時(shí)間與該時(shí)間的比例為a烁竭,而該部分的性能提升比例為k,即該部分初始所需時(shí)間為aTold吉挣,現(xiàn)在所需時(shí)間為(aTold)/k派撕。因此,總的執(zhí)行時(shí)間應(yīng)為

Tnew=(1-a)Told+(aTold)/k=Tol[(1-a)+a/k]

由此睬魂,可以計(jì)算加速比S=Told/Tnew為:

?? S=1/((1-a)+a/k)

若考慮有趣的特殊情況终吼,即k趨向于無窮時(shí)的效果,這就意味著氯哮,我們可以取系統(tǒng)的某一部分將其加速到一個(gè)點(diǎn)际跪。該定律描述了改善任何過程的一般原則。

10?? 并發(fā)和并行

并發(fā):指一個(gè)同時(shí)具有多個(gè)活動(dòng)的系統(tǒng)。

并行:用并發(fā)來使一個(gè)系統(tǒng)運(yùn)行得更快垫卤。

1)線程級(jí)并發(fā)

構(gòu)建在進(jìn)程這個(gè)抽象之上威彰,我們能夠設(shè)計(jì)出同時(shí)具有多個(gè)程序執(zhí)行的系統(tǒng),這就導(dǎo)致了并發(fā)穴肘。使用線程歇盼,我們能在一個(gè)進(jìn)程中,執(zhí)行多個(gè)控制流评抚。這種并發(fā)執(zhí)行只是模擬出來的豹缀,是通過使一臺(tái)計(jì)算機(jī)在它正在執(zhí)行的進(jìn)程間快速切換來實(shí)現(xiàn)的。這種并發(fā)形式允許多個(gè)用戶同時(shí)與系統(tǒng)交互慨代。

超線程:同時(shí)多線程邢笙,允許一個(gè)CPU執(zhí)行多個(gè)控制流的技術(shù)。比如侍匙,假設(shè)一個(gè)線程必須等到某些數(shù)據(jù)被加載到高速緩存中氮惯,那CPU就可以繼續(xù)去執(zhí)行另一個(gè)線程

2)指令級(jí)并發(fā)

即現(xiàn)代處理器可以同時(shí)執(zhí)行多條指令的屬性想暗。(重點(diǎn)在于流水線的使用)

流水線:將執(zhí)行一條指令所需要的活動(dòng)劃分成不同的步驟妇汗,將處理器的硬件組織成一系列的階段,每個(gè)階段執(zhí)行一個(gè)步驟说莫。這些階段可以并行的操作杨箭,用來處理不同指令的不同部分。能夠達(dá)到接近于一個(gè)時(shí)鐘周期一條指令的執(zhí)行速率储狭。

3)單指令互婿,多數(shù)據(jù)并行

允許一條指令產(chǎn)生多個(gè)可以并行執(zhí)行的操作。



??????????????????? (第一章只是粗略講了一些基礎(chǔ)概念和框架辽狈,具體細(xì)節(jié)在后面章節(jié))

?????????????????????????????????????????????? (第一章??????? 完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慈参,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稻艰,更是在濱河造成了極大的恐慌懂牧,老刑警劉巖侈净,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尊勿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畜侦,警方通過查閱死者的電腦和手機(jī)元扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門情妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滚秩,“玉大人,你說我怎么就攤上這事萍膛。” “怎么了擅羞?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵尸变,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我减俏,道長(zhǎng)召烂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任娃承,我火速辦了婚禮奏夫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘历筝。我一直安慰自己酗昼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布梳猪。 她就那樣靜靜地躺著麻削,像睡著了一般。 火紅的嫁衣襯著肌膚如雪春弥。 梳的紋絲不亂的頭發(fā)上碟婆,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音惕稻,去河邊找鬼竖共。 笑死,一個(gè)胖子當(dāng)著我的面吹牛俺祠,可吹牛的內(nèi)容都是我干的公给。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蜘渣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼淌铐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔫缸,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤腿准,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拾碌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吐葱,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年校翔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弟跑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡防症,死狀恐怖孟辑,靈堂內(nèi)的尸體忽然破棺而出哎甲,到底是詐尸還是另有隱情,我是刑警寧澤饲嗽,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布炭玫,位于F島的核電站,受9級(jí)特大地震影響貌虾,放射性物質(zhì)發(fā)生泄漏础嫡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一酝惧、第九天 我趴在偏房一處隱蔽的房頂上張望榴鼎。 院中可真熱鬧,春花似錦晚唇、人聲如沸巫财。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽平项。三九已至,卻和暖如春悍及,著一層夾襖步出監(jiān)牢的瞬間闽瓢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工心赶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扣讼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓缨叫,卻偏偏與公主長(zhǎng)得像椭符,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耻姥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理销钝,服務(wù)發(fā)現(xiàn),斷路器琐簇,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 2016年國慶假期終于把此書過完婉商,整理筆記和體會(huì)于此似忧。 關(guān)于書名 書名源于俄羅斯的演員斯坦尼斯拉夫斯基創(chuàng)作的《演員...
    李劍飛的簡(jiǎn)書閱讀 7,220評(píng)論 2 65
  • 1.衣帶漸寬終不悔,為伊消得人憔悴据某。-柳永《鳳棲梧》 2.死生契闊橡娄,與子成悅诗箍。執(zhí)子之手癣籽,與子偕老挽唉。-佚名《詩經(jīng)邶風(fēng)...
    熊心貓閱讀 510評(píng)論 2 8
  • 幾年前,當(dāng)我在電視上看到有關(guān)龐秀玉的采訪時(shí)筷狼,我感到非常震驚和費(fèi)解瓶籽。她長(zhǎng)著一張清秀的面龐,娓娓訴說著自己的坎坷...
    言行合一閱讀 1,073評(píng)論 3 2
  • 你從這窄門出去 纖小的背影 剎那占據(jù)了天空 今夜無夢(mèng) 你跨出門檻 身影被拉長(zhǎng) 往我的心里下沉 今夜睡眠也沒有 淡薄...
    還不餓閱讀 235評(píng)論 0 2