计算机科学引论0公开课一等奖市优质课赛课获奖课件_第1页
计算机科学引论0公开课一等奖市优质课赛课获奖课件_第2页
计算机科学引论0公开课一等奖市优质课赛课获奖课件_第3页
计算机科学引论0公开课一等奖市优质课赛课获奖课件_第4页
计算机科学引论0公开课一等奖市优质课赛课获奖课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CPU的结构和指令的执行计算机科学引论6/26/20231CPU的基本部件计算机的基本模型有两个部件内存存储需要处理的数据存储处理好的数据存储程序CPU执行存储在内存中的程序,把需要处理的数据变换成所期望的新格式或内容(处理好的数据)结构比内存复杂得多内存CPU6/26/20232CPU的基本部件CPU究竟需要哪些部件?CPU的工作:执行程序(program)程序:一系列的指令(instruction)指令:对一个或多个数进行某个操作Z=X+YA=B*C操作(operator)操作数(operand)让CPU工作的第一步:告诉它操作和操作数的信息CPU只认识二进制数把指令编码成二进制数6/26/20233CPU的基本部件指令编码编码操作常用操作个数:20-30个用4-5位二进制数即可编码6/26/20234CPU的基本部件指令编码编码操作数操作数存储在内存中内存用地址索引

用地址编码操作数?32位平台,地址一般是32位3操作数指令的话,地址要32*3=96位!现代内存相对于现代CPU的速度来说也太慢了把操作数放到快而小的存储空间指令中只编码一个地址6/26/20235CPU的基本部件指令编码编码操作数操作数放在哪里?比较小,可以用很短的地址编码非常快,和CPU的计算速度相当要快,就要小!

寄存器(register)6/26/20236CPU的基本部件指令编码寄存器(register)CPU中存放操作数的空间小:一般不超过32个快:一般一个CPU周期可访问多次(2到10多次)编码操作数编码寄存器的地址32个寄存器须用5位二进制编码,3个操作数需要3*5=15位二进制数CPU寄存器内存6/26/20237CPU的基本部件指令编码寄存器中的数从何而来?数据总是存储在内存中的数据必须从内存读内存访问指令:只编码一个地址RISC类CPU甚至只编码半个地址,一个32位地址须由两条指令装载到寄存器并拼接而成CPU需要内存访问单元(memoryunit)CPU寄存器内存MU6/26/20238CPU的基本部件指令所指定的操作需要执行CPU需要有执行部件不同功能的执行部件有不同的名字ALU:算术逻辑单元(执行整数算术逻辑运算)FPU:浮点单元(执行浮点运算)……CPU寄存器MUALUFPU为何ALU/FPU要接到MU上?CISC类CPU允许指令使用内存操作数现代CPU为优化执行速度而这么设计6/26/20239CPU的基本部件指令也必须从内存中读取存储程序取指部件(instructionfetch)CPU寄存器MUALUFPUIFIF要读内存,连上MU?较老的CPU是这么设计的较新的CPU其MU被分裂成多个部件以提高速度6/26/202310CPU的基本部件指令从哪个内存单元取?IP/PCInstructionPointer,ProgramCounterCPU寄存器MUALUFPUIFPC每次取到指令后,IP/PC自动加适当的值指向下一条指令分支指令怎么办?6/26/202311CPU的基本部件控制器(ControlUnit)控制指令执行过程,协调各部件工作CPU寄存器MUALUFPUIFPCCUCPU核心逻辑,最难设计的部分。设计优劣直接影响CPU的性能。6/26/202312CPU指令执行过程第一步:取指把IP/PC的值交给MUMU读到指令给IFIP/PC增加,指向下一条指令寄存器MUALUFPUIFPCCU.6/26/202313指令执行过程第二步:指令译码(decode)解出指令的操作和操作数,并从寄存器读出需要的操作数寄存器MUALUFPUIFPCCUaddr1,r2,r3指令寄存器6/26/202314指令执行过程第三步:运算执行指令所指定的运算寄存器MUALUFPUIFPCCUaddr1,r2,r36/26/202315指令执行过程第四步:内存访问如果是要读写内存的指令:读写内存如果不是?暂停等待一周期,或跳过寄存器MUALUFPUIFPCCUaddr1,r2,r36/26/202316指令执行过程第五步:写回把结果写回寄存器寄存器MUALUFPUIFPCCUaddr1,r2,r36/26/202317MIPS的指令执行简化表示IFtchDcdExecMemWBALUI$RegD$RegPCinstructionmemory+4rtrsrdregisterALUDatamemoryimm1.取指2.译码3.执行4.内存5.写回6/26/202318程序的执行程序是多条指令的序列一条接一条地执行较老的CPU是这么设计的但很慢ALUI$RegD$RegALUI$RegD$Reg6/26/202319加速程序执行的方法流水线(pipeline)流水线是工业化生产的重要概念极大地提高了劳动生产率也可以提高CPU部件的“劳动生产率”流水线为什么有效?指令执行各步骤占用的部件不同如果各步骤串行进行,则大部分部件在大部分时间都空闲各步骤并行,让各部件都忙起来6/26/202320加速指令执行的方法指令执行各步骤部件占用情况第一步:取指IP/PC,MU,IF第二步:译码寄存器第三步:运算ALU/FPU第四步:内存访问MU第五步:写回寄存器6/26/202321加速指令执行的方法一条指令执行中占用资源情况寄存器MUALUFPUIFPCCU第一条指令开始译码的时候,取指的资源已经空闲此时已经可以开始取第二条指令了6/26/202322加速指令执行的方法指令流水线把多条指令的各执行步骤并行ALUI$RegD$RegALUI$RegD$RegALUI$RegD$RegALUI$RegD$Reg6/26/202323加速指令执行的方法周期(cycle)指令执行一步所需要的时间要使用流水线技术,各不同步骤的执行时间必须相同:都是一周期在同一个周期,有多条指令在流水线中每条指令在不同的执行步骤,占用不同的部件6/26/202324加速指令执行的方法流水线的性能例:执行10条指令,每指令5步骤,每步骤一周期不用流水线:5*10=50周期5级流水线:10+(5-1)=14周期加速比:50/14=3.57流水线的理论最高加速比=级数指令数越多,加速比越高无限多条指令加速比=级数一条指令??加速比为1不能加速!6/26/202325加速指令执行的方法流水线的性能指令的延迟(latency)执行一条指令所需时间流水线不能减少单条指令的延迟流水线可以减少程序的延迟指令的产出(throughput)单位时间内系统处理的指令数流水线可以增加指令的产出6/26/202326加速指令执行的方法流水线问题结构竞争:同一个周期使用相同的部件1.内存访问竞争ALUI$RegD$RegALUI$RegD$RegALUI$RegD$RegALUI$RegD$Reg6/26/202327加速指令执行的方法内存访问竞争在同一个周期,需要同时读取数据和指令用两个不同的内存:DSP、嵌入式CPU等用两个高速缓存(cache):通用CPU寄存器ALUFPUIFPCMUCUI-Cache.??Load/StoreD-Cache内存??MUMUL2CacheCPU控制核心设计难点6/26/202328加速指令执行的方法流水线问题结构竞争2.寄存器访问竞争ALUI$RegD$RegALUI$RegD$RegALUI$RegD$RegALUI$RegD$Reg同时读和写同时读两个值6/26/202329加速指令执行的方法寄存器访问竞争给寄存器加高速缓存?不现实寄存器非常快单个周期可以完成一次读和一次写前半个周期写,后半个周期读为何写在前?写操作是在前面的指令执行的寄存器很小可以做多个读端口寄存器ALUFPUIFPCCUI-CacheLoad/StoreD-Cache内存MUL2Cache6/26/202330机器语言与汇编语言CPU只能识别二进制数把指令编码成二进制数编码操作、操作数和其它信息机器语言6/26/202331机器语言与汇编语言MIPS的机器语言例655565opcodersrtrdfunctshamt32位opcode:操作码funct:操作码第二部分rs:SourceRegisterrt:TargetRegisterrd:DestinationRegistershamt:移位位数6/26/202332机器语言与汇编语言MIPS的机器语言例add$8,$9,$10opcode =0 (查表)funct =32 (查表)rs =9 (操作数1)rt =10 (操作数2)rd =8 (目的操作数)shamt =0 (非移位指令)6/26/202333机器语言与汇编语言MIPS的机器语言例add$8,$9,$100910832000000001001010100100010000000000二进制表示:机器语言指令十进制表示:MIPS还有其它格式的指令6/26/202334机器语言与汇编语言机器语言适合CPU使用,但不适合程序员人类对长串的数字不敏感但对符号敏感用符号表示指令的各种信息汇编语言6/26/202335机器语言与汇编语言汇编语言(assembly)机器指令与汇编指令一一对应在机器语言需要让人看的时候,常常实际使用汇编语言使用与机器语言相同的概念操作,操作数,……允许使用名字来索引变量比地址方便得多6/26/202336机器语言与汇编语言MIPS的汇编语言add$8,$9,$10操作操作数(寄存器)addsubbeq……$0~$31(32个寄存器)6/26/202337机器语言与汇编语言汇编语言程序设计用汇编语言写程序可以有最高的效率(如果程序员合格)比之机器语言前进了一大步被称为第二代程序设计语言问题机器指令相对简单程序员希望用较复杂的表达式与硬件相关移植到不同的CPU非常不方便6/26/202338程序语言什么才是适合程序设计的语言?接近人类的思维特性看起来象人类语言学习较容易机器无关同一个程序可以在不同硬件运行无需学习机器相关内容如果不关注最佳性能的话程序语言6/26/202339程序语言计算机如何执行程序语言程序?解释(interpret)逐条读取程序语句并立即执行各种script:.bat,.vbs,.js,.py,……由解释器处理(interpreter)翻译(translate)把程序语言程序翻译成机器程序C/C++,FORTRAN,Pascal,……由编译器处理(Compiler)为何一般不叫translator?不仅仅是翻译的工作6/26/202340程序语言为何解释和编译都存在?各有优缺点解释无需专门开发工具,易于扩充,灵活性大,升级解释器就可以改善所有已有程序执行效率低编译执行效率高开发较复杂,不便扩充,编译程序升级后所有现有程序必须重新编译才能得到更新6/26/202341程序语言程序语言设计原则尽可能接近人的思维习惯为何不用自然语言?目前的计算机软硬件平台还不能很好地理解自然语言程序语言是机器思维与人类思维之间的折衷机器思维人类思维机器语言汇编语言程序语言自然语言6/26/202342程序语言程序语言设计原则越接近自然语言更容易被程序员使用,更容易学习,程序设计效率高更远离计算机设计原理,更难以被计算机有效处理,执行效率低越接近机器语言更容易被计算机处理,执行效率高更难使用,程序设计效率低6/26/202343程序语言早期程序语言强调执行效率一次设计,多次运行运行时间远多于设计时间机器慢、少,任务多程序少,一般由专业人员设计FORTRAN很容易被翻译成高效率的机器程序不太容易使用6/26/202344程序语言现代程序语言有侧重各方面因素的语言现代计算机已经非常快,对很多任务已经可以不考虑执行效率程序语言可以考虑其它方面的因素设计效率,可移植性,……各种面向对象程序语言,Java,……现代软件技术可以兼顾多个因素较大范围内都适用的程序语言及其开发工具结合C++的一些开发工具6/26/202345程序语言程序语言对计算机设计思想的影响程序语言出现后,迅速替代汇编语言成为程序设计的主要语言计算机必须针对程序语言优化?!复杂指令集计算机(CISC:ComplexInstructionSetComputer)复杂的指令:尽量向程序语言的语句靠拢完备的指令:尽量实现程序语言使用的所有语句正交指令集编译优化技术尚不完善,不能很好优化程序主要用硬件设计填补程序语言和硬件间的差异6/26/202346程序语言程序语言对计算机设计思想的影响精简指令集(RISC:ReducedInstructionSetComputer)只实现少数必须的指令,利用编译优化技术生成优化的程序指令数量少,简单,可以编码成等长格式可以实现得非常快主要用编译器填补程序语言和硬件间的差异6/26/202347程序语言RISC支持者开发了大量的优化指令执行速度的技术高速缓存,深度流水线,分支预测,寄存器重命名,超标量,乱序执行……RISC支持者开发了大量的编译优化技术循环展开,软件流水,相关分析……CISC支持者把这些技术都用上了“伪CISC”:不再以指令集为目标x86依靠“事实上的工业标准”获得了空前成功RISCvs.CISC结果6/26/202348程序语言现代计算机开发模式软件和硬件结合考虑同时设计硬件和编译器,并照顾操作系统的需要研究热点:指令级并行程序语言改变了整个计算机产业6/26/202349程序语言程序语言类型说明型(例:Prolog)程序员描述程序的问题本身,而不是解决问题的算法对简单的问题:描述问题本身比算法更麻烦对复杂的问题:现有硬件必须要用特定的算法才能解决,通用解决算法难以胜任说明型程序语言只在较窄的范围使用6/26/202350程序语言程序语言类型命令型用命令序列描述程序函数型用嵌套的函数描述程序面向对象型用对象描述程序以上都是现实世界某个侧面的抽象广泛使用的程序语言应包含以上所有方面C++及其派生语言6/26/202351程序语言要素语句(statement)构成程序的原子声明语句(declarativestatement)程序的规格说明:数据类型,参数,……命令语句(imperativestatement)程序的算法说明注释(comment)6/26/202352程序语言要素变量(variable)与数据类型(type)变量:在程序执行过程中可以改变的量用于存储各类信息是对内存的抽象用名索引,不必使用地址索引有类型不同类型有不同的运算不兼容类型之间不能进行运算例:float*string6/26/202353程序语言要素基本数据类型(primitivedatatype)编译器缺省支持的数据类型intfloatchar……某些语言还有string数据结构(datastructure)由基本数据类型组成的有结构的数据类型数组(array)结构(structure)6/26/202354程序语言要素数组(array)一系列相同类型的数据定义intRooms[10];引用Rooms[0]=101;MyRoom=Rooms[5];下标(index)名6/26/202355程序语言要素结构(structure)由不同类型的数据组成的数据类型又叫异构数组(heterogeneousarray)structTZoomInfo{ intID; floatw,h;};……TZoomInfoMyZoom;MyZoom.ID=110;合理划分程序的所有数据为恰当的结构会极大简化程序设计6/26/202356程序语言要素字面量(literal)在程序语言中,其值等于其文字串的本来含义的量与变量相对:表示变量的文字串是其名字,其值和名字无关,在程序中还可以改变例:整数650,字符串"Smith"常量(constant)给字面量的名字constintRoomNo=517;6/26/202357程序语言要素运算处理数据所需要的操作四则运算+-*/逻辑运算&&||!关系运算==!=><>=<=位运算&|^~计算机硬件特有的运算,但在很多算法中有很大的用处,所以很多程序语言都有6/26/202358程序语言要素运算赋值运算=把一个表达式的值赋给某个变量注意与相等关系的区别==才是相等关系运算与数学上使用的=有所不同某些语言使用不同的符号Pascal:=APL6/26/202359程序语言要素控制结构程序有各种不同的执行顺序顺序(sequence)分支(branch)循环(loop)必须有不同的控制语句(controlstatement)if(…){}else{}switch(…){case1: ….case2:….}for(…;…;…){}6/26/202360程序语言要素过程(procedure)与函数(function)人类解决复杂问题的方法:分治(divide&conquer)分解成多个较小的问题,然后逐一解决,最后把小问题的解拼接成大问题的解程序语言也必须有类似的功能过程与函数程序语言中非常重要的概念,极大地方便了程序设计6/26/202361程序语言要素过程与函数把程序总的任务分解成多个小的部分,然后逐一解决每个小问题,再把小问题的解拼接起来以解决总的任务过程与函数的区别过程不返回值,函数要返回值微不足道(subtle)C/C++中不加以区别程序过程/函数6/26/202362程序语言要素函数的要素boolDrawCircle(intx,inty,intradix){ …… returntrue;}返回值类型名参数(parameter)实现6/26/202363程序语言要素调用函数if(DrawCircle(10,10,5)==false){……}直接用名返回值可直接使用实际使用来执行函数的参数实参(actualparameter)函数定义中的参数?形参(formalparameter)6/26/202364程序语言要素参数传递voidDrawFilledCircle(intx,inty,intradix){ DrawCircle(x,y,radix); FillCircleWithPattern(x,y,r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论