ICS計算機基礎(chǔ)教學(xué)課件第一章計算機系統(tǒng)概論_第1頁
ICS計算機基礎(chǔ)教學(xué)課件第一章計算機系統(tǒng)概論_第2頁
ICS計算機基礎(chǔ)教學(xué)課件第一章計算機系統(tǒng)概論_第3頁
ICS計算機基礎(chǔ)教學(xué)課件第一章計算機系統(tǒng)概論_第4頁
ICS計算機基礎(chǔ)教學(xué)課件第一章計算機系統(tǒng)概論_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第一章計算機系統(tǒng)概論

“計算機系統(tǒng)基礎(chǔ)”課程的由來

“計算機系統(tǒng)基礎(chǔ)”課程內(nèi)容概要

計算機系統(tǒng)概述

計算機性能評價主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價用“系統(tǒng)思維”分析問題

ISOC90標準下,在32位系統(tǒng)上

以下C表達式的結(jié)果是什么?-2147483648<2147483647

false(與事實不符)!Why?ISOC99標準下為true,Why?

以下關(guān)系表達式結(jié)果呢?

inti=-2147483648;i<2147483647

true!Why?-2147483647-1<2147483647,結(jié)果怎樣?理解該問題需要知道:編譯器如何處理字面量高級語言中運算規(guī)則高級語言與指令之間的對應(yīng)機器指令的執(zhí)行過程機器級數(shù)據(jù)的表示和運算……用“系統(tǒng)思維”分析問題sum(inta[],unsignedlen){ int i,sum=0; for (i=0;i<=len–1;i++) sum+=a[i]; returnsum;}當參數(shù)len為0時,返回值應(yīng)該是0,但是在機器上執(zhí)行時,卻發(fā)生訪存異常。但當len為int型時則正常。Why?當用len=0調(diào)用sum函數(shù)時,其返回值應(yīng)該是多少?理解該問題需要知道:高級語言中運算規(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.cp1.c理解該問題需要知道:機器級數(shù)據(jù)的表示變量的存儲空間分配數(shù)據(jù)的大端/小端存儲方式鏈接器的符號解析規(guī)則……用“系統(tǒng)思維”分析問題/*復(fù)制數(shù)組到堆中,count為數(shù)組元素個數(shù)*/intcopy_array(int*array,intcount){ inti; /*在堆區(qū)申請一塊內(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;}當參數(shù)count很大時,則count*sizeof(int)會溢出。如count=230+1時,count*sizeof(int)=4。堆(heap)中大量數(shù)據(jù)被破壞!理解該問題需要知道:乘法運算及溢出虛擬地址空間存儲空間映射……當count=230+1時,程序會發(fā)生什么情況?用“系統(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]用“系統(tǒng)思維”分析問題以下是一段C語言代碼:#include<stdio.h>main(){ doublea=10; printf("a=%d\n",a);}

在IA-32上運行時,打印結(jié)果為a=0在x86-64上運行時,打印出來的a是一個不確定值為什么?理解該問題需要知道:IEEE754的表示X87FPU的體系結(jié)構(gòu)IA-32和x86-64中過程調(diào)用的參數(shù)傳遞計算機內(nèi)部的運算電路……用“系統(tǒng)思維”分析問題對于上述C語言函數(shù),i=0~4時,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,然后存儲保護錯理解該問題需要知道:機器級數(shù)據(jù)的表示過程調(diào)用機制棧幀中數(shù)據(jù)的布局……Why?用“系統(tǒng)思維”分析問題

以上兩個程序功能完全一樣,算法完全一樣,因此,時間和空間復(fù)雜度完全一樣,執(zhí)行時間一樣嗎?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機制訪問局部性……用“系統(tǒng)思維”分析問題使用老版本gcc–O2編譯時,程序一輸出0,程序二輸出卻是1Why?用“系統(tǒng)思維”分析問題關(guān)鍵差別在于一條指令:fldl

和fildl

理解該問題需要知道:數(shù)據(jù)的表示編譯(程序的轉(zhuǎn)換)局部變量在棧中的位置……你在想什么?看了前面的舉例,你的感覺是什么呢?計算機好像不可靠程序執(zhí)行結(jié)果不僅依賴于高級語言語法和語義,還與其他好多方面有關(guān)本來以為學(xué)學(xué)編程和計算機基本原理就能當程序員,沒想到還挺復(fù)雜的,并不是那么簡單感覺要把很多概念和知識聯(lián)系起來才能理解程序的執(zhí)行結(jié)果一點不錯!理解程序的執(zhí)行結(jié)果要從系統(tǒng)層面考慮!從機器角度來說,它永遠對!你的感覺不可靠!學(xué)完“計算機系統(tǒng)基礎(chǔ)”就會對計算機系統(tǒng)有清晰的認識,以后再學(xué)其他相關(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),并應(yīng)用好系統(tǒng)!基本認識為什么要學(xué)習(xí)“計算機系統(tǒng)基礎(chǔ)”?為什么要學(xué)習(xí)“計算機系統(tǒng)基礎(chǔ)”呢?強化“系統(tǒng)思維”更好地理解計算機系統(tǒng),從而編寫出更好的程序編程序時少出錯在程序出錯時很快找到出錯的地方編寫出更快的程序明白程序是怎樣在計算機上執(zhí)行的為后續(xù)課程的學(xué)習(xí)打下良好基礎(chǔ)…….主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(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)基礎(chǔ)”內(nèi)容提要計算機系統(tǒng)抽象層課程目標:清楚理解計算機是如何生成和運行可執(zhí)行文件的!重點在高級語言以下各抽象層C語言程序設(shè)計層數(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)換與表示(指令)各類復(fù)雜數(shù)據(jù)類型的轉(zhuǎn)換表示過程(函數(shù))調(diào)用的轉(zhuǎn)換表示鏈接(linker)和加載程序執(zhí)行(存儲器訪問)異常和中斷處理輸入輸出(I/O)課程內(nèi)容概要三個主題:表示(Representation)不同數(shù)據(jù)類型(包括帶符號整數(shù)、無符號整數(shù)、浮點數(shù)、數(shù)組、結(jié)構(gòu)等)在寄存器或存儲器中如何表示和存儲?指令如何表示和編碼(譯碼)?存儲地址(指針)如何表示以及如何生成復(fù)雜數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)元素的地址?轉(zhuǎn)換(Translation)高級語言程序?qū)?yīng)的機器級代碼是怎樣的?執(zhí)行控制流(Controlflow)計算機能理解的“程序”是如何組織和控制的?如何在計算機中組織多個程序的并發(fā)執(zhí)行?邏輯控制流中的異常事件及其處理I/O操作的執(zhí)行控制流(用戶態(tài)→內(nèi)核態(tài))計算機系統(tǒng)基礎(chǔ)—從程序員角度認識系統(tǒng)培養(yǎng)目標:培養(yǎng)學(xué)生的系統(tǒng)能力,使其成為一個“高效”程序員,在程序調(diào)試、性能提升、程序移植和健壯性等方面成為高手;建立扎實的計算機系統(tǒng)概念,為后續(xù)的OS、編譯、體系結(jié)構(gòu)等課程打下堅實基礎(chǔ)以IA-32+Linux+C+gcc

為平臺(開源項目平臺)與以下MOOC課程的想法類似/course/hwswinterface主要內(nèi)容:描述程序執(zhí)行的底層機制思路:

在程序與執(zhí)行機制之間的建立關(guān)聯(lián),強化理解而不是記憶

課程內(nèi)容概要內(nèi)容組織:兩大部分第一部分系統(tǒng)概述和可執(zhí)行文件的生成(表示和轉(zhuǎn)換)計算機系統(tǒng)概述數(shù)據(jù)的機器級表示與處理程序的轉(zhuǎn)換及機器級表示程序的鏈接第二部分可執(zhí)行文件的運行(執(zhí)行控制流)程序的執(zhí)行層次結(jié)構(gòu)存儲系統(tǒng)異??刂屏鱅/O操作的實現(xiàn)前導(dǎo)知識:C語言程序設(shè)計、數(shù)字邏輯電路基礎(chǔ)主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價課程基本信息課程名稱計算機系統(tǒng)基礎(chǔ)(IntroductiontoComputerSystems)課程參考網(wǎng)站/ics/index.php/Ics:Main_page前導(dǎo)課程C語言程序設(shè)計、(數(shù)字邏輯電路,不是必須的)教材:《計算機系統(tǒng)基礎(chǔ)》,袁春風(fēng),機械工業(yè)出版社,2014.7主要參考書:《深入理解計算機系統(tǒng)》(第2版),RandalE.Bryant,davidR.O’Hallaron著,龔奕利,雷迎春譯,機械工業(yè)出版社,2011年BrianW.Kernighan,DennisM.Ritchie,TheCProgrammingLanguage(secondEdition),北京:機械工業(yè)出版社,2006《計算機系統(tǒng)概論》(原書第2版),YaleN.Patt,SanjayJ.Patel著,梁阿磊,蔣興昌,林凌譯,機械工業(yè)出版社,2007年實驗及考核方式實驗類型Homework:大量的小程序、隨機抽查上臺講解Lab:數(shù)據(jù)表示(位操作)、二進制炸彈、緩沖區(qū)溢出等Project:一個小型項目(ProgrammingAssignment,PA):功能完備但簡化的x86模擬器NEMU(NJUEMUlator)的實現(xiàn),包括實驗環(huán)境配置(PA0)和四個連貫的實驗內(nèi)容(PA1~PA4),即:簡易調(diào)試器、程序執(zhí)行、cache與存儲管理、異常與I/O。發(fā)布在http://nju-ics.gitbooks.io/ics2015-programming-assignment/content/,請每天至少關(guān)注一次頁面中的"最新消息"考核方式每章習(xí)題:5%Homework:10%Lab:15%Project:40%期末考試(開卷):30%蘇豐老師汪亮老師余子濠主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價第一臺通用電子計算機的誕生1946年,第1臺通用電子計算機ENIAC誕生由電子真空管組成美國賓夕法尼亞大學(xué)研制用于解決復(fù)雜彈道計算問題5000次加法/s平方、立方、sin、cos等用十進制表示信息并運算采用手動編程,通過設(shè)置開關(guān)和插拔電纜來實現(xiàn)Electronic

Numerical

Integrator

And

Computer電子數(shù)字積分計算機

ElectronicNumericalIntegratorAndComputer有18000多個真空管耗電160千瓦占地面積170平方米重30噸該機正式運行到1955年10月2日,這十年間共運行80223個小時馮·諾依曼的故事1944年,馮·諾依曼參加原子彈的研制工作,涉及到極為困難的計算。1944年夏的一天,諾依曼巧遇美國彈道實驗室的軍方負責(zé)人戈爾斯坦,他正參與ENIAC的研制工作。馮·諾依曼被戈爾斯坦介紹加入ENIAC研制組,1945年,他們在共同討論的基礎(chǔ)上,馮·諾依曼以“關(guān)于EDVAC的報告草案”為題,起草了長達101頁的總結(jié)報告,發(fā)表了全新的“存儲程序通用電子計算機方案”。一向?qū)8憷碚撗芯康钠樟炙诡D高等研究院批準讓馮·諾依曼建造計算機,其依據(jù)就是這份報告。ElectronicDiscreteVariableAutomaticComputer現(xiàn)代計算機的原型

1946年,普林斯頓高等研究院(theInstituteforAdvanceStudyatPrinceton,IAS)開始設(shè)計“存儲程序”計算機,被稱為IAS計算機(1951年才完成,它并不是第一臺存儲程序計算機,1949年由英國劍橋大學(xué)完成的EDSAC是第一臺)。在那個報告中提出的計算機結(jié)構(gòu)被稱為馮·諾依曼結(jié)構(gòu)。馮·諾依曼結(jié)構(gòu)最重要的思想是什么?“存儲程序(Stored-program)”工作方式:

任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動執(zhí)行。一旦程序被啟動,計算機應(yīng)能在不需操作人員干預(yù)下,自動完成逐條取出指令和執(zhí)行指令的任務(wù)。馮·諾依曼結(jié)構(gòu)計算機也稱為馮·諾依曼機器(VonNeumannMachine)。幾乎現(xiàn)代所有的通用計算機大都采用馮·諾依曼結(jié)構(gòu),因此,IAS計算機是現(xiàn)代計算機的原型機。馮·諾依曼結(jié)構(gòu)計算機采用存儲程序工作方式:

任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動執(zhí)行。一旦程序被啟動,計算機應(yīng)能在不需操作人員干預(yù)下,自動完成逐條取出指令和執(zhí)行指令的任務(wù)。你認為馮·諾依曼結(jié)構(gòu)是怎樣的?應(yīng)該有個主存,用來存放程序和數(shù)據(jù)應(yīng)該有一個自動逐條取出指令的部件還應(yīng)該有具體執(zhí)行指令(即運算)的部件程序由指令構(gòu)成指令描述如何對數(shù)據(jù)進行處理應(yīng)該有將程序和原始數(shù)據(jù)輸入計算機的部件應(yīng)該有將運算結(jié)果輸出計算機的部件你還能想出更多嗎?你猜得八九不離十了IAS計算機結(jié)構(gòu)馮.諾依曼結(jié)構(gòu)計算機模型早期,部件之間用分散方式相連現(xiàn)在,部件之間大多用總線方式相連趨勢,點對點(分散方式)高速連接馮·諾依曼結(jié)構(gòu)的主要思想計算機應(yīng)由運算器、控制器、存儲器、輸入設(shè)備和輸出設(shè)備五個基本部件組成。各基本部件的功能是:存儲器不僅能存放數(shù)據(jù),而且也能存放指令,形式上兩者沒有區(qū)別,但計算機應(yīng)能區(qū)分數(shù)據(jù)還是指令;控制器應(yīng)能自動取出指令來執(zhí)行;運算器應(yīng)能進行加/減/乘/除四種基本算術(shù)運算,并且也能進行一些邏輯運算和附加運算;操作人員可以通過輸入設(shè)備、輸出設(shè)備和主機進行通信。內(nèi)部以二進制表示指令和數(shù)據(jù)。每條指令由操作碼和地址碼兩部分組成。操作碼指出操作類型,地址碼指出操作數(shù)的地址。由一串指令組成程序。采用“存儲程序”工作方式。馮·諾依曼結(jié)構(gòu)的主要思想是什么呢?控制器CPUPC輸入設(shè)備輸出設(shè)備MARMDRALU標志寄存器

IR地址數(shù)據(jù)控制GPRs0123存儲器01234567你還記得馮.諾依曼計算機結(jié)構(gòu)的特點嗎?工廠、飯店?計算機是如何工作的呢?你能想到計算機相當于現(xiàn)實生活中的什么呢?現(xiàn)代計算機結(jié)構(gòu)模型認識計算機中最基本的部件CPU:中央處理器;PC:程序計數(shù)器;MAR:存儲器地址寄存器ALU:算術(shù)邏輯部件;IR:指令寄存器;MDR:存儲器數(shù)據(jù)寄存器GPRs:通用寄存器組(由若干通用寄存器組成,早期就是累加器)控制器CPUPC輸入設(shè)備輸出設(shè)備MARMDRALU標志寄存器

IR地址數(shù)據(jù)控制GPRs0123存儲器01234567計算機是如何工作的?先想象一下媽媽是怎樣做一桌你喜歡(指定)的菜的?

廚房-CPU,你媽-控制器,盤-GPRs,鍋灶等-ALU,架子-存儲器控制器CPUPC輸入設(shè)備輸出設(shè)備MARMDRALU標志寄存器

IR地址數(shù)據(jù)控制GPRs0123存儲器01234567計算機是如何工作的?做菜前原材料(數(shù)據(jù))和菜譜(指令)都按序放在廚房外的架子(存儲器)上,每個架子有編號(存儲單元地址)。菜譜上信息:原料位置、做法、做好的菜放在哪里等

例如,把10、11號架上的原料一起炒,并裝入3號盤然后,我告訴媽媽從第5個架上(起始PC=5)指定菜譜開始做開始做菜第一步:從5號架上取菜譜(根據(jù)PC取指令)第二步:看菜譜(指令譯碼)第三步:從架上或盤中取原材料(取操作數(shù))第四步:洗、切、炒等具體操作(指令執(zhí)行)第五步:裝盤或直接送桌(回寫結(jié)果)第六步:算出下一菜譜所在架子號6=5+1(修改PC的值)

繼續(xù)做下一道菜(執(zhí)行下一條指令)類似“存儲程序”工作方式計算機是如何工作的?如果你知道你媽媽是如何做菜的,你就已經(jīng)知道計算機是如何工作的!你能告訴我計算機是如何工作的嗎?“存儲程序”工作方式!控制器CPUPC輸入設(shè)備輸出設(shè)備MARMDRALU標志寄存器

IR地址數(shù)據(jù)控制GPRs0123存儲器01234567計算機是如何工作的?程序在執(zhí)行前

數(shù)據(jù)和指令事先存放在存儲器中,每條指令和每個數(shù)據(jù)都有地址,指令按序存放,指令由OP、ADDR字段組成,程序起始地址置PC (原材料和菜譜都放在廚房外的架子上,每個架子有編號。媽媽從第5個架上指定菜譜開始做)開始執(zhí)行程序第一步:根據(jù)PC取指令(從5號架上取菜譜)第二步:指令譯碼(看菜譜)第三步:取操作數(shù)(從架上或盤中取原材料)第四步:指令執(zhí)行(洗、切、炒等具體操作)第五步:回寫結(jié)果(裝盤或直接送桌)第六步:修改PC的值(算出下一菜譜所在架子號6=5+1)繼續(xù)執(zhí)行下一條指令(繼續(xù)做下一道菜)程序由指令組成(菜單由菜譜組成)指令和數(shù)據(jù)程序啟動前,指令和數(shù)據(jù)都存放在存儲器中,形式上沒有差別,都是0/1序列采用”存儲程序“工作方式:程序由指令組成,程序被啟動后,計算機能自動取出一條一條指令執(zhí)行,在執(zhí)行過程中無需人的干預(yù)。指令執(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?什么是計算機?計算機是一種能對數(shù)字化信息進行自動、高速算術(shù)和邏輯運算的處理裝置。計算機的基本部件及功能:運算器(數(shù)據(jù)運算):ALU、GPRs、標志寄存器等存儲器(數(shù)據(jù)存儲):存儲陣列、地址譯碼器、讀寫控制電路總線(數(shù)據(jù)傳送):數(shù)據(jù)(MDR)、地址(MAR)和控制線控制器(控制):對指令譯碼生成控制信號計算機實現(xiàn)的所有任務(wù)都是通過執(zhí)行一條一條指令完成的!計算機的基本組成與基本功能主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價用機器語言編寫程序,并記錄在紙帶或卡片上最早的程序開發(fā)過程穿孔表示0,未穿孔表示10:010101101:0010

01002:……3:……4:011001115:……6:……假設(shè):0010-jxx若在第4條指令前加入指令,則需重新計算地址碼(如jxx的目標地址),然后重新打孔。不靈活!書寫、閱讀困難!太原始了,無法忍受,咋辦?用符號表示而不用0/1表示!輸入:按鈕、開關(guān);輸出:指示燈等所有信息都是0/1序列!若用符號表示跳轉(zhuǎn)位置和變量位置,是否簡化了問題?于是,匯編語言出現(xiàn)用助記符表示操作碼用標號表示位置用助記符表示寄存器…..用匯編語言開發(fā)程序0:010101101:0010

01002:……3:……4:01100111

5:……6:……7:……addBjxxL0

……

……

L0:subC……B:……C:……在第4條指令前加指令時不用改變add、jxx和sub指令中的地址碼!你認為用匯編語言編寫的優(yōu)點是:不會因為增減指令而需要修改其他指令不需記憶指令碼,編寫方便可讀性比機器語言強不過,這帶來新的問題,是什么呢?人容易了,可機器不認識這些指令了!需將匯編語言轉(zhuǎn)換為機器語言!用匯編程序轉(zhuǎn)換匯編語言源程序由匯編指令構(gòu)成你能用一句話描述什么是匯編指令嗎?用助記符和標號來表示的指令(與機器指令一一對應(yīng))指令又是什么呢?包含操作碼和操作數(shù)或其地址碼

(機器指令用二進制表示,匯編指令用符號表示)只能描述:?。ɑ虼嬉粋€數(shù))兩個數(shù)加(或減、乘、除、與、或等)根據(jù)運算結(jié)果判斷是否轉(zhuǎn)移執(zhí)行想象用匯編語言編寫復(fù)雜程序是怎樣的情形?(例如,用匯編語言實現(xiàn)排序(sort)、矩陣相乘)需要描述的細節(jié)太多了!程序會很長很長!而且在不同結(jié)構(gòu)的機器上就不能運行!進一步認識機器級語言addBjxxL0

……

……

L0:subC……B:……C:……機器語言和匯編語言都是面向機器結(jié)構(gòu)的語言,故它們統(tǒng)稱為機器級語言結(jié)論:用匯編語言比機器語言好,但是,還是很麻煩!SKIP指令所能描述的功能對于以下結(jié)構(gòu)的機器,你能設(shè)計出幾條指令嗎?LdM#,R#(將存儲單元內(nèi)容裝入寄存器)StR#,M#(將寄存器內(nèi)容裝入存儲單元)AddR#,M#(類似的還有Sub,Mul等;操作數(shù)還可“R#,R#”等)JxxM#(若滿足條件,則轉(zhuǎn)移到另一處執(zhí)行)……控制器CPUPC輸入設(shè)備輸出設(shè)備MARMDRALU標志寄存器

IR地址數(shù)據(jù)控制GPRs0123存儲器01234567BACK用高級語言開發(fā)程序隨著技術(shù)的發(fā)展,出現(xiàn)了許多高級編程語言它們與具體機器結(jié)構(gòu)無關(guān)面向算法描述,比機器級語言描述能力強得多高級語言中一條語句對應(yīng)幾條、幾十條甚至幾百條指令有“面向過程”和“面向?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(應(yīng)用軟件)

-解決具體應(yīng)用問題/完成具體應(yīng)用任務(wù)各類媒體處理程序: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”預(yù)處理(cpp)編譯(cc1)匯編(as)鏈接(ld)printf.o計算機不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s匯編語言程序(文本)hello.o可重定位目標程序(二進制)hello可執(zhí)行目標程序(二進制)以下是GCC+Linux平臺中的處理過程Hello程序的數(shù)據(jù)流動過程“./hello”hello可執(zhí)行文件Red:shell命令行處理Blue:可執(zhí)行文件加載Cyan:hello程序執(zhí)行過程“./hello”“hello,world/n”“hello,world/n”所有過程都是在CPU執(zhí)行指令所產(chǎn)生的控制信號的作用下進行的。數(shù)據(jù)經(jīng)常在各存儲部件間傳送。故現(xiàn)代計算機大多采用“緩存”技術(shù)!$./hellohello,world$主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價不同層次語言之間的等價轉(zhuǎn)換每條指令由操作碼和若干地址碼組成任何高級語言程序最終通過執(zhí)行若干條指令來完成!開發(fā)和運行程序需什么支撐?最早的程序開發(fā)很簡單(怎樣簡單?)直接輸入指令和數(shù)據(jù),啟動后把第一條指令地址送PC開始執(zhí)行用高級語言開發(fā)程序需要復(fù)雜的支撐環(huán)境(怎樣的環(huán)境?)需要編輯器編寫源程序需要一套翻譯轉(zhuǎn)換軟件處理各類源程序編譯方式:預(yù)處理程序、編譯器、匯編器、鏈接器解釋方式:解釋程序需要一個可以執(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)的層次最早的計算機用機器語言編程

機器語言稱為第一代程序設(shè)計語言(Firstgenerationprogramminglanguage,1GL)后來用匯編語言編程

匯編語言稱為第二代程序設(shè)計語言(Secondgenerationprogramminglanguage,2GL)應(yīng)用程序指令集體系結(jié)構(gòu)計算機硬件匯編程序操作系統(tǒng)指令集體系結(jié)構(gòu)計算機硬件應(yīng)用程序現(xiàn)代(傳統(tǒng))計算機系統(tǒng)的層次現(xiàn)代計算機用高級語言編程

第三代程序設(shè)計語言(3GL)為過程式語言,編碼時需要描述實現(xiàn)過程,即“如何做”。第四代程序設(shè)計語言(4GL)

為非過程化語言,編碼時只需說明“做什么”,不需要描述具體的算法實現(xiàn)細節(jié)。語言處理系統(tǒng)操作系統(tǒng)指令集體系結(jié)構(gòu)計算機硬件應(yīng)用程序可以看出:語言的發(fā)展是一個不斷“抽象”的過程,因而,相應(yīng)的計算機系統(tǒng)也不斷有新的層次出現(xiàn)語言處理系統(tǒng)包括:各種語言處理程序(如編譯、匯編、鏈接)、運行時系統(tǒng)(如庫函數(shù),調(diào)試、優(yōu)化等功能)操作系統(tǒng)包括人機交互界面、提供服務(wù)功能的內(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)的不同用戶最終用戶工作在由應(yīng)用程序提供的最上面的抽象層系統(tǒng)管理員工作在由操作系統(tǒng)提供的抽象層應(yī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í)行的指令的集合,包括指令格式、操作種類以及每種操作對應(yīng)的操作數(shù)的相應(yīng)規(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輸入設(shè)備輸出設(shè)備MARMDRALU標志寄存器

IR地址數(shù)據(jù)控制GPRs0123存儲器01234567ISA是計算機組成的抽象主要內(nèi)容課程的由來課程內(nèi)容概要課程教學(xué)安排及考試安排硬件和軟件的基本組成程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結(jié)構(gòu)計算機性能評價計算機性能的基本評價指標“機器X的速度(性能)是Y的n倍”的含義:

ExTime(Y) Performance(X) ==n ExTime(X) Performance(Y)相對性能用執(zhí)行時間的倒數(shù)來表示!°計算機有兩種不同的性能°Timetodothetask響應(yīng)時間(responsetime)執(zhí)行時間(executiontime)等待時間或時延(latency)°Tasksperday,hour,sec,ns...吞吐率(throughput)帶寬(bandwidth)°基本的性能評價標準是:CPU的執(zhí)行時間不同應(yīng)用場合用戶關(guān)心的性能不同:-要求吞吐率高的場合,例如:

多媒體應(yīng)用(音/視頻播放要流暢)-要求響應(yīng)時間短的場合:例如:

事務(wù)處理系統(tǒng)(存/取款速度要快)-要求吞吐率高且響應(yīng)時間短的場合:

ATM、文件服務(wù)器、Web服務(wù)器等CPU執(zhí)行時間的計算CPU執(zhí)行時間

=CPU時鐘周期數(shù)/程序X

時鐘周期=CPU時鐘周期數(shù)/程序÷

時鐘頻率=

指令條數(shù)/程序XCPIX時鐘周期CPU時鐘周期數(shù)/程序=

指令條數(shù)/程序XCPICPI=CPU時鐘周期數(shù)/程序÷指令條數(shù)/程序CPI用來衡量以下各方面的綜合結(jié)果InstructionSetArchitecture(ISA)Implementationofthatarchitecture(Organization&Technology)Program(Compiler、Algorithm)

CPI:CyclesPerInstructionAspectsofCPUPerformanceCPUtime=Seconds=InstructionsxCyclesxSeconds Program ProgramInstructionCycle

instr.CountCPIclockrateProgrammingCompilerInstr.SetArch.OrganizationTechnology思考:三個因素與哪些方面有關(guān)?例如,{…..y=4*x;}AspectsofCPUPerformanceCPUtime=Seconds=InstructionsxCyclesxSeconds Program ProgramInstructionCycle

instr.CountCPIclockrateProgramming

XXCompilerX(X)Instr.SetArch.XXOrganizationXXTechnology

X如何計算CPI?對于某一條特定的指令而言,其CPI是一個確定的值。但是,對于某一個程序或一臺機器而言,其CPI是一個平均值,表示該程序或該機器指令集中每條指令執(zhí)行時平均需要多少時鐘周期。假定CPIi、Fi是各指令CPI和在程序中的出現(xiàn)頻率,則程序綜合CPI為:CPI=

where

=x∑niiiFCPI1CountnInstructioCFii_=CPU時間=

時鐘周期x假定CPIi

和Ci分別為第i類指令的CPI和指令條數(shù),則程序的總時鐘數(shù)為:=x∑niiiCCPI1=x∑niiiCCPI1總時鐘數(shù)=所以,CPI=(CPU時間×?xí)r鐘頻率)/指令條數(shù)=總時鐘周期數(shù)/指令條數(shù)已知CPU時間、時鐘頻率、總時鐘數(shù)、指令條數(shù),則程序綜合CPI為:問題:指令的CPI、機器的CPI、程序的CPI各能反映哪方面的性能?

單靠CPI不能反映CPU性能!為什么?例如,單周期處理器CPI=1,但性能差!Example1程序P在機器A上運行需10s,機器A的時鐘頻率為400MHz?,F(xiàn)在要設(shè)計一臺機器B,希望該程序在B上運行只需6s.機器B時鐘頻率的提高導(dǎo)致了其CPI的增加,使得程序P在機器B上時鐘周期數(shù)是在機器A上的1.2倍。機器B的時鐘頻率達到A的多少倍才能使程序P在B上執(zhí)行速度是A上的10/6=1.67倍?Answer:CPU時間A=時鐘周期數(shù)A/時鐘頻率A

時鐘周期數(shù)A=10secx4

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論