说说内核与计算机硬件结构

1.内核诸如51/ARM/90/PIC/AVR.....有好多种的,况且内核历来不分类,由于每一家常均可以改内核,你应该问的是架构!!只有懂架构才能用什么片子都得心应手. 我详细的说一下吧. HARVARD(哈佛)架构:ROM(程序空间)与RAM(数据空间)分开,便于程序与数据的同时访问,减小程序运行时访问的瓶颈,提升数据吞吐. PRINCETON(普林斯顿)架构:采用通用计算机普遍使用的ROMRAM合二为一的方式,就是众所周知的冯诺依曼结构,程序指令存储地址和数据指令存储地址指向同一存储器不一样位置,所以程序指令和数据的宽度相同. 举例说明:以英特尔为例:MCS-51用的是哈佛架构,然后及产品16位的MCS-96就是普林斯顿架构.ARM公司卖的内核几乎可能是哈佛架构的.html

2.请问PIC单片机和AVR单片机是51内核的吗?react

   不是,都有本身的C编译环境linux

3.STC51单片机和AT89S51的汇编语言同样吗?ios

   内核和指令集都是同样的, 因此放心,另外建议你编辑的时候若是对执行时间要求不是很苛刻的话,尽可能使用C语言,毕竟通用性好且比较简单算法

但汇编程序也要会啊!这个能够直接与芯片交流呀!
4.AVR单片机是什么内核?

     答:AVR单片机内核就是AVR内核,和51内核是不同的,若是内核同样的话,那它的汇编指令应该是同样的,实际上他们的汇编指令是编程

彻底不同的。AVR是美国ATMEL公司研发的,ATMEL公司有三大系列MCU,一种是老式的以8051内核的单片机,第二种是目前大量使用缓存

的以AVR内核的AVR单片机。第三种是目前高端的以ARM内核的微处理器。ARM已经不是单片机那么简单的概念了,差很少跟电脑CPU相似安全

了。如今手机上的CPU就是AVR的。网络

 

5.51系列单片机的区别与特色介绍 架构

8031/8051/8751是Intel公司早期的产品。

一、8031的特色
     8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764系列。用户若想对写入到EPROM中的程序进行修改,必须先用一种特殊的紫外线灯将其照射擦除,以后再可写入。写入到外接程序存储器的程序代码没有什么保密性可言。
二、8051的特色
     8051片内有4k ROM,无须外接外存储器和373,更能体现“单片”的简练。可是你编的程序你没法烧写到其ROM中,只有将程序交芯片厂代你烧写,并是一次性的,从此你和芯片厂都不能改写其内容。
三、8751的特色
     8751与8051基本同样,但8751片内有4k的EPROM,用户能够将本身编写的程序写入单片机的EPROM中进行现场实验与应用,EPROM的改写一样须要用紫外线灯照射必定时间擦除后再烧写。

 


    因为上述类型的单片机应用的早,影响很大,已成为事实上的工业标准。后来不少芯片厂商以各类方式与Intel公司合做,也推出了同类型的单片机,如同一种单片机的多个版本同样,虽都在不断的改变制造工艺,但内核却同样,也就是说这类单片机指令系统彻底兼容,绝大多数管脚也兼容;在使用上基本能够直接互换。人们统称这些与8051内核相同的单片机为“51系列单片机”,学了其中一种,便会全部的51系列。

 

6.内核包含中央运算单元+内部总线+指令解析+..........,内核有不少中,8051,Arm,Mips,power PC,这些都是表明人物,还有不少,不少

内核是软件或者硬件的基本核心部分,能够包含软件和硬件。如LINUX的内核就是软件的,是LINUX最基本的部分,其余软件是在内核的基础上发展。51内核是51系列兼容机的基本部分。包含指令系统、和基本的硬件,如内存结构等。其余加强型51单片机,就是在内核的基础上扩展功能。

 

系统性能并不等价于计算能力。较低的功耗、丰富的片内外设以及实时的信号处理能力对于大部分嵌入式应用来讲是最为重要的。传统的8位、16位单片机已经很好的处理了这类问题,可是随着当今嵌入式设计不断增加的功能需求和特殊要求,许多微控制器厂商开始抛弃他们传统的8位、16位单片机。可是选择32位处理器对于某些任务来可能并非最适宜的。下面咱们就讨论一下单片机的选型问题。

理解系统性能

MIPS(million instructions per second),是微控制器计算能力的表征。可是,全部的嵌入式应用不只仅是须要计算能力,因此应用的多样化决定了系统性能衡量方式的多样化,大部分参数都同等重要而且难于用一个参数来表示,咱们并不该该仅仅从MIPS就断定系统的好坏。也许某一应用因为成本的限制,须要一款高集成度的微控制器,该控制器须要多个定时器和多种接口。可是另外一个应用须要高的精度和快速的模拟转换能力。二者的共同点可能仅仅是供电部分,好比采用电池供电。对于一个实时的顺序处理应用来讲,通讯的失败可能会致使灾难性后果。这样的场合下就须要一个灵巧的控制器。这个控制器应当可以以正确的顺序处理任务,而且响应时间必须均衡。全部上述应用的共同问题可能就是按期的现场升级能力。

除了与具体的产品要求有关外,系统性能的衡量也能够考虑是否有容易上手、容易使用的开发工具、应用示例、齐全的文档和高效的支持网络。

系统性能的相关问题

1.传统8位单片机的局限

大多数工程师十分关注系统性能,由于愈来愈多的8位和16位单片机家族已经没法知足当今日益增加的需求。陈旧和低效的架构限制了处理能力、存储器容量、外设处理和低功耗要求。8位的处理器架构,好比805一、PIC1四、PIC1六、PIC1八、78K0和HC08是在高级语言(好比C语言)出现以前开发的,其指令集仅用于汇编开发环境。而且这类架构的中央处理单元(CPUs)缺少一些关键功能,好比16位的算数运算支持、条件跳转和存储器指针。

许多CPU架构执行一条指令须要若干时钟周期。Microchip的8位PIC家族执行一条最简单的指令须要4个时钟周期,这致使使用20M的时钟仅能达到5MIPS.对于其余CPU架构,好比8051内核。其执行一条指令至少须要6个时钟周期,这就使得实际的MIPS要比给定的时钟频率低不少。

上述代码是一个简单的C语言函数,表1列出了在三种不一样CPU架构上编译这段代码的相应结果。8051内核的执行时间几乎是PIC16内核的4倍,对于AVR架构更是达到了28倍。

一些半导体厂商解决了时钟分配问题,使得微控制器实现了单时钟周期指令。当时钟频率为100MHz时,Silicon Labs声称他们基于8位8051架构的微控制器可以达到100MIPS的峰值。可是,这里有几个问题:

第一,因为大部分指令须要两个时钟周期甚至更多,因此其实际能力接近于50MIPS;

第二,8051是基于累加器的CPU,全部须要计算的数据必须拷贝到累加器。查看8051处理器的汇编代码,能够发现65%-70%的指令用来移动数据。因为现代8位和16位单片机架构中有一系列和算术逻辑单元(ALU)相连的寄存器。所以,8051内核的50MIPS仅至关于现代8位和16位单片机架构的15MIPS.

第三,较老的CPU架构缺少对大容量存储器的支持。早在七十年代,很难想象须要超过64KB存储器的嵌入式应用,这使得许多CPU设计师选择16位的地址总线。所以,CPU、寄存器、指令集以及程序存储器和数据存储器的数据总线始终受此限制。

第四,在2006年,约有9%的8位嵌入式应用使用了64KB甚至更多的程序存储空间,这表明了8位MCU市场26%的收益。推测2009年,14%的8位嵌入式应用会表明36%的收益。而这14%的应用会使用64KB甚至更多的程序存储空间。

从系统性能的角度来看,全部这些使得较旧的8位MCU逐渐失去竞争力。

 

 


2.不适宜32位处理器的场合

旧式CPU架构没法知足当今的市场需求,为了解决这个问题,许多厂商升级至32位的处理平台。对于须要32位处理能力的应用来讲这无疑是最棒的选择,可是许多设计师转换到32位平台并不是最正确的选择。使用32位MCU来解决8位和16位单片机的自身限制将会致使太高的成本。

大部分32位微控制器没法提供高速、高分辨率的模数(ADC)转换,EMC性能一般较低,且ESD保护较弱。而8位和16位单片机在这些方面优点明显。另外,强的IO驱动能力,可供选择的多种内部、外部振荡器,无需外部器件的片内电压调整器等是8位和16位单片机的另外一些优势。

显然,32位CPU包含比任何8位和16位CPU都要多的数字逻辑单元,这致使了高的制形成本。虽然使用一些特殊的半导体工艺能够下降成本,可是弊端是会致使较高的漏电流和静态功耗。某些应用,像水表、燃气表、收费公路电子标签、安全系统等,在他们生命期中的大部分时间,CPU处于睡眠模式,即为中止状态。这类应用的电池寿命必须在5-10年,因此这状况中,不可能将CPU从8位或者16位升级至32位处理器。若是想要提高系统性能只有采用别的方法。

这里有几个定义须要说一下,

  片内(片上)外设与片外外设


外设,顾名思义,就是IC芯片所接的可以与IC通讯的外部设备。早起因为IC集成工艺不发达,不少东西都是外设的,在此以DSP芯片为例,好比PWM、ADC、CAN等等,
本来都是须要芯片外接的,即便是如今,仍然有独立的ADC芯片,好比ADS8364等等,可是如今,PWM、ADC等等东西都已经集成在DSP芯片内,固然,
不管如何,芯片总仍是会须要外接一些设备实现某种系统,为了与那些外设相区别,就将集成在芯片内,可是又不属于芯片自己(好比DSP,是一种微处理器,
所以芯片中不属于微处理器的部分都是外设)的称为“片上外设”。

片内、外设是两个概念,片内指作成芯片的集成电路内部,简称片内;外设是外部设备的简称,是指集成电路芯片外部的设备。集成电路芯片与外部设备的链接通常须要专门的接口电路和总线的链接(包括控制总线路、地址总线和数据总线等)。 

因为大规模集成电路的技术发展得很快,如今许多芯片在制造时已经可以将部分接口电路和总线集成到芯片内部。对于这部分电路与传统的接口电路和总线是有区别的,为了加于区别能够称之为片内外设,其含义是在集成电路芯片内部集成的用于与外部设备链接的接口电路和总线。 

所以,简单的说,“片内外设”是芯片内部用于与外部设备链接的接口电路和总线。

CPU,内核,寄存器,缓存,RAM,ROM的做用和他们之间的联系?

先附上一张计算机硬件组成图片:

先说 内核
内核是操做系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,而且内核决定一个程序在何时对某部分硬件操做多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,
内核并非计算机系统中必要的组成部分
附一张内核体系结构照片

连接:https://www.zhihu.com/question/24565362/answer/54451597


能够看到内核所处的位置
CPU:
中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和 高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与 内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。

寄存器

寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

存储器

存储器范围最大,它几乎涵盖了全部关于存储的范畴。你所说的寄存器,内存,都是存储器里面的一种。凡有存储能力的硬件,均可以称之为存储器,这是天然,硬盘更加明显了,它纳入外存储器行列,因而可知——。

内存

内存既专业名上的内存储器,它不是个什么神秘的东西,它也只是存储器中的沧海一粟,它包涵的范围也很大,通常分为只读存储器(ROM)随机存储器(RAM),以及最强悍的高速缓冲存储器(CACHE),只读存储器应用普遍,它一般是一块在硬件上集成的可读芯片,做用是识别与控制硬件,它的特色是只可读取,不能写入。随机存储器的特色是可读可写,断电后一切数据都消失,咱们所说的内存条就是指它了。

缓存CACHE

缓存就是数据交换的缓冲区(称做Cache),当某一硬件要读取数据时,会首先从缓存中查找须要的数据,若是找到了则直接执行,找不到的话则从内存中找。因为缓存的运行速度比内存快得多,故缓存的做用就是帮助硬件更快地运行。

由于缓存每每使用的是RAM(断电即掉的非永久储存),因此在用完后仍是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

CACHE是在CPU中速度很是块,而容量却很小的一种存储器,它是计算机存储器中最强悍的存储器。因为技术限制,容量很难提高。

ROM、RAM的区别:

ROM(只读存储器或者固化存储器)

RAM(随机存取存储器)

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统中止供电的时候仍然能够保持数据,而RAM一般都是在掉电以后就丢失数据,典型的RAM就是计算机的内存。

RAM有两大类,一种称为静态RAM(Static RAM/SRAM),当数据被存入其中后不会消失。SRAM速度很是快,是目前读写最快的存储设备了。当这个SRAM 单元被赋予0 或者1 的状态以后,它会保持这个状态直到下次被赋予新的状态或者断电以后才会更改或者消失。可是存储1bit 的信息须要4-6 只晶体管。所以它也很是昂贵,因此只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另外一种称为动态RAM(Dynamic RAM/DRAM),DRAM 必须在必定的时间内不停的刷新才能保持其中存储的数据。DRAM 只要1 只晶体管就能够实现。DRAM保留数据的时间很短,速度也比SRAM慢,不过它仍是比任何的ROM都要快,但从价格上来讲DRAM相比SRAM要便宜很 多,计算机内存就是DRAM的。

DRAM分为不少种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。DDR RAM(Date-Rate RAM)也称做DDR SDRAM,这种改进型的RAM和SDRAM是基本同样的,不一样之处在于它能够在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用 得最多的内存,并且它有着成本优点,事实上击败了Intel的另一种内存标准-Rambus DRAM。在不少高端的显卡上,也配备了高速DDR RAM来提升带宽,这能够大幅度提升3D加速卡的像素渲染能力。

ROM也有不少种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)二者区别是,PROM是一次性的,也就是软件灌入后,就没法修 改了,这种是早期的产品,如今已经不可能使用了,而EPROM是经过紫外光的照射擦出原先的程序,是一种通用的存储器。另一种EEPROM是经过电子擦出,价格很高,写入时间很长,写入很慢。

最初,把只能读的存储器叫作ROM(Read Only Memory),而且掉电后数据不会丢失。因为不能改写,于是使用起来很不方便。随着技术的进步,在ROM中使用一些新技术,就可使它具备能够编程的功能。比较早的是熔丝型的可编程ROM,因为是经过熔断熔丝来编程的,因此这类ROM编程后,就不能再写了,是一次性的(OTP)。后来又出现了EPROM,是经过紫外线来擦除的,而且经过高压来编程,这类ROM上面通常有一个透明的石英玻璃窗,看上去挺漂亮的,它就是用来给紫外线照射的。后来又出现了EEPROM,不用紫外线照射就能够擦除,于是能够直接在电路中编程。另外还有FLASH ROM,又可分为NOR FLASH和NAND FLASH。FLASH ROM通常有一个特色,就是写数据时,能够将1改成0,而不能将0改成1,于是写数据前须要擦除,擦除时将全部数据置1。

之因此依然叫作ROM,概括一下,大概有几个缘由:

①不能像RAM那样快速的写;

②可能须要特殊的擦写电压;

③可能须要特殊的擦写时序;

④可能须要在写以前进行擦除操做;

⑤擦写次数有限,不像RAM那样能够随意写而不损坏;

⑥掉电后数据不会丢失;

⑦有些可写的存储器只能写一次(OTP)。

举个例子,手机软件通常放在EEPROM中,咱们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是立刻写入经过记录(通话记录保存在EEPROM中),由于当时有很重要工做(通话)要作,若是写入,漫长的等待是让用户忍无可忍的。

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不只具有电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时能够快速读取数据 (NVRAM的优点),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)做为它们的存储设备,然而近年来 Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用做存储Bootloader以及操做系统或者程序代码或者直接当硬盘使用(U盘)。

目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和咱们常见的SDRAM的读取是同样,用户能够直接运行装载在NOR FLASH里面的代码,这样能够减小SRAM的容量从而节约了成本。NAND Flash没有采起内存的随机读取技术,它的读取是以一次读取一快的形式来进行的,一般是一次读取512个字节,采用这种技术的Flash比较廉价。用户 不能直接运行NAND Flash上的代码,所以好多使用NAND Flash的开发板除了使用NAND Flah之外,还做上了一块小的NOR Flash来运行启动代码。

通常小容量的用NOR Flash,由于其读取速度快,多用来存储操做系统等重要信息,而大容量的用NAND FLASH,最多见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和咱们一般用的“闪盘”,能够在线擦除。


转自连接:https://www.zhihu.com/question/24565362/answer/54451597
cpu主要就是处理各类指令,运算、跳转、存取内存以内的。这些指令所需的数据以及指令自己通常都是存储在ram中的。cpu必须将ram中的指令和数据取到cpu中的各类寄存器中,指令才能执行。指令的地址存储在一个叫作PC的寄存器中,注意这边的PC不是我的电脑的意思,而是pointer of code的意思,即指令指针,而数据能够放在各类通用寄存器中。cpu中还有不少其余寄存器,控制着cpu各类功能。若是你学过汇编,便会知道汇编语言便是操做这些寄存器,完成各类运算任务。
现代高性能cpu内部通常都会有缓存,通常分为指令缓存和数据缓存。缓存的访问速度比外部ram要快不少,因此若是把一部分数据和指令存储在缓存中,cpu再从缓存中获取指令和数据可以提升cpu的速度。
能够被称做rom的东西不少,如pc主板上的rom芯片,pc关机后,rom的数据不会丢失,开机时先运行其中的bios程序,完成硬件配置和检测,以后会将磁盘第一个扇区中操做系统的引导程序装入内存,而后徐跳到引导程序。引导程序会进一步将操做系统存储在磁盘上的内核装入内存,最后执行内核程序。内核加载文件系统,并执行gui程序,即可以看到pc的桌面了。

连接:https://www.zhihu.com/question/24565362/answer/74078750
CPU中央处理器,负责执行计算机的运算指令。寄存器是CPU内部的小容量存储器,用来存放CPU将要运算的操做数或者操做数的地址,以及计算机指令或者指令地址,也会有计算结果存在寄存器中。RAM主要指计算机内存,用来存放计算机正在运行的程序的指令以及数据,包括操做系统和应用程序的指令和数据。ROM是只读存储器,其内容掉电不会丢失,通常来说计算机的BIOS会写在里面,待计算机通电后,这里面的程序会自动被加载到内存中供CPU执行,去读磁盘信息引导DOS或者其余操做系统装入内存。
缓存有两种概念。一种是指硬件高速缓冲存储器cache,用于协调寄存器与内存之间读写速度不匹配而设置的一种存储器。另外一种是指人为规定的一个区域(一般是在RAM上划一块区域,这是由操做系统来作的),用来暂时存放一些输入输出数据。
内核也有两种理解,你能够简单的认为CPU就是计算机的内核。
软件也会有内核,好比操做系统内核,主要是只管路计算机硬件资源的部分。

连接:https://www.zhihu.com/question/24565362/answer/126282464

CACHE

i-cache和d-cache区别:

从两个方面来回答: 

一方面是cache的行为。Icache大多都是顺序取指,碰到分支指令也会跳转,而Dcache访问的模式变化比较大.也就是前者所说的pattern的问题.指令只有读和refill没有写,而数据有读也有写.最重要的是冯氏的结构是指令和数据分离.I和D在一块儿只有相互干扰. 
  
另外一个方面就是,物理设计上考虑:
一个union的cache,同时须要数据和指令的访问,端口上是很难实现的。
因此通常在流水线的主干上,都是采用分离的icache和dcache. 
非主干的L2 cache,从容量的角度考虑采用union的方式. 
  

固然早期的也有不分离icache和dcache.由于早期的结构也简单. 

 

Cache的层次设计

出于对简化设计的考虑,也为了提升系统的性能,本次设计采用了指令Cache(如下简称为ICache)和数据Cache (如下简称为DCache)分开的方式。在ICache中存储有微处理器须要的指令,在微处理器的取指阶段,经过程序计数器PC提供给ICache的地址,微处理器能够获取须要的指令。而DCache则是做为一个数据的存储,并提供对于Load/Store指令所要操做地址的数据,它地址则来自于ALU运算的结果。
ICache和微处理器的接口以及ICache和L2 ICache的接口都是单向的。DCache和微处理器的接口以及DCache和L2 Cache的接口是双向的。这样处理的缘由在于ICache存储的是指令,不须要更改所存储的数据的值。而DCache中存储的是数据,其值会根据指令操做的不一样而改变。好比:在运行Store指令的时候会对DCache中相应地址进行写入数据的操做。

 

整个系统的层次结构如图1所示,由ICache和DCache构成L1 Cache,以及和L1 Cache接口的L2 Cache,和L2 Cache接口的DRAM。其中L1 Cache和L2 Cache是在微处理器片内,而DRAM是做为主存,存在于片外。这跟目前主流的我的电脑的层次结构很类似。 

Cache的结构分析

从微处理器架构的角度来讲,所谓的Cache包括了两部分:Cache控制器和Cache存储器。文本所说起的Cache设计也包括了这两个方面。
因为ICache只是读出指令,控制上比DCache要简单许多。因此ICache的设计彻底能够参考DCache的设计,本文会针对L1 Cache 中DCache的设计进行详细的描述。

3.1 DCache存储器的结构

Cache存储器其通常实现方式主要有三种,分别是全相联,直接映射和组相联。全相联最灵活可是实现比较复杂。直接映射比较容易实现,可是可能产生快速抖动。组相联则是前二者的一个折衷。本文采用的是两路组相联的方式。
图2:DCache结构图
为了设计方便,整个DCache存储器被分红了两块,为别用来存储标签域(Tag)和数据域(Data)。其结构如图2所示,在数据域中,每一组中包括512行,每行有16字节的数据,在标签域中,每组中都有512行与数据域的行相对应,每一行中有19位的标签。经过地址总线的中间的地址位来选择某一行的数据,同时经过地址总线的高端的地址位来判断DCache是否命中。而且因为读出的是16字节的数据,而设计的微处理器所须要的仅仅是32位的数据,所以在数据被读出后还须要经过地址总线的低端的地址位来选择相应的字段,并把微处理器须要的字段放到数据总线上。

3.2 DCache控制器的结构

DCache控制器在整个DCache中处于很是重要的地位,它控制了整个DCache所要进行的操做,同时会在发生缺失时采起相应的对策。其主要功能以下:
1)反馈给微处理器读取DCache的信息,包括DCache的命中或者缺失等信息。若是发生缺失,可能会要求流水线发生阻塞。
2)若是发生缺失,须要从下一级存储单元寻找相应的地址中的内容,并将内容载入到DCache中。
3)控制读写操做。若是是读操做,则须要为下一级的操做提供相应的数据。若是是写操做,则须要将数据写入到相应的地址中去。
为了完成上述的功能,整个DCache控制器被分为三个部分,分别为用来判断命中仍是缺失的判断部分和用来执行发生缺失时一些相应操做的有限状态机部分以及正常读写的控制部分。其中有限状态机部分中还包括了两个存储块,分别是为了实现LRU (least recently used)算法的LRU数据块和为了判断存储的数据有没有被改写过的Dirty数据块,其具体的结构图如图3所示。
图3:DCache控制器的结构图
经过将Tag和地址总线的高地址位比较所得出的hit标志提供给FSM,来肯定是否须要启用缺失处理功能。同时FSM能够经过控制L1 Cache和L2Cache的读写,来实现缺失后数据的操做。hit标志一样也会输出到微处理器,使得微处理器在发生缺失的时候阻塞流水线。

4 Cache的操做分析

因为DCache中会发生读或者写两种操做,下面将对DCache中的读写操做分别进行分析。
本文涉及的微处理器由5级流水线构成,分别是取指(IF),指令译码(ID),执行(EXE),内存存取(MEM),回写(WB)。在MEM操做以前是EXE操做,也就是ALU会根据指令的不一样,计算出不一样的地址值,不管进行的是读或者写操做,都须要进行读DCache中相应地址的Tag值,并经过比较Tag标志位来判断须要读出或者写入的地址单元是否存在于DCache中。

读操做

本设计所采用的读操做的方式是将标签域(Tag)中的内容和数据域(Data)中的内容同时读出,而后再将Tag的内容与地址高端进行比较。若是相等,则说明DCache命中,读出的Data的内容正是给出的地址中的内容。若是不相等,则说明发生了DCache读缺失,须要进行缺失处理。在不发生缺失的状况下,一次读操做能够在一个Clock周期内完成。这很是符合流水线的特性。
若是发生读缺失,DCache中FSM会首先查看LRU块,肯定两路数据存储中具备同一索引的两个行中哪一行将会被替换出去。而后FSM会查看Dirty块,肯定是否须要将行中的内容更新到主存。若是须要,则将以前读出的数据写入到主存,而后将主存中的数据读出,放到数据总线上,供流水线的下一级使用。若是不须要,则直接读取主存中相应地址的数据并放到数据总线上,供下一级使用。这些操做完成以后FSM会通知微处理器中止阻塞流水线,这样在下一个时钟周期微处理器又会正常运行。
图4:读操做流程图
读操做的具体流程和发生缺失后FSM的相应操做流程如图4所示。

写操做

写操做通常有两种方式分别是写经过(Write-through)方式和写回方式(Write-back)。写经过方式支持改写Cache中的内容,可是不容许Cache和主存内容不一致,所以,对在对Cache进行写操做时,对主存也要进行写操做。这会延长写操做的时间。而写回方式则是对相应的Cache进行写操做,可是并不当即对主存进行写操做,这能有效的减小访问主存的延迟。可是这种方式的实现比较复杂,由于Cache和主存的内容存在不一致性。处于提升性能的考虑,本设计所采用的是写回的方式。
写操做分两步进行,第一步须要读取标签域(Tag) 和数据域(Data)中的内容,而后把Tag的内容与地址高端进行比较。若是相等,则说明DCache命中,须要写入数据的地址存在,能够将数据写入DCache中。同时因为写入的数据只有32位,而读出的数据有128位,须要经过地址总线的低位来进行选择须要写入的字段。若是Tag不相等,则说明发生了DCache写缺失,须要进行缺失处理。在不发生缺失的状况下,一次写操做须要两个Clock周期来完成。这不符合流水线的要求,因此本次设计中采用了流水线式的写入方式,在微处理器和DCache之间加入了一级写缓存。在读取DCache的标签和数据的内容的同时,将数据写入写缓存。这样就可以使得写入操做以流水线的方式进行。能够知足流水线微处理器的要求。
当发生写缺失时,一样FSM会先查看LRU块,肯定哪一行须要从两路数据存储块中删除,而后再查看须要从Dcache中删除的行是否为“脏”。若是是“脏”行,则将以前从DCache中读出的数据写入到主存,并将主存的数据读出,并连同以前存入写缓存中的数据,准备写入到DCache中。若是行“干净”,则直接读出主存中的数据,并和写缓存的数据作好写入DCache的准备。完成以后FSM会通知微处理器中止阻塞流水线,这样在下一个时钟周期微处理器又会正常运行,同时将数据写入。

cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。若是存有该地址,则将数据返回处理器;若是没有保存该地址,则进行常规的存储器访问。由于高速缓冲存储器老是比主RAM存储器速度快,因此当RAM的访问速度低于微处理器的速度时,常使用高速缓冲存储器。

 

Cache(即高速缓冲存储器(Cache Memory),是咱们最常听到的一个词了。在老鸟们眼中,这个词或许已没有再谈的必要,由于他们对Cache从设计的必要性到工做原理、工做过程等等都已了如指掌了;而对菜鸟朋友们而言,这些未必就很清楚。那么,它们究竟是指的什么呢?不用急,下面就请随笔者一块儿来全面认识Cache。

为何要设计Cache?   

         咱们知道,电脑的内存是以系统总线的时钟频率工做的,这个频率一般也就是CPU的外频(对于雷鸟、毒龙系列的处理器,因为在设计采用了DDR技术,CPU工做的外频为系统总线频率的两倍)。可是,CPU的工做频率(主频)是外频与倍频因子的乘积。这样一来,内存的工做频率就远低于CPU的工做频率了。这样形成的直接结果是:CPU在执行完一条指令后,经常须要“等待”一些时间才能再次访问内存,极大降了CPU工做效率。在这样一种状况下,Cache就应运而生了!

CACHE
                CACHE

CACHE:Cache是一种特殊的存储器,它由Cache 存储部件和Cache控制部件组成。Cache 存储部件通常采用与CPU同类型的半导体存储器件,存取速度比内存快几倍甚至十几倍。而Cache 控制器部件包括主存地址寄存器、Cache 地址寄存器,主存—Cache地址变换部件及替换控制部件等。至于它们各自又是怎样工做的、有何做用等等,我想咱们就没有必要作进一步的研究,知道通常Cache分为L1 Cache(其中又分为数据Cache、代码Cache)、L2 Cache就好了。

CACHE是怎么工做的?/CACHE 

咱们知道,CPU运行程序是一条指令一条指令地执行的,并且指令地址每每是连续的,意思就是说CPU在访问内存时,在较短的一段时间内每每集中于某个局部,这时候可能会碰到一些须要反复调用的子程序。电脑在工做时,把这些活跃的子程序存入比内存快得多的Cache 中。CPU在访问内存时,首先判断所要访问的内容是否在Cache中,若是在,就称为“命中”,此时CPU直接从Cache中调用该内容;不然,就称为“不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但能够直接从Cache中读出内容,也能够直接往其中写入内容。因为Cache的存取速率至关快,使得CPU的利用率大大提升,进而使整个系统的性能得以提高

CACHE的应用/CACHE 

CACHECPU

 

早在486时代,主板上就设计了Cache插槽,用户能够根据须要本身配置Cache;586级的CPU芯片中已集成了部分Cache,同时还保留了Cache插槽供用户扩充,而到了Pentium Ⅱ时代后,Cache已所有集成到了CPU芯片中,主板上再也没有Cache插槽。如今比较流行的CPU芯片中通常集成了至少16KB的代码Cache 和16KB的数据Cache(做为L1 Cache),以及至少64KB的L2 Cache。

有的朋友可能会问,既然Cache的做用如此重要,那为么不把电脑的所有内存都变为Cache,那样不是更好吗?其实对于这个问题,撇开价格因素,单就其实用性而言也是没有必要的,毕竟,电脑在执任务时,那种使用频率很是高的子程序或指令不是不少的,所以那些使用频率不过高的内容只须保存在速度相对较低的内存中就能够了!

在实际应用中,Cache,尤为是L2Cache对系统的性能,特别是对浮点运算能力有较大的影响。而咱们知道,大部分游戏的流畅运行须要频繁的浮点运算。所以,CPU运行游戏的性能的好坏与L2Cache的容量与速度有很大关系。

地址映像

·地址映像 
所谓映象问题是指如何肯定Cache中的内容是主存中的哪一部分的拷贝,即必须应用某种函数把主存地址映象到Cache中定位,也称地址映象。当信息按这种方式装入Cache中后,执行程序时,应将主存地址变换为Cache地址,这个变换过程叫做地址变换。地址映象方式一般采用直接映象、全相联映象、组相联映象三种

 

CACHE硬盘

一、直接映像

 

是指每一个主存页只能复制到某一固定的Cache页中。直接映像的规律是:将主存的2048页分为128组,每组有16页,分别与Cache的16页直接对应,即主存的第0页、第16页、第32页……只能映像到Cache的第0页。

二、全相联映像

全相联映像是指主存的每一页能够映像能够映像到Cache的任意一页。

三、组相联映像

组相联映像是直接映像与全相联映像的折中方案,它将Cache分为若干组,如8组;每组若干页,如2页;同时将主存分为若干组,如255组;每组内的页数与Cache的组数相同,如8页。组相联映像的规律是主存中的各页与Cache的组号有固定的映像关系,但可自由映像到对应的Cache组中的任意一页。即组间采用直接映像,而组内的页为全相联映像。

替换机构/CACHE 

当CPU访问Cache未命中时,应从主存中读取信息,同时写入Cache。若Cache未满,则直接写入;若Cache已满,则须要进行替换。替换机构由硬件组成,并按替换算法进行设计,其做用是指出替换的页号。经常使用的替换算法有先进先出算法(FIFO)和近期最少使用算法(LRU)。

读写操做/CACHE 

一、读操做

访存时,将主存地址同时送主存和Cache,一则启动对主存的读操做,二则在Cache中按映像方式从中获取Cache地址,并将主存标记与Cache标记比较:若相同,则访问命中,从Cache中读取数据。由于Cache速度比主存速度快,因此不等主存读操做结束,便可继续下一次访存操做;若不相同,则访问未命中,则从主存中读取数据,并考虑是否按某种替换算法更新Cache某页的内容。

二、写操做

将数据写入主存有两种方法,写回法和些直达法。

写回法:信息暂时只写入Cache,并用标志加以注明,直到该页内容需从Cache中替换出来时,才一次写入主存。优势是操做速度快,缺点是写回主存前,主存中没有这些内容,与Cache不一致,易形成错误。

写直达法:信息在写入Cahce时也同时写入主存。优势是主存与Cache始终保持一致,但速度慢。

Buffer和Cache区别/CACHE 

缓存(cached)是把读取过的数据保存起来,从新读取时若命中(找到须要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把再也不读的内容不断日后排,直至从中删除。  

 

CACHE内存
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操做集中进行,减小磁盘碎片和硬盘的反复寻道,从而提升系统性能。linux有一个守护进程按期清空缓冲内容(即写如 磁盘),也能够经过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的灯没有跳动,过了一下子(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,因此有些时候卸载一个设备时要等上几秒钟。  

 

修改/etc/sysctl.conf中的vm.swappiness右边的数字能够在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,能够改一下试试。二者都是RAM中的数据。简单来讲,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。  

buffer是由各类进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在全部字段被读入完整以前,进程把先前读入的字段放在buffer中保存。  

cache常常被用在磁盘的I/O请求上,若是有多个进程都要访问某个文件,因而该文件便被作成cache以方便下次被访问,这样可提供系统性能。

相关知识/CACHE 

 一般人们所说的Cache就是指缓存SRAM。 SRAM叫静态内存,“静态”指的是当咱们将一笔数据写入SRAM后,除非从新写入新数据或关闭电源,不然写入的数据保持不变。   

 

CACHE主板 图册
因为CPU的速度比内存和硬盘的速度要快得多,因此在存取数据时会使 CPU等待,影响计算机的速度。SRAM的存取速度比其它内存和硬盘都要快,因此它被用做电脑的高速缓存(Cache)。   

 

有了高速缓存,能够先把数据预写到其中,须要时直接从它读出,这就缩短了CPU的等待时间。高速缓存之因此能提升系统的速度是基于一种统计规律,主板上的控制系统会自动统计内存中哪些数据会被频繁的使用,就把这些数据存在高速缓存中,CPU要访问这些数据时,就会先到Cache中去找,从而提升总体的运行速度。通常说来,256K的高速缓存能使整机速度平均提升10%左右。  

主板上一般都会提供256K到1M的缓存。在CPU内部也有高速缓存,如486CPU有8K的高速缓存,Pentium有16K的高速缓存。Pentium II有32K 一级缓存,AMD K6-2中有64K的一级Cache,AMD K6-3中有64K 的一级 Cache,和256K 的二级Cache,Cyrix MII 中有64K的Cache。  

为了区分它们,CPU内部的缓存叫内部高速缓存(Internal Cache)或一级高速缓存,主板上的缓存叫外部高速缓存(External Cache)或二级高速缓存。不过如今的Pentium II 的CPU已经将主板上的二级缓存封装在CPU的盒子中,AMD K6-3的CPU内部也集成了256K的二级Cache,对于这类CPU来讲,主板上提供的已经是三级缓存了。

相关文章
相关标签/搜索