关于NAND的LBA到PBA的映射

2023-10-24 10:59
文章标签 映射 nand pba lba

本文主要是介绍关于NAND的LBA到PBA的映射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于NAND的LBA到PBA的映射

  • LBA
  • PBA
  • LBA到PBA的映射;
  • 映射表的设计思路;

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的速度的影响;
怎么设计出一个简单又实用的映射表,需要结合具体的产品进行设计优化;
此处只是抛砖引玉,请大家考虑下你是否有更好的映射表的设计思路;

这篇关于关于NAND的LBA到PBA的映射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274693

相关文章

docker 重启容器且修改服务映射端口

要重启 Docker 容器并修改服务的映射端口,可以按照以下步骤进行操作: 1. 停止当前运行的容器 如果你想重新配置端口,通常需要先停止当前运行的容器。你可以使用以下命令停止容器: docker stop <container_name_or_id> 2. 删除现有容器 为了修改端口映射,你需要删除旧的容器并重新创建一个新的容器。首先运行以下命令删除停止的容器: docker rm

maven项目中程序运行编译的时候出现:编码GBK的不可映射字符

由于JDK是国际版的,我们在用javac.exe编译时,编译程序首先会获得我们操作系统默认采用的编码格式(也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格

ManyToMany双向外键关联(基于注解)的映射案例(简单版)

学生和老师就是多对多的关系,一个学生有多个学生,一个老师也有多个学生,这里的多对多映射采用中间表连接的映射策略,建立中间表的映射策略,建立中间表分别引入俩边的主键作为外键。通过中间表映射俩个表之间的关系。 下面就以学生类和老师类为例介绍多对多的映射关系的实例 Students类 package mtm_bfk;import java.io.Serializable;import java.

Mybatis查询到多条记录但是映射到list集合只有一条或者条数不对

如果你出现了这个问题。 *. 原因:mybatis是基于当前实体对象的id进行映射的 *.所以在查询字段中加上查询id即可。 搞定!!!!

【高等数学学习记录】映射

【高等数学&学习记录】映射 从事测绘工作多年,深刻感受到基础知识的重要及自身在这方面的短板。 为此,打算重温测绘工作所需基础知识。练好基本功,为测绘工作赋能。 1 知识点 1.1 映射 映射 设 X X X、 Y Y Y是非空集合,若存在法则 f f f,使 X X X中每个元素 x x x,在 Y Y Y中有唯一确定的元素 y y y与之对应,则称 f f f为从 X X X到

NAT技术-将多个内部网络设备映射到一个公共IP地址

问题: 今天上课的时候老师让我们在VMware填同一个子网ip 192.168.196.0,然后给我们的linux镜像都是同一个压缩包,结果我们的静态ip地址都是同一个。 192.168.196.0下面有256个ip地址,范围是192.168.196.0到192.168.196.255。我们几十个人的ip地址怎么会是同一个 linux镜像的ip地址被老师写死了, 1.难道内网的ip可以随便定

使用Mybatis Generator插件生成纯净代码,自定义扩展注释和注释,xml映射文件,不用修改源码!!!

先看效果: (基于Mybatis-generator-core-1.4.0) 生成模型(实体): 根据MySQL库中的tb_prod_info表字段及注释自动生成. package com.ezsyn.cloudstudy.product.dao.entity;import io.swagger.annotations.ApiModelProperty;import lombok.Gette

spring boot 的tomcat部署,自己的view层不做映射

需要复写继承该类SpringBootServletInitializer 的config方法,网上有些直接写主入口类的,部署是不对的。一定要复写config方法。

内存管理篇-21 虚拟内存管理:线性映射区

1.线性映射区的定义         这部分讲线性映射区的内容。一般老的嵌入式平台,它内存很小只有几百兆,都会直接把整个物理内存映射到线性映射区了,只有当物理内存大于1GB以上,线性映射区无法cover的时候就把剩下的放到高端内存。所以这个区域是最简单的。         线性映射区一般是指内核空间的某个部分,直接映射到低端内存的区域。并且他们之间是线性映射的。         PAGE_O

《深入理解 Java 中的 MapStruct 映射工具》

《深入理解 Java 中的 MapStruct 映射工具》 在 Java 开发中,对象之间的映射是一项常见的任务。手动进行属性复制不仅繁琐,还容易出错。这时,MapStruct 就成为了一个强大的工具,它可以自动生成映射代码,提高开发效率和代码质量。 一、MapStruct 简介 MapStruct 是一个 Java 注释处理器,用于生成类型安全的 bean 映射类。它可以在编译时根据定义的