处理器入门_学习笔记
CMG学习笔记

CMG 学习笔记!(GEM入门1)关键字输入部分数据组要求:(A)七个不同组(B)数据组应遵循确定的顺序这七个不同的数据组包括:I/O控制油藏描述组分特征岩石流体数据初始条件数值方法控制井数据和循环数据怎样建立数据文件数据其中有四个关键字必须在输入/输出控制部分,*TITLE1,*TITLE2,*TITLE3,*CASEID这四个关键字是可选的,并可以取掉.但是,他们对于辨别不同数据文件很有用.全部标题和标识必须包括在单引号之内.*TITLE1,和*CASEID均在模拟结果文件中使用,该文件用来产生模拟的图形.*TITLE1可以包含40个字符,*TITLE2和*TITLE3每个可以有80个字符.*CASEID最多8个字符!也可以使用两个关键字标识符即'**'插入注释,注释可以出现在数据文件任何地方.现在给大家一个例子:*TITLE1‘Simulation Run #1-2005-11-20'*TITLE2‘Dual porosity problem using the MINC option'*TITLE3'This is a 12*12*10 Cartesian grid system '*CASEID'Run1'**注释部分以后还有内容!!请大家关注!!!CMG学习笔记(GEM入门2)---关于重启文件关于重启文件重启文件是一个二进制文件,初始数据和主要变量按用户指明的频率写入,写重启文件是可以选择的.重启文件可以在以下工作中用到:1)做敏感性分析和历史拟和2)修改井定义3)在运行一个大的长作业之前,做一个短的模拟运行,先看结果是否满意.4)在随后的运行中节约时间.例如,当完成一次模拟运行而且初步结果看起来不错,则需做预测运行由于已经由前次运行创建了一个重启文件,则可以选择其中的中间时间步重启运行,模拟器不需要初始日期启动运行,可以选择时间步继续运行.要做重启运行就要在前次运行是产生.使用*WRST或*RESTART创建文件,他们必须位于输入/输出控制部分.然而,当井工作制度改变时*WRST可以出现在井数据部分,*WRST指示写重启记录的频率。
IMX283学习笔记-10月更新

IMX283学习笔记-10⽉更新我的EasyARM-i.MX283学习笔记1、前记 .......................................................................................................................... - 1 -初学第⼀阶段计划 (1)2、关于IMX283A开发板 ............................................................................................... - 3 -3、EASYARM-I.MX283学习-----5个⽉我学了什么? ....................................................... - 5 -关于接下来该学习什么,怎么学习做⼀个规划: (6)4、EASYARM-I.MX283学习之点亮LED灯....................................................................... - 6 -1、按照教程安装好ECLIPSE:参照10.4节的做法 (6)2、操作步骤 (6)1、前记对于ARM9没有什么基础,硬要说对ARM了解的话,我会STM32,也算对ARM半个⼊门了。
去年看到ZLG的IMX283开发套件时,那时很想买,但终究没买。
究其原因,当时正在学习STM32。
其实我作为硬件⼯程师(⾃诩),学习过很多单⽚机,例如51、MSP430、STM32,当然还有专业课上的FPGA当然,已有⼀年多没接触了。
这些芯⽚,可要说会也不是特别精通,可要说不会但毕竟也学过⼀段时间。
这⼀路过来,反正也是懵懵懂懂,图个新鲜感。
很多东西学过后就忘记了,现在呢就养成了写⼀些⾃学笔记的习惯。
AT91SAM7S64学习资料

ARM入门笔记(1)前言如果您是一个单片机爱好者,当见到一款功能强大、性价比高的处理器时,一定会有一股很想掌握它、运用它的冲动,起码我是这样。
5年前第一次接触单片机(标准的51系列),就被它强大的功能所吸引,而痴迷于它,一直到今天。
在这期间的不同时期,各种增强型51,PIC、AVR,DSP和ARM等不同程度的吸引和诱惑着我。
有的已经玩过了,有的则没有,但很想玩的这股冲动一直存在心里,特别是对ARM。
记得2002年我就知道了ARM这个东东,眼睁睁地看着它一天天的火热,但由于对其开发工具及开发过程的不了解等原因一直只处于认识的阶段,尽管也曾玩过ZLG的2104开发板!可能是ZLG团队做的太出色的原因吧(详细的教材与源码,还有非常方便的工程模板),没过多久、没费多少劲就把里面的实验做完了,然后由于自已性格上的缺陷把它给扔在了一边,导致不到一个月就把大部分的东东还给了周老师。
直到前段时间,让我有机会真真正正的玩起了ARM!像最初玩8051那样的尽兴(出现问题时,吃不下饭、睡不着觉的那种痛苦和解决问题后的那种畅快)。
这篇文档就是记录了我在前段时间学习、调试目前最低价的ARM核处理器——AT91SAM7Sxx 时出现的问题与解决方法。
它尽量完整地记录了我从开始不懂ARM,到最终完成AT91SAM7S64各种外围实验的各个环节及整个过程,包括我在开始一个实验前的一些想法,实验目的,以及各个实验中,我以单片机的思维去思考时遇到的各种问题,和这些问题的解决方法。
现将自己的一点经验以及体会拿出来与大家共同分享,一来是希望能够为那些在ARM门口徘徊迷茫的人提供一些借鉴,使他们顺利越过这道门槛;二来是希望能够抛砖引玉,以结识更多有共同爱好的朋友。
由于我也是新手上路,文章中难免疏漏与错误,希望大家不吝指正,如果在调试AT91SAM7Sxx时有什么问题,欢迎大家共同讨论。
第一章开发工具与调试环境一.目标板所用实验板是参考ATMEL公司官方网站上发布的《AT91SAM7S-EK Evaluation Board User Guide》设计的,相当于AT91SAM7Sxx评估测试板,主要用于各种外围实验,结构框图如图1-1所示。
计算机基础知识笔记

计算机基础知识笔记【最新版】目录一、计算机基础知识概述二、计算机硬件系统1.中央处理器2.存储器3.输入设备4.输出设备5.总线三、计算机软件系统1.操作系统2.应用软件3.编程语言四、计算机网络基础1.网络的定义与分类2.网络协议与网络模型3.网络设备的基本类型五、计算机安全知识1.计算机病毒与防范2.数据加密与保护3.网络安全与隐私保护正文【一、计算机基础知识概述】计算机是一种用于处理和存储信息的电子设备,由硬件系统和软件系统两大部分组成。
计算机基础知识主要包括计算机硬件和软件系统的构成及其工作原理,以及计算机网络和计算机安全等相关知识。
【二、计算机硬件系统】1.中央处理器(CPU):是计算机的核心部件,负责执行程序指令。
2.存储器:用于存储程序和数据。
主要包括随机存储器(RAM)和只读存储器(ROM)。
3.输入设备:用于将外部信息输入计算机。
常见的输入设备有键盘、鼠标、扫描仪等。
4.输出设备:用于将计算机处理后的信息输出。
常见的输出设备有显示器、打印机等。
5.总线:是计算机内部各个部件之间进行数据传输和通信的电路。
【三、计算机软件系统】1.操作系统:是管理计算机硬件资源和提供应用程序运行环境的系统软件。
常见的操作系统有 Windows、Linux、Mac OS 等。
2.应用软件:是用户为了完成特定任务而使用的软件,如办公软件、图形图像软件、多媒体软件等。
3.编程语言:是一种用于人与计算机之间沟通的工具,常见的编程语言有 C、C++、Java、Python 等。
【四、计算机网络基础】1.网络的定义与分类:网络是指将地理位置不同的计算机和外部设备通过通信线路互相连接起来,以实现资源共享和信息传递的系统。
网络根据覆盖范围、拓扑结构和协议等方面可分为不同类型。
2.网络协议与网络模型:网络协议是计算机网络中数据传输的规则。
常见的网络协议有 TCP/IP、HTTP、FTP 等。
网络模型是用于描述计算机网络结构的模型,如 OSI 七层模型、TCP/IP 四层模型等。
I2C学习笔记

1 概述I2C总线以2根信号线(数据线SDA,时钟线SCL)实现双向同步数据传,并且可以连接到总线上的任何一个器件作为一个发送器或接收器。
执行数据传输时可以当作主机或从机。
发送器:传送中发送数据到总线的器件接收器:传送中从总线接收数据的器件主机:用来初始化发送、产生时钟信号和终止发送的器件,可是发送器或接收器从机:被主机寻址的器件,也可以作为发送器或接收器LPC1700有三个接口:I2C0/1/2。
I2C0为标准I2C总线接口(开漏引脚),该接口支持I2C规范中所叙述的功能,运行速度高达1MHz。
支持多主机操作,并允许挂接在I2C总线上运行器件在退出I2C总线功能时掉电;而I2C1和I2C2使用标准I/O引脚,专用于单主机I2C总线,不支持挂接在I2C总线上的运行器件在退出I2C总线功能时掉电,也不支持多主机I2C操作。
三个接口在标准模式下,总线数据传输的速度为0到100Kbit/s;高速模式下的为0到400Kbit/s;总线速率越高,总线上拉电阻要越小。
注意的是只有I2C0总线支持快速plus模式,速度可达1Mbit/s,可通过设置CPADCFG寄存器里的SDADRV0和SCLDRV0来实现。
2 总线特性:标准的I2C总线接口;可配置为主机、从机或主/从机;可编程时钟能够实现通用速率控制;主从之间双向数据传输;多主机总线;通信速率高达1MHZ(快速模式);支持监控模式;只能基于版内通信;3 传输协议(1)寻址字节主机产生起始信号后,发送的第一个字节为寻址字节。
前7位为从机地址,最低位决定报文方向:0表示主机写信息到从机,1表示主机读从机中的信息。
(2)传输格式主机产生起始信号后,发送一个寻址字节,收到应答后紧跟着的就是数据传输,数据传输一般由主机产生的停止位终止。
如果主机仍希望在总线上通讯,它可以产生重复起始信号和寻址另一个从机,而不是首先产生一个停止信号。
4 基本配置利用以下寄存器来配置I2C0/1/2接口:(1)电源:在寄存器PCONP中置位PCI2C0/1/2;(2)时钟:在寄存器PCLK_SEL0中选择PCLK_I2C0;在寄存器PCLK_SEL1中选择PCLK_I2C1/2(3)引脚:通过寄存器PINSEL使能I2C0引脚和选择I2C1/2引脚。
Msp430学习笔记

Msp430学习笔记一、简介图1 基本结构图2 pin designation结论:1.基本每个管脚都可以复用2.外围功能模块丰富端口介绍(32 I/O pins)1.端口P1和P2具有输入、输出、中断和外部模块功能。
这些功能可以通过各自的7个控制寄存器的设置来实现。
(1)PxDIR 输入输出方向寄存器rw(2)PxIN 输入寄存器r(3)PxOUT 输出寄存器r(4)PxIFG 中断标志寄存器r(5)PxIES 中断触发沿选择寄存器rw(6)PxIE 中断使能寄存器rw(7)PxSEL 功能选择寄存器rw2.其他端口:四个控制寄存器(除去中断相关)看看例程二、时钟部分1.时钟寄存器设置SCFQCTL 系统时钟控制寄存器(倍频,反馈后默认是31,31+1=32)SCFI0 系统时钟频率调整器0(锁频环反馈中的分频(实质最终是倍频))SCFI1 系统时钟频率调整器1(自动控制调整,无需软件设置)FLL_CTL0 FLL+控制器0 (反馈中是否分频、选择LFXT1晶振的有效电容)FLL_CTL1 FLL+控制器1 (振荡器控制、时钟源对应的振荡器的选择,默认情况下:振荡器打开,MCLK选择DCOCLK,SMCLK选择DCOCLK)图时钟模块2.工作模式:One Active Mode、Five Power Saving ModesMSP430是一个特别强调低功耗的单片机系列,尤其适用于采用电池供电的长时间工作场合。
系统根据应用和节能使用不同的时钟信号,这样可以合理利用系统的电源,实现整个系统的超低功耗。
中断是MSP430微处理器的一大特色。
有效地利用中断可以简化程序,并且提高执行效率和系统稳定性。
几乎所有的msp430系统单片机的每个外围模块都能产生中断,为MSP430针对事件(外围模块产生的中断)进行的编程打下基础。
MSP430在没有事件发生时处于低功耗模式,事件发生时通过中断唤醒CPU,时间处理完毕后CPU再次进入低功耗模式,由于CPU运算速度和推出低功耗的速度很快,所以在应用中,CPU大部分时间都处于低功耗状态,使得系统的整体功耗极大地降低。
计算机学习笔记

计算机学习笔记计算机学习是当今社会中至关重要的一项技能,无论是在职场还是日常生活中,计算机的应用已经无处不在。
因此,为了提升自己的竞争力和适应快速发展的科技环境,学习计算机知识是迫在眉睫的任务。
在这篇文章中,我将分享我个人的计算机学习笔记,希望能够对读者有所帮助。
1. 计算机基础知识首先,我们需要了解一些计算机的基础知识。
计算机由硬件和软件两部分组成。
硬件包括中央处理器(CPU)、内存、硬盘、显示器等,而软件则包括操作系统、应用程序等。
了解这些基础知识有助于我们更好地理解计算机的工作原理。
2. 编程语言学习一门编程语言是必不可少的。
编程语言是计算机与人之间沟通的桥梁,它是指令的集合,告诉计算机应该如何执行某个任务。
常见的编程语言有Python、Java、C++等。
我选择从Python入手,因为它是一门简单易学且功能强大的语言。
3. 数据结构与算法学习数据结构与算法是提高编程能力的关键。
数据结构是组织和存储数据的方式,而算法则是解决问题的步骤和策略。
了解不同的数据结构和算法可以帮助我们优化程序性能,并提高编程效率。
例如,链表、堆栈、队列等是常见的数据结构,而二分查找、排序算法等是常见的算法。
4. 操作系统操作系统是计算机的核心软件之一,它负责管理计算机的资源并为其他软件提供服务。
学习操作系统可以帮助我们理解计算机的运行机制,并学会如何管理和优化计算机资源。
常见的操作系统有Windows、Linux等,我选择了学习Linux,因为它在服务器领域应用广泛,并且开放源代码,有利于自学和深入研究。
5. 数据库数据库是用于存储和管理数据的软件系统。
学习数据库可以帮助我们理解数据的组织和管理,以及如何使用数据库进行数据操作和查询。
常见的数据库管理系统有MySQL、Oracle等,在学习过程中我选择了MySQL进行实践操作。
6. 网络和互联网网络和互联网已经成为现代社会中不可或缺的一部分。
了解网络的基本原理、网络协议和互联网的运作方式对于计算机学习者来说是非常重要的。
CPU知识全面讲解

CPU知识全面讲解CPU,全称“Central Processing Unit”,中文名为“中央处理器”,在大多数网友的印象中,CPU只是一个方形配件,正面是金属盖,背面是一些密密麻麻的针脚或触点,可以说毫无美感可言。
但在这个小块头的东西上,却是汇聚了无数的人类智慧在里面,我们今天能上网、工作、玩游戏等全都离不开这个小小的东西,它可谓是小块头有大智慧。
作为普通用户、网友,我们并不需要解读CPU里的所有“大智慧",但CPU 既然是电脑中最重要的配件、并且直接决定电脑的性能,了解它里面的部分知识还是有必要的。
下面笔者将给大家介绍CPU里最重要的基础知识,让大家对CPU 有新的认识。
1、CPU的最重要基础:CPU架构CPU架构:采用Nehalem架构的Core i7/i5处理器CPU架构,目前没有一个权威和准确的定义,简单来说就是CPU核心的设计方案。
目前CPU大致可以分为X86、IA64、RISC等多种架构,而个人电脑上的CPU架构,其实都是基于X86架构设计的,称为X86下的微架构,常常被简称为CPU架构。
更新CPU架构能有效地提高CPU的执行效率,但也需要投入巨大的研发成本,因此CPU厂商一般每2-3年才更新一次架构。
近几年比较著名的X86微架构有Intel的Netburst(Pentium 4/Pentium D系列)、Core(Core 2系列)、Nehalem(Core i7/i5/i3系列),以及AMD的K8(Athlon 64系列)、K10(Phenom 系列)、K10。
5(Athlon II/Phenom II系列).Intel以Tick-Tock钟摆模式更新CPU自2006年发布Core 2系列后,Intel便以“Tick—Tock”钟摆模式更新CPU,简单来说就是第一年改进CPU工艺,第二年更新CPU微架构,这样交替进行。
目前Intel正进行“Tick”阶段,即改进CPU的制造工艺,如最新的Westmere架构其实就是Nehalem架构的工艺改进版,下一代Sandy Bridge架构将是全新架构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
add R0 , R3, R2 ; //把R3和R2相加,结果存到R0中
以上每条语句就是一条指令,load、add、store为操作码,操作码后跟的是操 作数。cpu是不认识这些操作码和操作数,所以需要变成0、1这种二进制码。
对于以上几条汇编指令可以进行以下编码 汇编操作码 load add store 其它 对应机器码 00 01 10 11 寄存器 R0 R1 R2 R3 对应机器码 00 01 10 11
对add指令进行如下定义
bit7
操作码
bit6
bit5
bit4
bit3
bit2
bit1
bit0
第1个操作数
第2个操作数
第3个操作数
经过编译器编码以后 汇编指令 add R0 , R3, R2 ; 机器码 01001110
指令集的分类
CISC---复杂指令集(complex instruction set computer) RISC---精简指令集(reduced instruction set computer ) CISC指令集的代表就是intel的x86指令集,ADM的PC处理器也属 于x86指令集(IBM要求有2家以上的供应商,要求intel开放给AMD) RISC指令集的处理器比较多ARM、DSP,目前公司使用的esi系列 CPU也属于RISC指令集。 CISC和RISC的区别简单点说就是,RISC指令集只集合了程序比较常 用的指令,而这些比较常用的指令可能只占整个指令集的20%。所 以对于RISC指令集的cpu设计时就不用花费资源去实现那些不经常 使用的功能。Intel的x86指令集有1000多页,而普通的RISC指令集 一般只有二、三百页。
esi1600支持16位和32位混合指令集
大小端
正常我们理解一个32bit(0x12345678)数据在存储器里面的存储顺序应 该是
存储器地址 数据
00 78
01 56
02 34
03 12
这种常用的存储顺序被称为小端(Little-endian),而与之对应的就是大 端(Big-endian) 大端存储
操作数与操作码
操作数通常存在Memory中,由于访问memory速度较慢,所以CPU一般会定义 一些通用寄存器用于存放中间计算结果。
C=A+B运算转换为汇编行为如下(以为只是示例,实际不同CPU可能有所不同) load R3 , #0 ; load R2 , #1 ; store R0 , #2 ; //从内存地址0取出A放在R3中 //从内存地址1取出B放在R2中 //把R0的值写到内存地址2中
3.顺序提交
XOR 指令执行完后,来了一个中断,中断处理一般都是将处理器的ISA 寄存器压栈, 执行中断服务程序,然后再退回来执行中断后面的指令。精确中断(Precise Interrupt)要 求中断前的指令都执行,中断后的指令都没有执行,而在乱序执行内核中,MOV、 INC 指令有可能提前到XOR 前面执行。 解决方法就是:在指令乱序执行之后,再加一个步骤:指令顺序提交(In-order commit)。乱序执行后,指令的结果虽然出来了,但是这个结果并没有立即提交到ISA 寄存器中,而是先缓存起来,只有当前指令前面的指令提交后,这条指令才能提交。
总结
体系结构与采用的独立与否的总线无关,与指令空间和数据 空间的分开独立与否有关。 冯诺依曼结构实现简单,总线资源少,但处理速度有瓶颈。 哈弗结构处理速度快,但相对实现难度大一点,成本较高。
二.指令集
简单来说,指令集就是汇编指令, 每一款或者某一系列CPU厂家都 会有相应的指令集支持。
IF ID EX
Instruction fetch 取指 Instruction decode 译 码 Execute 执行
最经典的5级流水线
IF ARM9处理器使用这种流水线 ID EX MEM
Instruction fetch 取指 Instruction decode 译码 Execute 执行 Memory Access 内存数据读/写
2.哈弗结构
DSP和ARM多采 用 哈弗结构
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,指令和 数据采用两条总线分别访问指令存储器和数据存储器。 哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令 分开组织和存储的,执行时可以预先读取下一条指令。
3.改进型哈弗结构
ALU
80251 mcu支持哈弗结构 esi1600 mcu支持哈弗结 构和改进型哈弗结构
一.处理器结构
1.冯诺依曼结构
2.哈弗结构
3.改进型哈弗结构
1.冯诺依曼结构
Intel的x86处理器都 属于冯诺依曼结构
•必须有一个存储器; •必须有一个控制器; •必须有一个运算器,用于完成算术运算和逻 辑运算; •必须有输入和输出设备,用于进行人机通信。
冯诺依曼结构的特点是指令和数 据共用一个数据存储空间 这样难免会有冲突,影响数据处 理速度。
I/O
Control Unit
Inst Memory
Data Memory
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,但只指令和 数据采用一条总线进行分时复用。改进之处在于数据总线和程序总线之间进 行局部的交叉连接,这一改进允许数据存放在程序存储器中,并被算术运算 指令直接使用,增强了芯片的灵活性。
三.流水线设计
提高处理器性能的一个重要手段就是增加流水线级数。这个在我 们正常的逻辑设计中也经常用到。
当一个组合逻辑太大,处理时间太长,所能运行的频率就上不去, 这个时候就需要将这个大的组合逻辑拆分成几块完成。即把原来 一个时钟干的事情分成了几个时钟干完。
最简单的3级流水线
低功耗嵌入式领域的经典产品ARM7就是采 用这种3级流水线结构。
2.指令调度 指令能否开始执行,依赖于2个条件: 1. 是否有空闲的功能单元去执行这条指令 2. 该指令的源操作数是否已经准备好
处理器会记录指令源操作数的准备状态,当指令 1 完成后,处理器会通知所有依赖F5的指 令,F5 已经准备好了,指令2 需要的2 个源操作数F5 和F2 都已准备好,它就可以被发送指 令的执行队列中去执行。同样,指令3 也可以准备执行,如果处理器中有多个加法单元,指 令2 和指令3 就可以同时执行。指令2 完成后,F6 也准备好了,指令4 就可以去执行,指令4 执行完后,F8 就准备好了,F5 早就准备好了,指令5 就可以去执行。在这个调度的例子中, 5 条指令4 个cycle 就可以完成,而使用顺序内核,则需要5 个cycle。
乱序执行比顺序执行需要耗费更 多的处理器资源,通常只有高端 处理器才会使用
五.处理器并行执行
SISD(single instruction single data),一次处理一条指令,一条指令处理一份数据, 早期的处理器都是这种形式。 SIMD(single instruction multiple data),一次处理一条指令,一条指令能处理多份 数据,这种方式称为数据并行,现在性能稍微强一点的处理器都具备这种功能。 MISD(multiple instruction single data),一次处理多条指令,多条指令处理一份数 据,这种结构没有实际意义。 MIMD(multiple instruction multiple data),一次处理多条指令,多条指令能处理多 条数据,这种方式称为指令并行,高性能处理器都具备这个功能。
变长指令集 定长指令集
一般一条指令的长度为8bit/16bit/32bit等等
CISC属于变长指令集 传统的RISC指令集为了译码方便都采用定长,但这样会导致程序存储空间变 大,进而降低了cache的命中率,影响程序执行效率。所以后期很多处理器 都支持简单变长指令集,这样在实现难度没有增加多少的情况下大大提高了 程序效率。
后RISC
RISC指令集的处理器在性能上要优于CISC,但由于兼容性问题intel又不能直 接做RISC指令集的处理器,所以intel采用了一种新架构,对外仍然使用CISC 指令集,而内部实际是RISC的内核,在中间加入了将CISC指令解码RISC指 令的模块。 Intel比较经典的奔腾处理器就属于这种结构。
CPU最终能识别到的是0/1这 种二进制码,通常编译器会 将C语言等高级语言变为二进 制文件,同时也会生成汇编 语言,汇编语言可直观反应 出代码的逻辑关系。
对于一个简单运算C=A+B是怎样让计算机识别到的? A、B、C称为操作数,+称为操作码,CPU里面有运算单元ALU,所以就需要想 办法让CPU识别这一逻辑运算,并送到ALU中执行。
增加NOP 来排空流水线,在跳转语 句后增加5 个NOP 操作来保证流水线正确
分支预测算法
前面说到流水线设计中碰到跳转指令就会导致流水线中的很多操 作无用,那如果可以提前知道下一条指令是啥就可以提前控制取 什么指令了。
分支预测最简单的算法就是通过上一次是否跳转来判断当前这一 次是否跳转。 目前大多数处理器的分支预测准确率可达90%以上。
虽然乱序执行可以提高处理器性能,但有时候程序中有些指令是 具有相关性的,所以不能随意乱序。关于某些指令的相关性,可 以通过一些方法去除,这里不描述了。
1.插入buffer---去耦合
乱序执行的结构
在顺序执行内核中,指令依次流经各个流水线单元,不需要进行缓存,而为了要 能乱序执行,首先需要一个Buffer 来缓存还没有执行的指令,然后在这个Buffer 中去调度指令的执行顺序。
四.乱序执行----提高处理器性能
指令在执行时常常因为一些限制而等待,例如,MEM 单元访问 的数据不在cache 中,需要从外部存储器中取,这个过程通常 需要几十、几百个cycle,如果是顺序执行的内核,后面的指令 都要等待,而如果处理器足够智能,就可以先执行后面不依赖该 数据的指令,这就是处理器的乱序执行。