版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第一章第一章 計(jì)算機(jī)系統(tǒng)概論計(jì)算機(jī)系統(tǒng)概論 主要內(nèi)容主要內(nèi)容 課程內(nèi)容概要課程內(nèi)容概要 課程教學(xué)安排及考試安排課程教學(xué)安排及考試安排 計(jì)算機(jī)系統(tǒng)概述計(jì)算機(jī)系統(tǒng)概述 計(jì)算機(jī)的發(fā)展歷程計(jì)算機(jī)的發(fā)展歷程 計(jì)算機(jī)系統(tǒng)的基本功能和組成計(jì)算機(jī)系統(tǒng)的基本功能和組成 程序的開發(fā)程序的開發(fā) 程序的執(zhí)行程序的執(zhí)行 計(jì)算機(jī)性能評價(jià)計(jì)算機(jī)性能評價(jià)計(jì)算機(jī)系統(tǒng)基礎(chǔ)計(jì)算機(jī)系統(tǒng)基礎(chǔ)從程序員角度認(rèn)識系統(tǒng)從程序員角度認(rèn)識系統(tǒng) 目標(biāo): 培養(yǎng)學(xué)生的系統(tǒng)能力,使其成為一個“高效”程序員,在程序調(diào)試、性能提升、程序移植和健壯性等方面成為高手;建立扎實(shí)的計(jì)算機(jī)系統(tǒng)概念,為后續(xù)的OS、編譯、體系結(jié)構(gòu)等課程打下堅(jiān)實(shí)基礎(chǔ) 以 IA-32+Lin
2、ux+C+gcc 為平臺(開源項(xiàng)目平臺) 與以下MOOC課程的想法類似/course/hwswinterface 主要內(nèi)容:描述程序執(zhí)行的底層機(jī)制 思路: 在程序與執(zhí)行機(jī)制之間的建立關(guān)聯(lián),強(qiáng)化理解而不是記憶 課程內(nèi)容概要課程內(nèi)容概要/*-sum.c-*/int sum(int a , unsigned len)int i,sum = 0;for (i = 0; i = len1; i+) sum += ai;return sum;/*-main.c-*/int main()int a1=100;int sum; sum=sum(a,0); prin
3、tf(“%d”,sum);數(shù)據(jù)的表示數(shù)據(jù)的運(yùn)算各類語句的轉(zhuǎn)換與表示(指令)各類復(fù)雜數(shù)據(jù)類型的轉(zhuǎn)換表示過程(函數(shù))調(diào)用的轉(zhuǎn)換表示鏈接(linker)和加載程序執(zhí)行(存儲器訪問)異常和中斷處理輸入輸出(I/O)課程內(nèi)容概要課程內(nèi)容概要l 使學(xué)生清楚理解: 計(jì)算機(jī)是如何生成和運(yùn)行可執(zhí)行文件的!l 重點(diǎn)在高級語言以下各抽象層 C語言程序設(shè)計(jì)層數(shù)據(jù)的機(jī)器級表示、運(yùn)算語句和過程調(diào)用的機(jī)器級表示 指令集體系結(jié)構(gòu)(ISA)和匯編層 指令系統(tǒng)、機(jī)器代碼、匯編語言 微體系結(jié)構(gòu)及硬件層CPU的通用結(jié)構(gòu)層次結(jié)構(gòu)存儲系統(tǒng) 操作系統(tǒng)、編譯和鏈接的部分內(nèi)容“問題求解”課程解決應(yīng)用算法(數(shù)據(jù)結(jié)構(gòu))編程層課程內(nèi)容概要課程內(nèi)容概
4、要內(nèi)容組織:兩大部分+附錄 第一部分 系統(tǒng)概述和可執(zhí)行文件的生成(表示和轉(zhuǎn)換) 計(jì)算機(jī)系統(tǒng)概述 數(shù)據(jù)的機(jī)器級表示與處理 程序的轉(zhuǎn)換及機(jī)器級表示 程序的鏈接 第二部分 可執(zhí)行文件的運(yùn)行(執(zhí)行控制流) 程序的執(zhí)行 層次結(jié)構(gòu)存儲系統(tǒng) 異常控制流 I/O操作的實(shí)現(xiàn) 附錄 數(shù)字邏輯電路基礎(chǔ)前導(dǎo)知識:C語言程序設(shè)計(jì)課程基本信息課程基本信息課程名稱 計(jì)算機(jī)系統(tǒng)基礎(chǔ)(Introduction to Computer Systems)課程網(wǎng)站 http:/ 前導(dǎo)課程 C語言程序設(shè)計(jì)、數(shù)字邏輯電路任課教師 第1、2、3章:唐杰副教授() 第4、6章:蘇豐副教授() 第7、8章:路通教授() 教材:計(jì)算機(jī)系統(tǒng)基礎(chǔ),
5、袁春風(fēng),機(jī)械工業(yè)出版社,2014.7主要參考書: 深入理解計(jì)算機(jī)系統(tǒng)(第2版),Randal E. Bryant, david R. OHallaron著,龔奕利,雷迎春譯,機(jī)械工業(yè)出版社,2011 年 Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language ( second Edition),北京:機(jī)械工業(yè)出版社,2006 計(jì)算機(jī)系統(tǒng)概論(原書第2版),Yale N. Patt, Sanjay J. Patel著,梁阿磊,蔣興昌,林凌譯,機(jī)械工業(yè)出版社,2007年實(shí)驗(yàn)及考核方式實(shí)驗(yàn)及考核方式 實(shí)驗(yàn)類型 Homewor
6、k:課后習(xí)題 Lab:數(shù)據(jù)表示(位操作)、二進(jìn)制炸彈、緩沖區(qū)溢出、逆向工程、鏈接加載 考核方式 Homework Lab 期末考試主要內(nèi)容主要內(nèi)容 課程內(nèi)容概要課程內(nèi)容概要 課程教學(xué)安排及考試安排課程教學(xué)安排及考試安排 計(jì)算機(jī)系統(tǒng)概述計(jì)算機(jī)系統(tǒng)概述 計(jì)算機(jī)的發(fā)展歷程計(jì)算機(jī)的發(fā)展歷程 計(jì)算機(jī)系統(tǒng)的基本功能和組成計(jì)算機(jī)系統(tǒng)的基本功能和組成 程序的開發(fā)程序的開發(fā) 程序的執(zhí)行程序的執(zhí)行 計(jì)算機(jī)性能評價(jià)計(jì)算機(jī)性能評價(jià)1. 計(jì)算機(jī)的發(fā)展歷程計(jì)算機(jī)的發(fā)展歷程 計(jì)算機(jī)發(fā)展歷程計(jì)算機(jī)發(fā)展歷程 馮馮諾依曼領(lǐng)導(dǎo)的小組發(fā)表了諾依曼領(lǐng)導(dǎo)的小組發(fā)表了“存儲程序(存儲程序(stored-program)”方式的電子數(shù)字計(jì)算
7、機(jī)方式的電子數(shù)字計(jì)算機(jī) “存儲程序存儲程序”方式的基本思想是:必須將事先編好的程序和原始數(shù)據(jù)送入主存后才能執(zhí)行程序,一旦程序被啟動執(zhí)行,計(jì)算機(jī)能在不需操作人員干預(yù)下自動完成逐條指令取出和執(zhí)行的任務(wù)。計(jì)算機(jī)發(fā)展歷程計(jì)算機(jī)發(fā)展歷程 第一代第一代計(jì)算機(jī):電子管計(jì)算機(jī):電子管計(jì)算機(jī)計(jì)算機(jī) 第二代第二代計(jì)算機(jī)計(jì)算機(jī):晶體管計(jì)算機(jī)晶體管計(jì)算機(jī) 第三代第三代計(jì)算機(jī)計(jì)算機(jī):集成電路計(jì)算機(jī)集成電路計(jì)算機(jī) 第四代第四代計(jì)算機(jī)計(jì)算機(jī):超大規(guī)模集成電路超大規(guī)模集成電路計(jì)算機(jī)計(jì)算機(jī)2. 計(jì)算機(jī)系統(tǒng)計(jì)算機(jī)系統(tǒng)的基本功能和的基本功能和組成組成 一個典型系統(tǒng)的硬件組成一個典型系統(tǒng)的硬件組成PC:程序計(jì)數(shù)器;程序計(jì)數(shù)器;ALU
8、:算術(shù):算術(shù)/邏輯單元;邏輯單元;USB:通用串行總線:通用串行總線CPUMMInput/Output計(jì)算機(jī)硬件:打開計(jì)算機(jī)硬件:打開PC來看看來看看PC主板主板CPU插座插座內(nèi)存條內(nèi)存條PCI總線插槽總線插槽解剖一臺計(jì)算機(jī)(分而治之)解剖一臺計(jì)算機(jī)(分而治之) 個人計(jì)算機(jī)由主個人計(jì)算機(jī)由主機(jī)和外設(shè)組成機(jī)和外設(shè)組成主機(jī)中包含主機(jī)中包含多個電路板多個電路板每個電路板中有每個電路板中有十幾個集成電路十幾個集成電路每個集成電路中每個集成電路中有十幾個模塊有十幾個模塊每個模塊中有每個模塊中有上千萬個單元上千萬個單元每個單元中有每個單元中有十幾個門電路十幾個門電路每個門電路實(shí)現(xiàn)基每個門電路實(shí)現(xiàn)基本的邏輯
9、運(yùn)算本的邏輯運(yùn)算 所有信息都用二所有信息都用二進(jìn)制編碼表示進(jìn)制編碼表示Hardware/Software Interface(界面)(界面)機(jī)器語言由指令代碼構(gòu)成,能被硬件直接執(zhí)行。 軟件和硬件的界面:軟件和硬件的界面: ISA(Instruction Set Architecture ) 指令集體系結(jié)構(gòu)軟件軟件硬件硬件1000 1100 0100 1111 0000 0000 0000 00001000 1100 0101 0000 0000 0000 0000 0100Hardware/Software Interface , EXTop=1,ALUSelA=1,ALUSelB=11,AL
10、Uop=add,IorD=1,Read,MemtoReg=1,RegWr=1,.temp = vk;vk = vk+1;vk+1 = temp;lw $15, 0($2)lw $16, 4($2)sw $16, 0($2)sw $15, 4($2)1000 1100 0100 1111 0000 0000 0000 00001000 1100 0101 0000 0000 0000 0000 01001010 1100 0101 0000 0000 0000 0000 00001010 1100 0100 1111 0000 0000 0000 0100軟軟件件硬硬件件Computer Hie
11、rarchy(計(jì)算機(jī)系統(tǒng)層次)(計(jì)算機(jī)系統(tǒng)層次)I/OCPUCompilerOperatingSystemApplicationDigital DesignCircuit Design 上圖給出的是計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu)上圖給出的是計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu) 指令系統(tǒng)(即指令系統(tǒng)(即ISAISA)是軟)是軟/ /硬件的交界面硬件的交界面Instruction Set Architecture不同用戶工作在不同層次,所看到的計(jì)算機(jī)不一樣不同用戶工作在不同層次,所看到的計(jì)算機(jī)不一樣最終用戶最終用戶End User應(yīng)用程序員應(yīng)用程序員Application Programmer系統(tǒng)管理員系統(tǒng)管理員Syste
12、m Administrator系統(tǒng)程序員系統(tǒng)程序員System ProgrammerMMAssemblerSoftware System software(系統(tǒng)軟件系統(tǒng)軟件) - 簡化編程過程,并使硬件資源被有效利用簡化編程過程,并使硬件資源被有效利用 操作系統(tǒng)(操作系統(tǒng)(Operating System):):硬件資源管理,用戶接口硬件資源管理,用戶接口語言處理系統(tǒng):翻譯程序語言處理系統(tǒng):翻譯程序+ Linker, Debug, etc 翻譯程序翻譯程序(Translator)有三類:有三類:匯編程序匯編程序(Assembler):匯編語言源程序匯編語言源程序機(jī)器語言目標(biāo)程序機(jī)器語言目標(biāo)程序
13、編譯程序編譯程序(Complier):高級語言源程序高級語言源程序機(jī)器級目標(biāo)程序機(jī)器級目標(biāo)程序解釋程序解釋程序(Interpreter ):將高級語言語句逐條翻譯成機(jī)器指令并將高級語言語句逐條翻譯成機(jī)器指令并立即執(zhí)行立即執(zhí)行,不生成目標(biāo)文件。不生成目標(biāo)文件。其他實(shí)用程序其他實(shí)用程序: 如:磁盤碎片整理程序、備份程序等如:磁盤碎片整理程序、備份程序等 Application software(應(yīng)用軟件應(yīng)用軟件) - 解決具體應(yīng)用問題解決具體應(yīng)用問題/完成具體應(yīng)用任務(wù)完成具體應(yīng)用任務(wù)各類媒體處理程序:各類媒體處理程序:Word/ Image/ Graphics/管理信息系統(tǒng)管理信息系統(tǒng) (MIS)
14、 Game, 3. 程序程序的開發(fā)和執(zhí)行的開發(fā)和執(zhí)行過程過程 一個典型程序的轉(zhuǎn)換處理過程一個典型程序的轉(zhuǎn)換處理過程1 #include 23 int main()4 5 printf(hello, worldn);6 經(jīng)典的經(jīng)典的“ hello.c ”C-源程序源程序# i n c l u d e n n i n t m a i n ( ) n 104 62 10 10 105 110 116 32 109 97 105 110 40 41 10 123n p r i n t f ( h e l10 32 32 32 32 112 114 105 110 116 102 40 34 104 1
15、01 108l o , w o r l d n ) ; n 108 111 44 32 119 111 114 108 100 92 110 34 41 59 10 125hello.c的的ASCII文本表示文本表示計(jì)算機(jī)能夠直接識計(jì)算機(jī)能夠直接識別別hello.c源程序嗎源程序嗎?不能,需要轉(zhuǎn)換為機(jī)器語言不能,需要轉(zhuǎn)換為機(jī)器語言代碼代碼! ! 即:編譯、匯編等即:編譯、匯編等程序的功能是:程序的功能是:輸出輸出“hello,world”NoImageGCC使用舉例使用舉例使用GCC的命令是gcc,最常用的方式如下:#gcc -o filename sample1.c sample2.c sa
16、mple3.cu 使用-o filename參數(shù),輸出可執(zhí)行文件名為filename;如果沒有這個參數(shù),GCC將使用缺省的可執(zhí)行文件名a.out25基本選項(xiàng)基本選項(xiàng)預(yù)處理階段預(yù)處理階段l忽略掉不需預(yù)處理的輸入文件,生成中間文件*.i C預(yù)處理器cpp用來完成宏的求值、條件編譯以及其他一些需要把代碼傳遞到編譯器前的工作 通常所見的那些“#”號后面的語句由 cpp 來進(jìn)行處理,如#ifdef、#include以及#define等 例:下面一段代碼: #define FOO (5*2) printf(%dn,FOO*2); 經(jīng)過cpp預(yù)處理后變成下面形式: printf(%dn,(5*2)*2);基
17、本選項(xiàng)基本選項(xiàng)編譯階段編譯階段l輸入中間文件*.i,生成匯編語言源程序文件*.s 對應(yīng)的GCC命令如下例所示:gcc -S example.i -o example.sexample.s即為生成的匯編語言源程序文件 該例其實(shí)可以直接從源代碼編譯,即: gcc S example.c -o example.s基本選項(xiàng)基本選項(xiàng)匯編階段匯編階段 將輸入的匯編語言源程序文件轉(zhuǎn)換為可重定位目標(biāo)代碼文件(*.o),這可以通過使用-c選項(xiàng)完成,實(shí)際調(diào)用了匯編器as 對應(yīng)的GCC命令如下例所示: gcc -c example.s -o example.o 注意:目標(biāo)文件雖然是機(jī)器代碼,但不可執(zhí)行。 as 通常
18、情況下是被gcc調(diào)用的,但也可直接使用?;具x項(xiàng)基本選項(xiàng)鏈接階段鏈接階段p 將生成的目標(biāo)文件與其它目標(biāo)文件(或庫文件)鏈接成可執(zhí)行的二進(jìn)制代碼文件。這一步驟可以使用如下的GCC命令來完成: gcc example.o -o example 運(yùn)行examplep 如果只需要最終的可執(zhí)行文件,可以直接對源文件進(jìn)行編譯鏈接,對應(yīng)的GCC命令如下所示: gcc example.c -o examplep 對于一個程序的多個源文件進(jìn)行編譯鏈接時(shí),可以使用如下格式:gcc -o test first.c second.c third.c該命令將同時(shí)編譯三個源文件,即first.c、second.c和thi
19、rd.c,然后將它們鏈接成一個可執(zhí)行文件,名為test。注意:生成可執(zhí)行文件時(shí),被編譯和鏈接的多個源文件中有且只能有一個main函數(shù),因?yàn)閙ain函數(shù)是該程序的入口29鏈接器鏈接器 ldp 在編寫一個較大程序時(shí),經(jīng)常把它分成許多獨(dú)立的模塊,這時(shí)需要鏈接器把所有的模塊組合起來,并結(jié)合 C 函數(shù)庫和初始化代碼,產(chǎn)生最后的可執(zhí)行文件。鏈接器在產(chǎn)生可執(zhí)行文件之前,起到重要的作用。p 通常情況下,ld被編譯器所調(diào)用,產(chǎn)生可執(zhí)行文件,但是,如果想更好地控制鏈接過程,最好手工調(diào)用ld。鏈接器使用實(shí)例鏈接器使用實(shí)例p 使用GCC直接指定在創(chuàng)建可執(zhí)行文件時(shí)所需包含的庫文件 gcc example5.c -o e
20、xample /usr/lib/i386-linux-gnu/libm.sop 快捷選項(xiàng)-l,命令的格式為: gcc example5.c -o example5 -lm 與上面指定庫文件的全路徑/usr/lib/libm.so命令等價(jià),避免了在命令行寫長路徑 在Linux下,庫文件在命名時(shí)總以lib開頭,因此在用-l選項(xiàng)指定庫文件名時(shí)可省去lib,-lm表示鏈接名為libm.so的庫文件p GCC編譯器在默認(rèn)情況下使用動態(tài)庫,但如果使用了-static選項(xiàng),則忽略動態(tài)庫,強(qiáng)制使用靜態(tài)鏈接庫,即使用如下命令: gcc example5.c -o example5 -static -lm此時(shí)靜態(tài)
21、庫文件中的代碼全部包含到可執(zhí)行文件中,故生成的可執(zhí)行文件較大p GCC編譯器提供了-shared選項(xiàng)來生成動態(tài)庫文件 與動態(tài)庫鏈接的可執(zhí)行文件只包含它需要的函數(shù)的引用表,而不是所有的函數(shù)代碼,且只有在程序執(zhí)行時(shí)函數(shù)代碼才會被拷貝到內(nèi)存之中。這樣使可執(zhí)行文件比較小,進(jìn)而節(jié)省了磁盤空間;更重要的是,如果庫文件本身被更新了,不需要重新編譯與它連接的源程序。31gdb符號符號調(diào)試器調(diào)試器p gdb(GNU Debugger)是由GNU計(jì)劃完成的、受通用公共許可證(GPL)保護(hù)的自由軟件。它主要工作在字符模式下,是一個功能強(qiáng)大的交互式程序調(diào)試工具lgdb能在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況
22、gdb主要提供以下功能l監(jiān)視程序中變量的值的變化l設(shè)置斷點(diǎn),使程序在指定的代碼行上暫停執(zhí)行,便于觀察l單步執(zhí)行代碼l分析崩潰程序產(chǎn)生的core文件 命令形式如下:gdb filenamegdb調(diào)試調(diào)試執(zhí)行程序執(zhí)行程序gdb命令run(可以簡寫為r)執(zhí)行裝載代碼在run命令之后可以加入執(zhí)行參數(shù)來定制執(zhí)行的方式 (gdb) r如果程序中存在斷點(diǎn),則會在斷點(diǎn)處自動暫停33gdb調(diào)試調(diào)試設(shè)置斷點(diǎn)設(shè)置斷點(diǎn)p 通過使用gdb逐步調(diào)試代碼,可以看到程序內(nèi)部是如何運(yùn)行的,還可以知道什么命令正在執(zhí)行,變量的值的變化以及其他一些細(xì)節(jié)問題gdb調(diào)試示例針對源程序test.c: 1. 調(diào)用gdb,裝載子程序 $gdb
23、 test( 若要在GDB啟動后載入,則使用file命令:(gdb) file test ) 34gdb調(diào)試調(diào)試設(shè)置斷點(diǎn)設(shè)置斷點(diǎn)2、設(shè)置斷點(diǎn)l 可以通過使用break命令(可簡寫為b)指定一個特定的位置設(shè)置斷點(diǎn)。指定一個特定的位置設(shè)置斷點(diǎn),當(dāng)程序運(yùn)行到這個位置時(shí)就被中斷,然后把程序的控制權(quán)交給調(diào)試器和程序員l 設(shè)置斷點(diǎn)的最簡單形式在break命令后加入行號來在該行加入斷點(diǎn) (gdb)break test.c:21Breakpoint 1 at 0 x12000061c:file test,line 21 另一種方法(gdb)break printmessageBreakpoint 1 at 0
24、 x120000848:file test.c,line 4835gdb調(diào)試調(diào)試使用使用斷點(diǎn)斷點(diǎn)p 在斷點(diǎn)后繼續(xù)運(yùn)行程序,可使用continue命令(簡寫為c) (gdb) cp break命令后也可以跟函數(shù)名,使程序在進(jìn)入指定的函數(shù)之前停下來p 設(shè)置斷點(diǎn)時(shí)也可以進(jìn)行條件判斷,即只有條件為真,程序到達(dá)指定行或函數(shù)時(shí)才停下來(gdb) b 9 if i9p 在加入斷點(diǎn)之后,可通過info break命令來查看設(shè)置斷點(diǎn)的信息,包括編號、類型、地址等(gdb) info break36gdb調(diào)試調(diào)試使用使用斷點(diǎn)斷點(diǎn)p 可以通過可以通過delete(可以簡寫為(可以簡寫為d)命令來刪除斷點(diǎn))命令來刪除
25、斷點(diǎn) 在在delete命令后加入斷點(diǎn)編號可以刪除指定的斷點(diǎn)。不指定斷點(diǎn)命令后加入斷點(diǎn)編號可以刪除指定的斷點(diǎn)。不指定斷點(diǎn)號則刪除所有的斷點(diǎn)號則刪除所有的斷點(diǎn)(gdb) d 1刪除編號為刪除編號為1的斷點(diǎn)的斷點(diǎn) delete命令后面可以跟一個范圍命令后面可以跟一個范圍(gdb) d 1-6刪除編號為刪除編號為16的斷點(diǎn)的斷點(diǎn)p 也可以使用也可以使用clear來刪除指定代碼行上的斷點(diǎn)來刪除指定代碼行上的斷點(diǎn)(gdb) clear 9刪除第刪除第9行上的所有斷點(diǎn)行上的所有斷點(diǎn) clear命令后面可以跟一個范圍命令后面可以跟一個范圍p 可以使用可以使用disable命令使某個斷點(diǎn)暫時(shí)失效。命令使某個斷點(diǎn)
26、暫時(shí)失效。disable命令可加斷點(diǎn)命令可加斷點(diǎn)號來禁用指定斷點(diǎn),否則會將所有斷點(diǎn)禁用號來禁用指定斷點(diǎn),否則會將所有斷點(diǎn)禁用p 斷點(diǎn)在禁用之后可以用斷點(diǎn)在禁用之后可以用enable命令來恢復(fù)使用命令來恢復(fù)使用gdb調(diào)試調(diào)試列出源代碼列出源代碼p 程序在載入到gdb之后,就可以通過list命令(可簡寫為l)來查看源代碼信息。 (gdb) list list命令默認(rèn)情況下只列出10行代碼。如果上面命令的基礎(chǔ)上再次輸入list命令,會接著列出后面的10行代碼,當(dāng)然,如果后面還有10行的話,否則只列到源文件末尾p 也可以通過參數(shù)來指定list命令列出源文件的某一部分。例如:列出源文件example1.
27、c的第35行代碼 (gdb) l 3,5p list命令后也可直接跟行號,這樣列出的是該行上下5行代碼 (gdb) l 938gdb調(diào)試調(diào)試顯示數(shù)據(jù)顯示數(shù)據(jù)p 使用print和display display和print 是顯示數(shù)據(jù)最常用的兩種命令,這兩個命令的功能非常強(qiáng)大,并不限于簡單地顯示一個整數(shù)值p 使用printf 該命令可以接受指定格式和變量列表為參數(shù),使用起來類似于 C 中的 printf()函數(shù)p 內(nèi)存檢查命令 gdb提供了命令x,來獲得指針?biāo)赶虻膬?nèi)容。 x/format address 39gdb調(diào)試調(diào)試設(shè)置觀察點(diǎn)(窗口)設(shè)置觀察點(diǎn)(窗口)p 觀察點(diǎn)也稱為數(shù)據(jù)斷點(diǎn),用來監(jiān)測某個
28、變量或表達(dá)式的值是否有變化,如果有變化,則暫停程序的運(yùn)行,這在調(diào)試程序的過程中是非常有用p 設(shè)置觀察點(diǎn)的命令為watch,后面跟需要查看的變量或表達(dá)式(gdb) watch tol設(shè)置變量tol的觀察點(diǎn) 若程序繼續(xù)運(yùn)行,則可以看到GDB給出了變量tol的舊值0和新值1,同時(shí)也給出了下一條指令的行號和指令內(nèi)容40gdb調(diào)試調(diào)試查看查看棧信息棧信息p 當(dāng)程序調(diào)用了一個函數(shù)時(shí),函數(shù)的地址、函數(shù)參數(shù)、函數(shù)內(nèi)的局部變量都會被壓入“?!?Stack)中??梢杂胋acktrace(簡寫為bt)來查看當(dāng)前的棧中的信息。p 如果要查看某一層的信息,需要切換當(dāng)前的棧。程序停止時(shí),最頂層的棧就是當(dāng)前棧,如果要查看棧
29、下面層的詳細(xì)信息,首先要做的是切換當(dāng)前棧,可使用frame (簡寫為f)命令,后面跟棧幀的編號 (gdb) f 1p 查看當(dāng)前棧幀的詳細(xì)信息,可使用info frame命令(簡寫為info f) (gdb) info f 將顯示調(diào)用函數(shù)的地址、被調(diào)用函數(shù)的地址、函數(shù)的編寫語言、函數(shù)的參數(shù)、局部變量的地址、棧的層編號、當(dāng)前的函數(shù)名、函數(shù)所在文件及行號、函數(shù)執(zhí)行到的語句等信息。gdb調(diào)試調(diào)試程序執(zhí)行控制程序執(zhí)行控制p 單步執(zhí)行l(wèi) 即一步一步跟蹤程序執(zhí)行,是經(jīng)常使用的一種調(diào)試操作p GDB中可以通過step(簡寫為s)或next(簡寫為n)來單步執(zhí)行代碼 step命令可以跟蹤進(jìn)入函數(shù)內(nèi)部,在執(zhí)行到函
30、數(shù)調(diào)用部分時(shí),GDB會給出提示信息,包括被調(diào)用函數(shù)的入口參數(shù)、起始行號等,同時(shí)也會給出函數(shù)中將要執(zhí)行的語句及所在行的行號 next命令也可以實(shí)現(xiàn)程序代碼的單步執(zhí)行,但它將函數(shù)調(diào)用看作是一條語句,不跟蹤進(jìn)入函數(shù)內(nèi)部 next命令后面還可以跟參數(shù)來指定執(zhí)行操作的次數(shù),直至程序因其他原因暫停運(yùn)行g(shù)db調(diào)試調(diào)試程序執(zhí)行控制程序執(zhí)行控制p return命令l 忽略當(dāng)前函數(shù)剩余的語句,跳出函數(shù)并繼續(xù)向下執(zhí)行。return命令后可以跟變量或者表達(dá)式來作為函數(shù)的返回值p 執(zhí)行到指定行l(wèi) 命令until加指定行號l 需要注意的是如果執(zhí)行中有斷點(diǎn)則會停在斷點(diǎn)處p finish命令l 在退出當(dāng)前函數(shù)前執(zhí)行函數(shù)體p
31、jump命令l 跳過某一段代碼繼續(xù)執(zhí)行,從而改變程序執(zhí)行的順序。命令后跟運(yùn)行轉(zhuǎn)到的行號。 l jump不會改變程序棧的內(nèi)容,所以當(dāng)從一個函數(shù)跳到另一個函數(shù)后,函數(shù)返回所進(jìn)行的出棧操作必定會發(fā)生錯誤,程序運(yùn)行結(jié)果也可能非常奇怪,所以最好是在同一個函數(shù)內(nèi)進(jìn)行跳轉(zhuǎn)gdb調(diào)試調(diào)試查看信息查看信息p 查看寄存器信息:info registers命令 (gdb) info registersp 查看單個寄存器:在print命令后加上寄存器名稱(前加“$”符號) (gdb) p $eipp 查看程序的匯編代碼:disassemble命令 (gdb) disassemble printinfo 顯示函數(shù)pri
32、ntinfo的匯編代碼4. 程序的執(zhí)行過程程序的執(zhí)行過程 Hello程序的數(shù)據(jù)流動過程程序的數(shù)據(jù)流動過程“hello”Red:shell命令行處理命令行處理Blue:可執(zhí)行文件加載:可執(zhí)行文件加載Cyan:hello程序執(zhí)行過程程序執(zhí)行過程“hello”“hello,world/n”“hello,world/n”所有過程都是在所有過程都是在CPU執(zhí)行指令所產(chǎn)生的控制信號的作用下進(jìn)行的。執(zhí)行指令所產(chǎn)生的控制信號的作用下進(jìn)行的。數(shù)據(jù)經(jīng)常在各存儲部件間傳送。故現(xiàn)代計(jì)算機(jī)大多采用數(shù)據(jù)經(jīng)常在各存儲部件間傳送。故現(xiàn)代計(jì)算機(jī)大多采用“緩存緩存”技術(shù)!技術(shù)!Unix./hellohello, worlduni
33、xEnter4.計(jì)算機(jī)計(jì)算機(jī)性能評價(jià)性能評價(jià) 計(jì)算機(jī)性能的基本評價(jià)指標(biāo)計(jì)算機(jī)性能的基本評價(jià)指標(biāo)“ 機(jī)器機(jī)器X的速度(性能)是的速度(性能)是Y的的n倍倍” 的含義:的含義:ExTime(Y) Performance(X) = = nExTime(X)Performance(Y)相對性能用執(zhí)行時(shí)相對性能用執(zhí)行時(shí)間的倒數(shù)來表示!間的倒數(shù)來表示!計(jì)算機(jī)有兩種不同的性能計(jì)算機(jī)有兩種不同的性能 Time to do the task 響應(yīng)時(shí)間(響應(yīng)時(shí)間(response time) 執(zhí)行時(shí)間(執(zhí)行時(shí)間(execution time) 等待時(shí)間或時(shí)延(等待時(shí)間或時(shí)延(latency) Tasks per
34、day, hour, sec, ns. . 吞吐率(吞吐率(throughput) 帶寬(帶寬(bandwidth) 基本的性能評價(jià)標(biāo)準(zhǔn)是:基本的性能評價(jià)標(biāo)準(zhǔn)是:CPU的執(zhí)行時(shí)間的執(zhí)行時(shí)間不同應(yīng)用場合用戶關(guān)心的性能不同:不同應(yīng)用場合用戶關(guān)心的性能不同:-要求吞吐率高的場合,例如:要求吞吐率高的場合,例如: 多媒體應(yīng)用(音多媒體應(yīng)用(音/視頻播放要流暢)視頻播放要流暢)-要求響應(yīng)時(shí)間短的場合:例如:要求響應(yīng)時(shí)間短的場合:例如: 事務(wù)處理系統(tǒng)(存事務(wù)處理系統(tǒng)(存/取款速度要快)取款速度要快)-要求吞吐率高且響應(yīng)時(shí)間短的場合:要求吞吐率高且響應(yīng)時(shí)間短的場合: ATM、文件服務(wù)器、文件服務(wù)器、Web服
35、務(wù)器等服務(wù)器等CPU執(zhí)行時(shí)間的計(jì)算執(zhí)行時(shí)間的計(jì)算CPU 執(zhí)行時(shí)間執(zhí)行時(shí)間 = CPU時(shí)鐘周期數(shù)時(shí)鐘周期數(shù) / 程序程序 X 時(shí)鐘周期時(shí)鐘周期 = CPU時(shí)鐘周期數(shù)時(shí)鐘周期數(shù) / 程序程序 時(shí)鐘頻率時(shí)鐘頻率 = 指令條數(shù)指令條數(shù) / 程序程序 X CPI X 時(shí)鐘周期時(shí)鐘周期CPU時(shí)鐘周期數(shù)時(shí)鐘周期數(shù) / 程序程序 = 指令條數(shù)指令條數(shù) / 程序程序 X CPICPI = CPU時(shí)鐘周期數(shù)時(shí)鐘周期數(shù) / 程序程序 指令條數(shù)指令條數(shù) / 程序程序 CPI 用來衡量以下各方面的綜合結(jié)果用來衡量以下各方面的綜合結(jié)果Instruction Set Architecture(ISA)Implementat
36、ion of that architecture (Organization & Technology)Program(Compiler、Algorithm) CPI:Cycles Per Instruction如何計(jì)算如何計(jì)算CPI?對于某一條特定的指令而言,對于某一條特定的指令而言,其其CPI是一個確定的值。但是,對于某一個程是一個確定的值。但是,對于某一個程序或一臺機(jī)器而言,其序或一臺機(jī)器而言,其CPI是一個平均值,表示該程序或該機(jī)器指令集中每是一個平均值,表示該程序或該機(jī)器指令集中每條指令執(zhí)行時(shí)平均需要多少時(shí)鐘周期條指令執(zhí)行時(shí)平均需要多少時(shí)鐘周期。假定假定CPIi、Fi是各指令是各指令
37、CPI和在程序中的出現(xiàn)頻率,則程序綜合和在程序中的出現(xiàn)頻率,則程序綜合CPI為為:CPI = where =xniiiFCPI1CountnInstructioCFii_=CPU時(shí)間時(shí)間= 時(shí)鐘周期時(shí)鐘周期 x假定假定CPIi 和和 Ci分別為第分別為第i類指令的類指令的CPI和指令條數(shù),則程序的總時(shí)鐘數(shù)為:和指令條數(shù),則程序的總時(shí)鐘數(shù)為:=xniiiCCPI1=xniiiCCPI1總時(shí)鐘數(shù)總時(shí)鐘數(shù) =所以,所以,CPI = (CPU 時(shí)間時(shí)間時(shí)鐘頻率時(shí)鐘頻率) / 指令條數(shù)指令條數(shù) = 總時(shí)鐘周期數(shù)總時(shí)鐘周期數(shù) / 指令條數(shù)指令條數(shù)已知已知CPU時(shí)間、時(shí)鐘頻率、總時(shí)鐘數(shù)、指令條數(shù),則程序綜合
38、時(shí)間、時(shí)鐘頻率、總時(shí)鐘數(shù)、指令條數(shù),則程序綜合CPI為為:問題:指令的問題:指令的CPI、機(jī)器的、機(jī)器的CPI、程序的、程序的CPI各能反映哪方面的性能?各能反映哪方面的性能? 單靠單靠CPI不能反映不能反映CPU性能!為什么?性能!為什么? 例如,單周期處理器例如,單周期處理器CPI=1,但性能差!,但性能差!Example1程序程序P在機(jī)器在機(jī)器A上運(yùn)行需上運(yùn)行需10 s, 機(jī)器機(jī)器A的時(shí)鐘頻率為的時(shí)鐘頻率為400MHz。 現(xiàn)在要設(shè)計(jì)一臺機(jī)器現(xiàn)在要設(shè)計(jì)一臺機(jī)器B,希望該程序在,希望該程序在B上運(yùn)行只需上運(yùn)行只需6 s. 機(jī)器機(jī)器B時(shí)鐘頻率的提高導(dǎo)致了其時(shí)鐘頻率的提高導(dǎo)致了其CPI的增加,使
39、得程序的增加,使得程序P在機(jī)器在機(jī)器B上時(shí)鐘周期數(shù)是在機(jī)器上時(shí)鐘周期數(shù)是在機(jī)器A上的上的1.2倍。機(jī)器倍。機(jī)器B的時(shí)鐘頻率達(dá)到的時(shí)鐘頻率達(dá)到A的多少倍才能使程序的多少倍才能使程序P在在B上執(zhí)行速度是上執(zhí)行速度是A上的上的10/6=1.67倍?倍?Answer: 時(shí)鐘時(shí)鐘周期數(shù)周期數(shù)A = 10 sec x 400MHz = 4000M個個 時(shí)鐘時(shí)鐘周期數(shù)周期數(shù)B = 1.2 x 4000M = 4800M 時(shí)鐘頻率時(shí)鐘頻率B = 時(shí)鐘周期數(shù)時(shí)鐘周期數(shù)B / CPU時(shí)間時(shí)間B = 4800M / 6 sec = 800 MHz機(jī)器機(jī)器B的頻率是的頻率是A的兩倍,但機(jī)器的兩倍,但機(jī)器B的速度并不是
40、的速度并不是A的兩倍!的兩倍!Marketing Metrics (產(chǎn)品宣稱指標(biāo))MIPS= Instruction Count / Time x106= Clock Rate / CPI x 106Million Instructions Per Second (定點(diǎn)指令定點(diǎn)指令執(zhí)行速度)執(zhí)行速度)因?yàn)槊織l指令執(zhí)行時(shí)間不同,因?yàn)槊織l指令執(zhí)行時(shí)間不同,所以所以MIPS總是總是一個平均值。一個平均值。 不同機(jī)器的指令集不同不同機(jī)器的指令集不同 程序由不同的指令混合而成程序由不同的指令混合而成 指令使用的頻度動態(tài)變化指令使用的頻度動態(tài)變化 Peak MIPS: (不實(shí)用)(不實(shí)用)所以所以MIPS數(shù)不能說明性能的好壞數(shù)不能說明性能的好壞(用下頁中的例子來說明)(用下頁中的例子來說明)MFLOPS = FP Operations / Time x106Million Floating-point Operations Per Second(浮點(diǎn)浮點(diǎn)操作速度)操作速度)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年甘肅省甘南自治州公開招聘警務(wù)輔助人員筆試自考題2卷含答案
- 2022年四川省雅安市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年浙江省湖州市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 晨會主持發(fā)言稿
- 廣西梧州市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版隨堂測試(下學(xué)期)試卷及答案
- 2024年姿態(tài)控制推力器、推進(jìn)劑貯箱項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 《應(yīng)收款項(xiàng)新》課件
- 《稱贊教學(xué)》課件
- 2025年毛紡織、染整加工產(chǎn)品項(xiàng)目立項(xiàng)申請報(bào)告模范
- 2025年水乳型涂料項(xiàng)目提案報(bào)告模范
- 農(nóng)村文化建設(shè)培訓(xùn)
- 教育理念和教育方法
- 九小場所安全檢查表
- 第四代住宅百科知識講座
- 2022-2023學(xué)年佛山市禪城區(qū)六年級數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)測試試題含解析
- 《廣聯(lián)達(dá)培訓(xùn)教程》課件
- 揚(yáng)州育才小學(xué)2023-2024六年級數(shù)學(xué)上冊期末復(fù)習(xí)試卷(一)及答案
- 蔚藍(lán)時(shí)代有限公司員工培訓(xùn)現(xiàn)狀分析及改進(jìn)措施研究
- 浙江省溫州市2022-2023學(xué)年五年級上學(xué)期語文期末試卷(含答案)3
- 軟件系統(tǒng)實(shí)施與質(zhì)量保障方案
- 2023-2024學(xué)年度第一學(xué)期四年級數(shù)學(xué)寒假作業(yè)
評論
0/150
提交評論