基于linux伙伴系统的内存分配方法与流程

文档序号:11807771阅读:462来源:国知局
基于linux伙伴系统的内存分配方法与流程
本发明属于嵌入式设备待机功耗优化
技术领域
,具体的是一种基于linux伙伴系统的内存分配方法。
背景技术
:伴随着智能手机的快速发展,长期以来困扰着传统计算机的功耗与性能的矛盾在智能手机上显得更为突出,其主要原因有以下几点:首先,智能手机性能的提升速度远远超过普通计算机的发展速度。归功于在传统计算机方面的技术积累,在过去的几年中,智能手机CPU的速度经历了异常快速的增长速度。其次,电池制造技术的提升速度远落后于电量需求的增长速度。相对于智能手机计算速度的快速提升,手机电池容量的提升却缓慢得很多,这主要是因为手机电池的制造工艺发展缓慢,远远落后于用于CPU制造的集成电路发展速度。另外,由于智能手机作为移动设备的本质特性,手机的体积受到很大的限制。在全球智能手机制造向更轻、更薄的发展趋势下,手机的机身可谓“寸土寸金”,每一块空间都被发挥利用到了极致。依赖手机的结构设计优化或者提升电池的制造工艺来满足快速发展的智能手机电量需求的难度越来越大,寻求新的提升智能手机续航能力的手段刻不容缓。作为智能手机的内存,它的能耗占整机能耗的比重相当可观,特别是在待机状态下。不同于SRAM,DRAM需要周期性地进行自刷新以维持它所保存的数据不被丢失。当前DRAM的自刷新策略是全局自刷新,也就是周期性地对整个DRAM进行自刷新。如果某一部分的DRAM没有保存数据,那么显然,对于这一部分DRAM的周期性自刷新是毫无必要的,这就造成了能耗的白白浪费。DRAM的局部阵列自刷新(PASR)策略可以很好地解决这一问题。PASR是指对于整个DRAM,仅对保存有数据的Bank进行周期性地自刷新。然而现在Linux的物理内存是较为离散的。对于内核的内存需求,Linux内存管理系统倾向于从低物理地址的内存区分配;而对于用户进程的内存需求,则倾向于从高物理地址的内存区分配。并且随着进程不断创建和消亡的往复循环过程,内存中的碎片问题不可避免,这也加剧了物理内存的离散程度。本发明由此而来。技术实现要素:本发明的目的是提供一种基于linux伙伴系统的内存分配方法,解决了现有技术中现有的linux伙伴系统功耗较高,而采用大量内存数据的硬性迁移聚集可能会带来不小的系统开销,同时还有可能造成内存数据丢失等影响系统稳定安全的诸多问题。为了解决现有技术中的这些问题,本发明提供的技术方案如下:一种基于linux伙伴系统的内存分配方法,其特征在于所述方法包括预先将空闲块按照内存bank的不同进行内存bank编号标记,应用程序申请内存时按照bank编号优先分配同一bank编号的空闲块的步骤。优选的技术方案中,所述方法进行内存bank编号标记后形成同一空闲块位阶(order)不同bank编号的空闲块链表,空闲块位阶依次是0、1、2、3、4、5、6、7、8、9、10,相应空闲块位阶的空闲块依次包含大小为1、2、4、8、16、32、64、128、256、512和1024个连续的空闲页框。优选的技术方案中,所述方法中空闲块位阶(order)是根据linux伙伴系统的裂分规则进行划分,空闲块位阶依次是0、1、2、3、4、5、6、7、8、9、10,每个空闲块依次包含大小为1、2、4、8、16、32、64、128、256、512和1024个连续的空闲页框。优选的技术方案中,所述方法中应用程序申请内存时,按照空闲块位阶的优先顺序遍历同一bank编号的空闲块;如找到同一位阶的空闲块,则终止遍历;否则按照bank编号继续遍历下一bank编号的空闲块,如此循环直到找到满足要求的空闲块或者分配失败返回。优选的技术方案中,所述方法中应用程序申请内存时,按照bank编号的优先顺序遍历同一位阶的空闲块;如找到同一位阶的空闲块,则终止遍历;否则继续遍历下一位阶的空闲块,如此循环直到找到满足要求的空闲块或者分配失败返回。优选的技术方案中,所述方法中内存初始化时,如果应用程序请求内存找不到同一位阶的空闲块,则linux伙伴系统按照位阶从大到小的顺序进行分裂成伙伴的下一位阶空闲块;如果应用程序请求内存仍然找不到满足要求的空闲块,则继续按照上述方法进行分裂,直到找到同一位阶的空闲块。优选的技术方案中,所述方法中如果应用释放内存时,需判断释放的内存空闲块的伙伴块是否空闲;如果伙伴块为空闲块,则按照linux伙伴系统的合并规则进行合并空闲块;如此循环,直到不能进行合并。本发明的另一目的在于一种linux系统设备的内存刷新方法,其特征在于所述方法包括当整个bank的内存块均为空闲块,且linux系统设备处于深度睡眠状态时,按照内存部分阵列自刷新配置,关闭整个内存bank的刷新。优选的技术方案中,所述方法还包括当linux系统设备从深度睡眠状态唤醒或者进入浅睡眠状态时,关闭内存部分阵列自刷新配置,重新进行整个内存bank的刷新。根据linux伙伴系统的划分,将所有的空闲页框分组为11个类型的空闲块链表,每个空闲块链表依次包含大小为1、2、4、8、16、32、64、128、256、512和1024个连续的空闲页框,空闲块链表的order依次是0、1、2、3、4、5、6、7、8、9、10。伙伴系统伙伴系统是Linux物理内存管理的核心。伙伴系统把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续的页框。对1024个页框的最大请求对应着4MB大小的连续RAM块。每个块的第一个页框的物理地址是该块大小的整数倍。例如,大小为16个页框的块,其起始地址是16*4096(是一个常规页的大小)的倍数。假设要请求一个256个页框的块(即1MB)。算法先在256个页框的链表中检查是否有一个空闲块。如果没有这样的块,算法会查找下一个更大的页块,也就是,在512个页框的链表中找一个空闲块。如果存在这样的块,内核就把512的页框块裂分成两等份,一半用作满足请求,另一半插入到256个页框的链表中。如果在512个页框的块链表中也没找到空闲块,就继续找更大的空闲块——1024个页框的空闲块。如果这样的块存在,内核把1024个页框块分成两等份的512个页框块,把其中一个512个页框块插入到512个页框块的链表中,而把另一个512个页框块继续分成两等份的256个页框块,一个插入256个页框块的链表中,另一个用作满足请求。如果1024个页框的链表还是空的,算法就放弃并发出错信号。以上过程的逆过程就是页框块的释放过程,也是该算法名字的由来。内核试图把大小为b的一对空闲伙伴块合并为一个大小为2b的单独块。满足以下条件的两个块称为伙伴:a.两个块具有相同的大小,记作b;b.它们的物理地址是连续的;c.第一块的第一个页框的物理地址是2*b*4096的倍数。该算法是迭代的,如果它成功合并所释放的块,它会试图合并2b大小的块,以再次试图形成更大的块。把每个内存节点(node)的物理内存划分为3个管理区(zone):ZONE_DMA(0~16M)、ZONE_NORMAL(16M~896M)、ZONE_HIGHMEM(896M~MAX)。通过划分为不同的管理区,内核定义了内存的一个层次结构,有内存请求时首先试图分配“廉价”的内存。如果失败,则根据访问速度和容量,逐渐尝试分配“更昂贵”的内存。高端内存(ZONE_HIGHMEM)是最廉价的,因为内核没有任何部分依赖于从该内存域分配的内存,如果高端内存域用尽,对内核没有任何副作用,这也是优先分配高端内存的原因。普通内存域(ZONE_NORMAL)的情况有所不同。许多内核数据结构必须保存在该内存域,而不能放置到高端内存域。因此如果普通内存完全用尽,那么内核会面临紧急情况。所以只要高端内存域的内存没有用尽,就不会从普通内存域分配内存。最昂贵的是DMA内存域(ZONE_DMA),因为它用于外设和系统之间的数据传输。因此从该内存域分配内存是最后一招。每个管理区根据空闲内存块阶(order)的不同,划分成多个free_area。内存管理区的c语言伪代码如下:<include/linux/mmzone.h>structzone{……/**不同大小的空闲内存块*/structfree_area[MAX_ORDER];……};structfree_area{structlist_headfree_list[MIGRATE_TYPES];unsignedlongnr_free;};可以看出,根据不同的迁移类型(migratetype),每个free_area分成了多个free_list。nr_free表示free_area中所有空闲块的数目。其中不考虑migratetype,这不会对bank造成影响。因此,Linux伙伴系统的组织结构图如图1所示。如果请求一块2个页框的内存域,伙伴算法先在free_area[1]的free_list链表中查找空闲块,若找到了则直接返回;否则,按照算法逻辑去order更大的free_area的free_list链表中去查找、分解、分配,直到满足分配请求或分配失败。聚集(Bank-Intensive)的内存分配策略Linux的伙伴系统简单高效地管理着内存的分配和释放。本发明技术方案中的Bank聚集的内存集中分配策略是通过修改伙伴系统,在分配内存的时候,按照要求分配指定Bank中的内存块,达到Bank聚集的分配效果。现有的伙伴系统的结构组织中是没有Bank这个概念的,因此它无法感知到Bank的存在,也就无法做到Bank聚集的内存分配。本发明的bank为逻辑bank,即L-bank,SDRAM的内部是一个存储阵列。存储阵列和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),可以准确地找到所需要的存储单元,这就是内存芯片寻址的基本原理。存储阵列就是逻辑Bank(LogicalBank,简称L-Bank)。本发明技术方案对linux伙伴系统的结构组织进行修改,添加一层Bank结构,对free_list进行细分,重新组织空闲块,根据空闲块的Bank编号把空闲块挂到对应的bank_free_list中。图2是linux伙伴系统修改后的结构组织图。对于order相同的空闲内存块,在原始的伙伴系统中把它们不加区分地挂在了同一free_list链表中;而修改后的伙伴系统则根据这些空闲块的Bank编号的不同,将它们挂在了不同的free_list上。修改后的linux伙伴系统没有删除原始伙伴系统结构组织所涉及到的一些数据结构,只是添加了一些数据结构用来辅助Bank聚集(Bank-Intensive)的内存分配策略的实现。典型的实现如下,在structfree_area中添加成员bank_free_list,如以下的C语言伪代码所示:<include/linux/mmzone.h>structfree_area{……/**把一个free_list中的空闲块按照Bank号的不同划分到多个bank_free_list中*其中NR_BANKS_PASR表示bank的数目*/structlist_headbank_free_list[MIGRATE_TYPES][NR_BANKS_PASR];……};在structpage中添加成员bank_list,如以下的C语言伪代码所示:<include/linux/mmzone.h>structpage{……/**此bank_list字段存放指向bank_free_list链表中相邻元素的指针,*即bank_free_list中的各空闲块通过structpage中的bank_list字段链接起来*/structlist_headbank_list;……};通过bank_free_list、bank_list的添加,把一个free_list中的空闲块按照Bank号的不同划分到多个bank_free_list中;而bank_list字段存放指向bank_free_list链表中相邻元素的指针,bank_free_list中的各空闲块通过structpage中的bank_list字段链接起来。这样在伙伴系统的空闲块链表中无缝的插入bank编号,这样可以作为实现bank聚集的基础。内存分配策略从Bank选择的角度,子分配策略可以分为按照Bank编号递增序或递减序分配、指定Bank分配、按照Bank利用率分配等多种分配策略;从Bank聚集程度的角度,子分配策略可以分为Order-Bank策略(保守策略)和Bank-Order策略(激进策略)。从两个角度划分的子分配策略可以分别两两组合成一个完整分配策略。结合图2解释一下分配策略。假定按照Bank编号递增序分配,分别结合Order-Bank策略和Bank-Order策略。策略假设要请求一块1个页框的空闲块,先去free_area[0]->bank[0]的bank_free_list中查找,若有满足要求的空闲块,就直接返回。如果没有找到,就去free_area[0]->bank[1]的bank_free_list中查找,依次遍历free_area[0]中bank[2]、bank[3]….的bank_free_list直到找到满足要求的空闲块。如果在free_area[0]中没有找到,再去free_area[1]、free_area[2]…..中查找,查找顺序和free_area[0]中一样,直到满足请求或者分配失败返回。策略假设要请求一块1个页框的空闲块,先去free_area[0]->bank[0]的bank_free_list中查找,若有满足要求的空闲块,就直接返回。如果没有找到,就去free_area[1]->bank[0]的bank_free_list中查找,依次遍历free_area[2]、free_area[3]…..中bank[0]的bank_free_list直到找到满足要求的空闲块。如果在各free_area的bank[0]中没有找到,再去各free_area的bank[1]中查找,查找顺序和bank[1]一样,直到满足请求或者分配失败返回。基于bank聚集的内存分配策略在现实的linux智能设备中如何使用。本发明提供了一种实现方式,用于实现linux智能设备的功耗优化,特别是内存功耗的优化。在具体实现中,本发明技术方案以Android智能设备为例进行说明。待机流程中的PASR配置要进行PASR控制,就首先要存在空闲的Bank,而为了达到较好的节能效果,就应该空闲出尽可能多的Bank。根据Linux物理内存布局,只有对离散的内存布局进行调整,对内存数据进行聚集迁移,才能空闲出尽可能多的Bank,才能进行有效的PASR控制已达到较好的节能效果。内存数据聚集迁移,就是将内存中的有效数据聚集到某些Bank上,以空闲出尽可能多的Bank。实现内存数据聚集迁移,最直接的方法就是在系统即将进行PASR控制时,将内存数据硬性的聚集迁移到某些Bank上,而空闲出其余的Bank。然而这种对于大量内存数据的硬性迁移聚集可能会带来不小的系统开销,同时还有可能造成内存数据丢失等影响系统稳定安全的诸多问题。针对于内存数据硬性聚集迁移的问题,本发明技术方案提出了一种Bank聚集(Bank-Intensive)的内存分配策略。该策略通过修改Linux内存管理系统,使得在内存分配阶段就尽量将内存数据聚集在某些Bank上,大大提升了PASR所带来的功耗收益。配置涉及到内存数据的安全性问题,因此,如何选择PASR配置时机显得尤为重要。系统中进程的创建、运行、消亡往往伴随着内存的分配和释放,导致内存一直处在相对活跃状态,不利于进行PASR配置。在Android的Early_Suspend(浅睡眠)状态下,仍然有部分进程在运行,只有进入到标准Linux的Suspend(深度睡眠)状态时,除工作进程外的所有进程都被冻结,此时系统基本不会存在内存的分配、释放操作,内存状态相对平静,可以进行PASR配置,停掉部分空闲Bank的刷新操作以降低待机时的内存功耗。当系统从休眠状态被唤醒时,应当首先进行PASR的复位配置,开启空闲Bank的刷新操作,因为此时系统往往会进行大量的内存分配,若内存分配落入尚未开启刷新操作的空闲Bank中,将造成部分内存数据丢失,甚至带来更为严重的后果。配置的时机选择在标准Linux中,休眠主要分三个主要的步骤:(1)冻结用户态进程和内核态任务;(2)调用注册的设备的suspend的回调函数,其调用顺序是按照驱动加载时的注册顺序。(3)休眠核心设备和使CPU进入休眠态冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所有进程的上下文。当这些进程被解冻的时候,它们是不知道自己被冻结过的,只是简单的继续执行。通过上文的分析可知,PASR的设置时机应该选在核心设备进入休眠态之前,同样地,核心设备被唤醒后应该立即执行PASR的复位操作,打开空闲Bank的刷新操作。通过分析P6s平台kernel源码(版本号为3.0.8),确定了系统进入休眠态的代码位置,如以下的C语言伪代码所示:/**File:arch/arm/mach-hi6620/pwrctrl/sleepMgr/pwrctrl_sleep.c*/s32_tpwrctrl_deep_sleep(suspend_state_tstate){……pwrctrl_asm_deep_sleep_entry();//休眠入口函数……}pwrctrl_asm_deep_sleep_entry函数由汇编语言编写,是系统完全进入休眠态的入口,应当在执行该函数前,进行PASR设置,关闭空闲Bank的自刷新操作;系统被唤醒时从此函数返回,所以应该紧接在该函数后,进行PASR复位操作,重新开启空闲Bank的自刷新操作。系统休眠前的PASR设置在Bank聚集的内存分配策略中,实时统计了各个Bank中的页框使用情况。在进行PASR设置时,首先要根据各个Bank中的页框使用情况识别出空闲Bank,然后通过读写与Bank自刷新相关的寄存器,关闭空闲Bank的自刷新。核心操作步骤如以下的C语言伪代码所示:/**File:arch/arm/mach-hi6620/pwrctrl/sleepMgr/pwrctrl_sleep.c*/staticvoid__iomem*REG_BASE_DDRC_DMC0_VIRT=0;intpasr_set_segment(intrank){……for(i=0+rank_tmp*8;i<(rank_tmp+1)*8;i++){if(nr_free_pages_per_bank[i]>=32768)//判断bank[i]是否空闲{segment_tmp=i%8;segment_tmp=1<<segment_tmp;segment|=segment_tmp;}}……value=(segment<<16)|(0x11<<8)|(rank<<4)|0x2;//空闲bank集合……//将空闲bank集合写入自刷新控制寄存器关闭其自刷新操作writel(value,\SOC_MDDRC_DMC_DDRC_CFG_SFC_ADDR(REG_BASE_DDRC_DMC0_VIRT));……return0;}当判断出具有空闲bank集合时,将空闲bank集合写入自刷新控制寄存器关闭其自刷新操作。自刷新控制寄存器方便后期系统唤醒后的PASR复位。系统唤醒后的PASR复位和休眠前的PASR设置相比,系统唤醒后的PASR复位操作要简单一些,因为只需将所有Bank的自刷新操作设为开启状态即可,而不必去详细查询那些自刷新操作被关闭的空闲Bank然后将其开启,操作流程如以下的C语言伪代码所示:/**File:arch/arm/mach-hi6620/pwrctrl/sleepMgr/pwrctrl_sleep.c*/intpasr_reset_segment(void){……value=0x0|(0x11<<8)|(0x3<<4)|0x2;//所有bank的集合……//将所有bank的自刷新设为开启状态writel(value,SOC_MDDRC_DMC_DDRC_CFG_SFC_ADDR(REG_BASE_DDRC_DMC0_VIRT));……return0;}在休眠-唤醒函数pwrctrl_asm_deep_sleep_entry前后分别调用pasr_set_segment函数和pasr_reset_segment函数,就完成了待机流程中的PASR配置,如以下的C语言伪代码所示:/**File:arch/arm/mach-hi6620/pwrctrl/sleepMgr/pwrctrl_sleep.c*/s32_tpwrctrl_deep_sleep(suspend_state_tstate){……pasr_set_segment(0);//关闭rank0中空闲bank的自刷新pasr_set_segment(1);//关闭rank1中空闲bank的自刷新pwrctrl_asm_deep_sleep_entry();pasr_reset_segment();//开启bank的自刷新……}方法即是将PASR配置信息关闭如清空自刷新控制寄存器的暂存信息,然后将所有bank置为自刷新状态。相对于现有技术中的方案,本发明的优点是:本发明基于bank聚集(Bank-Intensive)的内存分配策略,通过修改Linux伙伴系统的原始内存分配策略,以使内存分配相对于bank能达到较好的聚集效果。通过在多方平台的实验验证,聚集效果相当不错。配合以PASR控制,在P6s平台下的待机功耗优化收益达到了23%,体现了该PASR算法的有效性和实用性。总之,基于Bank-Intensive内存分配策略的PASR算法有效地降低了系统待机状态下的功耗,提升了移动设备的电池续航能力。附图说明下面结合附图及实施例对本发明作进一步描述。图1为原始的Linux伙伴系统组织结构图。图2为linux伙伴系统修改后的组织结构图。图3为原始内存分配策略的内存分配结果。图4为按照bank利用率进行分配的bank-order分配策略的内存分配图。图5为系统启动稳定后,各segment的使用情况。图6为启动一个应用,各segment的使用情况。图7为启动多个应用,各segment的使用情况。具体实施方式以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限制本发明的范围。实施例中采用的实施条件可以根据具体系统的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。实施例实验目的Bank聚集(Bank-Intensive)的内存分配策略通过修改Linux伙伴系统,在原始的结构组织基础上添加一层Bank结构,实现相对于Bank较为集中的内存分配。此实验的目的是测试验证该分配策略的内存聚集效果。实验平台软件平台:WindowsXP(宿主机)+VMware(虚拟机)+android-x86;该实验平台是在windowsXP宿主机上安装VMware虚拟机,在虚拟机中运行android-x86系统,已完成对本策略的测试验证。下面具体介绍一下实验平台的各部分。(宿主机)采用CPU型号为IntelCore2QuadQ8400,4G内存,500G硬盘。(虚拟机)为其在宿主机的硬件环境中配置2个处理器,每个处理器1个核心,2G内存,20G硬盘虚拟的内存规格,信息如下:DDR大小2GByte,2个rank,每个rank中有8个bank,数据位宽32位,内部4个DIE,每个DIE数据位宽16位,每个rank由2个DIE组成,即两个16bit拼接成32bit。表1是DRAM地址映射方式,1位rank号和3位bank号共同组成了16个Bank。表1DRAM地址映射方式 rankrowbankcolumnDW比特数1143112     固定为2'b00Android-x86选用ics-x86版本,该版本基于Android4.0(IceCreamSandwich)。实验方法测试的内容为系统启动的整个过程中的内存分配,也就是系统本身运行所需的内存分配。当系统启动完成且运行平稳后,插入内存统计的模块,进行内存分配情况的统计。当卸载模块时,内存分配情况的统计结构就会输出在终端上。实验结果及分析测试了分配策略所提到的多种分配策略,以按照bank利用率进行分配的bank-order分配策略为例,分析一下实验结果。图3与图4中的bank_no表示Bank编号,nr_alloc_pages表示该Bank中已分配的页框数目,nr_free_pages表示该Bank中空闲的页框数目。total_nr_free_pages和total_nr_alloc_pages分别表示整个系统中空闲的页框数目和已分配的页框数目。对比图3与图4,可以看到:原始的内存分配策略感知不到Bank的存在,内存分配相对于Bank而言是随机的、离散的;而在按照Bank利用率进行分配的Bank-Order分配策略中,Bank9~Bank15基本上都被空闲了出来,40%的页框都分配在了Bank8上(26203/64086),聚集效果十分明显。平台下的聚集效果及功耗收益验证由于受平台限制,前期的实验部分是在虚拟环境下进行的。本小节将PASR算法移植到P6s平台下,进行现实环境下的实验测试,包括Bank-Intensive内存分配策略的聚集效果验证以及其所带来的功耗收益验证。平台搭载了主频为1.6GHZ的海思Kirin910四核处理器,运行内存RAM容量为2GB。内存DRAM的地址映射模式如表1所示。经过查看芯片手册以及讨论分析,P6s平台下DRAM的PASR可控粒度为segment(row中的前3位)或者bank。为了保证可控粒度单位内的连续内存块足够大以尽量能满足内存分配请求,本PASR算法选择segmen作为PASR的基本控制单元。下面分别测试了系统启动后、启动一个应用程序以及启动多个应用程序等3种应用场景下的Bank-Intensive内存分配策略(按照segment利用率分配,优先分配利用率高的segment)的效果。图5是系统启动稳定后,各segment的使用情况。可以看出segment2,segment7~segment12都是完全空闲的。图6是系统启动稳定后,启动一个应用,各segment的使用情况。可以看出,内存分配集中在了segment7和segment8上,segment2,segment9~segment12依然完全空闲。图7是继续启动应用,各segment的使用情况。可以看出,内存分配继续集中在segment7和segment8上,其中segment7更是被完全分配完,segment2,segment9~segment12依然完全空闲。以上实验数据表明,Bank-Intensive内存分配策略在P6s平台下同样表现出了优秀的聚集分配效果,充分使用已被占用的segment,以空闲出更多的segment进行PASR控制。结合Android待机流程中的PASR配置,在系统进入待机状态时关闭空闲segment的自刷新,测试功耗收益,结果:在原始待机状态下,系统的平均电流为2.60mA,开启基于Bank-Intensive内存分配策略的PASR控制后,平均电流降到了2.00mA,收益达到了23%。分析原因不难发现,系统启动平稳后有7个segment是完全空闲的(如图5所示),PASR控制通过配置相关寄存器关掉了这7个空闲segment的自刷新操作,因此带来了上述功耗收益。上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1