基于微内存***在与非型闪存介质实现虚拟内存的方法
技术领域
本发明涉及一种虚拟内存的实现方法,尤其涉及一种基于微内存***在与非型闪存介质上实现虚拟内存的方法。
背景技术
近年来,随着微机操作***的发展,操作***具有的功能越来越丰富,大多数操作***具有虚拟内存技术。虚拟内存技术是计算机发展史上的一项重要的技术,它帮助应用程序摆脱了“体积”的限制。虚拟内存的管理方法使***既可以运行体积比物理内存还要大的应用程序,也可以实现“按需调页”策略,既满足了程序的运行速度,又节约了物理内存空间。
虚拟存储器的基本思想是:程序、数据、堆栈的大小可以超过内存的大小,操作***把程序当前使用的部分保留在内存,而把其它部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换。当进程运行时,先将一部分程序装入内存,另一部分暂时留在外存,当要执行的指令或使用的数据不在内存时,由***自动完成将它们从外存调入内存的工作。在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其它页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。当内存空间紧张时,***将内存中某些进程暂时移到外存,把外存中某些进程换进内存,占据前者所占用的区域,这种技术是进程在内存与外存之间的动态调度。
现有技术中已有的与本发明最相近似的实现方案有两个:
PC操作***方面:Windows上和LINUX/UNIX上的虚拟内存技术是以硬盘来实现的,但是是基于文件***的,需要一定的物理内存来存放文件***的长驻数据。
嵌入式操作***方面:LINUX和WINDOWS CE的虚拟内存技术是以与非型闪存来实现的,但是还是基于文件***的,这就要有相当大的文件***数据要常驻内存。
无论是PC操作***还是嵌入式操作***,现有的虚拟内存技术均是在文件***上实现的,因为常驻在内存中的数据量比较大,对于微内存***来说,是不可取的。传统的虚拟内存是在文件***上实现的,那么这种方式常驻在内存中数据量就会很大,对于物理内存很小的***来说,当然是不可取的。
对电子行业来说,竞争越来越激烈,为了在行业的竞争中处于不败之地,质量和价格是特别重要的两方面。对于价格方面来讲,成本控制是基础。本***设计的是基于嵌入式环境下的微内存***虚拟内存技术。
发明内容
本发明的目的是为了减少常驻在内存中的数据量,提高***的速度和效率,不在文件***上实现虚拟内存,直接在与非型闪存上实现虚拟内存。
本发明的目的可以通过以下方案实现:基于微内存***在与非型闪存介质实现虚拟内存的方法,其特征在于,先在与非型闪存中虚拟一个存储空间作为虚拟内存;当物理内存无空间存储新的内存页时,将物理内存中的内存页写入虚拟内存上;然后对物理内存原有的内存页进行失效;最后将虚拟内存中需要运算的内存页写入物理内存中,实现物理内存与虚拟内存的内存页交换。
所述的内存页失效是以最久未访问失效策略进行筛选。
所述的虚拟内存与物理内存的内存页交换采用按页映射的过程,即擦一次数据块可以写多个页。
所述的物理内存的内存页写入虚拟内存过程中,有三个优选方法:
1)如果物理内存页的属性是只读,则在虚拟内存中已经存放该内存页,该物理内存页中的内容不用回写到虚拟内存中,并直接将该段物理内存内容清除;否则将该物理内存页写入虚拟内存。
2)利用写写脏标识减少数据回写:如果物理内存页中存放的内容是数据段,要区分数据段的内容是否被修改过;内容没有被修改过,写写脏标识被置为假,不用回写到虚拟内存中,直接将该段物理内存中的内容清除;如果数据段的内容被修改过,写脏标识为真,就将该数据段的内容回写到虚拟内存中,然后将该段物理内存中的内容清除。
3)对于已经空闲的内存,由于该内存已不可用,直接从物理内存中清除,同时也把虚拟内存中对应的一段内存做已丢弃标记。
所述的物理内存回写到虚拟内存的过程中,包括以下内容:
在物理内存和虚拟内存之间定义个映射表,所述的映射表记录所述物理内存的内容在与非型闪存上的存放位置。
内存页回写到虚拟内存采用按数据块循环的过程:当物理内存的内存页内容有改变时,为了提高***效率,不是擦掉虚拟内存上该内容对应的内存页,而是将物理内存的内存页内容写入虚拟内存中当前数据块的下一个空的内存页上。
所述的物理内存的内存页写入虚拟内存过程中,为了解决坏块问题,提高***可靠性,与非型闪存介质保留一定数量的备用块:保证回写完后在虚拟内存中始终保持M(M>=2)个空闲的数据块不变,否则会出现空闲数据块不够用的情况。
本发明相对现有技术的优点在于:采用了按页映射和按数据块循环的方法提高写擦比,减少了读写内存的次数,延长了电子器件的寿命;利用足够备用块的方法以提高***可靠性,保证写擦时有足够的空间,减少数据丢失现象;利用脏标识和内存丢弃机制的方法减少数据回写,提高了内存缓冲的效率和延长了磁盘的寿命。
附图说明
图1是本发明的内存结构示意图;
图2是本发明的内存页从物理内存写入虚拟内存流程示意图;
图3是本发明的内存页从虚拟内存写入物理内存流程示意图。
具体实施方式
如图1所示,为了节约成本,提高竞争力,***采用的物理内存只有192K,利用内存管理单元MMU(Memory Management Unit)把192K物理内存虚拟为2M的虚拟内存,虚拟内存是从与非型闪存介质上分出来的2M空间。物理内存和虚拟内存均以4K为一个内存页,将192K的物理内存分割为192K/4K=48个内存页,虚拟内存和物理内存之间的映射采用按页映射的方法,就是擦一次数据块,可以写很多个页,本***是擦一次数据块,可以写64个页。采用页映射的目的是提高写擦比。***运行过程中物理内存和与非型闪存之间进行数据交换。
其中,物理内存包括了三个部分:16k的底部、160k的中部和16k的顶部。其中16k的底部是固定映射到虚拟内存,结构包括了数据片、状态结构、驱动代码和中断代码。160k的中部不是固定映射到虚拟内存,映射与否取决于内存页是否有被修改,当内存页被修改才会映射到虚拟内存;结构包括了8k的用户堆栈、以符号开始的块、代码段和只读数据段。16k的顶部是固定映射到虚拟内存,结构包括了1k的异常堆栈、1k的中断堆栈、3k的动态数据区、8k的高频代码、2k的二级MMU映射表和1k的一级MMU映射表。
物理内存和与非型闪存之间进行数据交换有两种操作:页面换入和页面换出。换入就是将与非型闪存上相应的内存页加载到物理内存。换出就是将物理内存中内存页回写到与非型闪存上。
页面从物理内存写入虚拟内存过程:
当物理内存无空间存储新的内存页的时候,就需要将某些内存页从物理内存中移出,将物理内存中内存页回写到与非型闪存上,然后使该页的内容失效。采用的方法是利用最久未访问失效策略进行页失效。为了提高***效率和速度和提高与非型闪存的使用寿命(尽量减少与非型闪存的擦写),将物理内存中内存页回写到与非型闪存上有三种优化方法:
1)根据物理内存内存页中存放的内容的属性进行划分,如果内容的属性是只读,则与非型闪存中已有存放,该物理内存内存页中的内容,不用回写到与非型闪存中,直接将该段物理内存中的内容清除。
2)利用写脏标识减少数据回写,写脏标识是真的才需要回写到与非型闪存上。如果物理内存内存页中存放的内容是数据段,要区分数据段的内容是否被修改过。内容没有被修改过,写脏标识被置为假,不用回写到与非型闪存中,直接将该段物理内存中的内容清除;如果数据段段的内容被修改过,写脏标识为真,就将该数据段的内容回写到与非型闪存中,然后将该段物理内存中的内容清除。
3)采用内存丢弃机制:对于已经释放的内存,由于该内存已不可用,直接从物理内存中清除,同时也要把与非型闪存上对应的一段内存做以丢弃标记。
进行页失效要把物理内存数据段的内容回写到与非型闪存上,回写到与非型闪存的方法如下:
1)在物理内存和与非型闪存之间定义一个映射表,回写到与非型闪存时,会边写边修改映射表,映射表会纪录物理内存的内容在与非型闪存上的存放位置;
2)回写数据到与非型闪存,采用的是按数据块循坏的方法。如果物理内存内存页内容有改变,为了提高***效率,不是擦掉与非型闪存上该内容对应的内存页,而是将物理内存的内存页内容写到与非型闪存上当前数据块的下一个空的内存页上;
3)为了解决坏块问题,提高***可靠性,保留一定数量的备用块。保证回写完后在与非型闪存介质中始终保持M(M>=2)个空闲的数据块不变,否则会出现空闲数据块不够用的情况;
block n-1 block n block n+M-1 block n+M
目前的状态是:
块n-1:已写满数据;
块n到块n+M-1:为M个空闲的数据块;
块n+M不为空,有可能存在有效的数据页,需要回收。
页面写入虚拟内存流程如图2所示:
a)检查块n-1是否写满;
b)如果步骤a返回的结果为是,则取下一个合法的块n并检测块n+M是否为空;如果步骤a返回的结果为否,则跳到步骤g;
c)如果步骤b返回的结果为否,则将合法的页从块n+M移到块n;并检查是否移动成功;
d)如果步骤c返回的结果为是,则跳到步骤f;如果步骤c返回的结果为否,则取下一个合法的块n,并使M自减1;
e)取代该块并标记为坏,返回步骤c;
f)如果步骤b返回的结果为是,则擦掉块n+M并检查是否成功擦掉;
g)如果步骤f返回的结果为否,则标记该块为坏块并返回步骤c;如果步骤f返回的结果为是,则将页面数据写入当前的块并检查是否写入成功;
h)如果步骤g返回的结果为是,则更新映射表;如果步骤d返回的结果为否,则取下一个合法的块n,并使M自减1;
i)取代该块并标记为坏,返回步骤g。
上述步骤中因为出现写失败而出现的“M自减1”会导致空闲块的个数M减少,也就是备用空闲的块不足,遇到这种情况,在完成写流程后需要再进行一个备用空闲的块的回收才能保证空闲的块数量保持不变。
页面从虚拟内存写入物理内存过程:
将与非型闪存上相应的内存页加载到物理内存的流程如图3所示,首先查询与非型闪存的记忆体上的映射表,取出与非型闪存页对应的id;然后从与非型闪存的记忆体读取内存页;最后更新MMU的映射表。
本发明解决了在微内存***上,直接在与非型闪存上实现虚拟内存的方法并提供了提高***性能和效率,提高与非型闪存使用寿命的方法和提供了处理与非型闪存坏块问题的方法。