精华内容
下载资源
问答
  • 2020-03-11 21:04:05

    先说内存的含义:

    内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

    只读存储器(ROM)

    ROM是线路最简单半导体电路,通过掩模工艺,一次性制造,在元件正常工作的情况下,其中的代码与数据将永久保存,并且不能够进行修改。一般应用于PC系统的程序码、主机板上的 BIOS (基本输入/输出系统Basic Input/Output System)等。它的读取速度比RAM慢很多。

    根据组成元件的不同,ROM内存又分为以下五种:

    1.MASK ROM(掩模型只读存储器)

    制造商为了大量生产ROM内存,需要先制作一颗有原始数据的ROM或EPROM作为样本,然后再大量复制,这一样本就是MASK ROM,而烧录在MASK ROM中的资料永远无法做修改。它的成本比较低。

    2.PROM(Programmable ROM,可编程只读存储器)

    这是一种可以用刻录机将资料写入的ROM内存,但只能写入一次,所以也被称为“一次可编程只读存储器”(One Time Progarmming ROM,OTP-ROM)。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1), 以实现对其“编程”的目的。

    3.EPROM(Erasable Programmable,可擦可编程只读存储器)

    这是一种具有可擦除功能,擦除后即可进行再编程的ROM内存,写入前必须先把里面的内容用紫外线照射它的IC卡上的透明视窗的方式来清除掉。这一类芯片比较容易识别,其封装中包含有“石英玻璃窗”,一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住, 以防止遭到阳光直射。

    4.EEPROM(Electrically Erasable Programmable,电可擦可编程只读存储器)

    功能与使用方式与EPROM一样,不同之处是清除数据的方式,它是以约20V的电压来进行清除的。另外它还可以用电信号进行数据写入。这类ROM内存多应用于即插即用(PnP)接口中。

    5.Flash Memory(快闪存储器)

    这是一种可以直接在主机板上修改内容而不需要将IC拔下的内存,当电源关掉后储存在里面的资料并不会流失掉,在写入资料时必须先将原本的资料清除掉,然后才能再写入新的资料,缺点为写入资料的速度太慢。

    随机存储器(RAM)

    01.DRAM(Dynamic RAM,动态随机存取存储器):

    这是最普通的RAM,一个电子管与一个电容器组成一个位存储单元,DRAM将每个内存位作为一个电荷保存在位存储单元中,用电容的充放电来做储存动作,但因电容本身有漏电问题,因此必须每几微秒就要刷新一次,否则数据会丢失。存取时间和放电时间一致,约为2~4ms。因为成本比较便宜,通常都用作计算机内的主存储器。

    02.SRAM(Static RAM,静态随机存取存储器)

    静态,指的是内存里面的数据可以长驻其中而不需要随时进行存取。每6颗电子管组成一个位存储单元,因为没有电容器,因此无须不断充电即可正常运作,因此它可以比一般的动态随机处理内存处理速度更快更稳定,往往用来做高速缓存。

    03.VRAM(Video RAM,视频内存)

    它的主要功能是将显卡的视频数据输出到数模转换器中,有效降低绘图显示芯片的工作负担。它采用双数据口设计,其中一个数据口是并行式的数据输出入口,另一个是串行式的数据输出口。多用于高级显卡中的高档内存。

    04.FPM DRAM(Fast Page Mode DRAM,快速页切换模式动态随机存取存储器)

    改良版的DRAM,大多数为72Pin或30Pin的模块。传统的DRAM在存取一个BIT的数据时,必须送出行地址和列地址各一次才能读写数据。而FRM DRAM在触发了行地址后,如果CPU需要的地址在同一行内,则可以连续输出列地址而不必再输出行地址了。由于一般的程序和数据在内存中排列的地址是连续的,这种情况下输出行地址后连续输出列地址就可以得到所需要的数据。FPM将记忆体内部隔成许多页数Pages,从512B到数KB不等,在读取一连续区域内的数据时,就可以通过快速页切换模式来直接读取各page内的资料,从而大大提高读取速度。在96年以前,在486时代和PENTIUM时代的初期,FPM DRAM被大量使用。

    05.EDO DRAM(Extended Data Out DRAM,延伸数据输出动态随机存取存储器)

    这是继FPM之后出现的一种存储器,一般为72Pin、168Pin的模块。它不需要像FPM DRAM那样在存取每一BIT 数据时必须输出行地址和列地址并使其稳定一段时间,然后才能读写有效的数据,而下一个BIT的地址必须等待这次读写操作完成才能输出。因此它可以大大缩短等待输出地址的时间,其存取速度一般比FPM模式快15%左右。它一般应用于中档以下的Pentium主板标准内存,后期的486系统开始支持EDO DRAM,到96年后期,EDO DRAM开始执行。。

    06.BEDO DRAM(Burst Extended Data Out DRAM,爆发式延伸数据输出动态随机存取存储器)

    这是改良型的EDO DRAM,是由美光公司提出的,它在芯片上增加了一个地址计数器来追踪下一个地址。它是突发式的读取方式,也就是当一个数据地址被送出后,剩下的三个数据每一个都只需要一个周期就能读取,因此一次可以存取多组数据,速度比EDO DRAM快。但支持BEDO DRAM内存的主板可谓少之又少,只有极少几款提供支持(如VIA APOLLO VP2),因此很快就被DRAM取代了。

    07.MDRAM(Multi-Bank DRAM,多插槽动态随机存取存储器)

    MoSys公司提出的一种内存规格,其内部分成数个类别不同的小储存库 (BANK),也即由数个属立的小单位矩阵所构成,每个储存库之间以高于外部的资料速度相互连接,一般应用于高速显示卡或加速卡中,也有少数主机板用于L2高速缓存中。

    08.WRAM(Window RAM,窗口随机存取存储器)

    韩国Samsung公司开发的内存模式,是VRAM内存的改良版,不同之处是它的控制线路有一、二十组的输入/输出控制器,并采用EDO的资料存取模式,因此速度相对较快,另外还提供了区块搬移功能(BitBlt),可应用于专业绘图工作上。

    09.RDRAM(Rambus DRAM,高频动态随机存取存储器)

    Rambus公司独立设计完成的一种内存模式,速度一般可以达到500~530MB/s,是DRAM的10倍以上。但使用该内存后内存控制器需要作相当大的改变,因此它们一般应用于专业的图形加速适配卡或者电视游戏机的视频内存中。

    10.SDRAM(Synchronous DRAM,同步动态随机存取存储器)

    这是一种与CPU实现外频Clock同步的内存模式,一般都采用168Pin的内存模组,工作电压为3.3V。 所谓clock同步是指内存能够与CPU同步存取资料,这样可以取消等待周期,减少数据传输的延迟,因此可提升计算机的性能和效率。

    11.SGRAM(Synchronous Graphics RAM,同步绘图随机存取存储器)

    SDRAM的改良版,它以区块Block,即每32bit为基本存取单位,个别地取回或修改存取的资料,减少内存整体读写的次数,另外还针对绘图需要而增加了绘图控制器,并提供区块搬移功能(BitBlt),效率明显高于SDRAM。

    12.SB SRAM(Synchronous Burst SRAM,同步爆发式静态随机存取存储器)

    一般的SRAM是非同步的,为了适应CPU越来越快的速度,需要使它的工作时脉变得与系统同步,这就是SB SRAM产生的原因。

    13.PB SRAM(Pipeline Burst SRAM,管线爆发式静态随机存取存储器)

    CPU外频速度的迅猛提升对与其相搭配的内存提出了更高的要求,管线爆发式SRAM取代同步爆发式SRAM成为必然的选择,因为它可以有效地延长存取时脉,从而有效提高访问速度。

    14.DDR SDRAM(Double Data Rate二倍速率同步动态随机存取存储器)

    作为SDRAM的换代产品,它具有两大特点:其一,速度比SDRAM有一倍的提高;其二,采用了DLL(Delay Locked Loop:延时锁定回路)提供一个数据滤波信号。这是目前内存市场上的主流模式。

    15.SLDRAM (Synchronize Link,同步链环动态随机存取存储器)

    这是一种扩展型SDRAM结构内存,在增加了更先进同步电路的同时,还改进了逻辑控制电路,不过由于技术显示,投入实用的难度不小。

    16.CDRAM(CACHED DRAM,同步缓存动态随机存取存储器)

    这是三菱电气公司首先研制的专利技术,它是在DRAM芯片的外部插针和内部DRAM之间插入一个SRAM作为二级CACHE使用。当前,几乎所有的CPU都装有一级CACHE来提高效率,随着CPU时钟频率的成倍提高,CACHE不被选中对系统性能产生的影响将会越来越大,而CACHE DRAM所提供的二级CACHE正好用以补充CPU一级CACHE之不足,因此能极大地提高CPU效率。

    17.DDRII (Double Data Rate Synchronous DRAM,第二代同步双倍速率动态随机存取存储器)

    DDRII 是DDR原有的SLDRAM联盟于1999年解散后将既有的研发成果与DDR整合之后的未来新标准。DDRII的详细规格目前尚未确定。

    18.DRDRAM (Direct Rambus DRAM)

    是下一代的主流内存标准之一,由Rambus 公司所设计发展出来,是将所有的接脚都连结到一个共同的Bus,这样不但可以减少控制器的体积,已可以增加资料传送的效率。
    还要介绍一下最新的 我们大部分知道的 DDR3与DDR4

    DDR3:

    2005年制造出DDR3的原型产品。2007年,市场开始使用DDR3内存芯片。

    与DDR2相比,DDR3采用8bit预取,因此提供更高的传输速率(2133MT/s);更低的工作电压(1.5V,DDR2工作电压为1.8V),另外采用了不同的封装工艺,因此能耗更低。

    延迟周期同样比DDR2增长,引脚数增加。

    DDR4:

    2011年,samsung宣布生产出第一个DDR4内存模块。2012年,samsung、Micron等开始量产DDR4 SDRAM芯片。

    与DDR3相比,DDR4提供更高的时钟频率和传输速率(4166MT/s);更低的工作电压(1.05~1.2V),因此能耗更低。

    高速缓冲存储器(CACHE)

    高速缓冲存储器cache一般采用随机存取方式。
      高速缓冲存储器cache工作时,cache能够根据指令地址得到cache中对应地址,按地址存取,因此它是随机存取。

    高速缓冲存储器(Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。
      高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。
      高速缓冲存储器最重要的技术指标是它的命中率
    这个比较陌生,给一个总结的文章链接:高速缓冲存储器cache介绍

    FLASH

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

    目前Flash主要有两种NOR FlashNADN Flash

    NOR Flash:NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息。NOR FLASH数据线和地址线分开,可以实现RAM一样的随机寻址功能,可以读取任何一个字节,但是擦除仍要按块来擦。

    NADN Flash:没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的"闪盘",可以在线擦除。NAND FLASH同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。(NAND FLASH按块来擦除,按页来读,NOR FLASH没有页)。由于NAND FLASH引脚上复用,因此读取速度比NOR FLASH慢一点,但是擦除和写入速度比NOR FLASH快很多。NAND FLASH内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是NAND FLASH型的。小容量的2~12M的flash多是NOR FLASH型的。

    来一个两种flash的比较
    NOR flash 和NAND flash区别深入分析

    此外还有新起之秀 EMMC
    emmc存储器eMMC (Embedded Multi Media Card) 为MMC协会所订立的,eMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样的重要。
    eMMC由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备(Nand Flash)及主控制器,所有都在一个小型的BGA 封装。接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能。同时其接口电压可以是 1.8v 或者是 3.3v。

    现在很多智能电视已经逐步抛弃Nor或Nand,使用更为先进的eMMC芯片,然而普通编程器无法读写eMMC芯片,新开发的可支持eMMC芯片烧写的编程器性价比高,还能支持Nor、Nand芯片,支持全面、功能强大

    更多相关内容
  • 内存工作设置(工作集)、提交大小概念简述

    万次阅读 多人点赞 2018-01-08 00:28:58
    Windows7的任务管理器(以中文版为例)里面"进程"Tab页的列里面跟内存相关的展示项有...譬如什么工作集,专用工作集等等,另外像其它的一些常用工具,譬如ProcessExplorer里面可能又是叫Working Set,Private Bytes等等

    内存工作设置(工作集)、提交大小概念简述

    前言

    Windows7的任务管理器(以中文版为例)里面"进程"Tab页的列里面跟内存相关的展示项有7项(分页池和非页面缓冲池跟内核内存有关,暂不讨论),做软件工程师多年,大家真的懂任务管理器中这些内存相关的列吗?譬如什么工作集,专用工作集等等,另外像其它的一些常用工具,譬如ProcessExplorer里面可能又是叫Working Set,Private Bytes。

    另外像SetProcessWorkingSet,EmptyWorkingSet这些函数真的是洪水猛兽,完全不能使用吗?本文将简单讨论下这些问题,另外简单介绍下VMMap工具的使用。

    名词解释

    先进行一下名词解释,其实这个地方容易搞混的一个原因也是不同的工具的描述不一样,导致有些混乱,因此这里先把这些概念统一下,然后再进行解释(WS:Working Set的简称,none:表示无对应的显示选项)。

    Win7任务管理器中名称Process Explorer中名称VMMap中的名称
    工作设置(内存)Working SetTotal WS
    内存(专用工作集)WS PrivatePrivate WS
    提交大小Private BytesPrivate(or Private Bytes)
    内存(共享工作集)*WS ShareableShareable WS
    noneWS SharedShared WS
    noneVirtrual SizeSize
    nonenoneCommitted

    *Win10上面有共享工作集的展示

    工作设置(内存)/Working Set/Total WS: 专用(私有)工作集(当前进程独占)中的物理内存数量与进程正在使用且可以和其他进程共享的物理内存数量的总和,因此可以这么理解,该值就是该进程所占用的总的物理内存,但是这个值是由两部分组成,即"专用工作集"和"共享工作集"(Win10的任务管理器里面可以看到共享工作集)。在深入解析Windows操作系统里面是这样描述的:物理上驻留在内存中的那一部分子集称为工作集(Working Set)。

    峰值工作设置(内存): 进程的工作设置(内存)的最值,可以这么理解,因为工作设置(内存)是波动的,这个项专门记录最大的那个值。

    内存(专用工作集)/WS Private/ Private WS: 工作集的子集,它专门描述某个进程正在使用且无法与其他进程共享的物理内存值。这个值对于一个进程来说也是最重要的,它代表了一个进程到底独占了多少物理内存。

    内存(共享工作集)/ WS Shareable/ Shareable WS: 进程和可以和别的进程共享的物理内存值(注意:是可以共享的,不一定共享了)。比较常见的,譬如,加载系统的一些DLL所占用的物理内存,文件共享内存(文件映射),命名共享内存等等。

    WS Shared/ Shared WS: WS Shareable的子集,这部分是表示已经和别的进程共享的物理内存。

    提交大小/ Private Bytes/ Private: 给当前进程使用而保留的私有虚拟内存的数量,从名字里面的Private可以看出它是专有的,但是和上面的WS Private的区别在于,WS Private是纯物理内存,而Private Bytes实际上是虚拟内存的概念,是包含WS Private的,另外一部分是在换页文件(被从物理内存里面换出去了)里面,有些内存,虽然你提交,但是如果一直没有使用,也是在页面文件(换页文件:PageFile)里面。另外,多说一句,如果要查内存泄漏,可以关注这个值。

    Virtrual Size/Size: 当前进程使用的所有的虚拟内存空间,包含共享,非共享,物理,页面,甚至为程序保留但还未分配的内存。

    Committed: Virtual Size减去为程序保留的内存(未分配)。怎么理解为程序保留的但未分配的内存?就是告诉系统我要一块内存,但暂时还用不上,不过分配的地址得给我,系统就给程序一个不用的地址,但不分配内存,等程序真的要使用时(读写),就从页面或物理内存中分配出来映射到那个地址上。

    保留(预定)的内存: 将虚拟内存空间中线性地址0xXXXXXXXX-0xYYYYYYYY标记为预定状态,但是并没有分配实际的内存。这样的好处是我先预定一部分线性地址,以免后面进程空间中没有这么大的地址范围可用(一般来讲只有服务器上面这样用得多)。这样预定后,0xXXXXXXXX-0xYYYYYYYY这块地址就被占用,地址空间也是资源,虽然还没有分配任何内存。

    提交的内存: 系统从物理内存或者换页内存分配给进程的那一部分。这部分内存在虚拟内存的线性地址中是连续的,不过在物理内存或者换页内存中,不一定是连续的。提交但未使用的内存一般都在换页内存里面,只有去使用的时候,才会换到物理内存里面,这点要注意。

    换页内存: 也属于已经提交的内存,不过因为不常用,可能被系统置换到磁盘上面以节省物理内存,后面如果要使用会发生换页错误(缺页中断),再从磁盘上面置换到物理内存。

    缺页中断: 当程序要访问某个地址,系统发现这个地址不在物理内存里,就会产生中断,然后去读取页面文件,把页面文件中与内存相关的数据拷贝到物理内存,然后标记一下这个地址已经在物理内存中了,然后继续让程序运行。

    虚拟内存、物理内存和换页内存: (整个概念还是有一些复杂,这里只简单描述一下)虚拟内存一般是指整个进程用到的(虚拟)地址空间,之所以是虚拟的,因为中间被系统内存管理器抽象了一层,说到这里就牵涉到一个进程的虚拟内存空间的问题,win32下面一般应用层的虚拟地址空间是2G,然后从虚拟内存地址到物理内存有一个映射关系,这个映射是由内存管理器来完成的,对应用程序透明。而虚拟内存里面一般分成保留内存(压根就还没分配的,只是占了地址空间的坑),物理内存(正在使用)和换页内存(从物理内存换出去的,或者分配后一直未使用),另外物理内存和换页内存都属于已经提交的内存。

    分页池: 由内核或驱动程序代表进程分配的可分页内核内存的数量。可分页内存是可以写入其他存储媒介(例如硬盘)的内存。

    非分页缓冲池: 由内核或驱动程序代表进程分配的不可分页的内核内存的数量。不可分页的内存是不能写入其他存储媒介的内存。内核在处理低优先级的中断时,仍可以发生(处理)高优先级的中断,反过来则不行。缺页过程也是一个中断过程(缺页中断),那么就遇到了一个问题,即缺页中断和其他中断的优先级的问题。如果在高于缺页中断的中断优先级上再发生缺页中断,内核就会崩溃。所以在DISPATCH_LEVEL级别以上,绝对不能使用分页内存,一旦使用分页内存,就有发生缺页中断的可能,如果发生就会导致内核崩溃(蓝屏)。

    简单总结下:

    1、工作设置(内存),又叫工作集,即在物理内存中的数据的集合且等于专用工作集与共享工作集的和,Working Set = WS Private + WS Sharable。

    2、把所有的"工作集"相加后的值会大于任务管理器中提示的物理内存的使用值,因为工作集包含了共享工作集,这部分数据会重复计算。但是如果你只把专用工作集全部加起来又会发现小于任务管理器中提示的物理内存的使用值,因为你完全没有计算共享工作集。

    3、通俗的讲工作设置(内存)是程序占用的物理内存(包含与其他程序共享的一部分),内存专用工作集是程序独占的物理内存,提交大小(Private Bytes)是程序独占的内存(包含物理内存和换页内存)。

    4、Committed = VM Private Committed + VM Shareable Committed(VM:虚拟内存)

    5、Committed = Working Set + Page File Committed

    6、Private Bytes = WS Private + Page File Private

    介绍一个测试Windows极限的工具TestLimit,这个玩意功能挺多的,可以探测Windows系统物理内存,虚拟内存,分页&非分页内存,进程&线程,句柄,用户对象和GDI资源等的极限,这里用来探测一下内存的极限。以后有空了可以聊聊Windows其它一些系统资源的极限情况。

    命令行含义参考PID
    TestLimit -r 2048 -c 1Reserve 2G内存13520
    TestLimit -m 2048 –c 1Commit 1G 内存, 但不访问这些内存12448
    TestLimit –d 2048 –c 1Commit 1G内存, 而且访问这些内存13208

    *参考了网上的实验。

    根据PID进行对照,会发现,不同的情况影响的内存参数并不一样,大家可以自己做做这个实验体会下,对于系统内存机制会有更进一步的了解。

    内存优化的概念

    1、进行内存优化时,我们主要关注的指标有,工作设置(内存)/Working Set,内存(专用工作集)/WS Private,Private Bytes等几个,具体实践时要针对性优化。譬如要优化私有物理内存的使用,那么主要关注当前进程模块分配内存的特征和大小,找到主要的矛盾点。如果要优化共享内存的使用,除了关注命名共享内存的大小,文件映射之外,还要排除下进程加载的模块的大小是否有影响。

    2、高峰工作集(内存)这个指标一般关注比较小,也较少针对性的优化,主要是评估下内存使用是否平滑。在一些内存资源非常紧张的系统,要注意这个地方,防止内存高峰时,整个系统响应速度雪崩式下降。

    3、在进行内存优化时,首先要用相关工具进行内存分配的聚类和分析,然后再制订优化的方案和计划,首先要分清是内存使用不合理导致的问题,还是某些算法使用内存时可以进行技术上优化,不同的情况消耗的时间是完全不一样的。

    4、补充说明下经常被视为"洪水猛兽"的"刷内存",也就是调用SetProcessWorkingSet和EmptyWorkingSet(实际上是和使用特殊参数调用SetProcessWorkingSet类似)把强制系统把某个进程的部分物理内存置换到换页内存里面,其实Committed是不会变化的,但是短时间内Working Set会有明显的变化,为什么说是短时间内,因为虽然某些物理内存页临时置换到换页内存了,但是因为进程马上可能就用到的,又会立即被换出来,因此做完这个动作之后,关注下该进程的Page Fault值,会发现有明显的增量,反而可能影响系统性能。这两点(性能反而下降,假内存优化)也是这种方法被长期诟病的一些原因。不过,任何事情都有两面性,霸蛮点说,系统为什么提供这种API?完全没用的话,系统为什么不干掉。其实系统自己也在使用,虚拟内存管理器也会通过这个方法释放更多的物理内存给应用程序使用。当然,无节操的调用当然不行,什么一秒调用一次这种奇葩的操作,这样肯定会影响性能,那一般应该怎样使用呢?这里总结了几点,大家可以根据情况参考下:

    (1) 维持专用工作集(内存)和提交大小(Private Bytes)在一个合适的比例,不停的刷,物理内存600 KB,虚拟内存50M,这一看就不合理,一般来讲(个人经验),维持在1 : 2左右比较合理。实践中建议根据进程稳定之后的内存来设置这个值。

    (2) 建议在程序暂时不被使用的时候(例如最小化,闲时),或者刚刚完成了一件很消耗物理内存的动作之后,进行一次合理的设置。

    (3) 启动2~5分钟之后进行一次设置,这个跟启动时内存消耗的特点有关系,很多对象的生命周期都是和进程一样长,在初始化时,使用了很多STL,ATL或者自定义的对象,消耗了很多内存,但是这些对象可能就启动时用到了,后面大部分情况可能都用不到,但是它们的生命周期又很长,因此可以在启动一段时间之后,把这部分内存置换出去。另外,不建议在进程的生命周期中定时的去刷这个内存,即使要刷,也要降低刷的频率,甚至不刷。

    VMMap常用功能举例

    (略,后面有空再补充,这个工具本身就很简单)。

    参考文档

    1、https://www.cnblogs.com/walfud/articles/3256233.html Windows 任务管理器中的几个内存概念

    2、https://www.zhihu.com/question/19858114 Windows 7 里进程管理器里面的各列是什么含义?主要是和内存有关的内存-专用工作集,内存-工作集,内存-提交大小,这些之间有什么区别?

    3、https://www.cnblogs.com/awpatp/archive/2012/09/17/2688315.html Windows内存的一些知识点

    4、http://shashanzhao.com/archives/832.html windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

    5、https://superuser.com/questions/185318/process-explorer-not-showing-the-biggest-user-of-my-ram Process Explorer not showing the biggest user of my RAM VMMAP显示和process explorer不一样?

    6、http://www.cnblogs.com/georgepei/archive/2012/03/07/2383548.html 内存详解

    7、http://www.cnblogs.com/georgepei/archive/2012/03/07/2383445.html 你真的懂任务管理器中有关内存的参数Private(提交大小)和working set(工作设置)吗?

    8、http://blog.csdn.net/lantianjialiang/article/details/5620647 process explorer中的visual size vs working set; private bytes vs WS private

    9、http://www.cnblogs.com/awpatp/archive/2010/01/26/1656651.html Task Manager跟Performance Monitor的区别(Working set和Private bytes)

    10、https://social.microsoft.com/Forums/zh-CN/155e9b0e-8dd9-449a-960c-ce585850a049?prof=required 为什么任务管理器里面所有进程占用的内存加起来远远小于内存使用量?

    11、https://blogs.technet.microsoft.com/markrussinovich/2008/11/17/pushing-the-limits-of-windows-virtual-memory/ Pushing the Limits of Windows: Virtual Memory

    展开全文
  • 笔记本电脑内存的结构特点工作原理
  • Java内存模型是什么

    千次阅读 2018-07-13 10:45:45
    本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要有Java内存模型,Java内存模型解决了什么问题等。本文中,有很多定义和说法,都是笔者自己理解后定.....


    网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要有Java内存模型,Java内存模型解决了什么问题等。

    本文中,有很多定义和说法,都是笔者自己理解后定义出来的。希望能够让读者可以对Java内存模型有更加清晰的认识。当然,如有偏颇,欢迎指正。

    为什么要有内存模型

    在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情。要说计算机的内存模型,就要说一下一段古老的历史,看一下为什么要有内存模型。

    内存模型,英文名Memory Model,他是一个很老的老古董了。他是与计算机硬件有关的一个概念。那么我先给你介绍下他和硬件到底有啥关系。

    CPU和缓存一致性

    我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存啦。

    刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以从内存中读取和写入数据的过程和CPU的执行速度比起来差距就会越来越大,这就导致CPU每次操作内存都要耗费很多等待时间。

    这就像一家创业公司,刚开始,创始人和员工之间工作关系其乐融融,但是随着创始人的能力和野心越来越大,逐渐和员工之间出现了差距,普通员工原来越跟不上CEO的脚步。老板的每一个命令,传到到基层员工之后,由于基层员工的理解能力、执行能力的欠缺,就会耗费很多时间。这也就无形中拖慢了整家公司的工作效率。

    可是,不能因为内存的读写速度慢,就不发展CPU技术了吧,总不能让内存成为计算机处理的瓶颈吧。

    所以,人们想出来了一个好的办法,就是在CPU和内存之间增加高速缓存。缓存的概念大家都知道,就是保存一份数据拷贝。他的特点是速度快,内存小,并且昂贵。

    那么,程序的执行过程就变成了:

    当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。

    之后,这家公司开始设立中层管理人员,管理人员直接归CEO领导,领导有什么指示,直接告诉管理人员,然后就可以去做自己的事情了。管理人员负责去协调底层员工的工作。因为管理人员是了解手下的人员以及自己负责的事情的。所以,大多数时候,公司的各种决策,通知等,CEO只要和管理人员之间沟通就够了。

    而随着CPU能力的不断提升,一层缓存就慢慢的无法满足要求了,就逐渐的衍生出多级缓存。

    按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存(L1),二级缓存(L3),部分高端CPU还具有三级缓存(L3),每一级缓存中所储存的全部数据都是下一级缓存的一部分。

    这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。

    那么,在有了多级缓存之后,程序的执行就变成了:

    当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。

    随着公司越来越大,老板要管的事情越来越多,公司的管理部门开始改革,开始出现高层,中层,底层等管理者。一级一级之间逐层管理。

    单核CPU只含有一套L1,L2,L3缓存;如果CPU含有多个核心,即多核CPU,则每个核心都含有一套L1(甚至和L2)缓存,而共享L3(或者和L2)缓存。

    公司也分很多种,有些公司只有一个大Boss,他一个人说了算。但是有些公司有比如联席总经理、合伙人等机制。

    单核CPU就像一家公司只有一个老板,所有命令都来自于他,那么就只需要一套管理班底就够了。

    多核CPU就像一家公司是由多个合伙人共同创办的,那么,就需要给每个合伙人都设立一套供自己直接领导的高层管理人员,多个合伙人共享使用的是公司的底层员工。

    还有的公司,不断壮大,开始差分出各个子公司。各个子公司就是多个CPU了,互相之前没有共用的资源。互不影响。

    下图为一个单CPU双核的缓存结构。

    CACHE

    随着计算机能力不断提升,开始支持多线程。那么问题就来了。我们分别来分析下单线程、多线程在单核CPU、多核CPU中的影响。

    **单线程。**cpu核心的缓存只被一个线程访问。缓存独占,不会出现访问冲突等问题。

    **单核CPU,多线程。**进程中的多个线程会同时访问进程中的共享数据,CPU将某块内存加载到缓存后,不同线程在访问相同的物理地址的时候,都会映射到相同的缓存位置,这样即使发生线程的切换,缓存仍然不会失效。但由于任何时刻只能有一个线程在执行,因此不会出现缓存访问冲突。

    **多核CPU,多线程。**每个核都至少有一个L1 缓存。多个线程访问进程中的某个共享内存,且这多个线程分别在不同的核心上执行,则每个核心都会在各自的caehe中保留一份共享内存的缓冲。由于多核是可以并行的,可能会出现多个线程同时写各自的缓存的情况,而各自的cache之间的数据就有可能不同。

    在CPU和主存之间增加缓存,在多线程场景下就可能存在缓存一致性问题,也就是说,在多核CPU中,每个核的自己的缓存中,关于同一个数据的缓存内容可能不一致。

    如果这家公司的命令都是串行下发的话,那么就没有任何问题。

    如果这家公司的命令都是并行下发的话,并且这些命令都是由同一个CEO下发的,这种机制是也没有什么问题。因为他的命令执行者只有一套管理体系。

    如果这家公司的命令都是并行下发的话,并且这些命令是由多个合伙人下发的,这就有问题了。因为每个合伙人只会把命令下达给自己直属的管理人员,而多个管理人员管理的底层员工可能是公用的。

    比如,合伙人1要辞退员工a,合伙人2要给员工a升职,升职后的话他再被辞退需要多个合伙人开会决议。两个合伙人分别把命令下发给了自己的管理人员。合伙人1命令下达后,管理人员a在辞退了员工后,他就知道这个员工被开除了。而合伙人2的管理人员2这时候在没得到消息之前,还认为员工a是在职的,他就欣然的接收了合伙人给他的升职a的命令。

    一致

    处理器优化和指令重排

    上面提到在在CPU和主存之间增加缓存,在多线程场景下会存在缓存一致性问题。除了这种情况,还有一种硬件问题也比较重要。那就是为了使处理器内部的运算单元能够尽量的被充分利用,处理器可能会对输入代码进行乱序执行处理。这就是处理器优化

    除了现在很多流行的处理器会对代码进行优化乱序处理,很多编程语言的编译器也会有类似的优化,比如Java虚拟机的即时编译器(JIT)也会做指令重排

    可想而知,如果任由处理器优化和编译器对指令重排的话,就可能导致各种各样的问题。

    关于员工组织调整的情况,如果允许人事部在接到多个命令后进行随意拆分乱序执行或者重排的话,那么对于这个员工以及这家公司的影响是非常大的。

    并发编程的问题

    前面说的和硬件有关的概念你可能听得有点蒙,还不知道他到底和软件有啥关系。但是关于并发编程的问题你应该有所了解,比如原子性问题,可见性问题和有序性问题。

    其实,原子性问题,可见性问题和有序性问题。是人们抽象定义出来的。而这个抽象的底层问题就是前面提到的缓存一致性问题、处理器优化问题和指令重排问题等。

    这里简单回顾下这三个问题,并不准备深入展开,感兴趣的读者可以自行学习。我们说,并发编程,为了保证数据的安全,需要满足以下三个特性:

    原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行。

    可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

    有序性即程序执行的顺序按照代码的先后顺序执行。

    有没有发现,缓存一致性问题其实就是可见性问题。而处理器优化是可以导致原子性问题的。指令重排即会导致有序性问题。所以,后文将不再提起硬件层面的那些概念,而是直接使用大家熟悉的原子性、可见性和有序性。

    什么是内存模型

    前面提到的,缓存一致性问题、处理器器优化的指令重排问题是硬件的不断升级导致的。那么,有没有什么机制可以很好的解决上面的这些问题呢?

    最简单直接的做法就是废除处理器和处理器的优化技术、废除CPU缓存,让CPU直接和主存交互。但是,这么做虽然可以保证多线程下的并发问题。但是,这就有点因噎废食了。

    所以,为了保证并发编程中可以满足原子性、可见性及有序性。有一个重要的概念,那就是——内存模型。

    **为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作行为的规范。**通过这些规则来规范对内存的读写操作,从而保证指令执行的正确性。它与处理器有关、与缓存有关、与并发有关、与编译器也有关。他解决了CPU多级缓存、处理器优化、指令重排等导致的内存访问问题,保证了并发场景下的一致性、原子性和有序性。

    内存模型解决并发问题主要采用两种方式:限制处理器优化使用内存屏障。本文就不深入底层原理来展开介绍了,感兴趣的朋友可以自行学习。

    什么是Java内存模型

    前面介绍过了计算机内存模型,这是解决多线程场景下并发问题的一个重要规范。那么具体的实现是如何的呢,不同的编程语言,在实现上可能有所不同。

    我们知道,Java程序是需要运行在Java虚拟机上面的,Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

    提到Java内存模型,一般指的是JDK 5 开始使用的新的内存模型,主要由JSR-133: JavaTM Memory Model and Thread Specification 描述。感兴趣的可以参看下这份PDF文档(http://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf)

    Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

    而JMM就作用于工作内存和主存之间数据同步过程。他规定了如何做数据同步以及什么时候做数据同步。

    JAVA

    这里面提到的主内存和工作内存,读者可以简单的类比成计算机内存模型中的主存和缓存的概念。特别需要注意的是,主内存和工作内存与JVM内存结构中的Java堆、栈、方法区等并不是同一个层次的内存划分,无法直接类比。《深入理解Java虚拟机》中认为,如果一定要勉强对应起来的话,从变量、主内存、工作内存的定义来看,主内存主要对应于Java堆中的对象实例数据部分。工作内存则对应于虚拟机栈中的部分区域。

    所以,再来总结下,JMM是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。

    Java内存模型的实现

    了解Java多线程的朋友都知道,在Java中提供了一系列和并发处理相关的关键字,比如volatilesynchronizedfinalconcurren包等。其实这些就是Java内存模型封装了底层的实现后提供给程序员使用的一些关键字。

    在开发多线程的代码的时候,我们可以直接使用synchronized等关键字来控制并发,从来就不需要关心底层的编译器优化、缓存一致性等问题。所以,Java内存模型,除了定义了一套规范,还提供了一系列原语,封装了底层实现后,供开发者直接使用。

    本文并不准备把所有的关键字逐一介绍其用法,因为关于各个关键字的用法,网上有很多资料。读者可以自行学习。本文还有一个重点要介绍的就是,我们前面提到,并发编程要解决原子性、有序性和一致性的问题,我们就再来看下,在Java中,分别使用什么方式来保证。

    原子性

    在Java中,为了保证原子性,提供了两个高级的字节码指令monitorentermonitorexit。在synchronized的实现原理文章中,介绍过,这两个字节码,在Java中对应的关键字就是synchronized

    因此,在Java中可以使用synchronized来保证方法和代码块内的操作是原子性的。

    可见性

    Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值的这种依赖主内存作为传递媒介的方式来实现的。

    Java中的volatile关键字提供了一个功能,那就是被其修饰的变量在被修改后可以立即同步到主内存,被其修饰的变量在每次是用之前都从主内存刷新。因此,可以使用volatile来保证多线程操作时变量的可见性。

    除了volatile,Java中的synchronizedfinal两个关键字也可以实现可见性。只不过实现方式不同,这里不再展开了。

    有序性

    在Java中,可以使用synchronizedvolatile来保证多线程之间操作的有序性。实现方式有所区别:

    volatile关键字会禁止指令重排。synchronized关键字保证同一时刻只允许一条线程操作。

    好了,这里简单的介绍完了Java并发编程中解决原子性、可见性以及有序性可以使用的关键字。读者可能发现了,好像synchronized关键字是万能的,他可以同时满足以上三种特性,这其实也是很多人滥用synchronized的原因。

    但是synchronized是比较影响性能的,虽然编译器提供了很多锁优化技术,但是也不建议过度使用。

    转载地址:https://juejin.im/post/5b42c01ee51d45194e0b819a?utm_source=gold_browser_extension

    展开全文
  • JAVA 内存管理总结

    2020-12-22 18:43:16
    1. java是如何管理内存的  Java的内存管理是对象的分配和释放问题。(两部分)  分配 :内存的分配是由程序完成的,程序员需要通过关键字...  在Java中,内存泄漏是存在一些被分配的对象,这些对象有下面两个特点
  • 内存工作原理

    千次阅读 2015-11-29 14:18:51
    现代的PC(包括NB)都是以存储器为核心的多总线结构,即CPU只通过存储总线与主存储器交换信息(先在Cache里找数据,如果找不到,再去主存找)。输入输出设备通过I/O总线直接与主存储器...内部存储器简称内存,也可称
    现代的PC(包括NB)都是以存储器为核心的多总线结构,即CPU只通过存储总线与主存储器交换信息(先在Cache里找数据,如果找不到,再去主存找)。输入输出设备通过I/O总线直接与主存储器交换信息。在I/O设备和主存储器之间配置专用的I/O处理器。CPU不直接参与I/O设备与主存储器之间的信息传送。
        存储器分为内部存储器和外部存储器(或者叫主存储器和辅助存储器)。内部存储器简称内存,也可称为主存。从广义上讲,只要是PC内部的易失性存储器都可以看作是内存,如显存,二级缓存等等。外部存储器也称为外存,主要由一些非易失性存储器构成,比如硬盘、光盘、U盘、存储卡等等。
    内存作为数据的临时仓库,起着承上启下的作用,一方面要从外存中读取执行程序和需要的数据,另一方面还要为CPU服务,进行读写操作。所以主存储器快慢直接影响着PC的速度。下面我就从内存的原理开始谈起。
        一、原理篇
        内存工作原理
        1.内存寻址
        首先,内存从CPU获得查找某个数据的指令,然后再找出存取资料的位置时(这个动作称为“寻址”),它先定出横坐标(也就是“列地址”)再定出纵坐标(也就是“行地址”),这就好像在地图上画个十字标记一样,非常准确地定出这个地方。对于电脑系统而言,找出这个地方时还必须确定是否位置正确,因此电脑还必须判读该地址的信号,横坐标有横坐标的信号(也就是RAS信号,Row Address Strobe)纵坐标有纵坐标的信号(也就是CAS信号,Column Address Strobe),最后再进行读或写的动作。因此,内存在读写时至少必须有五个步骤:分别是画个十字(内有定地址两个操作以及判读地址两个信号,共四个操作)以及或读或写的操作,才能完成内存的存取操作。
        2.内存传输
        为了储存资料,或者是从内存内部读取资料,CPU都会为这些读取或写入的资料编上地址(也就是我们所说的十字寻址方式),这个时候,CPU会通过地址总线(Address Bus)将地址送到内存,然后数据总线(Data Bus)就会把对应的正确数据送往微处理器,传回去给CPU使用。
        3.存取时间
        所谓存取时间,指的是CPU读或写内存内资料的过程时间,也称为总线循环(bus cycle)。以读取为例,从CPU发出指令给内存时,便会要求内存取用特定地址的特定资料,内存响应CPU后便会将CPU所需要的资料送给CPU,一直到CPU收到数据为止,便成为一个读取的流程。因此,这整个过程简单地说便是CPU给出读取指令,内存回复指令,并丢出资料给CPU的过程。我们常说的6ns(纳秒,秒-9)就是指上述的过程所花费的时间,而ns便是计算运算过程的时间单位。我们平时习惯用存取时间的倒数来表示速度,比如6ns的内存实际频率为1/6ns=166MHz(如果是DDR就标DDR333,DDR2就标DDR2 667)。
        4.内存延迟
        内存的延迟时间(也就是所谓的潜伏期,从FSB到DRAM)等于下列时间的综合:FSB同主板芯片组之间的延迟时间(±1个时钟周期),芯片组同DRAM之间的延迟时间(±1个时钟周期),RAS到CAS延迟时间:RAS(2-3个时钟周期,用于决定正确的行地址),CAS延迟时间 (2-3时钟周期,用于决定正确的列地址),另外还需要1个时钟周期来传送数据,数据从DRAM输出缓存通过芯片组到CPU的延迟时间(±2个时钟周期)。一般的说明内存延迟涉及四个参数CAS(Column Address Strobe 行地址控制器)延迟,RAS(Row Address Strobe列地址控制器)-to-CAS延迟,RAS Precharge(RAS预冲电压)延迟,Act-to-Precharge(相对于时钟下沿的数据读取时间)延迟。其中CAS延迟比较重要,它反映了内存从接受指令到完成传输结果的过程中的延迟。大家平时见到的数据3—3—3—6中,第一参数就是CAS延迟(CL=3)。当然,延迟越小速度越快。
        二、外观篇
        由于笔记本的空间设计要求,笔记本内存比台式机内存条要窄,通常采用SO-DIMM模组规范,布线也比较紧凑,针脚也为标准的200Pin。我们经常看到的内存上,一般的元件有内存颗粒、电路板、SPD芯片、排阻(终结电阻)和针脚。下面我来分别介绍一下。
        1.颗粒
        内存颗粒就是大家平时见到内存上一个个的集成电路块。颗粒是内存的主要组成部分,颗粒性能可以说很大程度上决定了内存的性能,常见的颗粒有以下一些参数。
        A.厂商
        市场上生产内存颗粒的厂商主要有Hynix(现代电子),Samsung Electronics(***电子),Micro(美光),Infineon(英飞凌),Kingmax(胜创)等等。不过需要注意的一点是,“内存颗粒”和“内存条”是完全不同的两回事。能够生产内存颗粒的厂商全球没几个,而有了内存颗粒后内存条的生产就要简单得多,生产者自然要多得多。充斥市场的杂牌内存条与品牌内存条有着根本的区别,它们在成本上也有很多不同。Kingston、Kingmax、金邦等大的品牌内存条采用的都是符合Intel规定的6层PCB板和现代、***等内存大厂的内存颗粒,按照严格的工艺进行生产;而那些杂牌内存条虽然号称“***”、“现代”,其实就是一些小厂和作坊,他们拿来大厂内存颗粒的切割角料,焊到劣质的PCB板上就下了线,品质完全没有保证,而且经常与一些大的经销商结成联盟来生产和销售,价格波动也更容易受到渠道因素的影响。
        B.内存芯片类型
        内存芯片类型分SDRAM,DDR SDRAM,DDRⅡ SDRAM、SDRAM、DDR SDRAM和DDR SDRAM同出一门,都属SDRAM系,因此三者的颗粒在外观上不容易分辨,。但是由于采用的物理技术不同,三者在电路,延迟,带宽上还是有很大区别的,区分三者一般都是看颗粒的参数或者针脚和缺口位置,后面我会重点讲DDR和DDRⅡ技术。
        C.内存工艺和工作电压
        SDRAM内存工艺主要以CMOS为主,内存的工作电压和内存的芯片类型有很大关系,在JEDEC(Joint Electron Device Engineering Council 电子元件工业联合会)的规范中,SDRAM的工作电压是3.3V,DDR是2.5V,DDRⅡ是1.8V。
        D.芯片密度
        位宽及刷新速度芯片的密度一般都会用bit为单位进行表示(1B=8bit),比如16Mbit是16Mbit÷ 8bit=2MB也就是单颗芯片是2MB的。还有一个参数就是位宽,SDRAM系的位宽是64bit,采用多少个颗粒(一般为偶数)组成64bit也是不一样的。比如一个芯片是4bit的,那么要用16个同样的芯片才能组成64bits的,如果芯片是16bit那么只须4个就可以了。举个例子,256MB的内存可以用512bits÷8×4颗=256MB,4颗×16bit=64bit来组成,一般表示为512Mbits×16bit或64MB×16bit。刷新速度,内存条是由电子存储单元组成的,刷新过程对以列方式排列在芯片上的存储单元进行充电。刷新率是指被刷新的列的数目。两个常用的刷新率是2K和4K。2K模式能够在一定的时间内刷新较多的存储单元并且所用时间较短,因此2K所用的电量要大于4K。4K模式利用较慢的时间刷新较少的存储单元,然而它使用的电量较少。一些特殊设计的SDRAM具有自动刷新功能,它可自动刷新而不借助CPU或外部刷新电路。建立在DRAM内部的自动刷新,减少了电量消耗,被普遍应用于笔记本电脑。
        E.Bank
        内存的Bank一般分为物理Bank和逻辑Bank。物理Bank体现在SDRAM内存模组上,"Bank 数"表示该内存的物理存储体的数量。(等同于"行"/Row)。逻辑Bank表示一个SDRAM设备内部的逻辑存储库的数量。(现在通常是4个bank)。此外,对于主板,它还表示DIMM连接插槽或插槽组,例如Bank 0 或 Bank A。这里的Bank是内存插槽的计算单位,它是电脑系统与内存之间数据总线的基本工作单位。只有插满一个BANK,电脑才可以正常开机。举个例子,1个SDRAM线槽一个Bank为64bit,而老早以前的EDO内存是32bit的,必须要安装两根内存才能正常工作。主板上的Bank编号从Bank 0开始,必须插满Bank 0才能开机,Bank 1以后的插槽留给日后升级扩充内存用。
        F.电气接口类型
        般的电气接口类型与内存类型对应,如SDRAM是SSTL_3(3.3V)、DDR是 SSTL_2(2.5V)、DDRⅡ是SSTL_18(1.8V)。
        G.内存的封装
        现在比较普遍的封装形式有两种BGA和TSOP两种,BGA封装分FBGA,μBGA,TinyBGA(KingMAX)等等,TSOP分TSOPⅠ和TSOPⅡ。BGA封装具有芯片面积小的特点,可以减少PCB板的面积,发热量也比较小,但是需要专用的焊接设备,无法手工焊接。另外一般BGA封装的芯片,需要多层PCB板布线,这就对成本提出了要求。此外,BGA封装还拥有芯片安装容易、电气性能更好、信号传输延迟低、允许高频运作、散热性卓越等许多优点,它成为DDRⅡ官方选择也在情理之中。而TSOP相对来说工艺比较成熟,成本低,缺点是频率提升比较困难,体积较大,发热量也比BGA大。
        H.速度及延迟
        一般内存的速度都会用频率表示。比如大家常常看到的SDRAM 133、DDR 266、DDRⅡ 533其实物理工作频率都是133MHz,只是采用了不同的技术,理论上相当于2倍或4倍的速率运行,还有一种表示速度方法是用脉冲周期来表示速度,一般是纳秒级的。比如1/133MHz=7ns,说明该内存的脉冲周期是7ns。内存延迟我前面说过了,参数一般为4个,也有用3个的,数字越小表示延迟越小,速度越快。

        I.工作温度
        工作温度:工业常温(-40 - 85度);扩展温度(-25 - 85度)
        2.电路板
        电路板也称PCB版,是印刷电路板电子板卡的基础,由若干层导体和绝缘体组成的平板。电路图纸上的线路都蚀刻在其上,然后焊接上电子元件。由于所有的内存元件都焊在电路版上,因此电路板的布线是决定内存稳定性的重要方面,跟据Intel的规范,DDR内存必须使用6层PCB版才能保证内存的电气化功能和运行的稳定性。所以建议大家购买大厂的产品,不要使用来历不明的山寨货。
        3.SPD及SPD芯片
        SPD(Serial Presence Detect)— 串行存在侦测,SPD是一颗8针的EEPROM(Electrically Erasable Programmable ROM 电子可擦写程序式只读内存), 容量为256字节~2KB,里面主要保存了该内存的相关资料,如容量、芯片厂商、内存模组厂商、工作速度、是否具备ECC校验等。SPD的内容一般由内存模组制造商写入。支持SPD的主板在启动时自动检测SPD中的资料,并以此设定内存的工作参数。当开机时PC的BIOS将自动读取SPD中记录的信息,如果没有SPD,就容易出现死机或致命错误的现象。建议大家购买有SPD芯片的内存。

        4.排阻

        排阻,也称终结电阻(终结器)是DDR内存中比较重要的硬件。DDR内存对工作环境提出很高的要求,如果先前发出的信号不能被电路终端完全吸收掉而在电路上形成反射现象,就会对后面信号的影响从而造成运算出错。因此目前支持DDR主板都是通过采用终结电阻来解决这个问题。 由于每根数据线至少需要一个终结电阻,这意味着每块DDR主板需要大量的终结电阻,这也无形中增加了主板的生产成本,而且由于不同的内存模组对终结电阻的要求不可能完全一样,也造成了所谓的“内存兼容性问题”。由于DDR II内部集成了终结器,这个问题上得到了比较完美的解决。

        5.针脚(Pin)

        Pin-针状引脚,是内存金手指上的金属接触点。由于不同的内存的针脚不同,所以针脚也是从外观区分各种内存的主要方法。内存针脚分为正反两面,例如笔记本DDR内存是200Pin,那么正反两面的针脚就各为200÷2=100个。此外,有些大厂的金手指使用技术先进的电镀金制作工艺,镀金层色泽纯正,有效提高抗氧化性。保证了内存工作的稳定性

    三、技术篇

        1.DDR
    DDR技术

        DDR
    技术

        DDR SDRAM
    是双倍数据速率(Double Data RateSDRAM的缩写。从名称上可以看出,这种内存在技术上,与SDRAM有着密不可分的关系。事实上,DDR内存就是SDRAM内存的加强版。DDR运用了更先进的同步电路,使指定地址、数据的输送和输出主要步骤既独立执行,又保持与CPU完全同步;DDR使用了DLL(Delay Locked Loop,延时锁定回路提供一个数据滤波信号)技术,当数据有效时,存储控制器可使用这个数据滤波信号来精确定位数据,每16次输出一次,并重新同步来自不同存储器模块的数据。DDL本质上不需要提高时钟频率就能加倍提高SDRAM的速度,它允许在时钟脉冲的上升沿和下降沿读出数据,理论上使用原来的工作的频率可以产生2倍的带宽。同速率的DDR内存与SDR内存相比,性能要超出一倍,可以简单理解为133MHZ DDR="266MHZ" SDR。从外形体积上DDRSDRAM相比差别并不大,他们具有同样的尺寸和同样的针脚距离。DDR内存采用的是支持2.5V电压的SSTL2标准,而不是SDRAM使用的3.3V电压的LVTTL标准。但是DDR存在自身的局限性DDR只是在SDRAM基础上作简单改良,并行技术与生俱来的易受干扰特性并没有得到丝毫改善,尤其随着工作频率的提高和数据传输速度加快,总线间的信号干扰将造成系统不稳定的灾难性后果;反过来,信号干扰也制约着内存频率的提升——当发展到DDR400规范时,芯片核心的工作频率达到200MHz,这个数字已经非常接近DDR的速度极限,只有那些品质优秀的颗粒才能够稳定工作于200MHz之上,所以DDR标准就成了一种进一步提高内存速度的解决方法。

        DDR 
    技术

        DDR
    相对于DDR有三大技术革新,4位预取(DDR2位)、Posted CAS、整合终结器(ODT)、FBGA/CSP封装。要解释预取的概念,我们必须从内存的频率说起。大家通常说的内存频率其实是一个笼统的说法,内存频率实际上应细分为数据频率、时钟频率和DRAM核心频率三种。数据频率指的是内存模组与系统交换数据的频率;时钟频率则是指内存与系统协调一致的频率;而DRAM核心频率指的是DRAM内部组件的工作频率,它只与内存自身有关而不受任何外部因素影响。对SDRAM来说,这三者在数字上是完全等同的,也就是数据频率=时钟频率=核心频率;而DDR技术却不是如此,它要在一个时钟周期内传输两次数据,数据频率就等于时钟频率的两倍,但核心频率还是与时钟频率相等。由于数据传输频率翻倍(传输的数据量也翻倍),而内部核心的频率并没有改变,这意味着DDR芯片核心必须在一个周期中供给双倍的数据量才行,实现这一任务的就是所谓的两位预取(2bit Prefect)技术;DDR采用的4位预取。这项技术的原理是将DRAM存储矩阵的位宽增加一(两)倍,这样在一个时钟周期内就可以传输双(四)倍的数据,这些数据接着被转化为宽度为1/214)的两道数据流、分别从每个时钟周期的上升沿和下降沿传送出去。Posted CASDDR通过引入Posted CAS功能来解决带宽利用变低的问题,所谓Posted CAS,指的是将CAS(读/写命令)提前几个周期、直接插到RAS信号后面的一个时钟周期,这样CAS命令可以在随后的几个周期内都能保持有效,但读/写操作并没有因此提前、总的延迟时间没有改变。这样做的好处在于可以彻底避免信号冲突、提高内存使用效率,但它只有在读写极其频繁的环境下得到体现,若是普通应用,Posted CAS功能反而会增加读取延迟、令系统性能下降,因此我们可以根据需要、通过BIOSPosted CAS功能开启或关闭(关闭状态下DDR的工作模式就与DDR完全相同)。  芯片整合终结器,提高了内存工作的稳定性,增强的内存的兼容性。FBGA封装和CSP封装,封装虽然无法直接决定内存的性能,但它对内存的稳定工作至关重要。 FBGA封装是DDR的官方选择,FBGA属于BGA体系(Ball Grid Array,球栅阵列封装),前面已经讲过了。CSP封装最大的特点在于封装面积与芯片面积异常接近,两者比值仅有1.141,它也是目前最接近11理想状况的芯片封装技术。这样在同样一条模组中就可以容纳下更多数量的内存芯片,有利于提升模组的总容量。 

        2.
    双通道内存控制器技术

        所谓双通道
    DDR,简单来说,就是芯片组可以在两个不同的数据通道上分别寻址、读取数据。这两个相互独立工作的内存通道是依附于两个独立并行工作的,位宽为64-bit的内存控制器下,因此使普通的DDR内存可以达到128-bit的位宽,如果是DDR333的话,双通道技术可以使其达到DDR667的效果,内存带宽陡增一倍。双通道DDR有两个64bit内存控制器,双64bit内存体系所提供的带宽等同于一个128bit内存体系所提供的带宽,但是二者所达到效果却是不同的。双通道体系包含了两个独立的、具备互补性的智能内存控制器,两个内存控制器都能够在彼此间零等待时间的情况下同时运作。例如,当控制器B准备进行下一次存取内存的时候,控制器 A就在读/写主内存,反之亦然。两个内存控制器的这种互补天性可以让有效等待时间缩减50%,双通道技术使内存的带宽翻了一翻。双通道DDR的两个内存控制器在功能上是完全一样的,并且两个控制器的时序参数都是可以单独编程设定的。这样的灵活性可以让用户使用三条不同构造、容量、速度的DIMM内存条,此时双通道DDR简单地调整到最低的密度来实现128bit带宽,允许不同密度/等待时间特性的DIMM内存条可以可靠地共同运作。双通道DDR技术带来的性能提升是明显的,DDR266能够提供2.1GB/s的带宽,而双通道DDR266则能提供4.2GB/s的带宽。以此类推,双通道DDR333DDR400能够达到5.4GB/s6.4GB/s

        3.CPU
    集成内存控制器技术

        这是
    AMD公司提高CPU与内存性能的一项技术,这项技术是一种将北桥的内存控制器集成到CPU的一种技术,这种技术的使用使得原来,CPU-北桥-内存三方传输数据的过程直接简化成CPU与内存之间的单项传输技术,并且降低了它的延迟潜伏期,提高了内存工作效率。这么做得的目的是为了解放系统的北桥,众所周知,显卡也是通过北桥向CPU传输数据的,虽然说早在GeForce256时代就有了GPU的说法,但是随着现在游戏的进步,画面的华丽,不少数据还是需要CPU来做辅助处理的。这些数据传输到CPU必然要经过系统的北桥,由于AMD64系统将内存控制集成到主般中来了,所以压力减小的北桥便可以更好地为显卡服务。另外,缺少了中间环节,内存和CPU之间的数据交换显得更为流畅。但是这项技术也有缺点,当新的内存技术出现时,必须要更换CPU才能支持。这在无形间增加了成本。

        4.
    其他技术

        A.ECC
    内存

        全称
    Error Checkingand Correcting。它也是在原来的数据位上外加位来实现的。如8位数据,则需1位用于Parity检验,5位用于ECC,这额外的5位是用来重建错误的数据的。当数据的位数增加一倍,Parity也增加一倍,而ECC只需增加一位,当数据为64位时所用的ECCParity位数相同(都为。在那些Parity只能检测到错误的地方,ECC可以纠正绝大多数错误。若工作正常时,你不会发觉你的数据出过错,只有经过内存的纠错后,计算机的操作指令才可以继续执行。当然在纠错时系统的性能有着明显降低,不过这种纠错对服务器等应用而言是十分重要的,ECC内存的价格比普通内存要昂贵许多。

        B.
    UnBuffered Memory 内存

        (
    UnBuffered Memory,(不)带有缓存的内存条。缓存能够二次推动信号穿过内存芯片,而且使内存条上能够放置更多的内存芯片。带缓存的内存条和不带缓存的内存条不能混用。电脑的内存控制器结构,决定了该电脑上带缓存的内存还是上不带缓存的内存。

    展开全文
  • 1、SDRAM(Synchronous Dynamic RAM,同步动态随机存储器)采用3.3V工作电压,内存数据位宽64位。 SDRAM与CPU通过一个相同的时钟频率锁在一起,使两者以相同的速度同步工作。 SDRAM它在每一个时钟脉冲的上升沿传输数据...
  • 1.什么是计算机内存内存指的是内存储器 ,内存主要是用来临时存贮数据 ; EX:电脑中调用的数据,就需要从硬盘读出,发给内存,然后内存再发给CPU(也可以理解成是外存和CPU之间的缓存)。 在计算机的组成结构中,有一...
  • 二、特点不同 1、服务器内存条:直观的分辨服务器内存与普通内存的方法就是看条子上的字有没有带ECC模块。 2、普通内存条:以总线方式进行读写操作的部件;内存决非仅仅是起数据仓库的作用。除少量操作系统中必不...
  • 什么是内存泄露?怎么检测

    千次阅读 2019-03-20 17:32:03
    什么是内存泄露? 简单地说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它...
  • Windows工作内存

    千次阅读 2015-07-28 17:37:20
    Windows任务管理器默认情况下,“内存(私人工作集)”列处于选中状态。 私人工作集是工作集的一个子集,它是描述每个进程所使用的内存数量的技术术语。私人工作集专门描述了某个进程正在使用的且无法与其他进程共享...
  • 内存和栈内存

    千次阅读 2021-03-08 13:01:02
    内存(heap)是区别于栈区(stack)、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。 比较 堆内存和栈内存 在学习C程序设计语言时,会遇到两个很相似的术语:堆...
  • DDR3 基本知识 一、DDR3 简介 DDR3(double-data-rate three synchronous dynamic random access memory)是应用在计算机及电子产品领域的一种高带宽并行数据总线...单颗内存芯片的容量更为扩大,达到 512Mb 至 ...
  • 内存是计算机的工作场所;硬盘用来存放暂时不用的信息。2、制作材料不同。内存是半导体材料制作;硬盘是磁性材料制作。3、信息保存不同。内存中的信息会随掉电而丢失;硬盘中的信息可以长久保存。4、容量不同。一般...
  • 定义 内存泄露(memory lock)是指由于疏忽或错误... 一般常说的内存泄露是指堆内存的泄露,堆是动态分配内存的,并且可以分配使用很大的内存,使用不好会产生内存泄露,使用不好会产生内存泄露。频繁的使用mallo...
  • 内存管理机制

    千次阅读 2021-11-29 10:44:37
    操作系统它会为每一个进程合理分配内存资源,这里我们来从两个角度来分析,什么是内存管理机制。 1、分配机制 操作系统它会为每一个进程分配一个合理的大小,从而他能保证每一个进程能够正常的运行。而不至于内存...
  • 查找到两款金士顿的内存,KVR16R11D4/88GB2Rx41Gx72-BitPC3-12800和KVR16E11/88GB2Rx81Gx72-BitPC3-12800,分别是2Rx4和2Rx8。这是在下面参考资料的网址上找到的资料,整理一下。具体也不能说的太明白。1.KVR16R11D4...
  • 在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情。要说计算机的内存模型,就要说一下一段古老的历史,看一下为什么要有内存模型。 内存...
  • Java 内存模型(JMM)

    千次阅读 2021-08-11 08:16:20
    文章目录什么是JMM模型JMM和JVM的区别主内存工作内存Java内存模型与硬件内存架构的关系JMM存在的必要性 什么是JMM模型 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的是一组...
  • 内存】ECC内存简介

    千次阅读 2020-07-01 00:23:43
    ECC内存简介。
  • 因为内存已经成为每台电脑的必备配件,从EDO、SDRAM、DDR、DDR2再到现如今的DDR3内存,变化可谓是翻天覆地。内存无论是在容量、速度、性能上都有了显著的提高。    但是内存市场中,产品可谓是型号众多,比如...
  • SDRAM内存条时序特点

    千次阅读 2020-10-30 15:52:50
    而单片SDRAM存储器一般是直接焊接在电路板上,而且引脚较多、一旦遇上SDRAM存储器工作故障,更换芯片比较麻烦,并且当需要扩充容量时修改电路也不方便。计算机上广泛应用的内存条具有速度高、容量大、接口标准、扩展...
  • 内存中的堆和栈到底是什么 详细讲述了程序在内存中的模型,从可执行文件(ELF)格式的编译介绍了堆和栈,主要是C/C++语言,讲的比较清楚,借鉴性比较强。其实,对于java语言,编译后的文件是一个中间字节代码,操...
  • 虚拟内存管理

    千次阅读 2019-07-08 23:01:09
    虚拟内存管理这是一种利用虚拟存储器来逻辑扩充物理内存的管理方式。其基本思想是用软硬件技术把内存与外存这两级存储器当成一级存储器来用,从而给用户提供了一个比内存也比任何应用程序大得多的虚拟存储器,使得...
  • 原标题:内存和外存的主要区别之处竟是在这里...计算机工作时,把要处理的数据先从外存调入内存,再从内存调入CPU;CPU处理完毕以后,又将数据送回到内存,最后再保存到外存中去。 当我们要求计算机完成一项较大的工...
  • Kafka数据是存在磁盘上还是内存上?

    千次阅读 2021-01-17 14:49:18
    1. 顺序写入因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是耗时的。所以硬盘“讨厌”随机I/O,喜欢顺序I/O。...2. Memory Mapped Files(内存映射文件)64位操作系统中一般可...
  • C++内存管理中内存泄露(memory leak)一般指的是程序在申请内存后,无法释放已经申请的内存空间,内存泄露的积累往往会导致内存溢出。 一、内存分配方式 通常内存分配方式有以下三种: (1)从静态存储区域分配...
  • 持久内存(PMem)科普

    千次阅读 2021-06-16 16:25:48
    比如非易失性存储,持久内存,傲腾持久内存,甚至英文的名词Optane SSD, Optane persistent memory, PMem, DCPMM, AEP等等…… 这些名词到底是什么?有什么联系?有什么用处?本文从科普的角度,帮你回答这些问题。...
  • ram的特点什么

    千次阅读 2020-06-12 15:31:44
    RAM存储器工作时可以随时从任何一个指定的地址写入或读出信息。它可以随时读写(刷新时除外),而且它的速度很快,通常作为操作性系统或其他正在运行中的程序的临时数据存储介质。无论是手机还是电脑的运行速度很多...
  • 为此,介绍了深度神经网络的基本特征;分析了深度学习训练过程中的内存瓶颈;对一些代表性的研究工作进行了分类阐述,并对其优缺点进行了分析;对深度学习中内存管理技术的未来发展趋势进行了探索。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 485,288
精华内容 194,115
关键字:

内存的工作特点是什么