关于NAND的LBA到PBA的映射

5 篇文章 2 订阅

LBA

LBA是logic block address 的概念,其实是个比较古老的概念了,甚至有点快过时了
LBA是用户侧表示的一个逻辑概念,表征一个数据块的逻辑编号;
目前主流的比如SSD产品是以512B为单位;
比如512G的硬盘,对应的LBA的个数为从0到(51210241024*1024/512 -1) ;
LBA个数
通过计算器计算至少需要30个bit 为才能完整表征512G的盘的LBA;
如果是1T的盘就是31bit;
2T的盘就是32bit 了;
我们在此还是以512G为例说明,并且我们可以使用一个整型int LBA 表示信息;

PBA

PBA则是physical block address的概念
前面关于NAND的block中其实已经有关于PBA的说明了,请翻看下前面的博客;
PBA包含基本的物理信息,比如block/page/page-offset/lun/plane/CE/CH等信息;
因为block/page/page-offset/lun/plane/CE/CH 这些信息在产品设计完成后都是固定值
所以你也可以计算出这每个值需要占用多少bit位,总共需要占用多少bit位;
假设此处我们也用总共32bit表示这些信息,那我们可以定义一个整形int PBA表示这些信息;
当然如果你说你的产品内存空间超级大,你可以可以把block/page/page-offset/lun/plane/CE/CH每个参数设计为1个int;那映射表的空间就会超级翻倍了;

LBA到PBA的映射;

前面已经举例说明了LBA的数据为int LBA; PBA的数据为int PBA;
那怎么表征二者的映射关系?
最简单的模式就是设计一个结构体,把2个变量放一起就可以了
struct map {int LBA;int PBA}
唯一的一个LBA对应唯一的一个PBA;
然后设计一个数组或者链表来记录每个LBA到PBA的映射关系
比如 map mapArray [LBA-max-count]
好的,映射设计完成了;
但是此时有以下问题,请大家计算下;
1.按照这种方法,一个全量的map表需要占用多少空间?
2.读IO的时候在这种全量的map表中搜索某个映射关系,怎么做到又快又好?
3.写IO的时候对应的LBA的映射关系会发生变化,怎么更新这张表?

映射表的设计思路;

此处的设计只是一种最简单原始的设计;
映射表的设计需要考虑控制器的内存,对读IO的速度的影响,对写IO的速度的影响;
怎么设计出一个简单又实用的映射表,需要结合具体的产品进行设计优化;
此处只是抛砖引玉,请大家考虑下你是否有更好的映射表的设计思路;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值