发明名称 一种固态盘闪存转换层中的地址映射方法
摘要 本发明公开了一种固态盘闪存转换层中的地址映射方法,其实施步骤如下:1)预先在SRAM中建立缓存映射表、缓存分裂表、缓存转换表和全局转换目录;2)接收IO请求,若为写请求跳转步骤3),否则跳转步骤4);3)优先在SRAM的表格中依次查找当前IO请求的命中情况,根据命中的映射信息完成写操作,并根据命中类型及阀值大小对映射信息进行缓存;4)优先在SRAM的表格中查找当前IO请求的命中情况,通过SRAM中命中的映射信息来完成读操作。本发明具有能够提高固态盘随机写性能的同时延长固态盘的使用寿命、闪存转换层效率高、SRAM内地址映射信息的命中率高、SRAM与固态盘Flash之间额外的读写操作少的优点。
申请公布号 CN103425600A 申请公布日期 2013.12.04
申请号 CN201310371557.1 申请日期 2013.08.23
申请人 中国人民解放军国防科学技术大学 发明人 肖立权;宋振龙;魏登萍;李琼;郑义;谢徐超;李元山;黎铁军;张晓明;方健;王辉;邓峰;伍玉良
分类号 G06F12/06(2006.01)I;G06F12/02(2006.01)I 主分类号 G06F12/06(2006.01)I
代理机构 湖南兆弘专利事务所 43008 代理人 赵洪;谭武艺
主权项 一种固态盘闪存转换层中的地址映射方法,其特征在于实施步骤如下:1)预先在固态盘的SRAM中建立缓存映射表、缓存分裂表、缓存转换表和全局转换目录,所述缓存映射表、缓存分裂表均具有起始逻辑页号、起始物理页号、长度共三个表项字段,所述缓存转换表具有逻辑页号和物理页号共两个表项字段,所述全局转换目录具有逻辑页号、逻辑页号在固态盘Flash中存放的物理页号共两个表项字段;2)接收来自文件系统的当前IO请求,如果当前IO请求为写请求则跳转执行步骤3),否则跳转执行步骤4);3)检查当前IO请求的所有逻辑页在缓存映射表中的命中情况,如果完全命中则跳转执行步骤3.1);如果部分命中则跳转执行步骤3.2);如果未命中则跳转执行步骤3.4);3.1)生成两个长度不小于0的额外的子映射关系,所述第一个子映射关系包括起始逻辑页号、起始物理页号、长度三项,在对第一个子映射关系赋值时,起始逻辑页号被赋值为缓存映射表中命中映射关系表项的起始逻辑页号,起始物理页号被赋值为缓存映射表中命中映射关系表项的起始物理页号,长度被赋值为当前IO请求的起始逻辑页号减去缓存映射表中命中映射关系表项的起始逻辑页号得到的差值;第二个子映射关系包括起始逻辑页号、起始物理页号、长度三项,在对第二个子映射关系赋值时,起始逻辑页号被赋值为当前IO请求的起始逻辑页号与当前IO请求的长度的和,起始物理页号被赋值为缓存映射表中命中映射关系表项的起始物理页号与第二个子映射关系的起始逻辑页号相加后再减去缓存映射表中命中映射关系表项的起始逻辑页号得到的差值,长度被赋值为缓存映射表中命中映射关系表项的起始逻辑页号与缓存映射表中命中映射关系表项的长度相加后再减去第二个子映射关系的起始逻辑页号得到的差值;将当前IO请求的长度赋值为0、起始逻辑页号赋值为‑1;跳转执行步骤3.3);3.2)将当前IO请求根据缓存映射表映射关系表项中满足命中的范围分裂为两个子请求,所述两个子请求均包含起始逻辑页号和长度两项,第一个子请求的起始逻辑页号为当前IO请求的起始逻辑页号,第一个子请求的长度为缓存映射表的映射关系表项中满足命中部分的长度,第二个子请求的起始逻辑页号为当前IO请求的起始逻辑页号与缓存映射表的映射关系表项中满足命中部分的长度的和,第二个子请求的长度为当前IO请求的长度减去缓存映射表的映射关系表项中满足命中部分的长度得到的差值,其中缓存映射表的映射关系表项中满足命中部分的长度的值为缓存映射表中命中映射关系表项的起始逻辑页号加上缓存映射表中命中映射关系表项的长度后减去当前IO请求的起始逻辑页号得到的差值,将其中不能够满足的第二个子请求作为新的IO请求跳转执行步骤3),生成一个长度不小于0的额外的子映射关系,所述子映射关系包括起始逻辑页号、起始物理页号、长度三项,所述子映射关系的起始逻辑 页号为缓存映射表中命中映射关系表项的起始逻辑页号,所述子映射关系的起始物理页号为缓存映射表中命中映射关系表项的起始物理页号,所述子映射关系的长度为缓存映射表中命中映射关系表项的长度减去缓存映射表的映射关系表项中满足命中部分的长度得到的差值,其中缓存映射表的映射关系表项中满足命中部分的长度的值为缓存映射表中命中映射关系表项的起始逻辑页号加上缓存映射表中命中映射关系表项的长度后减去当前IO请求的起始逻辑页号得到的差值;将当前IO请求的长度在原值的基础上减去缓存映射表的映射关系表项中满足命中部分的长度,将当前IO请求的起始逻辑页号在原值的基础上加上缓存映射表的映射关系表项中满足命中部分的长度,其中缓存映射表的映射关系表项中满足命中部分的长度的值为缓存映射表中命中映射关系表项的起始逻辑页号加上缓存映射表中命中映射关系表项的长度后再减去当前IO请求的起始逻辑页号得到的差值;最终跳转执行步骤3.3);3.3)检查生成的子映射关系的长度是否大于或等于预设的阀值,如果大于或等于预设的阀值,则将所述子映射关系缓存到缓存分裂表中,否则将所述子映射关系写回固态盘的Flash中,最终跳转执行步骤3.5);3.4)检查当前IO请求的所有逻辑页在缓存分裂表中的命中情况,如果完全命中则跳转执行步骤3.4.1),如果部分命中则跳转执行步骤3.4.2),如果未命中则跳转执行步骤3.4.3);3.4.1)生成两个长度不小于0的额外的子映射关系,所述第一个子映射关系包括起始逻辑页号、起始物理页号、长度三项,在对第一个子映射关系赋值时,起始逻辑页号被赋值为缓存分裂表中命中映射关系表项的起始逻辑页号,起始物理页号被赋值为缓存分裂表中命中映射关系表项的起始物理页号,长度被赋值为当前IO请求的起始逻辑页号减去缓存分裂表中命中映射关系表项的起始逻辑页号得到的差值;第二个子映射关系包括起始逻辑页号、起始物理页号、长度三项,在对第二个子映射关系赋值时,起始逻辑页号被赋值为当前IO请求的起始逻辑页号与当前IO请求的长度的和,起始物理页号被赋值为缓存分裂表中命中映射关系表项的起始物理页号与第二个子映射关系的起始逻辑页号相加后再减去缓存分裂表中命中映射关系表项的起始逻辑页号得到的差值,长度被赋值为缓存分裂表中命中映射关系表项的起始逻辑页号与缓存分裂表中命中映射关系表项的长度相加后再减去第二个子映射关系的起始逻辑页号得到的差值;将当前IO请求的长度赋值为0、起始逻辑页号赋值为‑1;跳转执行步骤3.4.4);3.4.2)将当前IO请求根据缓存映射表映射关系表项中满足命中的范围分裂为两个子请求,所述两个子请求均包含起始逻辑页号和长度两项,第一个子请求的起始逻辑页号为当前IO请求的起始逻辑页号,第一个子请求的长度为缓存分裂表的映射关系表项中满足命中部分的长度,第二个子请求的起始逻辑页号为当前IO请求的起始逻辑页号与缓存分裂表的映射关 系表项中满足命中部分的长度的和,第二个子请求的长度为当前IO请求的长度减去缓存分裂表的映射关系表项中满足命中部分的长度得到的差值,其中缓存分裂表的映射关系表项中满足命中部分的长度的值为缓存分裂表中命中映射关系表项的起始逻辑页号加上缓存分裂表中命中映射关系表项的长度后减去当前IO请求的起始逻辑页号得到的差值,将其中不能够满足的第二个子请求作为新的IO请求跳转执行步骤3),生成一个长度不小于0的额外的子映射关系,所述子映射关系包括起始逻辑页号、起始物理页号、长度三项,所述子映射关系的起始逻辑页号为缓存分裂表中命中映射关系表项的起始逻辑页号,所述子映射关系的起始物理页号为缓存分裂表中命中映射关系表项的起始物理页号,所述子映射关系的长度为缓存分裂表中命中映射关系表项的长度减去缓存分裂表的映射关系表项中满足命中部分的长度得到的差值,其中缓存分裂表的映射关系表项中满足命中部分的长度的值为缓存分裂表中命中映射关系表项的起始逻辑页号加上缓存分裂表中命中映射关系表项的长度后减去当前IO请求的起始逻辑页号得到的差值;将当前IO请求的长度在原值的基础上减去缓存分裂表的映射关系表项中满足命中部分的长度,将当前IO请求的起始逻辑页号在原值的基础上加上缓存分裂表的映射关系表项中满足命中部分的长度,其中缓存分裂表的映射关系表项中满足命中部分的长度的值为缓存分裂表中命中映射关系表项的起始逻辑页号加上缓存分裂表中命中映射关系表项的长度后再减去当前IO请求的起始逻辑页号得到的差值;跳转执行步骤3.4.4);3.4.3)判断当前IO请求的起始逻辑页号是否在缓存转换表中命中,如果命中,则所述起始逻辑页号对应的物理页号即为缓存转换表中命中表项的物理页号,执行对逻辑页号为所述起始逻辑页的物理页的写操作,根据将当前IO请求的起始逻辑页号加1、长度减1,并用新的起始逻辑页号和长度将当前IO请求的剩余长度作为长度组成新的IO请求,跳转执行步骤3.5);如果未命中,则将原缓存转换表中的地址转换页写入固态盘的Flash,并根据当前IO请求的起始逻辑页号计算出对应地址映射信息所在地址转换页的逻辑页号,在全局转换目录中找到该地址转换页的物理页号,从固态盘的Flash中读取包含该起始逻辑页号的地址转换页内的所有地址映射关系并写入缓存转换表,然后跳转执行步骤3.4.3);3.4.4)检查生成的子映射关系的长度是否大于或等于预设的阀值,如果大于或等于预设的阀值,则将所述子映射关系缓存到缓存分裂表中,否则将所述子映射关系写回固态盘的Flash中;跳转执行步骤3.5);3.5)判断当前IO请求的长度是否大于0,如果是则跳转执行步骤3),否则检查缓存映射表中是否有空闲表项;如果有空闲表项,则跳转执行步骤3.6);如果无空闲表项,则从缓存映射表中选择并移除最近最少使用的一个映射关系表项,判断所述映射关系表项的长度是否大于预设的阀值,如果大于预设的阀值则将所述映射关系表项的映射关系缓存到缓存分裂 表中,跳转执行步骤3.6),否则将所述映射关系表项的映射关系写回固态盘的Flash中,跳转执行步骤3.6);3.6)将当前IO请求完成对固态盘Flash中数据块的写操作的起始物理页号、新写入的起始物理页号、长度组成的映射关系缓存到缓存映射表中最前端,跳转执行步骤5);4)判断当前IO请求的起始逻辑页号是否在缓存映射表中命中,如果命中则根据缓存映射表中命中的表项得到当前IO请求的物理页号,完成此次读逻辑地址为所述起始逻辑页号的页的读操作,跳转执行步骤4.1);如果未命中则跳转执行步骤4.2);4.1)设置当前IO请求的起始逻辑页号加1、长度减1,将被命中的表项移动到缓存映射表的最前端,然后判断当前IO请求的长度是否大于0,如果长度仍大于0则跳转执行步骤4),否则跳转执行步骤5);4.2)判断当前IO请求的起始逻辑页号是否在缓存分裂表中命中,如果命中则跳转执行步骤4.2.1),否则如果未命中,跳转执行步骤4.2.2);4.2.1)根据缓存分裂表中命中的表项得到当前IO请求的物理页号,完成此次读逻辑地址为所述起始逻辑页号的页的读操作,跳转执行步骤4.2.3);4.2.2)判断当前IO请求的起始逻辑页号是否在缓存转换表中命中,如果命中则根据缓存转换表中命中的表项得到当前IO请求的物理页号,完成此次读逻辑地址为所述起始逻辑页号的页的读操作,跳转执行步骤4.2.3);如果未命中,则将原缓存转换表中的地址转换页写入固态盘的Flash,根据当前IO请求的起始逻辑页号计算出其所对应的地址映射信息所在的地址转换页的逻辑页号,在全局转换目录中找到该地址转换页的物理页号,并从固态盘的Flash中读取包含该读请求起始逻辑页号的地址转换页内的所有地址映射关系,然后返回执行步骤4.2.2);4.2.3)检查缓存映射表中是否有空闲表项,如果有空闲表项,则跳转执行步骤4.1);如果无空闲表项,则从缓存映射表中选择并移除最近最少使用的一个映射关系表项,判断所述映射关系表项的长度是否大于预设的阀值,如果大于预设的阀值则将所述映射关系表项缓存到缓存分裂表中,跳转执行步骤4.1);否则,将所述映射关系表项的映射关系写回固态盘的Flash中,跳转执行步骤4.1);5)当前IO请求的任务结束,退出。
地址 410073 湖南省长沙市砚瓦池正街47号中国人民解放军国防科学技术大学计算机学院