




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章計(jì)算機(jī)系統(tǒng)概述
為何要開設(shè)計(jì)算機(jī)系統(tǒng)原理課程
計(jì)算機(jī)系統(tǒng)原理課程概要
計(jì)算機(jī)系統(tǒng)概述
計(jì)算機(jī)性能評(píng)價(jià)主要內(nèi)容課程由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)用“系統(tǒng)思維”分析問題
ISOC90標(biāo)準(zhǔn)下,在32位系統(tǒng)上
以下C表達(dá)式的結(jié)果是什么?-2147483648<2147483647
false(與事實(shí)不符)!Why?ISOC99標(biāo)準(zhǔn)下為true,Why?
以下關(guān)系表達(dá)式結(jié)果呢?
inti=-2147483648;i<2147483647
true!Why?-2147483647-1<2147483647,結(jié)果怎樣?理解該問題需要知道:編譯器如何處理字面量高級(jí)語言中運(yùn)算規(guī)則高級(jí)語言與指令之間的對(duì)應(yīng)機(jī)器指令的執(zhí)行過程機(jī)器級(jí)數(shù)據(jù)的表示和運(yùn)算……用“系統(tǒng)思維”分析問題sum(inta[],unsignedlen){ int i,sum=0; for (i=0;i<=len–1;i++) sum+=a[i]; returnsum;}當(dāng)參數(shù)len為0時(shí),返回值應(yīng)該是0,但是在機(jī)器上執(zhí)行時(shí),卻發(fā)生訪存異常。但當(dāng)len為int型時(shí)則正常。Why?當(dāng)用len=0調(diào)用sum函數(shù)時(shí),其返回值應(yīng)該是多少?理解該問題需要知道:高級(jí)語言中運(yùn)算規(guī)則機(jī)器指令的含義和執(zhí)行計(jì)算機(jī)內(nèi)部的運(yùn)算電路異常的檢測(cè)和處理虛擬地址空間……若x和y為int型,當(dāng)x=65535時(shí),y=x*x;y的值為多少?y=-131071。Why?現(xiàn)實(shí)世界中,x2≥0,但在計(jì)算機(jī)世界并不一定成立。對(duì)于任何int型變量x和y,(x>y)==(-x<-y)總成立嗎?
當(dāng)x=-2147483648,y任意(除-2147483648外)時(shí)不成立Why?在現(xiàn)實(shí)世界中成立,但在計(jì)算機(jī)世界中并不一定成立。用“系統(tǒng)思維”分析問題理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示機(jī)器指令的執(zhí)行計(jì)算機(jī)內(nèi)部的運(yùn)算電路用“系統(tǒng)思維”分析問題打印結(jié)果是什么?d=0,x=1072693248Why?
doubled;
voidp1(){d=1.0;}intd=100;intx=200;intmain(){p1();printf(“d=%d,x=%d\n”,d,x);return0;}main.cp1.c理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示變量的存儲(chǔ)空間分配數(shù)據(jù)的大端/小端存儲(chǔ)方式鏈接器的符號(hào)解析規(guī)則……用“系統(tǒng)思維”分析問題/*復(fù)制數(shù)組到堆中,count為數(shù)組元素個(gè)數(shù)*/intcopy_array(int*array,intcount){ inti; /*在堆區(qū)申請(qǐng)一塊內(nèi)存*/ int*myarray=(int*)malloc(count*sizeof(int)); if(myarray==NULL) return-1; for(i=0;i<count;i++) myarray[i]=array[i]; returncount;}當(dāng)參數(shù)count很大時(shí),則count*sizeof(int)會(huì)溢出。如count=230+1時(shí),count*sizeof(int)=4。堆(heap)中大量數(shù)據(jù)被破壞!理解該問題需要知道:乘法運(yùn)算及溢出虛擬地址空間存儲(chǔ)空間映射……當(dāng)count=230+1時(shí),程序會(huì)發(fā)生什么情況?用“系統(tǒng)思維”分析問題代碼段一:inta=2147483648;intb=a/-1;printf("%d,%d\n",a,b);運(yùn)行結(jié)果為-2147483648,-2147483648代碼段二:inta=2147483648;intb=-1;intc=a/b;printf("%d,%d\n",a,c);運(yùn)行結(jié)果為“Floatingpointexception”,顯然CPU檢測(cè)到了溢出異常上述結(jié)果在Linux上獲得,為什么兩者結(jié)果不同?在Windows上運(yùn)算的結(jié)果又為何不同?理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示(如:真值和機(jī)器數(shù)的關(guān)系)機(jī)器指令的含義和執(zhí)行(如:取負(fù)指令、除法指令)計(jì)算機(jī)內(nèi)部的運(yùn)算電路(如:除法電路會(huì)判是否異常)編譯器如何優(yōu)化(如:a/-1可用取負(fù)指令實(shí)現(xiàn))操作系統(tǒng)如何處理異常(如:除法錯(cuò)異常的處理)……Warning:thisdecimalconstantisunsignedonlyinISOC90[enabledbydefault]用“系統(tǒng)思維”分析問題以下是一段C語言代碼:#include<stdio.h>main(){ doublea=10; printf("a=%d\n",a);}
在IA-32上運(yùn)行時(shí),打印結(jié)果為a=0在x86-64上運(yùn)行時(shí),打印出來的a是一個(gè)不確定值為什么?理解該問題需要知道:IEEE754的表示X87FPU的體系結(jié)構(gòu)IA-32和x86-64中過程調(diào)用的參數(shù)傳遞計(jì)算機(jī)內(nèi)部的運(yùn)算電路……用“系統(tǒng)思維”分析問題對(duì)于上述C語言函數(shù),i=0~4時(shí),fun(i)分別返回什么值?doublefun(inti){volatiledoubled[1]={3.14};volatilelonginta[2];a[i]=1073741824;/*Possiblyoutofbounds*/returnd[0];}fun(0)
3.14fun(1)
3.14fun(2)
3.1399998664856fun(3)
2.00000061035156fun(4)
3.14,然后存儲(chǔ)保護(hù)錯(cuò)理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示過程調(diào)用機(jī)制棧幀中數(shù)據(jù)的布局……Why?用“系統(tǒng)思維”分析問題
以上兩個(gè)程序功能完全一樣,算法完全一樣,因此,時(shí)間和空間復(fù)雜度完全一樣,執(zhí)行時(shí)間一樣嗎?voidcopyji(intsrc[2048][2048],intdst[2048][2048]){inti,j;
for(j=0;j<2048;j++)
for(i=0;i<2048;i++)dst[i][j]=src[i][j];}voidcopyij(intsrc[2048][2048],intdst[2048][2048]){inti,j;
for(i=0;i<2048;i++)
for(j=0;j<2048;j++)dst[i][j]=src[i][j];}21timesslower
(Pentium4)Why?理解該問題需要知道:數(shù)組的存放方式Cache機(jī)制訪問局部性……用“系統(tǒng)思維”分析問題使用老版本gcc–O2編譯時(shí),程序一輸出0,程序二輸出卻是1Why?用“系統(tǒng)思維”分析問題關(guān)鍵差別在于一條指令:fldl
和fildl
理解該問題需要知道:數(shù)據(jù)的表示編譯(程序的轉(zhuǎn)換)局部變量在棧中的位置……計(jì)算機(jī)系統(tǒng)是一個(gè)整體看了前面的舉例,你的感覺是什么呢?計(jì)算機(jī)好像不可靠程序執(zhí)行結(jié)果不僅依賴于高級(jí)語言語法和語義,還與其他好多方面有關(guān)本來以為學(xué)學(xué)編程和計(jì)算機(jī)基本原理就能當(dāng)程序員,沒想到還挺復(fù)雜的,并不是那么簡(jiǎn)單要把很多概念和知識(shí)聯(lián)系起來才能理解程序的執(zhí)行結(jié)果理解程序的執(zhí)行結(jié)果要從系統(tǒng)層面考慮!從機(jī)器角度來說,它永遠(yuǎn)對(duì)!你的感覺不可靠!學(xué)完“計(jì)算機(jī)系統(tǒng)原理”就會(huì)對(duì)計(jì)算機(jī)系統(tǒng)有清晰的認(rèn)識(shí),以后再學(xué)其他相關(guān)課程就容易多了。把許多概念和知識(shí)聯(lián)系起來就是李國杰院士所提出的“系統(tǒng)思維”。即:站在“計(jì)算機(jī)系統(tǒng)”的角度考慮問題!系統(tǒng)能力基于“系統(tǒng)思維”系統(tǒng)思維從計(jì)算機(jī)系統(tǒng)角度出發(fā)分析問題和解決問題首先取決于對(duì)計(jì)算機(jī)系統(tǒng)有多了解,“知其然并知其所以然”高級(jí)語言語句都要轉(zhuǎn)換為機(jī)器指令才能在計(jì)算機(jī)上執(zhí)行機(jī)器指令是一串0/1序列,能被機(jī)器直接理解并執(zhí)行計(jì)算機(jī)系統(tǒng)是模運(yùn)算系統(tǒng),字長(zhǎng)有限,高位被丟棄運(yùn)算器不知道參加運(yùn)算的是帶符號(hào)數(shù)還是無符號(hào)數(shù)在計(jì)算機(jī)世界,x*x可能小于0,(x+y)+z不一定等于x+(y+z)訪問內(nèi)存需幾十到幾百個(gè)時(shí)鐘,而訪問磁盤要幾百萬個(gè)時(shí)鐘進(jìn)程具有獨(dú)立的邏輯控制流和獨(dú)立的地址空間過程調(diào)用使用棧存放參數(shù)和局部變量等,遞歸過程有大量額外指令,增加時(shí)間開銷,并可能發(fā)生棧溢出…….只有先理解系統(tǒng),才能設(shè)計(jì)、改進(jìn)系統(tǒng),并應(yīng)用好系統(tǒng)!基本認(rèn)識(shí)為什么要學(xué)習(xí)計(jì)算機(jī)系統(tǒng)原理?為什么要學(xué)習(xí)計(jì)算機(jī)系統(tǒng)原理課程呢?強(qiáng)化“系統(tǒng)思維”更好地理解計(jì)算機(jī)系統(tǒng),從而編寫出更好的程序編程序時(shí)少出錯(cuò)在程序出錯(cuò)時(shí)很快找到出錯(cuò)的地方編寫出更快的程序明白程序是怎樣在計(jì)算機(jī)上執(zhí)行的為后續(xù)課程的學(xué)習(xí)打下良好基礎(chǔ)…….主要內(nèi)容課程由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)什么是計(jì)算機(jī)系統(tǒng)?程序執(zhí)行結(jié)果
不僅取決于算法、程序編寫而且取決于語言處理系統(tǒng)操作系統(tǒng)ISA微體系結(jié)構(gòu)計(jì)算機(jī)系統(tǒng)抽象層的轉(zhuǎn)換
不同計(jì)算機(jī)課程處于不同層次必須將各層次關(guān)聯(lián)起來解決問題計(jì)算機(jī)系統(tǒng)原理內(nèi)容提要計(jì)算機(jī)系統(tǒng)抽象層課程目標(biāo):清楚理解計(jì)算機(jī)是如何生成和運(yùn)行可執(zhí)行文件的!重點(diǎn)在高級(jí)語言以下各抽象層C語言程序設(shè)計(jì)層數(shù)據(jù)的機(jī)器級(jí)表示、運(yùn)算語句和過程調(diào)用的機(jī)器級(jí)表示操作系統(tǒng)、編譯和鏈接的部分內(nèi)容指令集體系結(jié)構(gòu)(ISA)和匯編層指令系統(tǒng)、機(jī)器代碼、匯編語言微體系結(jié)構(gòu)及硬件層CPU的通用結(jié)構(gòu)層次結(jié)構(gòu)存儲(chǔ)系統(tǒng)軟件硬件課程內(nèi)容概要/*---sum.c---*/intsum(inta[],unsignedlen){ int i,sum=0; for (i=0;i<=len–1;i++) sum+=a[i]; returnsum;}/*---main.c---*/intmain(){ int a[1]={100}; intsum;sum=sum(a,0);printf(“%d”,sum);}數(shù)據(jù)的表示數(shù)據(jù)的運(yùn)算各類語句的轉(zhuǎn)換與表示(指令)各類復(fù)雜數(shù)據(jù)類型的轉(zhuǎn)換表示過程(函數(shù))調(diào)用的轉(zhuǎn)換表示鏈接(linker)和加載程序執(zhí)行(存儲(chǔ)器訪問)異常和中斷處理輸入輸出(I/O)課程內(nèi)容概要三個(gè)主題:表示(Representation)不同數(shù)據(jù)類型(包括帶符號(hào)整數(shù)、無符號(hào)整數(shù)、浮點(diǎn)數(shù)、數(shù)組、結(jié)構(gòu)等)在寄存器或存儲(chǔ)器中如何表示和存儲(chǔ)?指令如何表示和編碼(譯碼)?存儲(chǔ)地址(指針)如何表示以及如何生成復(fù)雜數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)元素的地址?轉(zhuǎn)換(Translation)和鏈接(Link)高級(jí)語言程序?qū)?yīng)的機(jī)器級(jí)代碼是怎樣的?如何合并成可執(zhí)行文件?執(zhí)行控制流(Controlflow)計(jì)算機(jī)能理解的“程序”是如何組織和控制的?在磁盤中的可執(zhí)行文件如何加載到主存并執(zhí)行的?在程序執(zhí)行過程中CPU如何訪問指令和操作數(shù)?I/O操作的執(zhí)行控制流如何從用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)?課程內(nèi)容概要內(nèi)容組織:兩大部分第一部分系統(tǒng)概述和可執(zhí)行文件的生成(表示和轉(zhuǎn)換)計(jì)算機(jī)系統(tǒng)概述數(shù)據(jù)的機(jī)器級(jí)表示與處理程序的轉(zhuǎn)換及機(jī)器級(jí)表示第二部分可執(zhí)行文件的運(yùn)行(執(zhí)行控制流)程序的鏈接和加載執(zhí)行層次結(jié)構(gòu)存儲(chǔ)系統(tǒng)I/O操作的實(shí)現(xiàn)前導(dǎo)知識(shí):C語言程序設(shè)計(jì)、數(shù)字邏輯電路基礎(chǔ)參考資源MOOC網(wǎng)站計(jì)算機(jī)系統(tǒng)基礎(chǔ)(一):程序的表示、轉(zhuǎn)換與鏈接https:///course/NJU-1001625001計(jì)算機(jī)系統(tǒng)基礎(chǔ)(二):程序的執(zhí)行和存儲(chǔ)訪問https:///course/NJU-1001964032計(jì)算機(jī)系統(tǒng)基礎(chǔ)(三):異常、中斷和輸入/輸出https:///course/NJU-1002532004計(jì)算機(jī)系統(tǒng)基礎(chǔ)(四):編程與調(diào)試實(shí)踐https:///course/NJU-1449521162計(jì)算機(jī)系統(tǒng)基礎(chǔ)(五):x86模擬器編程實(shí)踐https:///course/NJU-1464941173前導(dǎo)課程C語言程序設(shè)計(jì)、(數(shù)字邏輯電路,不是必須)教材:《計(jì)算機(jī)系統(tǒng)原理》,袁春風(fēng),機(jī)械工業(yè)出版社主要參考書:《計(jì)算機(jī)系統(tǒng)基礎(chǔ)(第2版)》袁春風(fēng)等,機(jī)械工業(yè)出版社,2018《深入理解計(jì)算機(jī)系統(tǒng)》(第3版),RandalE.Bryant,davidR.O’Hallaron著,龔奕利等譯,機(jī)械工業(yè)出版社,2016主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)第一臺(tái)通用電子計(jì)算機(jī)的誕生1935-1939年,第一臺(tái)電子數(shù)字計(jì)算機(jī)樣機(jī)(ABC)研制成功1946年,第1臺(tái)實(shí)際使用的電子數(shù)字計(jì)算機(jī)ENIAC誕生由電子真空管組成美國賓夕法尼亞大學(xué)研制用于解決復(fù)雜彈道計(jì)算問題5000次加法/s平方、立方、sin、cos等用十進(jìn)制表示信息并運(yùn)算采用手動(dòng)編程,通過設(shè)置開關(guān)和插拔電纜來實(shí)現(xiàn)Electronic
Numerical
Integrator
AndComputer電子數(shù)字積分計(jì)算機(jī)“世界第一臺(tái)電子計(jì)算機(jī)”之爭(zhēng):1973年美國明尼蘇達(dá)地區(qū)法院推翻并吊銷了莫克利的專利,宣布美國艾奧瓦州立大學(xué)約翰·文森特·阿塔那索夫(JohnVincentAtanasoff)被稱為“電子計(jì)算機(jī)之父”
ElectronicNumericalIntegratorAndComputer有18000多個(gè)真空管耗電160千瓦占地面積170平方米重30噸該機(jī)正式運(yùn)行到1955年10月2日,這十年間共運(yùn)行80223個(gè)小時(shí)馮·諾依曼的故事1944年,馮·諾依曼參加原子彈的研制工作,涉及極為困難的計(jì)算。1944年夏的一天,諾依曼巧遇美國彈道實(shí)驗(yàn)室的軍方負(fù)責(zé)人戈?duì)査固?,他正參與ENIAC的研制工作。馮·諾依曼被戈?duì)査固菇榻B加入ENIAC研制組,1945年,他們?cè)诠餐懻摰幕A(chǔ)上,馮·諾依曼以“關(guān)于EDVAC的報(bào)告草案”為題,起草了長(zhǎng)達(dá)101頁的總結(jié)報(bào)告,發(fā)表了全新的“存儲(chǔ)程序通用電子計(jì)算機(jī)方案”。一向?qū)8憷碚撗芯康钠樟炙诡D高等研究院批準(zhǔn)讓馮·諾依曼建造計(jì)算機(jī),其依據(jù)就是這份報(bào)告。ElectronicDiscreteVariableAutomaticComputer現(xiàn)代計(jì)算機(jī)的原型
1946年,普林斯頓高等研究院(theInstituteforAdvanceStudyatPrinceton,IAS)開始設(shè)計(jì)“存儲(chǔ)程序”計(jì)算機(jī),被稱為IAS計(jì)算機(jī)(1951年才完成,它并不是第一臺(tái)存儲(chǔ)程序計(jì)算機(jī),1949年由英國劍橋大學(xué)完成的EDSAC是第一臺(tái))。在那個(gè)報(bào)告中提出的計(jì)算機(jī)結(jié)構(gòu)被稱為馮·諾依曼結(jié)構(gòu)。馮·諾依曼結(jié)構(gòu)最重要的思想是什么?“存儲(chǔ)程序(Stored-program)”工作方式:
任何要計(jì)算機(jī)完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動(dòng)執(zhí)行。一旦程序被啟動(dòng),計(jì)算機(jī)應(yīng)能在不需操作人員干預(yù)下,自動(dòng)完成逐條取出指令和執(zhí)行指令的任務(wù)。馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)也稱為馮·諾依曼機(jī)器(VonNeumannMachine)。幾乎現(xiàn)代所有的通用計(jì)算機(jī)大都采用馮·諾依曼結(jié)構(gòu),因此,IAS計(jì)算機(jī)是現(xiàn)代計(jì)算機(jī)的原型機(jī)。馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)采用存儲(chǔ)程序工作方式:
任何要計(jì)算機(jī)完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動(dòng)執(zhí)行。一旦程序被啟動(dòng),計(jì)算機(jī)應(yīng)能在不需操作人員干預(yù)下,自動(dòng)完成逐條取出指令和執(zhí)行指令的任務(wù)。你認(rèn)為馮·諾依曼結(jié)構(gòu)是怎樣的?應(yīng)該有個(gè)主存,用來存放程序和數(shù)據(jù)應(yīng)該有一個(gè)自動(dòng)逐條取出指令的部件還應(yīng)該有具體執(zhí)行指令(即運(yùn)算)的部件程序由指令構(gòu)成指令描述如何對(duì)數(shù)據(jù)進(jìn)行處理應(yīng)該有將程序和原始數(shù)據(jù)輸入計(jì)算機(jī)的部件應(yīng)該有將運(yùn)算結(jié)果輸出計(jì)算機(jī)的部件你還能想出更多嗎?你猜得八九不離十了
IAS計(jì)算機(jī)結(jié)構(gòu)馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)模型早期,部件之間用分散方式相連現(xiàn)在,部件之間大多用總線方式相連趨勢(shì),點(diǎn)對(duì)點(diǎn)(分散方式)高速連接馮·諾依曼結(jié)構(gòu)的主要思想計(jì)算機(jī)應(yīng)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五個(gè)基本部件組成。各基本部件的功能是:存儲(chǔ)器不僅能存放數(shù)據(jù),而且也能存放指令,形式上兩者沒有區(qū)別,但計(jì)算機(jī)應(yīng)能區(qū)分?jǐn)?shù)據(jù)還是指令;控制器應(yīng)能自動(dòng)取出指令來執(zhí)行;運(yùn)算器應(yīng)能進(jìn)行加/減/乘/除四種基本算術(shù)運(yùn)算,并且也能進(jìn)行一些邏輯運(yùn)算和附加運(yùn)算;操作人員可以通過輸入設(shè)備、輸出設(shè)備和主機(jī)進(jìn)行通信。內(nèi)部以二進(jìn)制表示指令和數(shù)據(jù)。每條指令由操作碼和地址碼兩部分組成。操作碼指出操作類型,地址碼指出操作數(shù)的地址。由一串指令組成程序。采用“存儲(chǔ)程序”工作方式。馮·諾依曼結(jié)構(gòu)的主要思想是什么呢?GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線數(shù)據(jù)傳送線中央處理器(CPU)現(xiàn)代計(jì)算機(jī)結(jié)構(gòu)模型FABALUop工廠、飯店計(jì)算機(jī)是如何工作的呢?計(jì)算機(jī)相當(dāng)于現(xiàn)實(shí)生活中的什么?認(rèn)識(shí)計(jì)算機(jī)中最基本的部件CPU:中央處理器;PC:程序計(jì)數(shù)器;MAR:存儲(chǔ)器地址寄存器ALU:算術(shù)邏輯部件;IR:指令寄存器;MDR:存儲(chǔ)器數(shù)據(jù)寄存器GPRs:通用寄存器組(由若干通用寄存器組成,早期就是累加器)GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線數(shù)據(jù)傳送線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線計(jì)算機(jī)是如何工作的?先想象一下媽媽是怎樣做一桌你喜歡(指定)的菜的?
廚房-CPU,你媽-控制器,盤-GPRs,鍋灶等-ALU,架子-存儲(chǔ)器GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線數(shù)據(jù)傳送線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線計(jì)算機(jī)是如何工作的?做菜前原材料(數(shù)據(jù))和菜譜(指令)都按序放在廚房外的架子(存儲(chǔ)器)上,每個(gè)架子有編號(hào)(存儲(chǔ)單元地址)。菜譜上信息:原料位置、做法、做好的菜放在哪里等
例如,把10、11號(hào)架上的原料一起炒,并裝入3號(hào)盤然后,我告訴媽媽從第5個(gè)架上(起始PC=5)指定菜譜開始做開始做菜第一步:從5號(hào)架上取菜譜(根據(jù)PC取指令)第二步:看菜譜(指令譯碼)第三步:從架上或盤中取原材料(取操作數(shù))第四步:洗、切、炒等具體操作(指令執(zhí)行)第五步:裝盤或直接送桌(回寫結(jié)果)第六步:算出下一菜譜所在架子號(hào)6=5+1(修改PC的值)
繼續(xù)做下一道菜(執(zhí)行下一條指令)類似“存儲(chǔ)程序”工作方式計(jì)算機(jī)是如何工作的?如果你知道你媽媽是如何做菜的,你就已經(jīng)知道計(jì)算機(jī)是如何工作的!你能告訴我計(jì)算機(jī)是如何工作的嗎?“存儲(chǔ)程序”工作方式!GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線數(shù)據(jù)傳送線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線計(jì)算機(jī)是如何工作的?程序在執(zhí)行前
數(shù)據(jù)和指令事先存放在存儲(chǔ)器中,每條指令和每個(gè)數(shù)據(jù)都有地址,指令按序存放,指令由OP、ADDR字段組成,程序起始地址置PC (原材料和菜譜都放在廚房外的架子上,每個(gè)架子有編號(hào)。媽媽從第5個(gè)架上指定菜譜開始做)開始執(zhí)行程序第一步:根據(jù)PC取指令(從5號(hào)架上取菜譜)第二步:指令譯碼(看菜譜)第三步:取操作數(shù)(從架上或盤中取原材料)第四步:指令執(zhí)行(洗、切、炒等具體操作)第五步:回寫結(jié)果(裝盤或直接送桌)第六步:修改PC的值(算出下一菜譜所在架子號(hào)6=5+1)繼續(xù)執(zhí)行下一條指令(繼續(xù)做下一道菜)程序由指令組成,若所有指令執(zhí)行完,則程序執(zhí)行結(jié)束計(jì)算機(jī)是如何工作的?程序啟動(dòng)前,指令和數(shù)據(jù)都存放在存儲(chǔ)器中,形式上沒有差別,都是0/1序列采用”存儲(chǔ)程序“工作方式:程序由指令組成,程序被啟動(dòng)后,計(jì)算機(jī)能自動(dòng)取出一條一條指令執(zhí)行,在執(zhí)行過程中無需人的干預(yù)。指令執(zhí)行過程中,指令和數(shù)據(jù)被從存儲(chǔ)器取到CPU,存放在CPU內(nèi)的寄存器中,指令在IR中,數(shù)據(jù)在GPR中。指令中需給出的信息:操作性質(zhì)(操作碼)源操作數(shù)1或/和源操作數(shù)2
(立即數(shù)、寄存器編號(hào)、存儲(chǔ)地址)目的操作數(shù)地址(寄存器編號(hào)、存儲(chǔ)地址)存儲(chǔ)地址的描述與操作數(shù)的數(shù)據(jù)結(jié)構(gòu)有關(guān)!IR?GPR?主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)用機(jī)器語言編寫程序,并記錄在紙帶或卡片上最早的程序開發(fā)過程穿孔表示0,未穿孔表示10:010101101:0010
01002:……3:……4:011001115:……6:……假設(shè):0010-jxx若在第4條指令前加入指令,則需重新計(jì)算地址碼(如jxx的目標(biāo)地址),然后重新打孔。不靈活!書寫、閱讀困難!太原始了,無法忍受,咋辦?用符號(hào)表示而不用0/1表示!輸入:按鈕、開關(guān);輸出:指示燈等所有信息都是0/1序列!轉(zhuǎn)移指令若用符號(hào)表示跳轉(zhuǎn)位置和變量位置,是否簡(jiǎn)化了問題?于是,匯編語言出現(xiàn)用助記符表示操作碼用標(biāo)號(hào)表示位置用助記符表示寄存器…..用匯編語言開發(fā)程序0:010101101:0010
01002:……3:……4:01100111
5:……6:……7:……subBjnzL0
……
……
L0:addC……B:……C:……在第4條指令前加指令時(shí)不用改變sub、jnz和add指令中的地址碼!你認(rèn)為用匯編語言編寫的優(yōu)點(diǎn)是:不會(huì)因?yàn)樵鰷p指令而需要修改其他指令不需記憶指令碼,編寫方便可讀性比機(jī)器語言強(qiáng)不過,這帶來新的問題,是什么呢?人容易了,可機(jī)器不認(rèn)識(shí)這些指令了!需將匯編語言轉(zhuǎn)換為機(jī)器語言!用匯編程序轉(zhuǎn)換匯編語言源程序由匯編指令構(gòu)成你能用一句話描述什么是匯編指令嗎?用助記符和標(biāo)號(hào)來表示的指令(與機(jī)器指令一一對(duì)應(yīng))指令又是什么呢?包含操作碼和操作數(shù)或其地址碼
(機(jī)器指令用二進(jìn)制表示,匯編指令用符號(hào)表示)可以描述:?。ɑ虼嬉粋€(gè)數(shù))兩個(gè)數(shù)加(或減、乘、除、與、或等)根據(jù)運(yùn)算結(jié)果判斷是否轉(zhuǎn)移執(zhí)行想象用匯編語言編寫復(fù)雜程序是怎樣的情形?(例如,用匯編語言實(shí)現(xiàn)排序(sort)、矩陣相乘)需要描述的細(xì)節(jié)太多了!程序會(huì)很長(zhǎng)很長(zhǎng)!而且在不同結(jié)構(gòu)的機(jī)器上就不能運(yùn)行!進(jìn)一步認(rèn)識(shí)機(jī)器級(jí)語言subBjnzL0
……
……
L0:addC……B:……C:……機(jī)器語言和匯編語言都是面向機(jī)器結(jié)構(gòu)的語言,故它們統(tǒng)稱為機(jī)器級(jí)語言結(jié)論:用匯編語言比機(jī)器語言好,但是,還是很麻煩!SKIP指令所能描述的功能對(duì)于以下結(jié)構(gòu)的機(jī)器,你能設(shè)計(jì)出幾條指令嗎?LoadM#,R#(將存儲(chǔ)單元內(nèi)容裝入寄存器)StoreR#,M#(將寄存器內(nèi)容裝入存儲(chǔ)單元)AddR#,R#(類似的還有Sub,Mul等;操作數(shù)還可“R#,M#”等)BACKGPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線用高級(jí)語言開發(fā)程序隨著技術(shù)的發(fā)展,出現(xiàn)了許多高級(jí)編程語言它們與具體機(jī)器結(jié)構(gòu)無關(guān)面向算法描述,比機(jī)器級(jí)語言描述能力強(qiáng)得多高級(jí)語言中一條語句對(duì)應(yīng)幾條、幾十條甚至幾百條指令有“面向過程”和“面向?qū)ο蟆钡恼Z言之分處理邏輯分為三種結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)有兩種轉(zhuǎn)換方式:“編譯”和“解釋”編譯程序(Complier):將高級(jí)語言源程序轉(zhuǎn)換為機(jī)器級(jí)目標(biāo)程序,執(zhí)行時(shí)只要啟動(dòng)目標(biāo)程序即可解釋程序(Interpreter):將高級(jí)語言語句逐條翻譯成機(jī)器指令并立即執(zhí)行,不生成目標(biāo)文件?,F(xiàn)在,幾乎所有程序員都用高級(jí)語言編程,但最終要將高級(jí)語言轉(zhuǎn)換為機(jī)器語言程序Software
Systemsoftware(系統(tǒng)軟件)-
簡(jiǎn)化編程過程,并使硬件資源被有效利用
操作系統(tǒng)(OperatingSystem):硬件資源管理,用戶接口語言處理系統(tǒng):翻譯程序+Linker,Debug,etc…翻譯程序(Translator)有三類:匯編程序(Assembler):匯編語言源程序→機(jī)器語言目標(biāo)程序編譯程序(Complier):高級(jí)語言源程序→機(jī)器級(jí)目標(biāo)程序解釋程序(Interpreter):將高級(jí)語言語句逐條翻譯成機(jī)器指令并立即執(zhí)行,不生成目標(biāo)文件。其他實(shí)用程序:如:磁盤碎片整理程序、備份程序等Applicationsoftware(應(yīng)用軟件)
-解決具體應(yīng)用問題/完成具體應(yīng)用任務(wù)各類媒體處理程序:Word/Image/Graphics/…管理信息系統(tǒng)(MIS)Game,…程序和指令執(zhí)行過程舉例GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線中央處理器(CPU)FABALUop8位模型機(jī)M:8位定長(zhǎng)指令字,4個(gè)GPR,16個(gè)主存單元數(shù)據(jù)傳送線程序和指令執(zhí)行過程舉例假設(shè)模型機(jī)M中8位指令,格式有兩種:R型、M型格式4位2位2位功能說明R型oprtrsR[rt]←R[rt]opR[rs]或
R[rt]←R[rs]M型opaddrR[0]←M[addr]或
M[addr]←R[0]rs和rt為通用寄存器編號(hào);addr為主存單元地址R型:op=0000,寄存器間傳送(mov);op=0001,加(add)M型:op=1110,取數(shù)(load);op=1111,存數(shù)(store)問題:指令11100111的功能是什么?答:因?yàn)閛p=1110,故是M型load指令,功能為:R[0]←M[0111],即:將主存地址0111(7號(hào)單元)中的8位數(shù)據(jù)裝入到0號(hào)寄存器中。程序和指令執(zhí)行過程舉例若在M上實(shí)現(xiàn)“z=x+y”,x和y分別存放在主存5和6號(hào)單元中,結(jié)果z存放在7號(hào)單元中,則程序在主存單元中的初始內(nèi)容為:主存地址主存單元內(nèi)容內(nèi)容說明(Ii表示第i條指令)指令的符號(hào)表示011100110I1:
R[0]←M[6];op=1110:取數(shù)操作loadr0,6#100000100I2:
R[1]←R[0];op=0000:傳送操作movr1,r0211100101I3:
R[0]←M[5];op=1110:取數(shù)操作loadr0,5#300010001I4:
R[0]←R[0]+R[1];op=0001:加操作addr0,r1411110111I5:
M[7]←R[0];op=1111:存數(shù)操作store7#,r0500010000操作數(shù)x,值為16
600100001操作數(shù)y,值為33
700000000結(jié)果z,初始值為0
程序執(zhí)行過程及其結(jié)果是什么?程序和指令執(zhí)行過程舉例程序執(zhí)行過程I1:11100110IR←M[0000]op=1110,取數(shù)PC←0000+1MDR←M[0110]R[0]←MDRR[0]=33取指令指令譯碼PC增量取數(shù)并執(zhí)行送結(jié)果執(zhí)行結(jié)果指令I(lǐng)1(PC=0)的執(zhí)行過程隨后執(zhí)行PC=1中的指令I(lǐng)2GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線中央處理器(CPU)程序和指令執(zhí)行過程舉例FABALUop指令11100110功能為R[0]←M[0110],指令執(zhí)行過程如下:1110
0110取指IR←M[PC]:MAR←PC;控制線←Read;IR←MDR取數(shù)R[0]←M[addr]:MAR←addr;控制線←Read;R[0]←MDR數(shù)據(jù)傳送線程序和指令執(zhí)行過程舉例I2:00000100I3:11100101IR←M[0001]IR←M[0010]op=0000,傳送op=1110,取數(shù)PC←0001+1PC←0010+1A←R[0]、movMDR←M[0101]R[1]←FR[0]←MDRR[1]=33R[0]=16取指令指令譯碼PC增量取數(shù)并執(zhí)行送結(jié)果執(zhí)行結(jié)果程序和指令執(zhí)行過程舉例取指令指令譯碼PC增量取數(shù)并執(zhí)行送結(jié)果執(zhí)行結(jié)果I4:00010001I5:11110111IR←M[0011]IR←M[0100]op=0001,加op=1111,存數(shù)PC←0011+1PC←0100+1A←R[0]、B←R[1]、addMDR←R[0]R[0]←FM[0111]←MDRR[0]=16+33=49M[7]=49GPRs0123ALUPCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址
IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線中央處理器(CPU)程序和指令執(zhí)行過程舉例FABALUop指令00010001功能為R[0]←R[0]+R[1],指令執(zhí)行過程如下:11100110ALU運(yùn)算R[0]←R[0]+R[1]的微操作(在控制信號(hào)的控制下完成):
A←R[0];B←R[1];ALUop←add;R[0]←F0001
0001數(shù)據(jù)傳送線CPU中所有微操作都由時(shí)鐘信號(hào)進(jìn)行定時(shí),時(shí)鐘信號(hào)(clocksignal)的寬度為一個(gè)時(shí)鐘周期(clockcycle)。一條指令的執(zhí)行時(shí)間包含一個(gè)或多個(gè)時(shí)鐘周期一個(gè)典型程序的轉(zhuǎn)換處理過程#include<stdio.h>intmain(){printf("hello,world\n");}經(jīng)典的“hello.c”C-源程序hello.c的ASCII文本表示功能:輸出“hello,world”預(yù)處理(cpp)編譯(cc1)匯編(as)鏈接(ld)printf.o計(jì)算機(jī)不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s匯編語言程序(文本)hello.o可重定位目標(biāo)程序(二進(jìn)制)hello可執(zhí)行目標(biāo)程序(二進(jìn)制)以下是GCC+Linux平臺(tái)中的處理過程Hello程序的數(shù)據(jù)流動(dòng)過程./hellohello可執(zhí)行文件Red:shell命令行處理Blue:可執(zhí)行文件加載Cyan:hello程序執(zhí)行過程“./hello”“hello,world\n”hello,world所有過程都是在CPU執(zhí)行指令所產(chǎn)生的控制信號(hào)的作用下進(jìn)行的。數(shù)據(jù)經(jīng)常在各存儲(chǔ)部件間傳送。故現(xiàn)代計(jì)算機(jī)大多采用“緩存”技術(shù)!$./hellohello,world$主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)不同層次語言之間的等價(jià)轉(zhuǎn)換每條指令由操作碼和若干地址碼組成任何高級(jí)語言程序最終通過執(zhí)行若干條指令來完成!開發(fā)和運(yùn)行程序需什么支撐?最早的程序開發(fā)很簡(jiǎn)單(怎樣簡(jiǎn)單?)直接輸入指令和數(shù)據(jù),啟動(dòng)后把第一條指令地址送PC開始執(zhí)行用高級(jí)語言開發(fā)程序需要復(fù)雜的支撐環(huán)境(怎樣的環(huán)境?)需要編輯器編寫源程序需要一套翻譯轉(zhuǎn)換軟件處理各類源程序編譯方式:預(yù)處理程序、編譯器、匯編器、鏈接器解釋方式:解釋程序需要一個(gè)可以執(zhí)行程序的界面(環(huán)境)GUI方式:圖形用戶界面CUI方式:命令行用戶界面支撐程序開發(fā)和運(yùn)行的環(huán)境由系統(tǒng)軟件提供最重要的系統(tǒng)軟件是操作系統(tǒng)和語言處理系統(tǒng)語言處理系統(tǒng)運(yùn)行在操作系統(tǒng)之上,操作系統(tǒng)利用指令管理硬件語言處理程序人機(jī)接口語言的運(yùn)行時(shí)系統(tǒng)操作系統(tǒng)內(nèi)核指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件操作系統(tǒng)語言處理系統(tǒng)早期計(jì)算機(jī)系統(tǒng)的層次最早的計(jì)算機(jī)用機(jī)器語言編程
機(jī)器語言稱為第一代程序設(shè)計(jì)語言(Firstgenerationprogramminglanguage,1GL)后來用匯編語言編程
匯編語言稱為第二代程序設(shè)計(jì)語言(Secondgenerationprogramminglanguage,2GL)應(yīng)用程序指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件匯編程序操作系統(tǒng)指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件應(yīng)用程序現(xiàn)代(傳統(tǒng))計(jì)算機(jī)系統(tǒng)的層次現(xiàn)代計(jì)算機(jī)用高級(jí)語言編程
第三代程序設(shè)計(jì)語言(3GL)為過程式語言,編碼時(shí)需要描述實(shí)現(xiàn)過程,即“如何做”。第四代程序設(shè)計(jì)語言(4GL)
為非過程化語言,編碼時(shí)只需說明“做什么”,不需要描述具體的算法實(shí)現(xiàn)細(xì)節(jié)。語言處理系統(tǒng)操作系統(tǒng)指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件應(yīng)用程序可以看出:語言的發(fā)展是一個(gè)不斷“抽象”的過程,因而,相應(yīng)的計(jì)算機(jī)系統(tǒng)也不斷有新的層次出現(xiàn)語言處理系統(tǒng)包括:各種語言處理程序(如編譯、匯編、鏈接)、運(yùn)行時(shí)系統(tǒng)(如庫函數(shù),調(diào)試、優(yōu)化等功能)操作系統(tǒng)包括人機(jī)交互界面、提供服務(wù)功能的內(nèi)核例程計(jì)算機(jī)系統(tǒng)抽象層的轉(zhuǎn)換程序執(zhí)行結(jié)果
不僅取決于算法、程序編寫而且取決于語言處理系統(tǒng)操作系統(tǒng)ISA微體系結(jié)構(gòu)不同計(jì)算機(jī)課程處于不同層次必須將各層次關(guān)聯(lián)起來解決問題功能轉(zhuǎn)換:上層是下層的抽象,下層是上層的實(shí)現(xiàn)底層為上層提供支撐環(huán)境!最高層抽象就是點(diǎn)點(diǎn)鼠標(biāo)、拖拖圖標(biāo)、敲敲鍵盤,但這背后有多少層轉(zhuǎn)化??!計(jì)算機(jī)系統(tǒng)的不同用戶最終用戶工作在由應(yīng)用程序提供的最上面的抽象層系統(tǒng)管理員工作在由操作系統(tǒng)提供的抽象層應(yīng)用程序員工作在由語言處理系統(tǒng)(主要有編譯器和匯編器)的抽象層語言處理系統(tǒng)建立在操作系統(tǒng)之上系統(tǒng)程序員(實(shí)現(xiàn)系統(tǒng)軟件)工作在ISA層次,必須對(duì)ISA非常了解編譯器和匯編器的目標(biāo)程序由機(jī)器級(jí)代碼組成操作系統(tǒng)通過指令直接對(duì)硬件進(jìn)行編程控制ISA處于軟件和硬件的交界面(接口)ISA是對(duì)硬件的抽象所有軟件功能都建立在ISA之上ISA是最重要的層次!那么,什么是ISA呢?Hardware/SoftwareInterface(界面)機(jī)器語言由指令代碼構(gòu)成,能被硬件直接執(zhí)行。
軟件和硬件的界面:ISA(InstructionSetArchitecture)指令集體系結(jié)構(gòu)軟件硬件指令集體系結(jié)構(gòu)(ISA)ISA指InstructionSetArchitecture,即指令集體系結(jié)構(gòu)ISA是一種規(guī)約(Specification),它規(guī)定了如何使用硬件可執(zhí)行的指令的集合,包括指令格式、操作種類以及每種操作對(duì)應(yīng)的操作數(shù)的相應(yīng)規(guī)定;指令可以接受的操作數(shù)的類型;操作數(shù)所能存放的寄存器組的結(jié)構(gòu),包括每個(gè)寄存器的名稱、編號(hào)、長(zhǎng)度和用途;操作數(shù)所能存放的存儲(chǔ)空間的大小和編址方式;操作數(shù)在存儲(chǔ)空間存放時(shí)按照大端還是小端方式存放;指令獲取操作數(shù)的方式,即尋址方式;指令執(zhí)行過程的控制方式,包括程序計(jì)數(shù)器、條件碼定義等。ISA在計(jì)算機(jī)系統(tǒng)中是必不可少的一個(gè)抽象層,Why?沒有它,軟件無法使用計(jì)算機(jī)硬件!沒有它,一臺(tái)計(jì)算機(jī)不能稱為“通用計(jì)算機(jī)”ISA和計(jì)算機(jī)組成(Organization,即MicroArchitecture)是何關(guān)系?微體系結(jié)構(gòu)ISA和計(jì)算機(jī)組成(微結(jié)構(gòu))之間的關(guān)系
不同ISA規(guī)定的指令集不同,如,IA-32、MIPS、ARM等計(jì)算機(jī)組成必須能夠?qū)崿F(xiàn)ISA規(guī)定的功能,如提供GPR、標(biāo)志、運(yùn)算電路等同一種ISA可以有不同的計(jì)算機(jī)組成,如乘法指令可用ALU或乘法器實(shí)現(xiàn)控制器CPUPC輸入設(shè)備輸出設(shè)備MARMDRALU標(biāo)志寄存器
IR地址數(shù)據(jù)控制GPRs0123存儲(chǔ)器01234567ISA是計(jì)算機(jī)組成的抽象計(jì)算機(jī)系統(tǒng)核心層之間的關(guān)聯(lián)前端遵循語言規(guī)范高級(jí)語言程序詞法、語法及語義分析中間代碼生成中間代碼目標(biāo)代碼生成及優(yōu)化目標(biāo)代碼后端遵循ISA規(guī)范和ABI規(guī)范執(zhí)行結(jié)果不符合程序開發(fā)者預(yù)期舉例:C90中,-2147483648<2147483647
結(jié)果為flaseintx=1234;printf(“%lf”,x);不同平臺(tái)結(jié)果不同,相同平臺(tái)每次結(jié)果不同
結(jié)果不符合預(yù)期的原因通常有兩種:(1)程序員不了解語言規(guī)范;(2)程序含有未定義行為(undefinedbehavior)或未確定行為(unspecifiedbehavior)的語句未定義行為后端根據(jù)ISA規(guī)范和應(yīng)用程序二進(jìn)制接口(ApplicationBinaryInterface,ABI)規(guī)范進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。ABI是為運(yùn)行在特定ISA及特定操作系統(tǒng)之上的應(yīng)用程序中所遵循的一種機(jī)器級(jí)目標(biāo)代碼層接口描述了應(yīng)用程序和操作系統(tǒng)之間、應(yīng)用程序和所調(diào)用的庫之間、不同組成部分(如過程或函數(shù))之間在較低層次上的機(jī)器級(jí)代碼接口。運(yùn)行平臺(tái):操作系統(tǒng)+ISA架構(gòu)計(jì)算機(jī)系統(tǒng)核心層之間的關(guān)聯(lián)前端高級(jí)語言程序詞法、語法及語義分析中間代碼生成中間代碼目標(biāo)代碼生成及優(yōu)化目標(biāo)代碼后端后端根據(jù)ISA規(guī)范和應(yīng)用程序二進(jìn)制接口(ApplicationBinaryInterface,ABI)規(guī)范進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。ABI是為運(yùn)行在特定ISA及特定操作系統(tǒng)之上的應(yīng)用程序所遵循的一種機(jī)器級(jí)目標(biāo)代碼層接口規(guī)約。例如:過程間調(diào)用約定(參數(shù)和返回值傳遞等)系統(tǒng)調(diào)用約定(系統(tǒng)調(diào)用的參數(shù)和調(diào)用號(hào)如何傳遞以及如何從用戶態(tài)陷入操作系統(tǒng)內(nèi)核等)目標(biāo)文件的二進(jìn)制格式函數(shù)庫使用約定寄存器使用規(guī)定程序的虛擬地址空間劃分等運(yùn)行平臺(tái):操作系統(tǒng)+ISA架構(gòu)本課程所用平臺(tái)為IA-32/x86-64+Linux+GCC+C語言,Linux操作系統(tǒng)下一般使用systemVABI本課程大多在講解ABI和ISA規(guī)范!要了解程序的確切行為,最好的方法就是查手冊(cè)(用于給出規(guī)范)!主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)計(jì)算機(jī)性能的基本評(píng)價(jià)指標(biāo)“機(jī)器X的速度(性能)是Y的n倍”的含義:
ExTime(Y) Performance(X) ==n ExTime(X) Performance(Y)相對(duì)性能用執(zhí)行時(shí)間的倒數(shù)來表示!°計(jì)算機(jī)有兩種不同的性能°Timetodothetask響應(yīng)時(shí)間(responsetime)執(zhí)行時(shí)間(executiontime)等待時(shí)間或時(shí)延(latency)°Tasksperday,hour,sec,ns...吞吐率(throughput)帶寬(bandwidth)°基本的性能評(píng)價(jià)標(biāo)準(zhǔn)是:CPU的執(zhí)行時(shí)間不同應(yīng)用場(chǎng)合用戶關(guān)心的性能不同:-要求吞吐率高的場(chǎng)合,例如:
多媒體應(yīng)用(音/視頻播放要流暢)-要求響應(yīng)時(shí)間短的場(chǎng)合:例如:
事務(wù)處理系統(tǒng)(存/取款速度要快)-要求吞吐率高且響應(yīng)時(shí)間短的場(chǎng)合:
ATM、文件服務(wù)器、Web服務(wù)器等CPU執(zhí)行時(shí)間的計(jì)算CPU執(zhí)行時(shí)間
=CPU時(shí)鐘周期數(shù)/程序X
時(shí)鐘周期=CPU時(shí)鐘周期數(shù)/程序÷
時(shí)鐘頻率=
指令條數(shù)/程序XCPIX時(shí)鐘周期CPU時(shí)鐘周期數(shù)/程序=
指令條數(shù)/程序XCPICPI=CPU時(shí)鐘周期數(shù)/程序÷指令條數(shù)/程序CPI用來衡量以下各方面的綜合結(jié)果InstructionSetArchitecture(ISA)Implementationofthatarchitecture組成(Organization)&實(shí)現(xiàn)技術(shù)(Technology)Program:編譯(Compiler)、算法(Algorithm)
CPI:CyclesPerInstructionAspectsofCPUPerformanceCPUtime=Seconds=InstructionsxCyclesxSeconds Program ProgramInstructionCycle
instr.CountCPIclockrateProgrammingCompilerInstr.SetArch.OrganizationTechnology思考:三個(gè)因素與哪些方面有關(guān)?例如,{…..
y=4*x;}AspectsofCPUPerformanceCPUtime=Seconds=InstructionsxCyclesxSeconds Program ProgramInstructionCycle
instr.CountCPIclockrateProgramming
?
?Compiler?(?)Instr.SetArch.?
?Organization?
?Technology
?用加法指令、乘法指令或左移指令都可實(shí)現(xiàn)“y=4*x;”顯然得到的指令條數(shù)不同,CPI也不同如何計(jì)算CPI?對(duì)于某一條特定的指令而言,其CPI是一個(gè)確定的值。但是,對(duì)于某一個(gè)程序或一臺(tái)機(jī)器而言,其CPI是一個(gè)平均值,表示該程序或該機(jī)器指令集中每條指令執(zhí)行時(shí)平均需要多少時(shí)鐘周期。假定CPIi、Fi是各指令CPI和在程序中的出現(xiàn)頻率,則程序綜合CPI為:CPI=
where
=x∑niiiFCPI1CountnInstructioCFii_=CPU時(shí)間=
時(shí)鐘周期x假定CPIi
和Ci分別為第i類指令的CPI和指令條數(shù),則程序的總時(shí)鐘數(shù)為:=x∑niiiCCPI1=x∑niiiCCPI1總時(shí)鐘數(shù)=所以,CPI=(CPU時(shí)間×?xí)r鐘頻率)/指令條數(shù)=總時(shí)鐘周期數(shù)/指令條數(shù)已知CPU時(shí)間、時(shí)鐘頻率、總時(shí)鐘數(shù)、指令條數(shù),則程序綜合CPI為:問題:指令的CPI、機(jī)器的CPI、程序的CPI各能反映哪方面的性能?
單靠CPI不能反映CPU性能!為什么?例如,單周期處理器CPI=1,但周期長(zhǎng),故性能差!Example1程序P在機(jī)器A上運(yùn)行需10s,機(jī)器A的時(shí)鐘頻率為400MHz?,F(xiàn)在要設(shè)計(jì)一臺(tái)機(jī)器B,希望該程序在B上運(yùn)行只需6s.機(jī)器B時(shí)鐘頻率的提高導(dǎo)致了其CPI的增加,使得程序P在機(jī)器B上時(shí)鐘周期數(shù)是在機(jī)器A上的1.2倍。機(jī)器B的時(shí)鐘頻率達(dá)到A的多少倍才能使程序P在B上執(zhí)行速度是A上的10/6=1.67倍?Answer:CPU時(shí)間A=時(shí)鐘周期數(shù)A/時(shí)鐘頻率A
時(shí)鐘周期數(shù)A=10secx400MHz=4000M個(gè)
時(shí)鐘頻率B=時(shí)鐘周期數(shù)B/CPU時(shí)間B=1.2x
4000M/6sec=800MHz機(jī)器B的頻率是A的兩倍,但機(jī)器B的速度并不是A的兩倍
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考美術(shù)課題研究申報(bào)書
- 動(dòng)畫項(xiàng)目合同范例
- 臺(tái)灣房屋抵押合同范本
- led器材租賃合同范本
- 食品化學(xué)試題庫(含答案)
- 原木訂制采購合同范本
- 業(yè)務(wù)經(jīng)理工作計(jì)劃
- 上半年公司領(lǐng)導(dǎo)總結(jié)
- 單位外包電梯合同范本
- 四級(jí)(中級(jí))眼鏡驗(yàn)光員考試
- DZ∕T 0148-2014 水文水井地質(zhì)鉆探規(guī)程(正式版)
- 2024年黑龍江職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案解析
- 大班-數(shù)學(xué)-分禮物-課件(互動(dòng)版)
- 2024年山東力明科技職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 2023年新改版教科版四年級(jí)下冊(cè)科學(xué)練習(xí)題(一課一練+單元+期中+期末)
- 中國著名的塔課件
- 邢臺(tái)市區(qū)土地級(jí)別及基準(zhǔn)地價(jià)表
- 李小建《經(jīng)濟(jì)地理學(xué)》(電子版)
- 中央空調(diào)安裝施工組織設(shè)計(jì)方案(水、多聯(lián)機(jī))
- 2022年最新蘇教版五年級(jí)下冊(cè)科學(xué)全冊(cè)教案
- 咖啡樹的修剪方法和技術(shù)_種植技巧
評(píng)論
0/150
提交評(píng)論