【FLASH存储器系列十六】固态硬盘FTL之地址映射

文章介绍了FTL(FlashTranslationLayer)的三种地址映射方式:页级映射、块级映射和混合映射。页级映射适用于小容量芯片,但映射表大;块级映射减少了映射表大小,但可能导致写放大和存储空间浪费;混合映射结合两者优点。块级映射常用于低端U盘,而复杂的映射策略用于优化高性能固态存储设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👉个人主页: highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容

今天分享FTL的基本功能:地址映射。

地址映射根据映射粒度分为页级映射、块级映射、混合映射。

页级映射:顾名思义,基于页级映射的FTL映射策略就是逻辑页与物理页一一对应。每一个逻辑页号对应一个NAND Flash中的物理页号。早期的Flash存储芯片容量较小,每个芯片的页数有限,所以能够采用细粒度的页映射策略。这样的映射优点是性能好,但是缺点是随着Flash的容量越来越大,页级映射的映射表就越来越大,nand控制运行时会将映射表加载到内存中,越大的表就会增加内存这块的成本。为了解决这个问题,有人提出了DFTL方案,就是根据系统操作flash的负载情况,动态地选择加载一部分映射表到内存里,而不是把整张表全部加载,这就更合理地利用了有限的内存空间。

如下是一个页级映射的示意图。当文件系统下发了针对逻辑页7的命令时,通过映射表可以知道对应物理页11,于是控制器就会控制进行针对物理页11的相关操作。当文件系统再次下发一个写操作还要写到逻辑页7上时,因为物理页11已经写有数据,在这种情况下,由于更新前必须进行一次擦除操作,因为擦除是以块为单位,没有办法只擦物理页11,于是FTL会找一个空闲页,再写入数据,然后更新映射表,将原来的物理页标记为无效,最后会通过垃圾回收,将无效页擦为空闲页。

块级映射:块映射算法里,地址映射表的最小逻辑单位是块,逻辑到物理的映射表的数量是Flash中块的数量。而逻辑块和物理块内的页便宜地址是一致的,未做页地址的映射。由于采用粗粒度的映射,映射表显著减少。假如N个页面组成一个块,与基本的页映射算法相比,块映射的映射表数量降低为原来的1/N,使得整个映射表能够完全存储在RAM中。

下图所示是块映射的一个例子。假设一个Block由4个Page组成,当文件系统下发逻辑页9的访问命令,通过将逻辑页数除以每个Block包含的Page数计算得到逻辑块地址LBN(LogicalBlock Number)(LBN=LPN/pages per block=9/4=2),查询映射表项找到PBN(Physical Block Number)=2,并对LPN求余可以得到偏移量,逻辑地址的块内偏移与物理块内偏移相同,Offset=LPN%pages per block=9%4=1。

块级映射FTL最大的优点就是地址映射表小,只是页级映射FTL地址映射表的1/64(假设每块含有64页),因此占用内存少,地址解析简单,对读操作相当有效。但块级映射FTL也有明显的缺点,由于一个给定的逻辑页只能存入每一块中特定的物理页,但NANDFlash要求块中按页顺序编程(应该只有MLC和TLC等才需要按页顺序写,SLC是没有这个要求的),因此造成存储空间浪费,块内碎片增加,而且在执行数据更新时,需要将所在逻辑块中的有效数据复制到其他空闲块中,造成严重的写放大现象。由于更新的开销大,块映射策略只能用在一些简单的设备中,如一些低端的U盘。

混合映射:块映射和页映射的结合,一个逻辑块映射到任意一个物理块,但在块中,每个页的偏移并不是固定不动的,块内采用页映射的方式,一个逻辑块中的逻辑页可以映射到对应物理块中的任意页。混合映射的算法有多种,大家有兴趣自行研究,这里不深入探讨了。

文章参考自《固态存储:原理、架构与数据安全 夏鲁宁 贾世杰 陈波》、《深入浅出SSD:固态存储核心技术、原理与实战 SSDFans》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

highman110

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值