




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章計算機系統(tǒng)概論
“計算機系統(tǒng)導論”課程的由來
“計算機系統(tǒng)導論”課程內(nèi)容概要
計算機系統(tǒng)概述主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)用“系統(tǒng)思維”分析問題代碼段一:inta=2147483648;intb=a/-1;printf("%d,%d\n",a,b);運行結(jié)果為-2147483648,-2147483648代碼段二:inta=2147483648;intb=-1;intc=a/b;printf("%d,%d\n",a,c);運行結(jié)果為“Floatingpointexception”,顯然CPU檢測到了溢出異常上述結(jié)果在Linux上獲得,為什么兩者結(jié)果不同?在Windows上運算的結(jié)果又為何不同?理解該問題需要知道:機器級數(shù)據(jù)的表示(如:真值和機器數(shù)的關(guān)系)機器指令的含義和執(zhí)行(如:取負指令、除法指令)計算機內(nèi)部的運算電路(如:除法電路會判是否異常)編譯器如何優(yōu)化(如:a/-1可用取負指令實現(xiàn))操作系統(tǒng)如何處理異常(如:除法錯異常的處理)……Warning:thisdecimalconstantisunsignedonlyinISOC90[enabledbydefault]你在想什么?看了前面的舉例,你的感覺是什么呢?計算機好像不可靠程序執(zhí)行結(jié)果不僅依賴于高級語言語法和語義,還與其他好多方面有關(guān)本來以為學學編程和計算機基本原理就能當程序員,沒想到還挺復雜的,并不是那么簡單要把很多概念和知識聯(lián)系起來才能理解程序的執(zhí)行結(jié)果理解程序的執(zhí)行結(jié)果要從系統(tǒng)層面考慮!從機器角度來說,它永遠對!你的感覺不可靠!學完“計算機系統(tǒng)基礎”就會對計算機系統(tǒng)有清晰的認識,以后再學其他相關(guān)課程就容易多了。把許多概念和知識聯(lián)系起來就是李國杰院士所提出的“系統(tǒng)思維”。即:站在“計算機系統(tǒng)”的角度考慮問題!系統(tǒng)能力基于“系統(tǒng)思維”系統(tǒng)思維從計算機系統(tǒng)角度出發(fā)分析問題和解決問題首先取決于對計算機系統(tǒng)有多了解,“知其然并知其所以然”高級語言語句都要轉(zhuǎn)換為機器指令才能在計算機上執(zhí)行機器指令是一串0/1序列,能被機器直接理解并執(zhí)行計算機系統(tǒng)是模運算系統(tǒng),字長有限,高位被丟棄運算器不知道參加運算的是帶符號數(shù)還是無符號數(shù)在計算機世界,x*x可能小于0,(x+y)+z不一定等于x+(y+z)訪問內(nèi)存需幾十到幾百個時鐘,而訪問磁盤要幾百萬個時鐘進程具有獨立的邏輯控制流和獨立的地址空間過程調(diào)用使用棧存放參數(shù)和局部變量等,遞歸過程有大量額外指令,增加時間開銷,并可能發(fā)生棧溢出…….只有先理解系統(tǒng),才能改革系統(tǒng),并應用好系統(tǒng)!基本認識為什么要學習“計算機系統(tǒng)導論”?為什么要學習“計算機系統(tǒng)導論”呢?強化“系統(tǒng)思維”更好地理解計算機系統(tǒng),從而編寫出更好的程序編程序時少出錯在程序出錯時很快找到出錯的地方編寫出更快的程序明白程序是怎樣在計算機上執(zhí)行的為后續(xù)課程的學習打下良好基礎…….主要內(nèi)容課程的由來課程內(nèi)容概要課程教學安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價什么是計算機系統(tǒng)?程序執(zhí)行結(jié)果
不僅取決于算法、程序編寫而且取決于語言處理系統(tǒng)操作系統(tǒng)ISA微體系結(jié)構(gòu)計算機系統(tǒng)抽象層的轉(zhuǎn)換
不同計算機課程處于不同層次必須將各層次關(guān)聯(lián)起來解決問題“計算機系統(tǒng)基礎”內(nèi)容提要計算機系統(tǒng)抽象層課程目標:清楚理解計算機是如何生成和運行可執(zhí)行文件的!重點在高級語言以下各抽象層C語言程序設計層數(shù)據(jù)的機器級表示、運算語句和過程調(diào)用的機器級表示操作系統(tǒng)、編譯和鏈接的基礎內(nèi)容指令集體系結(jié)構(gòu)(ISA)和匯編層指令系統(tǒng)、機器代碼、匯編語言微體系結(jié)構(gòu)及硬件層CPU的通用結(jié)構(gòu)層次結(jié)構(gòu)存儲系統(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ù)的運算各類語句轉(zhuǎn)換與表示(指令)各類復雜數(shù)據(jù)類型轉(zhuǎn)換表示過程(函數(shù))調(diào)用轉(zhuǎn)換表示鏈接、加載和執(zhí)行中央處理器存儲器層次結(jié)構(gòu)虛擬存儲器異常和中斷處理輸入輸出(I/O)本課程數(shù)字邏輯與計算機組成操作系統(tǒng)原理課程內(nèi)容概要三個主題:數(shù)據(jù)的表示和處理不同數(shù)據(jù)類型(包括帶符號整數(shù)、無符號整數(shù)、浮點數(shù)、數(shù)組、結(jié)構(gòu)等)在寄存器或存儲器中如何表示和存儲?數(shù)據(jù)的各種運算及其基本運算電路的結(jié)構(gòu)和原理是什么?程序的機器級表示機器級代碼(機器指令和匯編指令)如何表示?高級語言程序?qū)臋C器級代碼如何表示?鏈接、加載和執(zhí)行如何將各個模塊合并成可執(zhí)行文件?計算機能理解的“程序”是如何組織和控制的?操作系統(tǒng)如何通過“進程”機制支持程序的執(zhí)行?計算機系統(tǒng)導論—從程序員角度認識系統(tǒng)培養(yǎng)目標:培養(yǎng)學生的系統(tǒng)能力,使其成為一個“高效”程序員,在程序調(diào)試、性能提升、程序移植和健壯性等方面成為高手;建立扎實的計算機系統(tǒng)概念,為后續(xù)的OS、編譯、體系結(jié)構(gòu)等課程打下堅實基礎以IA-32+Linux+C+gcc
為平臺(開源項目平臺)與以下MOOC課程的想法類似/course/hwswinterface思路:
在程序與執(zhí)行機制之間建立關(guān)聯(lián),強化理解而不是記憶
課程內(nèi)容概要內(nèi)容組織:分8章計算機系統(tǒng)概述:用簡單的模型機介紹程序的執(zhí)行高級語言程序:后續(xù)章節(jié)內(nèi)容的導引(承前啟后)數(shù)據(jù)的機器級表示:程序中變量和常量的二進制表示數(shù)據(jù)的基本運算:程序中各種運算的基本實現(xiàn)原理指令集體系結(jié)構(gòu):機器指令和匯編指令的表示程序的機器級表示:各語句和函數(shù)調(diào)用對應的指令序列程序的鏈接:程序模塊合并時的符號解釋和重定位程序的加載和執(zhí)行:可執(zhí)行文件加載執(zhí)行(引出后續(xù)課程)前導知識:C語言程序設計主要內(nèi)容課程的由來課程內(nèi)容概要課程教學安排及考試安排馮.諾依曼結(jié)構(gòu)計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價第一臺通用電子計算機的誕生1935-1939年,第一臺電子數(shù)字計算機樣機(ABC)研制成功1946年,第1臺實際使用的電子數(shù)字計算機ENIAC誕生由電子真空管組成美國賓夕法尼亞大學研制用于解決復雜彈道計算問題5000次加法/s平方、立方、sin、cos等用十進制表示信息并運算采用手動編程,通過設置開關(guān)和插拔電纜來實現(xiàn)Electronic
Numerical
Integrator
AndComputer電子數(shù)字積分計算機“世界第一臺電子計算機”之爭:1973年美國明尼蘇達地區(qū)法院推翻并吊銷了莫克利的專利,宣布美國艾奧瓦州立大學約翰·文森特·阿塔那索夫(JohnVincentAtanasoff)被稱為“電子計算機之父”
ElectronicNumericalIntegratorAndComputer有18000多個真空管耗電160千瓦占地面積170平方米重30噸該機正式運行到1955年10月2日,這十年間共運行80223個小時馮·諾依曼的故事1944年,馮·諾依曼參加原子彈的研制工作,涉及極為困難的計算。1944年夏的一天,諾依曼巧遇美國彈道實驗室的軍方負責人戈爾斯坦,他正參與ENIAC的研制工作。馮·諾依曼被戈爾斯坦介紹加入ENIAC研制組,1945年,他們在共同討論的基礎上,馮·諾依曼以“關(guān)于EDVAC的報告草案”為題,起草了長達101頁的總結(jié)報告,發(fā)表了全新的“存儲程序通用電子計算機方案”。一向?qū)8憷碚撗芯康钠樟炙诡D高等研究院批準讓馮·諾依曼建造計算機,其依據(jù)就是這份報告。ElectronicDiscreteVariableAutomaticComputer現(xiàn)代計算機的原型
1946年,普林斯頓高等研究院(theInstituteforAdvanceStudyatPrinceton,IAS)開始設計“存儲程序”計算機,被稱為IAS計算機(1951年才完成,它并不是第一臺存儲程序計算機,1949年由英國劍橋大學完成的EDSAC是第一臺)。在那個報告中提出的計算機結(jié)構(gòu)被稱為馮·諾依曼結(jié)構(gòu)。馮·諾依曼結(jié)構(gòu)最重要的思想是什么?“存儲程序(Stored-program)”工作方式:
任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動執(zhí)行。一旦程序被啟動,計算機應能在不需操作人員干預下,自動完成逐條取出指令和執(zhí)行指令的任務。馮·諾依曼結(jié)構(gòu)計算機也稱為馮·諾依曼機器(VonNeumannMachine)。幾乎現(xiàn)代所有的通用計算機大都采用馮·諾依曼結(jié)構(gòu),因此,IAS計算機是現(xiàn)代計算機的原型機。馮·諾依曼結(jié)構(gòu)計算機采用存儲程序工作方式:
任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動執(zhí)行。一旦程序被啟動,計算機應能在不需操作人員干預下,自動完成逐條取出指令和執(zhí)行指令的任務。你認為馮·諾依曼結(jié)構(gòu)是怎樣的?應該有個主存,用來存放程序和數(shù)據(jù)應該有一個自動逐條取出指令的部件還應該有具體執(zhí)行指令(即運算)的部件程序由指令構(gòu)成指令描述如何對數(shù)據(jù)進行處理應該有將程序和原始數(shù)據(jù)輸入計算機的部件應該有將運算結(jié)果輸出計算機的部件你還能想出更多嗎?你猜得八九不離十了
IAS計算機結(jié)構(gòu)馮.諾依曼結(jié)構(gòu)計算機模型早期,部件之間用分散方式相連現(xiàn)在,部件之間大多用總線方式相連趨勢,點對點(分散方式)高速連接馮·諾依曼結(jié)構(gòu)的主要思想計算機應由運算器、控制器、存儲器、輸入設備和輸出設備五個基本部件組成。各基本部件的功能是:存儲器不僅能存放數(shù)據(jù),而且也能存放指令,形式上兩者沒有區(qū)別,但計算機應能區(qū)分數(shù)據(jù)還是指令;控制器應能自動取出指令來執(zhí)行;運算器應能進行加/減/乘/除四種基本算術(shù)運算,并且也能進行一些邏輯運算和附加運算;操作人員可以通過輸入設備、輸出設備和主機進行通信。內(nèi)部以二進制表示指令和數(shù)據(jù)。每條指令由操作碼和地址碼兩部分組成。操作碼指出操作類型,地址碼指出操作數(shù)的地址。由一串指令組成程序。采用“存儲程序”工作方式。馮·諾依曼結(jié)構(gòu)的主要思想是什么呢?GPRs0123ALUPCMARMDR標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線數(shù)據(jù)傳送線中央處理器(CPU)現(xiàn)代計算機結(jié)構(gòu)模型FABALUop工廠、飯店計算機是如何工作的呢?計算機相當于現(xiàn)實生活中的什么?認識計算機中最基本的部件CPU:中央處理器;PC:程序計數(shù)器;MAR:存儲器地址寄存器ALU:算術(shù)邏輯部件;IR:指令寄存器;MDR:存儲器數(shù)據(jù)寄存器GPRs:通用寄存器組(由若干通用寄存器組成,早期就是累加器)GPRs0123ALUPCMARMDR標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線數(shù)據(jù)傳送線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線計算機是如何工作的?先想象一下媽媽是怎樣做一桌你喜歡(指定)的菜的?
廚房-CPU,你媽-控制器,盤-GPRs,鍋灶等-ALU,架子-存儲器GPRs0123ALUPCMARMDR標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線數(shù)據(jù)傳送線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線計算機是如何工作的?做菜前原材料(數(shù)據(jù))和菜譜(指令)都按序放在廚房外的架子(存儲器)上,每個架子有編號(存儲單元地址)。菜譜上信息:原料位置、做法、做好的菜放在哪里等
例如,把10、11號架上的原料一起炒,并裝入3號盤然后,我告訴媽媽從第5個架上(起始PC=5)指定菜譜開始做開始做菜第一步:從5號架上取菜譜(根據(jù)PC取指令)第二步:看菜譜(指令譯碼)第三步:從架上或盤中取原材料(取操作數(shù))第四步:洗、切、炒等具體操作(指令執(zhí)行)第五步:裝盤或直接送桌(回寫結(jié)果)第六步:算出下一菜譜所在架子號6=5+1(修改PC的值)
繼續(xù)做下一道菜(執(zhí)行下一條指令)類似“存儲程序”工作方式計算機是如何工作的?如果你知道你媽媽是如何做菜的,你就已經(jīng)知道計算機是如何工作的!你能告訴我計算機是如何工作的嗎?“存儲程序”工作方式!GPRs0123ALUPCMARMDR標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線數(shù)據(jù)傳送線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線計算機是如何工作的?程序在執(zhí)行前
數(shù)據(jù)和指令事先存放在存儲器中,每條指令和每個數(shù)據(jù)都有地址,指令按序存放,指令由OP、ADDR字段組成,程序起始地址置PC (原材料和菜譜都放在廚房外的架子上,每個架子有編號。媽媽從第5個架上指定菜譜開始做)開始執(zhí)行程序第一步:根據(jù)PC取指令(從5號架上取菜譜)第二步:指令譯碼(看菜譜)第三步:取操作數(shù)(從架上或盤中取原材料)第四步:指令執(zhí)行(洗、切、炒等具體操作)第五步:回寫結(jié)果(裝盤或直接送桌)第六步:修改PC的值(算出下一菜譜所在架子號6=5+1)繼續(xù)執(zhí)行下一條指令(繼續(xù)做下一道菜)程序由指令組成,若所有指令執(zhí)行完,則程序執(zhí)行結(jié)束程序和指令執(zhí)行過程舉例GPRs0123ALUPCMARMDR標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線中央處理器(CPU)FABALUop8位模型機M:8位定長指令字,4個GPR,16個主存單元數(shù)據(jù)傳送線程序和指令執(zhí)行過程舉例假設模型機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為通用寄存器編號;addr為主存單元地址R型:op=0000,寄存器間傳送(mov);op=0001,加(add)M型:op=1110,取數(shù)(load);op=1111,存數(shù)(store)問題:指令11100111的功能是什么?答:因為op=1110,故是M型load指令,功能為:R[0]←M[0111],即:將主存地址0111(7號單元)中的8位數(shù)據(jù)裝入到0號寄存器中。程序和指令執(zhí)行過程舉例若在M上實現(xiàn)“z=x+y”,x和y分別存放在主存5和6號單元中,結(jié)果z存放在7號單元中,則程序在主存單元中的初始內(nèi)容為:主存地址主存單元內(nèi)容內(nèi)容說明(Ii表示第i條指令)指令的符號表示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標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線中央處理器(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標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線中央處理器(CPU)程序和指令執(zhí)行過程舉例FABALUop指令00010001功能為R[0]←R[0]+R[1],指令執(zhí)行過程如下:11100110ALU運算R[0]←R[0]+R[1]的微操作(在控制信號的控制下完成):
A←R[0];B←R[1];ALUop←add;R[0]←F0001
0001數(shù)據(jù)傳送線CPU中所有微操作都由時鐘信號進行定時,時鐘信號(clocksignal)的寬度為一個時鐘周期(clockcycle)。一條指令的執(zhí)行時間包含一個或多個時鐘周期計算機是如何工作的?程序啟動前,指令和數(shù)據(jù)都存放在存儲器中,形式上沒有差別,都是0/1序列采用”存儲程序“工作方式:程序由指令組成,程序被啟動后,計算機能自動取出一條一條指令執(zhí)行,在執(zhí)行過程中無需人的干預。指令執(zhí)行過程中,指令和數(shù)據(jù)被從存儲器取到CPU,存放在CPU內(nèi)的寄存器中,指令在IR中,數(shù)據(jù)在GPR中。指令中需給出的信息:操作性質(zhì)(操作碼)源操作數(shù)1或/和源操作數(shù)2
(立即數(shù)、寄存器編號、存儲地址)目的操作數(shù)地址(寄存器編號、存儲地址)存儲地址的描述與操作數(shù)的數(shù)據(jù)結(jié)構(gòu)有關(guān)!IR?GPR?主要內(nèi)容課程的由來課程內(nèi)容概要課程教學安排及考試安排馮.諾依曼結(jié)構(gòu)計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價用機器語言編寫程序,并記錄在紙帶或卡片上最早的程序開發(fā)過程穿孔表示0,未穿孔表示10:010101101:0010
01002:……3:……4:011001115:……6:……假設:0010-jxx若在第4條指令前加入指令,則需重新計算地址碼(如jxx的目標地址),然后重新打孔。不靈活!書寫、閱讀困難!太原始了,無法忍受,咋辦?用符號表示而不用0/1表示!輸入:按鈕、開關(guān);輸出:指示燈等所有信息都是0/1序列!轉(zhuǎn)移指令若用符號表示跳轉(zhuǎn)位置和變量位置,是否簡化了問題?于是,匯編語言出現(xiàn)用助記符表示操作碼用標號表示位置用助記符表示寄存器…..用匯編語言開發(fā)程序0:010101101:0010
01002:……3:……4:01100111
5:……6:……7:……subBjnzL0
……
……
L0:addC……B:……C:……在第4條指令前加指令時不用改變sub、jnz和add指令中的地址碼!你認為用匯編語言編寫的優(yōu)點是:不會因為增減指令而需要修改其他指令不需記憶指令碼,編寫方便可讀性比機器語言強不過,這帶來新的問題,是什么呢?人容易了,可機器不認識這些指令了!需將匯編語言轉(zhuǎn)換為機器語言!用匯編程序轉(zhuǎn)換匯編語言源程序由匯編指令構(gòu)成你能用一句話描述什么是匯編指令嗎?用助記符和標號來表示的指令(與機器指令一一對應)指令又是什么呢?包含操作碼和操作數(shù)或其地址碼
(機器指令用二進制表示,匯編指令用符號表示)可以描述:?。ɑ虼嬉粋€數(shù))兩個數(shù)加(或減、乘、除、與、或等)根據(jù)運算結(jié)果判斷是否轉(zhuǎn)移執(zhí)行想象用匯編語言編寫復雜程序是怎樣的情形?(例如,用匯編語言實現(xiàn)排序(sort)、矩陣相乘)需要描述的細節(jié)太多了!程序會很長很長!而且在不同結(jié)構(gòu)的機器上就不能運行!進一步認識機器級語言subBjnzL0
……
……
L0:addC……B:……C:……機器語言和匯編語言都是面向機器結(jié)構(gòu)的語言,故它們統(tǒng)稱為機器級語言結(jié)論:用匯編語言比機器語言好,但是,還是很麻煩!SKIP指令所能描述的功能對于以下結(jié)構(gòu)的機器,你能設計出幾條指令嗎?LoadM#,R#(將存儲單元內(nèi)容裝入寄存器)StoreR#,M#(將寄存器內(nèi)容裝入存儲單元)AddR#,R#(類似的還有Sub,Mul等;操作數(shù)還可“R#,M#”等)BACKGPRs0123ALUPCMARMDR標志寄存器控制器數(shù)據(jù)控制地址
IR存儲器01231415OPaddr輸入設備輸出設備控制信號線中央處理器(CPU)FABALUop數(shù)據(jù)傳送線用高級語言開發(fā)程序隨著技術(shù)的發(fā)展,出現(xiàn)了許多高級編程語言它們與具體機器結(jié)構(gòu)無關(guān)面向算法描述,比機器級語言描述能力強得多高級語言中一條語句對應幾條、幾十條甚至幾百條指令有“面向過程”和“面向?qū)ο蟆钡恼Z言之分處理邏輯分為三種結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)有兩種轉(zhuǎn)換方式:“編譯”和“解釋”編譯程序(Complier):將高級語言源程序轉(zhuǎn)換為機器級目標程序,執(zhí)行時只要啟動目標程序即可解釋程序(Interpreter):將高級語言語句逐條翻譯成機器指令并立即執(zhí)行,不生成目標文件?,F(xiàn)在,幾乎所有程序員都用高級語言編程,但最終要將高級語言轉(zhuǎn)換為機器語言程序Software
Systemsoftware(系統(tǒng)軟件)-
簡化編程過程,并使硬件資源被有效利用
操作系統(tǒng)(OperatingSystem):硬件資源管理,用戶接口語言處理系統(tǒng):翻譯程序+Linker,Debug,etc…翻譯程序(Translator)有三類:匯編程序(Assembler):匯編語言源程序→機器語言目標程序編譯程序(Complier):高級語言源程序→機器級目標程序解釋程序(Interpreter):將高級語言語句逐條翻譯成機器指令并立即執(zhí)行,不生成目標文件。其他實用程序:如:磁盤碎片整理程序、備份程序等Applicationsoftware(應用軟件)
-解決具體應用問題/完成具體應用任務各類媒體處理程序:Word/Image/Graphics/…管理信息系統(tǒng)(MIS)Game,…一個典型程序的轉(zhuǎn)換處理過程#include<stdio.h>intmain(){printf("hello,world\n");}經(jīng)典的“hello.c”C-源程序#include<sp><stdio.3510511099108117100101326011511610010511146h>\n\nint<sp>main()\n{1046210101051101163210997105110404110123\n<sp><sp><sp><sp>printf("hel10323232321121141051101161024034104101108lo,<sp>world\n");\n}10811144321191111141081009211034415910125hello.c的ASCII文本表示功能:輸出“hello,world”預處理(cpp)編譯(cc1)匯編(as)鏈接(ld)printf.o計算機不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s匯編語言程序(文本)hello.o可重定位目標程序(二進制)hello可執(zhí)行目標程序(二進制)以下是GCC+Linux平臺中的處理過程Hello程序的數(shù)據(jù)流動過程./hellohello可執(zhí)行文件Red:shell命令行處理Blue:可執(zhí)行文件加載Cyan:hello程序執(zhí)行過程“./hello”“hello,world\n”hello,world所有過程都是在CPU執(zhí)行指令所產(chǎn)生的控制信號的作用下進行的。數(shù)據(jù)經(jīng)常在各存儲部件間傳送。故現(xiàn)代計算機大多采用“緩存”技術(shù)!$./hellohello,world$主要內(nèi)容課程的由來課程內(nèi)容概要課程教學安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價不同層次語言之間的等價轉(zhuǎn)換每條指令由操作碼和若干地址碼組成任何高級語言程序最終通過執(zhí)行若干條指令來完成!開發(fā)和運行程序需什么支撐?最早的程序開發(fā)很簡單(怎樣簡單?)直接輸入指令和數(shù)據(jù),啟動后把第一條指令地址送PC開始執(zhí)行用高級語言開發(fā)程序需要復雜的支撐環(huán)境(怎樣的環(huán)境?)需要編輯器編寫源程序需要一套翻譯轉(zhuǎn)換軟件處理各類源程序編譯方式:預處理程序、編譯器、匯編器、鏈接器解釋方式:解釋程序需要一個可以執(zhí)行程序的界面(環(huán)境)GUI方式:圖形用戶界面CUI方式:命令行用戶界面支撐程序開發(fā)和運行的環(huán)境由系統(tǒng)軟件提供最重要的系統(tǒng)軟件是操作系統(tǒng)和語言處理系統(tǒng)語言處理系統(tǒng)運行在操作系統(tǒng)之上,操作系統(tǒng)利用指令管理硬件語言處理程序人機接口語言的運行時系統(tǒng)操作系統(tǒng)內(nèi)核指令集體系結(jié)構(gòu)計算機硬件操作系統(tǒng)語言處理系統(tǒng)早期計算機系統(tǒng)的層次最早的計算機用機器語言編程
機器語言稱為第一代程序設計語言(Firstgenerationprogramminglanguage,1GL)后來用匯編語言編程
匯編語言稱為第二代程序設計語言(Secondgenerationprogramminglanguage,2GL)應用程序指令集體系結(jié)構(gòu)計算機硬件匯編程序操作系統(tǒng)指令集體系結(jié)構(gòu)計算機硬件應用程序現(xiàn)代(傳統(tǒng))計算機系統(tǒng)的層次現(xiàn)代計算機用高級語言編程
第三代程序設計語言(3GL)為過程式語言,編碼時需要描述實現(xiàn)過程,即“如何做”。第四代程序設計語言(4GL)
為非過程化語言,編碼時只需說明“做什么”,不需要描述具體的算法實現(xiàn)細節(jié)。語言處理系統(tǒng)操作系統(tǒng)指令集體系結(jié)構(gòu)計算機硬件應用程序可以看出:語言的發(fā)展是一個不斷“抽象”的過程,因而,相應的計算機系統(tǒng)也不斷有新的層次出現(xiàn)語言處理系統(tǒng)包括:各種語言處理程序(如編譯、匯編、鏈接)、運行時系統(tǒng)(如庫函數(shù),調(diào)試、優(yōu)化等功能)操作系統(tǒng)包括人機交互界面、提供服務功能的內(nèi)核例程計算機系統(tǒng)抽象層的轉(zhuǎn)換程序執(zhí)行結(jié)果
不僅取決于算法、程序編寫而且取決于語言處理系統(tǒng)操作系統(tǒng)ISA微體系結(jié)構(gòu)不同計算機課程處于不同層次必須將各層次關(guān)聯(lián)起來解決問題功能轉(zhuǎn)換:上層是下層的抽象,下層是上層的實現(xiàn)底層為上層提供支撐環(huán)境!最高層抽象就是點點鼠標、拖拖圖標、敲敲鍵盤,但這背后有多少層轉(zhuǎn)化啊!計算機系統(tǒng)的不同用戶最終用戶工作在由應用程序提供的最上面的抽象層系統(tǒng)管理員工作在由操作系統(tǒng)提供的抽象層應用程序員工作在由語言處理系統(tǒng)(主要有編譯器和匯編器)的抽象層語言處理系統(tǒng)建立在操作系統(tǒng)之上系統(tǒng)程序員(實現(xiàn)系統(tǒng)軟件)工作在ISA層次,必須對ISA非常了解編譯器和匯編器的目標程序由機器級代碼組成操作系統(tǒng)通過指令直接對硬件進行編程控制ISA處于軟件和硬件的交界面(接口)ISA是對硬件的抽象所有軟件功能都建立在ISA之上ISA是最重要的層次!那么,什么是ISA呢?Hardware/SoftwareInterface(界面)機器語言由指令代碼構(gòu)成,能被硬件直接執(zhí)行。
軟件和硬件的界面:ISA(InstructionSetArchitecture)指令集體系結(jié)構(gòu)軟件硬件指令集體系結(jié)構(gòu)(ISA)ISA指InstructionSetArchitecture,即指令集體系結(jié)構(gòu)ISA是一種規(guī)約(Specification),它規(guī)定了如何使用硬件可執(zhí)行的指令的集合,包括指令格式、操作種類以及每種操作對應的操作數(shù)的相應規(guī)定;指令可以接受的操作數(shù)的類型;操作數(shù)所能存放的寄存器組的結(jié)構(gòu),包括每個寄存器的名稱、編號、長度和用途;操作數(shù)所能存放的存儲空間的大小和編址方式;操作數(shù)在存儲空間存放時按照大端還是小端方式存放;指令獲取操作數(shù)的方式,即尋址方式;指令執(zhí)行過程的控制方式,包括程序計數(shù)器、條件碼定義等。ISA在計算機系統(tǒng)中是必不可少的一個抽象層,Why?沒有它,軟件無法使用計算機硬件!沒有它,一臺計算機不能稱為“通用計算機”ISA和計算機組成(Organization,即MicroArchitecture)是何關(guān)系?微體系結(jié)構(gòu)ISA和計算機組成(微結(jié)構(gòu))之間的關(guān)系
不同ISA規(guī)定的指令集不同,如,IA-32、MIPS、ARM等計算機組成必須能夠?qū)崿F(xiàn)ISA規(guī)定的功能,如提供GPR、標志、運算電路等同一種ISA可以有不同的計算機組成,如乘法指令可用ALU或乘法器實現(xiàn)控制器CPUPC輸入設備輸出設備MARMDRALU標志寄存器
IR地址數(shù)據(jù)控制GPRs0123存儲器01234567ISA是計算機組成的抽象計算機系統(tǒng)核心層之間的關(guān)聯(lián)前端遵循語言規(guī)范高級語言程序詞法、語法及語義分析中間代碼生成中間代碼目標代碼生成及優(yōu)化目標代碼后端遵循ISA規(guī)范和ABI規(guī)范結(jié)果不符合預期的原因通常有兩種:(1)程序員不了解語言規(guī)范;(2)程序含有未定義行為(undefinedbehavior)或未確定行為(unspecifiedbehavior)的語句執(zhí)行結(jié)果不符合程序開發(fā)者預期舉例:C90中,-2147483648<2147483647
結(jié)果為flaseintx=1234;printf(“%lf”,x);不同平臺結(jié)果不同,相同平臺每次結(jié)果不同
未定義行為后端根據(jù)ISA規(guī)范和應用程序二進制接口(ApplicationBinaryInterface,ABI)規(guī)范進行設計實現(xiàn)。ABI是為運行在特定ISA及特定操作系統(tǒng)之上的應用程序中所遵循的一種機器級目標代碼層接口描述了應用程序和操作系統(tǒng)之間、應用程序和所調(diào)用的庫之間、不同組成部分(如過程或函數(shù))之間在較低層次上的機器級代碼接口。運行平臺:操作系統(tǒng)+ISA架構(gòu)計算機系統(tǒng)核心層之間的關(guān)聯(lián)前端高級語言程序詞法、語法及語義分析中間代碼生成中間代碼目標代碼生成及優(yōu)化目標代碼后端后端根據(jù)ISA規(guī)范和應用程序二進制接口(ApplicationBinaryInterface,ABI)規(guī)范進行設計實現(xiàn)。ABI是為運行在特定ISA及特定操作系統(tǒng)之上的應用程序所遵循的一種機器級目標代碼層接口規(guī)約。例如:過程間調(diào)用約定(參數(shù)和返回值傳遞等)系統(tǒng)調(diào)用約定(系統(tǒng)調(diào)用的參數(shù)和調(diào)用號如何傳遞以及如何從用戶態(tài)陷入操作系統(tǒng)內(nèi)核等)目標文件的二進制格式函數(shù)庫使用約定寄存器使用規(guī)定程序的虛擬地址空間劃分等運行平臺:操作系統(tǒng)+ISA架構(gòu)本課程所用平臺為IA-32/x86-64+Linux+GCC+C語言,Linux操作系統(tǒng)下一般使用systemVABI本課程大多是講解ABI和ISA規(guī)范!要了解程序的確切行為,最好的方法就是查手冊(用于給出規(guī)范)!用“系統(tǒng)思維”分析問題sum(inta[],unsignedlen){ int i,sum=0; for (i=0;i<=len–1;i++) sum+=a[i]; returnsum;}當參數(shù)len為0時,返回值應該是0,但是在機器上執(zhí)行時,卻發(fā)生訪存異常。但當len為int型時則正常。Why?當用len=0調(diào)用sum函數(shù)時,其返回值應該是多少?理解該問題需要知道:高級語言中運算規(guī)則機器指令的含義和執(zhí)行計算機內(nèi)部的運算電路異常的檢測和處理虛擬地址空間……若x和y為int型,當x=65535時,y=x*x;y的值為多少?y=-131071。Why?現(xiàn)實世界中,x2≥0,但在計算機世界并不一定成立。對于任何int型變量x和y,(x>y)==(-x<-y)總成立嗎?
當x=-2147483648,y任意(除-2147483648外)時不成立Why?在現(xiàn)實世界中成立,但在計算機世界中并不一定成立。用“系統(tǒng)思維”分析問題理解該問題需要知道:機器級數(shù)據(jù)的表示機器指令的執(zhí)行計算機內(nèi)部的運算電路用“系統(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.c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告代理權(quán)轉(zhuǎn)讓合同3篇
- 山東省聊城市教育聯(lián)盟共同體2024-2025學年九年級上學期9月月考物理試卷(含答案)
- 河南省焦作市溫縣2024-2025學年二年級下學期期末數(shù)學試卷(含答案)
- 漢字寓意解讀課件
- 房屋轉(zhuǎn)讓協(xié)議13篇
- 感人的故事讀后感
- “大快樂、小歡喜”體育與健康賞析知到智慧樹答案
- DB3305-T 328-2024 社區(qū)下沉治理服務點運營規(guī)范
- DBJT 15-94-2013 靜壓預制混凝土樁基礎技術(shù)規(guī)程
- 2025勞動合同的簽訂不等于勞動關(guān)系的形成
- 2024-2025學年人教版八年級數(shù)學下冊期末測試卷(含解析)
- 媒體行業(yè)工作經(jīng)驗及成果展示證明(5篇)
- 購買電鋼琴合同協(xié)議書
- 公司代收代付協(xié)議書
- 《UPS電源系統(tǒng)培訓教程》課件
- 2025-2030全球及中國ITSM工具行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 心血管疾病急救知識課件
- 高一新生入學教育
- 醫(yī)院培訓課件:《十八項核心醫(yī)療制度解讀》
- 課題申報書:英語單元整體教學設計與實施研究
- 2024中國演播室市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
評論
0/150
提交評論