[发明专利]一种基于未知长度二分查找的闪存数据检索存储的方法有效
申请号: | 201310015153.9 | 申请日: | 2013-01-15 |
公开(公告)号: | CN103020323A | 公开(公告)日: | 2013-04-03 |
发明(设计)人: | 王洪君;李绍林;曹敏;王琰;王惠;王光雷 | 申请(专利权)人: | 山东大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;G06F12/02 |
代理公司: | 济南金迪知识产权代理有限公司 37219 | 代理人: | 许德山 |
地址: | 250100 山*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 一种基于未知长度二分查找的闪存数据检索存储的方法,属于闪存存储技术领域。本发明结合未知长度二分查找、位图、负载因子、擦写距离等算法和思想,用未知长度二分查找代替全地址空间(扇区的全部地址)的二分查找,用位图代替实际删除,用负载因子和擦写距离代替全地址空间存储,本发明检索存储的方法提高了对闪存介质的查询、删除、擦写等基本操作的性能,同时,还具有可扩展性强、资源占用少等优点,易于在嵌入式系统或无操作系统的单片机中实现。 | ||
搜索关键词: | 一种 基于 未知 长度 二分 查找 闪存 数据 检索 存储 方法 | ||
【主权项】:
1.一种基于未知长度二分查找的闪存数据检索存储的方法,是利用单片机控制系统实现的,该系统包括单片机、闪存存储芯片、查询生成器、报警器、上位机,上位机通过RS-485连接单片机,单片机通过SPI连接闪存存储芯片,单片机通过SPI或RS-232连接查询生成器,单片机通过三极管放大器和继电器连接报警器;查询生成器用于向单片机输入待查询的数据,当待查询数据在闪存存储芯片中不存在时,报警器报警,上位机将变更的数据发送至单片机,单片机负责将数据变更反映到闪存存储芯片中;该方法分作6步,前3步提供设定及计算得到的基本参数,后3步分别进行不同的操作以实现3组不同的功能,该方法具体步骤如下:1)各扇区的容量为Capacity,负载因子为LoadFactor,扇区数量为SectorCount,扇区从0开始编号;2)向编号为i的已存储SizeStored(i)大小数据的扇区,存入长度为N的数据时,该扇区提供的剩余空间为也就是说,编号为i的扇区在已存储SizeStored(i)大小的数据后,仍有剩余空间继续存储大小为N的数据时,该扇区提供的剩余空间为扇区容量减去扇区中已存储的数据大小;其他情况下,该扇区提供的剩余空间为“负载因子限制下”的扇区容量即Capacity*LoadFactor减去扇区中已存储的数据大小;另外,允许Rcs(i,N)的结果为负,当Rcs(i,N)的结果为负时表示该扇区需要额外空间存储数据;3)擦写距离分为前向擦写距离DEWp和后向擦写距离DEWn两种,有效的擦写距离为非负整数,擦写距离的计算过程步骤如下:a.向i号扇区写入长度为N的数据时,前向擦写距离DEWp的计算过程步骤如下:i.初始化DEWp=0;前向擦写距离的初始值为0sectorNo=i;扇区编号Rsumps=Rcs(i,N);编号小于和等于i的所有扇区的剩余空间之和;ii.如果sectorNo>=0并且Rsumps<N,转至步骤iii;否则转至步骤iv;iii.sectorNo=sectorNo-1DEWp=DEWp+1Rsumps=Rsumps+Rcs(sectorNo,N-Rsumps)转至步骤ii;iv.如果Rsumps<N,那么DEWp=-1;b.向i号扇区写入长度为N的数据时,后向擦写距离DEWn的计算过程步骤如下:i.初始化DEWn=0;后向擦写距离的初始值为0sectorNo=i;扇区编号Rsumns=Rcs(i,N);编号大于和等于i的所有扇区的剩余空间之和;ii.如果sectorNo<SectorCount并且Rsumns<N,转至步骤iii;否则转至步骤iv;iii.sectorNo=sectorNo+1DEWn=DEWn+1转至步骤ii;c.如果Rsumns<N,那么DEWn=-1;4)查找操作该操作首先执行未知长度二分查找算法,然后结合位图Bitmap,判定该数据是否有效,查找操作步骤如下:a.未知长度二分查找,查找操作的执行过程主要分为以下两步:i.使用步长倍增的方式,即第1次查找时,步长为1,即2(1-1);第2次查找时,步长为2,即2(2-1);第3次查找时,步长为4,即2(3-1),以此类推,该方式快速确定一个不小于待查询数据的数据地址,并使next变量指向该地址,而将cur变量指向next前的最后一个小于待查询数据的数据地址,cur初始值为0,next初始值为1;ii.使用标准二分查找,在cur和next-1之间确定待查询数据是否存在;如果查找失败,则直接报错;否则,继续执行;b.查看被成功查找到的数据的下标Iquery所对应的位图是否有效,即需要进一步验证数据的有效性;用以下方式定义下标i的位图查询函数:即位图的第(i/8)个字节的第(i%8)个Bit位为1时,该函数返回True,否则返回False;当该函数返回True时,表明该下标所对应的数据有效,否则返回False表明无效;5)删除操作设待删除的元素对应的下标为Idelete,将位图中第(Idelete/8)个字节的第(Idelete%8)个Bit位置0;6)擦写操作该操作首先决策擦写方向,再在决策方向上执行不同类型的擦写操作;a.擦写方向决策过程i.如果本扇区的剩余空间大于N,则将新数据直接写入本扇区;否则,分别计算(DEWp,Rsumps)和(DEWn,Rsumns);其中(DEWp,Rsumps)表示前向擦写距离(DEWp)内,获得的全部扇区的总剩余空间为Rsumps,(DEWn,Rsumns)表示后向擦写距离(DEWn)内,获得的全部扇区的总剩余空间为Rsumns;ii.如果Rsumps和Rsumns均大于等于N,此时比较(DEWp-1)和DEWn的大小:若前者较小,则将新数据写入本扇区和“编号小于本扇区编号”的扇区;否则,将新数据写入本扇区和“编号大于本扇区编号”的扇区;iii.如果仅Rsumps大于等于N,则将新数据写入本扇区和“编号小于本扇区编号”的扇区;iv.如果仅Rsumns大于等于N,则将新数据写入本扇区和“编号大于本扇区编号”的扇区;v.如果Rsumps和Rsumns均小于N,则报错;b.不同类型的擦写操作i.非跨扇区擦写操作本扇区足以存储长度为N的数据时,仅对本扇区执行擦写操作;ii.前向跨1扇区写操作前向擦写距离(DEWp)等于1时,需要对本扇区执行擦写操作,对本扇区之前的1个扇区执行"追加写(Append)"操作,即将本扇区前部长度为N'=Capacity*(1-LoadFactor)的数据追加到本扇区之前的1个扇区的尾部;ⅲ.跨扇区擦写操作当前向擦写距离(DEWp)大于1或后向擦写距离(DEWn)大于0时,需要执行跨扇区擦写操作;在某扇区被写满之后,该扇区应只保留负载因子LoadFactor规定的百分比的数据,其他数据应转存至其他扇区,接收转存数据的扇区,不再重新计算擦写半径,即应按照原有方向继续转存数据,而不改变数据的转存方向;接收转存数据的扇区被写满之后,也应减少其扇区的数据至负载因子LoadFactor规定的百分比。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于山东大学,未经山东大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201310015153.9/,转载请声明来源钻瓜专利网。
- 上一篇:多级过滤式污水回收再生系统
- 下一篇:一种太阳能自动污水处理装置