CN103699341A - 一种向存储设备中写数据的方法 - Google Patents
一种向存储设备中写数据的方法 Download PDFInfo
- Publication number
- CN103699341A CN103699341A CN201310692641.3A CN201310692641A CN103699341A CN 103699341 A CN103699341 A CN 103699341A CN 201310692641 A CN201310692641 A CN 201310692641A CN 103699341 A CN103699341 A CN 103699341A
- Authority
- CN
- China
- Prior art keywords
- page
- data
- caching
- written
- physical
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 39
- 238000013507 mapping Methods 0.000 claims abstract description 113
- 230000004048 modification Effects 0.000 claims description 43
- 238000012986 modification Methods 0.000 claims description 43
- 238000011084 recovery Methods 0.000 claims description 7
- 238000005299 abrasion Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 238000011067 equilibration Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
Images
Abstract
本发明公开了一种向存储设备中写数据的方法,属于存储技术领域。所述方法包括:当向存储设备中写入待写数据时,根据待写数据、待写数据的长度和待写数据的逻辑地址,通过对缓存区、快速交换区、第一映射表、第二映射表和标记区的处理,实现将待写数据写入存储设备中。本发明通过采用缓存,减少对存储设备的擦写次数;通过采用标记区,能够实现掉电时防止数据丢失;通过采用快速交换区,能够实现存储设备在使用过程中的磨损平衡,保证存储设备的使用寿命;通过采用映射表存储在缓存区中的方式节省了存储设备的空间。
Description
技术领域
本发明涉及存储技术领域,尤其涉及一种向存储设备中写数据的方法。
背景技术
随着科学技术的发展,智能卡的市场不断扩大,而在使用智能卡的过程中,在未知情况下由于断电、失电或电的质量达不到要求而导致智能卡不能正常工作,如果智能卡正处于对存储设备(即非易失性存储区,包括EEPROM、FLASH等)进行擦写的操作过程中时,则会导致存储设备中原有数据的丢失,大大降低了智能卡的安全性。
另外,在向存储设备写入数据时,需要对数据进行擦写操作,在实际的擦写操作过程中,往往会对存储设备中的某一页进行频繁擦写,使擦写达不到平衡,而存储设备的擦写生命周期一般为十万次,由于对某些页进行过度的擦写从而导致存储设备的提早损坏,严重影响存储设备的使用寿命。
发明内容
本发明为了解决现有技术中存在的不足,提供了一种向存储设备中写数据的方法。
本发明采用的技术方案是:一种向存储设备中写数据的方法,当向所述存储设备中写入待写数据时,所述方法包括:
S1、根据所述待写数据的逻辑地址计算逻辑页号和页内偏移;
S2、根据所述待写数据的逻辑页号,查找第一映射表,获知所述待写数据的物理页号;
S3、判断缓存区中是否存在与所述待写数据的物理页号对应的缓存页,是则根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,执行S11,否则执行S4;
S4、查找第二映射表,判断是否存在所述待写数据的物理页号,是则获取到与所述待写数据的物理页号对应的快速交换页,执行S5,否则执行S7;
S5、判断所述缓存区中的缓存页是否为空闲状态,是则执行S6,否则将所述缓存页的数据写入对应的数据页中,并将所述缓存页置为空闲状态,执行S6;
S6、查找与所述待写数据的物理页号对应的数据页,将所述数据页中的数据写入所述缓存页中,并将所述缓存页置为占用状态,将所述缓存页的物理页号修改为所述待写数据的物理页号,根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,执行S11;
S7、查找第二映射表,判断所述快速交换页是否为空闲状态,如果是,则执行S8,否则将所述缓存页中的数据写入对应的数据页中,将所述缓存页置为空闲状态,并将所述快速交换页置为空闲状态,根据所述第二映射表中记录的数据页的物理页号更新所述快速交换页的物理页号,根据所述第二映射表中记录的所述快速交换页的物理页号设置当前标记页,将当前标记页的下一标记页作为当前标记页,在所述第二映射表中建立所述快速交换页的物理页号与所述待写数据的物理页号的对应关系,执行S9;
S8、判断所述缓存页是否为空闲状态,如果是,则执行S9,否则将所述缓存页中的数据写入对应的数据页中,并将所述缓存页置为空闲状态,执行S9;
S9、将与所述待写数据的物理页号对应的数据页中的数据写入所述缓存页中;
S10、将所述缓存页对应的物理页号修改为所述快速交换页的物理页号,根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,并将所述缓存页置为占用状态;
S11、更新所述待写数据的长度,根据更新后的待写数据的长度判断是否还有未写入的数据,如果是,则更新所述逻辑页号和所述页内偏移,返回S2,否则执行S12;
S12、将所述第二映射表中所述快速交换页的物理页号和对应的数据页的物理页号进行交换,并根据交换后的所述第二映射表中记录的数据页的物理页号,更新所述第一映射表,将所述缓存页的数据写入对应的数据页中,根据所述交换后的第二映射表更新当前标记页,结束。
所述步骤S1,具体为:将所述待写数据的逻辑地址除以页的大小,将得到的商作为逻辑页号,将得到的余数作为页内偏移。
所述步骤S5中,所述判断所述缓存页是否为空闲状态,具体为:判断所述缓存页中的空闲标识是否置位,如果是,则所述缓存页为空闲状态,否则所述缓存页为占用状态;
所述将所述缓存页置为空闲状态,具体为:将所述空闲标识置位;
所述将所述缓存页置为占用状态,具体为:将所述空闲标识复位。
所述步骤S5中,所述将所述缓存页的数据写入对应的数据页中,具体为:获取所述缓存页的物理页号,根据所述缓存页的物理页号查找对应的数据页,将所述缓存页中的数据写入所述对应的数据页中。
所述步骤S5中,所述判断所述缓存页是否为空闲状态,具体为:遍历缓存区,判断是否存在空闲标识置位的缓存页,如果是,则存在空闲状态的缓存页,否则不存在空闲状态的缓存页。
所述步骤S5中,所述将所述缓存页中数据写入对应的数据页中,并将所述缓存页置为空闲状态,具体为:
步骤a1:获取所述缓存区中修改次数最少的缓存页,获取所述修改次数最少的缓存页的物理页号;
步骤a2:根据所述修改次数最少的缓存页的物理页号查找对应的数据页;
步骤a3:将所述修改次数最少的缓存页中的数据写入所述对应的数据页中,更新所述对应的数据页中的修改次数,将所述修改次数最少的缓存页置为空闲状态。
所述更新对应的数据页中的修改次数,具体为:将所述对应的数据页中的修改次数自加预设值。
所述步骤S7中,所述将所述缓存页中的数据写入对应的数据页中,具体为:获取缓存区中所有缓存页的物理页号,从数据区中查找与所述所有缓存页的物理页号对应的数据页,将所述所有缓存页中的数据写入所述对应的数据页中。
所述步骤S7中,所述根据所述第二映射表中记录的所述数据页的物理页号更新所述快速交换页的物理页号,具体为:用所述第二映射表中数据页的物理页号替换掉所述快速交换页的物理页号。
所述方法还包括:上电恢复数据;所述上电恢复数据,包括:
步骤b1:遍历标记区,获取所述标记区中校验码正确的所有标记页;
步骤b2:获取所述校验码正确的所有标记页中修改次数最大的标记页,作为当前标记页;
步骤b3:根据所述当前标记页中记录的快速交换页对应的物理页号,在所述缓存区中建立第二映射表;
步骤b4:遍历存储设备,将存储设备中除所述标记区外,不包含快速交换页的区域作为数据区,根据所述数据区中数据页的逻辑页号与物理页号的对应关系,在所述缓存区中建立第一映射表;
步骤b5:将所述当前标记页的下一标记页作为当前标记页。
所述步骤S7中,所述根据所述第二映射表中记录的所述快速交换页的物理页号设置当前标记页,具体为:获取所述第二映射表中快速交换页的物理页号,将所述快速交换页的物理页号写入所述当前标记页中,将所述当前标记页中的修改次数自加预设值,并计算所述当前标记页的校验码并写入所述当前标记页中。
所述步骤S7中,所述判断所述快速交换页是否为空闲状态,具体为:通过查找所述第二映射表中的空闲标识,判断是否存在置位的空闲标识,如果是,则存在空闲状态的快速交换页,否则不存在空闲状态的快速交换页;
所述步骤S7中,判断为是时,还包括:在所有空闲状态的快速交换页中查找修改次数最少空闲状态的快速交换页;
所述步骤S7中,判断为否时,所述将所述快速交换页置为空闲状态,具体为:将所有的快速交换页的空闲标识均置位;
所述步骤S7中,判断为否时,在所述将所述快速交换页置为空闲状态之后,还包括:查找修改次数最少的空闲标识置位的快速交换页。
所述步骤S8具体为:
步骤c1:遍历缓存区,判断缓存区中的缓存页是否为空闲状态,如果是,则执行步骤S9,否则执行步骤c2;
步骤c2:将缓存区中修改次数最少的缓存页中的数据写入对应的数据页中,并将所述修改次数最少的缓存页置为空闲状态;
步骤c3:获取与所述修改次数最少的缓存页的物理页号对应的数据页;
步骤c4:将所述修改次数最少的缓存页中的数据写入所述对应的数据页中,将所述修改次数最少的缓存页中的空闲标识置位。
所述步骤S9具体为,将与所述待写数据的物理页号对应的数据页中的数据写入所述修改次数最少的缓存页中;
所述步骤S10中,所述根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,具体为:根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述修改次数最少的缓存页。
所述根据更新后的待写数据的长度判断是否还有未写入的数据,具体为:判断所述更新后的待写数据的长度是否等于0,如果是,则没有未写入的数据,否则有未写入的数据。
所述步骤S12中,所述更新第一映射表,具体为:根据交换后的数据页的物理页号与逻辑页号的对应关系,更新第一映射表。
所述上电恢复数据,还包括:
步骤d1:获取首次上电标识,判断所述首次上电标识是否置位,如果是,则执行步骤d2,否则执行步骤b1;
步骤d2:将所述存储设备中的第一预设页数的区域作为快速交换区,将所述存储设备中的第二预设页数的区域作为标记区,其余区域作为数据区;
步骤d3:根据所述数据区中数据页的物理页号与逻辑页号,在所述缓存区中建立第一映射表;
步骤d4:根据所述快速交换区中快速交换页的物理页号,在缓存区中建立第二映射表;
步骤d5:将所述标记区的第一个标记页作为当前标记页,将所述快速交换区中快速交换页的物理页号,写入所述当前标记页中,修改所述当前标记页的修改次数,计算所述当前标记页的校验码并写入所述当前标记页中,将当前标记页的下一标记页作为当前标记页,并将所述首次上电标识复位。
本发明取得的有益效果是:通过采用缓存,减少对存储设备的擦写次数;通过采用标记区,能够实现掉电时防止数据丢失;通过采用快速交换区,实现存储设备在使用过程中的磨损平衡,保证存储设备的使用寿命;通过采用映射表存储在缓存区中的方式节省了存储设备的空间。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的一种向存储设备中写数据的方法流程图;
图2是本发明实施例2提供的一种向存储设备中写数据的方法流程图;
图3是本发明实施例2中上电恢复数据的操作流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例中,所述存储设备包括数据区、快速交换区和标记区,其中,数据区中包括一页或多页数据页,快速交换区中包括一页或多页快速交换页,标记区中包括多页标记页;所述方法还包括缓存区(即为易失性存储器,如RAM中的部分存储空间),所述缓存区中包括一页或多页的缓存页;其中,还包括第一映射表和第二映射表,优选存放在缓存区中,除此之外,还可存放于存储设备中或其他空闲区域中;第一映射表用于存储数据页的物理页号与逻辑页号的对应关系,第二映射表用于存储快速交换页的物理页号与数据页的物理页号的对应关系;
本发明能够应用于缓存页、快速交换页为一页或多页的情况,即缓存页为一页,快速交换页为一页或多页的情况,或者是缓存页为多页,快速交换页为一页或多页的情况,实施例1以缓存页为一页、快速交换页为一页为例说明,实施例2以缓存页为多页、快速交换页为多页为例说明,相应的,快速交换页为一页、缓存页为多页或者缓存页为一页、快速交换页为多页的情况由以下两个实施例稍加交换可得;
当向所述存储设备中写入待写数据时,先判断缓存区中是否有待写数据的物理页号,如果有,则直接将待写数据写在缓存区中,如果没有,则判断快速交换区中是否有待写数据的物理页号,如果有,则将待写数据写在缓存页中,并将缓存页的物理页号设置为待写数据的物理页号,如果没有,则找到空闲快速交换页,将与待写数据的物理页号对应的数据页写到缓存页中,将缓存页的物理页号改为空闲快速交换页的物理页号,并用待写数据修改缓存页;当待写数据全部写完时,将空闲快速交换页的物理页号和数据页的物理页号交换,更新标记页,结束。
实施例1
本发明实施例1提供了一种向存储设备中写数据的方法,如图1所示,包括:本实施例中,以快速交换页为一页、缓存页也为一页的情况为例来说明:当向存储设备中写入待写数据时,执行以下操作:
步骤S1:根据所述待写数据的逻辑地址计算所述待写数据的逻辑页号和页内偏移;
步骤S2:根据所述待写数据的逻辑页号,查找第一映射表,获知所述待写数据的物理页号;
本实施例中,所述第一映射表用于存储数据页的物理页号与逻辑页号的对应关系;
步骤S3:判断缓存区中是否存在与所述待写数据的物理页号对应的缓存页,如果是,则根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,执行步骤S16,否则执行步骤S4;
步骤S4:查找第二映射表,判断是否存在所述待写数据的物理页号,是则执行步骤S5,否则执行步骤S9;
本实施例中,通过查找第二映射表,如果存在待写数据的物理页号,则获取与所述待写数据的物理页号对应的快速交换页的物理页号,即获取到与所述待写数据的物理页号对应的快速交换页;
步骤S5:判断所述缓存区中的缓存页是否为空闲状态,是则执行步骤S7,否则执行步骤S6;
具体为:判断所述缓存页中的空闲标识是否置位,如果是,则所述缓存页为空闲状态,否则所述缓存页为占用状态;
步骤S6:将所述缓存页的数据写入对应的数据页中,并将所述缓存页置为空闲状态;
本实施例中,所述将所述缓存页置为空闲状态,具体为:将所述空闲标识置位;
其中,所述将所述缓存页的数据写入对应的数据页中,具体为:获取所述缓存页的物理页号,根据所述缓存页的物理页号查找对应的数据页,将所述缓存页中的数据写入所述对应的数据页中;
步骤S7:查找与所述待写数据的物理页号对应的数据页,将所述数据页中的数据写入所述缓存页中,并将所述缓存页置为占用状态,将所述缓存页的物理页号修改为所述待写数据的物理页号;
本实施例中,所述将所述缓存页置为占用状态,具体为:将所述空闲标识复位
步骤S8:根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,执行步骤S16;
步骤S9:查找第二映射表,判断所述快速交换页是否为空闲状态,如果是,则执行步骤S12,否则执行步骤S10;
步骤S10:将所述缓存页中的数据写入对应的数据页中,将所述缓存页置为空闲状态,并将所述快速交换页置为空闲状态,根据所述第二映射表中记录的数据页的物理页号更新所述快速交换页的物理页号;
步骤S11:根据所述第二映射表中记录的所述快速交换页的物理页号设置当前标记页,将当前标记页的下一标记页作为当前标记页,在所述第二映射表中建立所述快速交换页的物理页号与所述待写数据的物理页号的对应关系,执行步骤S14;
步骤S12:判断所述缓存页是否为空闲状态,如果是,则执行步骤S14,否则执行步骤S13;
步骤S13:将所述缓存页中的数据写入对应的数据页中,并将所述缓存页置为空闲状态;
步骤S14:将与所述待写数据的物理页号对应的数据页中的数据写入所述缓存页中;
步骤S15:将所述缓存页对应的物理页号修改为所述快速交换页的物理页号,根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,并将所述缓存页置为占用状态;
步骤S16、更新所述待写数据的长度,根据更新后的待写数据的长度判断是否还有未写入的数据,如果是,则执行步骤S17,否则执行步骤S18;
步骤S17:更新所述逻辑页号和所述页内偏移,返回步骤S2;
步骤S18、将所述第二映射表中所述快速交换页的物理页号和对应的数据页的物理页号进行交换,并根据交换后的所述第二映射表中记录的数据页的物理页号,更新所述第一映射表,将所述缓存页的数据写入对应的数据页中,根据所述交换后的第二映射表更新当前标记页,结束。
实施例2
本发明实施例2提供了一种向存储设备中写数据的方法,如图2所示,本实施例以快速交换页与缓存页为多页的情况来说明:具体为:当向存储设备中写入待写数据时,执行以下操作:
例如,本实施例中,待写数据为AA BB CC,待写数据的逻辑地址为0x65,待写数据的长度为0x03;
步骤101:根据所述待写数据的逻辑地址,计算逻辑页号和页内偏移;
具体为:将所述待写数据的逻辑地址除以页的大小,将得到的商作为逻辑页号,将得到的余数作为页内偏移,优选的,页的大小为0x64;
例如,本实施例中,计算得到逻辑页号为0x01,页内偏移为0x01;
步骤102:根据所述待写数据的逻辑页号,查找第一映射表,获知所述待写数据的物理页号;
例如,参见表1,本实施例中,存储设备中数据页与快速交换页为:
表1
其中,物理页号为02、04、06、07的页为快速交换页,其余为数据页;
参见表2,第一映射表为:
第一映射表
表2
通过查询第一映射表,获知待写数据的物理页号为0x03;
步骤103:遍历缓存区,判断所述缓存区中是否存在与所述待写数据的物理页号对应的缓存页,如果是,则执行步骤111,否则执行步骤104;
例如,参见表3,本实施例中,缓存区中的缓存页为:
表3
步骤104:查找第二映射表,判断是否存在所述待写数据的物理页号,如果是,则执行步骤105,否则执行步骤112;
例如,参见表4,本实施例中,第二映射表为:
第二映射表
表4
本实例中,所述第二映射表中存在所述待写数据的物理页号0x03;
步骤105:获取到与所述待写数据的物理页号对应的快速交换页;
例如,获取到与所述待写数据的物理页号0x03对应的快速交换页是:物理页号为0x04的快速交换页;
步骤106:遍历缓存区,判断缓存区中的缓存页是否为空闲状态,如果是,则执行步骤109,否则执行步骤107;
具体为:判断缓存区中是否存在空闲标识置位的缓存页,如果是,则执行步骤109,否则执行步骤107;
例如,本实施例中,缓存区中存在空闲缓存页;
步骤107:获取缓存区中修改次数最少的缓存页,获取所述修改次数最少的缓存页的物理页号;
步骤108:将所述修改次数最少的缓存页中的数据写入对应的数据页中,更新对应的数据页中的修改次数,将所述使用次数最少的缓存页置为空闲状态;
本实施例中,所述将所述使用次数最少的缓存页置为空闲状态,具体的,将所述使用次数最少的缓存页的空闲标识置位;
本实施例中,所述更新对应的物理页中的修改次数,即将对应的数据页中的修改次数加0x01;
步骤109:查找与所述待写数据的物理页号对应的数据页,将所述数据页中的数据写入空闲状态的缓存页中;
例如,参见表5,本实施例中,所述与所述待写数据的物理页号对应的数据页为:
表5
参见表6,将所述数据页中的数据写入空闲状态的缓存页中,得到的缓存页为:
表6,
步骤110:将空闲状态的缓存页置为占用状态,将该占用状态的缓存页的物理页号修改为所述待写数据的物理页号;
本实施例中,所述将空闲状态的缓存页中置为占用状态,具体为:将空闲状态的缓存页的空闲标识复位;
参见表7,得到的缓存页为:
表7
步骤111:根据所述待写数据、所述页内偏移和所述待写数据的长度更新缓存页,执行步骤123;
具体的,如果缓存区中存在所述待写数据的物理页号,则更新所述存在所述待写数据的物理页号的缓存页,如果缓存区中不存在所述待写数据的物理页号,则经过步骤104至步骤111后,更新所述占用状态的缓存页;
例如,参见表8,本实施例中,更新后的缓存区为:
表8
步骤112:查找第二映射表,判断快速交换页是否为空闲状态,如果是,则执行步骤113,否则执行步骤116;
本实施例中,所述判断快速交换页是否为空闲状态,具体为:通过查找所述第二映射表中的空闲标识,判断是否存在置位的空闲标识,如果是,则存在空闲状态的快速交换页,否则不存在空闲状态的快速交换页;
从本步骤开始至结尾,以第二映射表为以下表为例来说明,参见表9:
第二映射表
表9
该第二映射表中不存在所述物理页号,因此在步骤104的判断中,执行步骤112,步骤112的判断中,存在空闲快速交换页,执行步骤113;
步骤113:在所有空闲状态的快速交换页中查找修改次数最少的空闲状态的快速交换页;
例如,参见表10,本实施例中,修改次数最少的空闲状态的快速交换页为:
表10
步骤114:遍历缓存区,判断缓存区中的缓存页是否为空闲状态,如果是,则执行步骤120,否则执行115;
步骤115:将缓存区中修改次数最少的缓存页中的数据写入对应的数据页中,并将所述修改次数最少的缓存页置为空闲状态,执行步骤120;
具体为:获取与所述修改次数最少的缓存页的物理页号对应的数据页,将所述修改次数最少的缓存页中的数据写入所述对应的数据页中,将所述修改次数最少的缓存页中的空闲标识置位;
步骤116:获取缓冲区中所有缓存页对应的物理页号,从数据区中查找与所述所有缓存页对应的物理页号对应的数据页,将所有缓存页中的数据写入所述对应的数据页中,并将所有缓存页置为空闲状态;
步骤117:将快速交换区中所有快速交换页置为空闲状态;
具体为:将第二映射表中的所述空闲标识均置位;
步骤118:根据所述第二映射表中记录的数据页的物理页号更新快速交换页的物理页号,根据所述第二映射表中记录的快速交换页的物理页号设置当前标记页,将当前标记页的下一标记页作为当前标记页;
本实施例中,所述设置当前标记页,还包括:将当前标记页的修改次数自增加预设值0x01,计算当前标记页的校验码并写入当前标记页中;
例如,本步骤中的例子仅为说明步骤118的描述,与其余步骤中的示例无关;参见表11,本步骤中第二映射表为:
第二映射表
表11
本步骤中,根据所述第二映射表中记录的数据页的物理页号更新快速交换页的物理页号,参见表12,得到的第二映射表为:
第二映射表
表12
本步骤中,根据所述第二映射表中记录的快速交换页的物理页号设置当前标记页,参见表13,得到的当前标记页为:
表13
步骤119:在所述第二映射表中建立快速交换页的物理页号与所述待写数据的物理页号的对应关系;
例如,参见表14,得到的第二映射表为:
第二映射表
表14
步骤120:将与所述待写数据的物理页号对应的数据页中的数据写入空闲状态的缓存页中;
例如,参见表15,本实施例中,所述与所述物理页号对应的数据页为:
表15
本实施例中,将与所述物理页号对应的数据页中的数据写入空闲状态的缓存页中,参见表16,得到的缓存页为:
表16
步骤121:将所述空闲状态的缓存页对应的物理页号修改为空闲状态的快速交换页的物理页号;
例如,参见表17,本实施例中,得到的缓存页为:
表17
步骤122:根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述空闲状态的缓存页,并将所述空闲状态的缓存页置为占用状态;
例如,参见表18,得到的缓存页为:
表18
步骤123:更新所述待写数据的长度,根据更新后的待写数据的长度判断是否还有未写入的数据,如果是,则执行步骤124,否则执行步骤125;
具体为:判断更新后的待写数据的长度是否为0,如果是,则没有未写入的数据,执行步骤125,否则有未写入的数据,执行步骤124;
步骤124:更新所述逻辑页号和所述页内偏移,返回执行步骤103;
本实施例中,优选的,更新所述逻辑页号,具体为:将所述逻辑页号加0x01;
步骤125:将所述第二映射表中所述快速交换页的物理页号和对应的数据页的物理页号进行交换,并根据交换后的所述第二映射表中记录的数据页的物理页号,更新所述第一映射表;
例如,参见表19,本实施例中,交换后的第二映射表为:
第二映射表
表19
参见表20,得到的数据区与快速交换区为:
表20
参见表21,根据更新后的数据页,建立第一映射表为:
第一映射表
表21
步骤126:将所述缓存页的数据写入对应的数据页中,根据所述第二映射表更新当前标记页,结束;
例如,参见表22,本实施例中,将所述缓存页的数据写入对应的数据页中,得到的数据页与快速交换页为:
表22
参见表23,根据所述第二映射表更新当前标记页,得到的标记区为:
表23
参见图2,本实施例中,所述向存储设备中写数据的方法,还包括:上电后数据恢复过程,具体操作如下:
步骤201:获取首次上电标识,判断所述首次上电标识是否置位,如果是,则执行步骤202,否则执行步骤206;
本实施例中,优选的,预先约定当首次上电标识置位时,则为首次上电,当首次上电标识复位时,则不是首次上电;
步骤202:将所述存储设备中的第一预设页数的区域作为快速交换区,将所述存储设备中的第二预设页数的区域作为标记区,其余区域作为数据区;
本实施例中,优选的,所述第一预设页数为4页,即将存储设备中物理页号为00、01、02、03的区域作为快速交换区,第二预设页数为4页;参见表24,数据区与快速交换区为:
表24
步骤203:根据所述数据区中数据页的物理页号与逻辑页号,在缓存区中建立第一映射表;
例如,参见表25,本实施例中,在缓存区中建立的第一映射表为:
第一映射表
表25
步骤204:根据所述快速交换区中快速交换页的物理页号,在缓存区中建立第二映射表;
例如,参见表26,本实施例中,在缓存区中建立的第二映射表为:
第二映射表
表26
步骤205:将所述标记区的第一个标记页作为当前标记页,将所述快速交换区中快速交换页的物理页号,写入所述当前标记页中,修改所述当前标记页的修改次数,计算所述当前标记页的校验码并写入所述当前标记页中,将当前标记页的下一标记页作为当前标记页,并将所述首次上电标识复位,恢复成功;
例如,参见表27,本实施例中,建立的标记区为:
表27
本实施例中,如果为首次上电,还包括:初始化缓存区中的缓存页,即将缓存页中的数据清零,将缓存页中的空闲标识置位;
步骤206:遍历所述标记区,获取所述标记区中校验码正确的所有标记页;
步骤207:获取校验码正确的所有标记页中修改次数最大的标记页;
本实施例中,所述修改次数最大的标记页即为上次掉电时最新的标记页;
例如,参见表28,在上述写操作最后得到的标记区为:
表28
其中,参见表29,修改次数最大的标记页为:
表29
根据得到的标记页可知当前的快速交换页为物理页号为02040603的页,恰好符合上述写操作的结果,实现了本发明中的防掉电机制;
步骤208:根据当前标记页中记录的快速交换页对应的物理页号,在所述缓存区中建立第二映射表;
例如,参见表30,本实施例中,建立的第二映射表为:
第二映射表
表30
步骤209:遍历存储设备,将存储设备中除标记区外,不包含快速交换页的区域作为数据区,根据所述数据区中数据页的逻辑页号与物理页号的对应关系,在所述缓存区中建立第一映射表,将所述当前标记页的下一标记页作为当前标记页,恢复成功;
其中,如果所述第一映射表与第二映射表是存在非易失性存储器中,则不需要上电重新建立,直接获取即可;
例如,参见表31,本实施例中,恢复得到的数据区和快速交换区为:
表31
其中,物理页号为02、03、04、06的页为快速交换页,其余为数据页;
参见表32,建立的第一映射表为:
第一映射表
表32
综上所述,应用本发明的技术方案能够实现:
①通过采用缓存,在缓存中存在待写数据物理页号时直接改缓存,减少对存储设备的擦写次数;
②通过采用标记区,在上电恢复时,能获知上次掉电时的快速交换区的物理页号,从而也知道哪些区域是数据区,数据区的数据没有变化,实现防掉电;
③采用快速交换区,在对数据区进行写的操作时,找使用次数最少的快速交换页,防止对部分数据进行频繁擦写操作,实现磨损平衡;
④本发明的映射表优选存放在缓存区中,减少了存储设备的空闲,而且维护和恢复缓存区中的映射表所用的时间也较短,既能减少存储设备的空间又能较快的恢复映射表。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (17)
1.一种向存储设备中写数据的方法,其特征在于,当向所述存储设备中写入待写数据时,所述方法包括:
S1、根据所述待写数据的逻辑地址计算所述待写数据的逻辑页号和页内偏移;
S2、根据所述待写数据的逻辑页号,查找第一映射表,获知所述待写数据的物理页号;
S3、判断缓存区中是否存在与所述待写数据的物理页号对应的缓存页,是则根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,执行S11,否则执行S4;
S4、查找第二映射表,判断是否存在所述待写数据的物理页号,是则获取到与所述待写数据的物理页号对应的快速交换页,执行S5,否则执行S7;
S5、判断所述缓存区中的缓存页是否为空闲状态,是则执行S6,否则将所述缓存页的数据写入对应的数据页中,并将所述缓存页置为空闲状态,执行S6;
S6、查找与所述待写数据的物理页号对应的数据页,将所述数据页中的数据写入所述缓存页中,并将所述缓存页置为占用状态,将所述缓存页的物理页号修改为所述待写数据的物理页号,根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,执行S11;
S7、查找第二映射表,判断快速交换页是否为空闲状态,如果是,则执行S8,否则将所述缓存页中的数据写入对应的数据页中,将所述缓存页置为空闲状态,并将所述快速交换页置为空闲状态,根据所述第二映射表中记录的数据页的物理页号更新所述快速交换页的物理页号,根据所述第二映射表中记录的所述快速交换页的物理页号设置当前标记页,将当前标记页的下一标记页作为当前标记页,在所述第二映射表中建立所述快速交换页的物理页号与所述待写数据的物理页号的对应关系,执行S9;
S8、判断所述缓存页是否为空闲状态,如果是,则执行S9,否则将所述缓存页中的数据写入对应的数据页中,并将所述缓存页置为空闲状态,执行S9;
S9、将与所述待写数据的物理页号对应的数据页中的数据写入所述缓存页中;
S10、将所述缓存页对应的物理页号修改为所述快速交换页的物理页号,根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,并将所述缓存页置为占用状态;
S11、更新所述待写数据的长度,根据更新后的待写数据的长度判断是否还有未写入的数据,如果是,则更新所述逻辑页号和所述页内偏移,返回S2,否则执行S12;
S12、将所述第二映射表中所述快速交换页的物理页号和对应的数据页的物理页号进行交换,并根据交换后的所述第二映射表中记录的数据页的物理页号,更新所述第一映射表,将所述缓存页的数据写入对应的数据页中,根据所述交换后的第二映射表更新当前标记页,结束。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1,具体为:将所述待写数据的逻辑地址除以页的大小,将得到的商作为逻辑页号,将得到的余数作为页内偏移。
3.根据权利要求1所述的方法,其特征在于,所述步骤S5中,所述判断所述缓存页是否为空闲状态,具体为:判断所述缓存页中的空闲标识是否置位,如果是,则所述缓存页为空闲状态,否则所述缓存页为占用状态;
所述将所述缓存页置为空闲状态,具体为:将所述空闲标识置位;
所述将所述缓存页置为占用状态,具体为:将所述空闲标识复位。
4.根据权利要求3所述的方法,其特征在于,所述步骤S5中,所述将所述缓存页的数据写入对应的数据页中,具体为:获取所述缓存页的物理页号,根据所述缓存页的物理页号查找对应的数据页,将所述缓存页中的数据写入所述对应的数据页中。
5.根据权利要求1所述的方法,其特征在于,所述步骤S5中,所述判断所述缓存页是否为空闲状态,具体为:遍历缓存区,判断是否存在空闲标识置位的缓存页,如果是,则存在空闲状态的缓存页,否则不存在空闲状态的缓存页。
6.根据权利要求5所述的方法,其特征在于,所述步骤S5中,所述将所述缓存页中数据写入对应的数据页中,并将所述缓存页置为空闲状态,具体为:
步骤a1:获取所述缓存区中修改次数最少的缓存页,获取所述修改次数最少的缓存页的物理页号;
步骤a2:根据所述修改次数最少的缓存页的物理页号查找对应的数据页;
步骤a3:将所述修改次数最少的缓存页中的数据写入所述对应的数据页中,更新所述对应的数据页中的修改次数,将所述修改次数最少的缓存页置为空闲状态。
7.根据权利要求6所述的方法,其特征在于,所述更新对应的数据页中的修改次数,具体为:将所述对应的数据页中的修改次数自加预设值。
8.根据权利要求1所述的方法,其特征在于,所述步骤S7中,所述将所述缓存页中的数据写入对应的数据页中,具体为:获取缓存区中所有缓存页的物理页号,从数据区中查找与所述所有缓存页的物理页号对应的数据页,将所述所有缓存页中的数据写入所述对应的数据页中。
9.根据权利要求1所述的方法,其特征在于,所述步骤S7中,所述根据所述第二映射表中记录的所述数据页的物理页号更新所述快速交换页的物理页号,具体为:用所述第二映射表中数据页的物理页号替换掉所述快速交换页的物理页号。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:上电恢复数据;所述上电恢复数据,包括:
步骤b1:遍历标记区,获取所述标记区中校验码正确的所有标记页;
步骤b2:获取所述校验码正确的所有标记页中修改次数最大的标记页,作为当前标记页;
步骤b3:根据所述当前标记页中记录的快速交换页对应的物理页号,在所述缓存区中建立第二映射表;
步骤b4:遍历存储设备,将存储设备中除所述标记区外,不包含快速交换页的区域作为数据区,根据所述数据区中数据页的逻辑页号与物理页号的对应关系,在所述缓存区中建立第一映射表;
步骤b5:将所述当前标记页的下一标记页作为当前标记页。
11.根据权利要求10所述的方法,其特征在于,所述步骤S7中,所述根据所述第二映射表中记录的所述快速交换页的物理页号设置当前标记页,具体为:获取所述第二映射表中快速交换页的物理页号,将所述快速交换页的物理页号写入所述当前标记页中,将所述当前标记页中的修改次数自加预设值,并计算所述当前标记页的校验码并写入所述当前标记页中。
12.根据权利要求1所述的方法,其特征在于,所述步骤S7中,所述判断所述快速交换页是否为空闲状态,具体为:通过查找所述第二映射表中的空闲标识,判断是否存在置位的空闲标识,如果是,则存在空闲状态的快速交换页,否则不存在空闲状态的快速交换页;
所述步骤S7中,判断为是时,还包括:在所有空闲状态的快速交换页中查找修改次数最少的空闲状态的快速交换页;
所述步骤S7中,判断为否时,所述将所述快速交换页置为空闲状态,具体为:将所有的快速交换页的空闲标识均置位;
所述步骤S7中,判断为否时,在所述将所述快速交换页置为空闲状态之后,还包括:查找修改次数最少的空闲标识置位的快速交换页。
13.根据权利要求1所述的方法,其特征在于,所述步骤S8具体为:
步骤c1:遍历缓存区,判断缓存区中的缓存页是否为空闲状态,如果是,则执行步骤S9,否则执行步骤c2;
步骤c2:将缓存区中修改次数最少的缓存页中的数据写入对应的数据页中,并将所述修改次数最少的缓存页置为空闲状态;
步骤c3:获取与所述修改次数最少的缓存页的物理页号对应的数据页;
步骤c4:将所述修改次数最少的缓存页中的数据写入所述对应的数据页中,将所述修改次数最少的缓存页中的空闲标识置位。
14.根据权利要求13所述的方法,其特征在于,
所述步骤S9具体为,将与所述待写数据的物理页号对应的数据页中的数据写入所述修改次数最少的缓存页中;
所述步骤S10中,所述根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述缓存页,具体为:根据所述待写数据、所述页内偏移和所述待写数据的长度更新所述修改次数最少的缓存页。
15.根据权利要求1所述的方法,其特征在于,所述根据更新后的待写数据的长度判断是否还有未写入的数据,具体为:判断所述更新后的待写数据的长度是否等于0,如果是,则没有未写入的数据,否则有未写入的数据。
16.根据权利要求1所述的方法,其特征在于,所述步骤S12中,所述更新第一映射表,具体为:根据交换后的数据页的物理页号与逻辑页号的对应关系,更新第一映射表。
17.根据权利要求10所述的方法,其特征在于,所述上电恢复数据,还包括:
步骤d1:获取首次上电标识,判断所述首次上电标识是否置位,如果是,则执行步骤d2,否则执行步骤b1;
步骤d2:将所述存储设备中的第一预设页数的区域作为快速交换区,将所述存储设备中的第二预设页数的区域作为标记区,其余区域作为数据区;
步骤d3:根据所述数据区中数据页的物理页号与逻辑页号,在所述缓存区中建立第一映射表;
步骤d4:根据所述快速交换区中快速交换页的物理页号,在缓存区中建立第二映射表;
步骤d5:将所述标记区的第一个标记页作为当前标记页,将所述快速交换区中快速交换页的物理页号,写入所述当前标记页中,修改所述当前标记页的修改次数,计算所述当前标记页的校验码并写入所述当前标记页中,将当前标记页的下一标记页作为当前标记页,并将所述首次上电标识复位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310692641.3A CN103699341B (zh) | 2013-12-17 | 2013-12-17 | 一种向存储设备中写数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310692641.3A CN103699341B (zh) | 2013-12-17 | 2013-12-17 | 一种向存储设备中写数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103699341A true CN103699341A (zh) | 2014-04-02 |
CN103699341B CN103699341B (zh) | 2016-04-06 |
Family
ID=50360882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310692641.3A Expired - Fee Related CN103699341B (zh) | 2013-12-17 | 2013-12-17 | 一种向存储设备中写数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103699341B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536847A (zh) * | 2014-12-18 | 2015-04-22 | 飞天诚信科技股份有限公司 | 一种提高数据写入完整性的方法 |
CN106383666A (zh) * | 2016-09-07 | 2017-02-08 | 东信和平科技股份有限公司 | 一种数据存储方法及装置 |
CN107168647A (zh) * | 2017-04-17 | 2017-09-15 | 武汉永力科技股份有限公司 | Flash数据读写方法及系统 |
CN108121664A (zh) * | 2016-11-28 | 2018-06-05 | 慧荣科技股份有限公司 | 数据储存装置以及其操作方法 |
CN108228376A (zh) * | 2017-12-29 | 2018-06-29 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
CN110704337A (zh) * | 2019-09-23 | 2020-01-17 | 深圳忆联信息系统有限公司 | 基于固态硬盘的映射表重建方法、装置和计算机设备 |
CN111737161A (zh) * | 2020-05-22 | 2020-10-02 | 深圳市战音科技有限公司 | Flash存储器的文件传输方法、终端及存储介质 |
CN112015341A (zh) * | 2020-08-26 | 2020-12-01 | 合肥康芯威存储技术有限公司 | 一种数据存储方法、存储系统及存储介质 |
CN113282240A (zh) * | 2021-05-24 | 2021-08-20 | 深圳市盈和致远科技有限公司 | 存储空间数据读写方法、设备、存储介质及程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08249217A (ja) * | 1995-03-15 | 1996-09-27 | Toshiba Corp | キャッシュ管理装置 |
CN102650972A (zh) * | 2012-04-06 | 2012-08-29 | 国民技术股份有限公司 | 数据存储方法、装置及系统 |
TWI395102B (zh) * | 2009-10-02 | 2013-05-01 | Via Tech Inc | 資料儲存裝置與方法 |
-
2013
- 2013-12-17 CN CN201310692641.3A patent/CN103699341B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08249217A (ja) * | 1995-03-15 | 1996-09-27 | Toshiba Corp | キャッシュ管理装置 |
TWI395102B (zh) * | 2009-10-02 | 2013-05-01 | Via Tech Inc | 資料儲存裝置與方法 |
CN102650972A (zh) * | 2012-04-06 | 2012-08-29 | 国民技术股份有限公司 | 数据存储方法、装置及系统 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536847B (zh) * | 2014-12-18 | 2017-10-31 | 飞天诚信科技股份有限公司 | 一种提高数据写入完整性的方法 |
CN104536847A (zh) * | 2014-12-18 | 2015-04-22 | 飞天诚信科技股份有限公司 | 一种提高数据写入完整性的方法 |
CN106383666A (zh) * | 2016-09-07 | 2017-02-08 | 东信和平科技股份有限公司 | 一种数据存储方法及装置 |
CN106383666B (zh) * | 2016-09-07 | 2020-05-01 | 东信和平科技股份有限公司 | 一种数据存储方法及装置 |
CN108121664A (zh) * | 2016-11-28 | 2018-06-05 | 慧荣科技股份有限公司 | 数据储存装置以及其操作方法 |
CN107168647A (zh) * | 2017-04-17 | 2017-09-15 | 武汉永力科技股份有限公司 | Flash数据读写方法及系统 |
CN107168647B (zh) * | 2017-04-17 | 2020-10-23 | 武汉永力科技股份有限公司 | Flash数据读写方法及系统 |
CN108228376A (zh) * | 2017-12-29 | 2018-06-29 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
CN110704337B (zh) * | 2019-09-23 | 2021-01-19 | 深圳忆联信息系统有限公司 | 基于固态硬盘的映射表重建方法、装置和计算机设备 |
CN110704337A (zh) * | 2019-09-23 | 2020-01-17 | 深圳忆联信息系统有限公司 | 基于固态硬盘的映射表重建方法、装置和计算机设备 |
US11816038B2 (en) | 2019-09-23 | 2023-11-14 | Shenzhen Unionmemory Information System Limited | Method and apparatus of mapping table reconstruction based on SSD, and computer device |
CN111737161A (zh) * | 2020-05-22 | 2020-10-02 | 深圳市战音科技有限公司 | Flash存储器的文件传输方法、终端及存储介质 |
CN111737161B (zh) * | 2020-05-22 | 2024-03-26 | 深圳市战音科技有限公司 | Flash存储器的文件传输方法、终端及存储介质 |
CN112015341A (zh) * | 2020-08-26 | 2020-12-01 | 合肥康芯威存储技术有限公司 | 一种数据存储方法、存储系统及存储介质 |
CN112015341B (zh) * | 2020-08-26 | 2024-03-22 | 合肥康芯威存储技术有限公司 | 一种数据存储方法、存储系统及存储介质 |
CN113282240A (zh) * | 2021-05-24 | 2021-08-20 | 深圳市盈和致远科技有限公司 | 存储空间数据读写方法、设备、存储介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN103699341B (zh) | 2016-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103699341B (zh) | 一种向存储设备中写数据的方法 | |
CN102135942B (zh) | 一种存储设备中实现损耗均衡的方法及存储设备 | |
KR100843543B1 (ko) | 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법 | |
US7515500B2 (en) | Memory device performance enhancement through pre-erase mechanism | |
CN103092766B (zh) | 一种用于nand flash的均衡损耗实现方法 | |
CN101321341B (zh) | 智能卡断电保护方法 | |
CN101650972B (zh) | 智能卡的非易失性存储器数据更新方法 | |
CN104090730A (zh) | 一种对存储设备进行数据读写的方法及装置 | |
CN101551780B (zh) | 一种电视机及其数据存储方法、装置 | |
CN104008061A (zh) | 内存回收方法及装置 | |
WO2011035245A1 (en) | Metadata redundancy schemes for non-volatile memories | |
US20150149692A1 (en) | Efficient reuse of segments in nonoverwrite storage systems | |
CN103744614A (zh) | 固态硬盘访问的方法及其固态硬盘 | |
CN103279366A (zh) | 固态硬盘及掉电后基于固态硬盘快速开机的方法 | |
CN103914407A (zh) | 一种sd卡掉电保护、恢复方法以及带有掉电保护的sd卡 | |
CN110069218A (zh) | 冷热数据分离方法、装置、计算机设备及存储介质 | |
CN101699476A (zh) | 智能卡的数据处理方法及装置 | |
CN102890655A (zh) | 存储器储存装置、其存储器控制器与有效数据识别方法 | |
CN109669889B (zh) | 一种轻量型Nor Flash闪存控制方法和装置 | |
CN101458661A (zh) | 一种闪存块磨损平衡的方法和系统 | |
CN103793337B (zh) | 一种防掉电的数据保护方法 | |
CN102521146B (zh) | 一种flash存储器块细分的数据寻址存储方法 | |
CN102005245B (zh) | 一种智能卡擦写保护方法 | |
CN113282521A (zh) | 一种智能卡寿命延长方法及装置 | |
CN110471626B (zh) | 应用于Java Card的Nor Flash管理层及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160406 |