说说内核与计算机硬件结构
1.内核诸如51/ARM/90/PIC/AVR.....有好多种的,何况内核从来不分类,因为每一家常都可以改内核,你应该问的是架构!!只有懂架构才能用什么片子都驾轻就熟. 我详细的说一下吧. HARVARD(哈佛)架构:ROM(程序空间)与RAM(数据空间)分开,便于程序与数据的同时访问,减少程序运行时访问的瓶颈,提高数据吞吐. PRINCETON(普林斯顿)架构:采用通用计算机广泛使用的ROMRAM合二为一的方式,就是众所周知的冯诺依曼结构,程序指令存储地址和数据指令存储地址指向同一存储器不同位置,因此程序指令和数据的宽度相同. 举例说明:以英特尔为例:MCS-51用的是哈佛架构,而后及产品16位的MCS-96就是普林斯顿架构.ARM公司卖的内核几乎多是哈佛架构的.
2.请问PIC单片机和AVR单片机是51内核的吗?
不是,都有自己的C编译环境
3.STC51单片机和AT89S51的汇编语言一样吗?
内核和指令集都是一样的, 所以放心,另外建议你编辑的时候如果对执行时间要求不是很苛刻的话,尽量使用C语言,毕竟通用性好且比较简单
但汇编程序也要会啊!这个可以直接与芯片交流呀!
4.AVR单片机是什么内核?
答:AVR单片机内核就是AVR内核,和51内核是不一样的,如果内核一样的话,那它的汇编指令应该是一样的,实际上他们的汇编指令是
完全不一样的。AVR是美国ATMEL公司研发的,ATMEL公司有三大系列MCU,一种是老式的以8051内核的单片机,第二种是目前大量使用
的以AVR内核的AVR单片机。第三种是目前高端的以ARM内核的微处理器。ARM已经不是单片机那么简单的概念了,差不多跟电脑CPU类似
了。现在手机上的CPU就是AVR的。
5.51系列单片机的区别与特点介绍
8031/8051/8751是Intel公司早期的产品。
1、8031的特点
8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764系列。用户若想对写入到EPROM中的程序进行修改,必须先用一种特殊的紫外线灯将其照射擦除,之后再可写入。写入到外接程序存储器的程序代码没有什么保密性可言。
2、8051的特点
8051片内有4k ROM,无须外接外存储器和373,更能体现“单片”的简练。但是你编的程序你无法烧写到其ROM中,只有将程序交芯片厂代你烧写,并是一次性的,今后你和芯片厂都不能改写其内容。
3、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位的处理器架构,比如8051、PIC14、PIC16、PIC18、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再从缓存中获取指令和数据能够提高cpu的速度。
可以被称作rom的东西很多,如pc主板上的rom芯片,pc关机后,rom的数据不会丢失,开机时先运行其中的bios程序,完成硬件配置和检测,之后会将磁盘第一个扇区中操作系统的引导程序装入内存,然后徐跳到引导程序。引导程序会进一步将操作系统存储在磁盘上的内核装入内存,最后执行内核程序。内核加载文件系统,并执行gui程序,便可以看到pc的桌面了。
链接:https://www.zhihu.com/question/24565362/answer/74078750
缓存有两种概念。一种是指硬件高速缓冲存储器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的层次设计
整个系统的层次结构如图1所示,由ICache和DCache构成L1 Cache,以及和L1 Cache接口的L2 Cache,和L2 Cache接口的DRAM。其中L1 Cache和L2 Cache是在微处理器片内,而DRAM是作为主存,存在于片外。这跟目前主流的个人电脑的层次结构很相似。
Cache的结构分析
3.1 DCache存储器的结构
3.2 DCache控制器的结构
4 Cache的操作分析
读操作
写操作
cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM存储器速度快,所以当RAM的访问速度低于微处理器的速度时,常使用高速缓冲存储器。
Cache(即高速缓冲存储器(Cache Memory),是我们最常听到的一个词了。在老鸟们眼中,这个词或许已没有再谈的必要,因为他们对Cache从设计的必要性到工作原理、工作过程等等都已了如指掌了;而对菜鸟朋友们而言,这些未必就很清楚。那么,它们到底是指的什么呢?不用急,下面就请随笔者一起来全面认识Cache。
为什么要设计Cache?
我们知道,电脑的内存是以系统总线的时钟频率工作的,这个频率通常也就是CPU的外频(对于雷鸟、毒龙系列的处理器,由于在设计采用了DDR技术,CPU工作的外频为系统总线频率的两倍)。但是,CPU的工作频率(主频)是外频与倍频因子的乘积。这样一来,内存的工作频率就远低于CPU的工作频率了。这样造成的直接结果是:CPU在执行完一条指令后,常常需要“等待”一些时间才能再次访问内存,极大降了CPU工作效率。在这样一种情况下,Cache就应运而生了!
CACHE:Cache是一种特殊的存储器,它由Cache 存储部件和Cache控制部件组成。Cache 存储部件一般采用与CPU同类型的半导体存储器件,存取速度比内存快几倍甚至十几倍。而Cache 控制器部件包括主存地址寄存器、Cache 地址寄存器,主存—Cache地址变换部件及替换控制部件等。至于它们各自又是怎样工作的、有何作用等等,我想我们就没有必要做进一步的研究,知道一般Cache分为L1 Cache(其中又分为数据Cache、代码Cache)、L2 Cache就行了。
我们知道,CPU运行程序是一条指令一条指令地执行的,而且指令地址往往是连续的,意思就是说CPU在访问内存时,在较短的一段时间内往往集中于某个局部,这时候可能会碰到一些需要反复调用的子程序。电脑在工作时,把这些活跃的子程序存入比内存快得多的Cache 中。CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中”,此时CPU直接从Cache中调用该内容;否则,就称为“不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由于Cache的存取速率相当快,使得CPU的利用率大大提高,进而使整个系统的性能得以提升
CACHE的应用/CACHE
早在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地址,这个变换过程叫作地址变换。地址映象方式通常采用直接映象、全相联映象、组相联映象三种
1、直接映像
是指每个主存页只能复制到某一固定的Cache页中。直接映像的规律是:将主存的2048页分为128组,每组有16页,分别与Cache的16页直接对应,即主存的第0页、第16页、第32页……只能映像到Cache的第0页。
2、全相联映像
全相联映像是指主存的每一页可以映像可以映像到Cache的任意一页。
3、组相联映像
组相联映像是直接映像与全相联映像的折中方案,它将Cache分为若干组,如8组;每组若干页,如2页;同时将主存分为若干组,如255组;每组内的页数与Cache的组数相同,如8页。组相联映像的规律是主存中的各页与Cache的组号有固定的映像关系,但可自由映像到对应的Cache组中的任意一页。即组间采用直接映像,而组内的页为全相联映像。
当CPU访问Cache未命中时,应从主存中读取信息,同时写入Cache。若Cache未满,则直接写入;若Cache已满,则需要进行替换。替换机构由硬件组成,并按替换算法进行设计,其作用是指出替换的页号。常用的替换算法有先进先出算法(FIFO)和近期最少使用算法(LRU)。
1、读操作
访存时,将主存地址同时送主存和Cache,一则启动对主存的读操作,二则在Cache中按映像方式从中获取Cache地址,并将主存标记与Cache标记比较:若相同,则访问命中,从Cache中读取数据。因为Cache速度比主存速度快,所以不等主存读操作结束,即可继续下一次访存操作;若不相同,则访问未命中,则从主存中读取数据,并考虑是否按某种替换算法更新Cache某页的内容。
2、写操作
将数据写入主存有两种方法,写回法和些直达法。
写回法:信息暂时只写入Cache,并用标志加以注明,直到该页内容需从Cache中替换出来时,才一次写入主存。优点是操作速度快,缺点是写回主存前,主存中没有这些内容,与Cache不一致,易造成错误。
写直达法:信息在写入Cahce时也同时写入主存。优点是主存与Cache始终保持一致,但速度慢。
缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
缓冲(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就是指缓存SRAM。 SRAM叫静态内存,“静态”指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变。
有了高速缓存,可以先把数据预写到其中,需要时直接从它读出,这就缩短了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来说,主板上提供的已是三级缓存了。