基于OOB的NFTL设计

news2025/3/1 14:32:09

Nand flash设备存储结构示例

上图是一个1056Mb的存储设备。页面用户数据 空间是2KB,OOB是64字节,每个块 包含64个页面,一共 1024个块。用户数据 空间是128MB,OOB空间是4MB。

每个页面的OOB保留一个字节 用于坏块 标识 ,一定数量的ECC校验数存储空间,用于用户数据,如 2KB的用户 数据需要22字节的ECC校验码。

OOB剩下的空间就可以用于转换层管理数据(日志)的存放。

设计概述

  1. NFTL将所管理的所有页面作为一个环形队列循环使用。
  2. 通过一个索引表记录所有页面的逻辑地址和物理地址的映射关系,该表在系统初始化时根据保存OOB中的日志数据创建,在系统执行写入请求时更新。
  3. 任何页面写入请求,数据均存放在队首页面,并在OOB区保存日志数据
  4. 日志数据包含队列信息以及最近写入页面的映射关系。
  5. 如果写入的页面已经存在,则旧的页面成为垃圾页面。
  6. 在队列的剩余空间小于一定尺寸时触发磨损平衡处理的同时实现垃圾回收 。

日志数据

每个页面的OOB中存放格式一致的转换层日志数据:

内容标识

含义

‘N’

Magic number

日志头

Ep

擦写计数,环形队列翻转一次加一

Tail

队尾页索引,指向环形队列尾部

Count

页面计数,当前队列中有效页面数量

Bc

坏块计数,本次记录循环目前遇到的坏块数量

Bn

坏块数,上次记录循环遇到的坏块总数

M0

当前页逻辑地址

映射区

M1

前1页逻辑地址

Mn

前n页逻辑地址

日志头

首字节:固定字符‘N’,作为日志标记;

Ep:擦写计数,该计数可以在系统初始化时找回日志的root页;

Tail:队尾页索引,指向环形队列尾部页面;

Count:当前队列内有效页面数量计数;

Bc:坏块计数,当前擦写循环的坏块计数;

Bn:上一次擦写循环的坏块总数;

映射区

映射区用于存放页面的逻辑地址和物理地址的映射关系。

保存了当前页及其前面相邻页面的逻辑地址,第一个为本页逻辑地址,后面依次是前面相邻的页逻辑地址。

地址数据的数据宽度根据所管理的存储区域内的页面总容量而定。比如, 2字节的页索引可以记录65K个页面,每个页面2K,对应的用户数据空间是128M,足够一般的嵌入式设备使用。

映射区保存的页面映射数量除了和地址宽度有关,还有的oob尺寸。

如示例的flash设备每个页面有64字节的OOB(实际常见的有128和256字节),去掉坏块标识和ecc校验码,余下41字节。地址宽度按2字节计算,去掉日志头11字节,映射区可以保存15个页的逻辑地址。

索引表

索引表保存逻辑地址到物理地址的映射关系,在系统初始化时根据读取的日志映射区信息构建。

可以用一维数组表示,数组的索引值代表页面的逻辑地址,数组项保存的该逻辑页面对应的物理页面地址——所在存储区的页面索引值。

物理页地址由块索引和页的块内索引组成。假如每个块包含64个页,则该值的低6位是该页在其所在块内的页索引值,其他位的值是这个块在该转换层所管理的flash分区的块索引。

Root页面和队列头

最后写入的页面是root页面,该页面保存的日志的头部信息是队列的最新状态。

Root页面的下一个页面是队列头-head,指向队列下一个可用页面。

Root和head信息不需要在日志中保存,在设备初始化时根据擦写计数找回 。

图示说明

索引表:逻辑地址(vId,索引序号)转换物理地址(pId)

vId

0

1

2

66

887

888

N

pId

202

201

203

物理页面:蓝色所在页为root页,head指向下一个待写入页面

pId

0

1

201

202

203

204

2005

M

data

(root)

(head)

(tail)

OOB

Ep=9

Ep=9

Ep=9

Ep=9

Ep=9

Ep=8

Ep=8

Ep=8

root日志数据,为简化描述,示例仅记录三条映射

日志标记

Ep

Tail

Count

Bc

Bn

Map

‘N’

9

2005

398

6

11

888

66

887

注:用户读写flash的页面是随机的,所以,map保存的逻辑地址值并不一定连续

初始化过程

转换层初始化就是其所管理的页面的环形队列初始化。先确定root页面的位置,再读取所有有效映射关系重建索引表。

Root位置查找

根据Ep找到队首页面所在的块:读取第一块首页的OOB,获取Ep值,再

用折半查找法,找出最后一个 和 该值相同的块;继续在块内查找最后一个Ep值相同的页,仍然用折半查找法。

索引表初始化

读取root页面的OOB数据,即可获取队列的尾部信息,根据映射区保存的映射数量n,从root向队尾方向每n个页面读取一次(遇到坏块应该重新对齐新块边缘读取),根据读取到的映射信息重建页面索引表。重建过程插入新的映射记录时,如果该映射已经存在,表明待插入的映射所指的页面是垃圾页面,则放弃插入跳过即可。

当遍历到tail页面时,插入的记录数量应该和root日志记录的页面计数相等。

注:如果读取方向是从tail项root,则不需要判断映射是否存在,直接保存即可,这样所有旧的映射记录都会被最新的记录覆盖。

垃圾页面

垃圾页面的产生

每次页面写入请求都是保存在head指向的队首页面,如果该页面的逻辑地址在之前的页面中已经存在,则之前的页面就成为垃圾页面。

垃圾页面回收

设置垃圾页面回收窗口m,当队列头到尾之间的未使用页面数量小于等于整体页面数量(Pm)的1/(m+1),则执行写入请求时将同时从队尾搬移m个页面到队首,如果搬移过程有垃圾页面则直接跳过。这样,经过Pm/(1+m)次写入后,当前队列中可能存在的垃圾页面就会被完全回收。

垃圾页面确认

每个页面的日志数据的M0保存的是该页面逻辑地址,根据该逻辑地址从索引表查找其对应的物理页地址,如果该页地址指向的是另外一个物理页面,则表示当前页面是垃圾页面。

磨损平衡

垃圾回收的过程也是磨损平衡处理的过程。

任何写入请求都保存在保存队首页面,队尾指向的页面如果是有效页面,则表明该页面在当前记录循环内没有被重写过,即为冷数据页面,垃圾回收过程遇到冷数据页面就会将其搬移到队首。这种设计保证转换层所管理的所有页面的擦写次数最多差1,也就是当前root页面所在块及其之前的块比其之后的块擦除次数 多1。

相比哪定一个阈值,当擦写次数超过该阈值则找一个冷块做交换的做法,本设计更简单,在局部磨损严重的情况发生之前已经做了预防性数据搬移。

坏块管理

写入过程遇到坏块直接跳过即可,不需要一个坏块表将其重新映射到另外一个块做替代使用。

同样,初始化重建索引表过程遇到坏块直接跳过即可,不需要特殊处理。

记录队列每次翻转时,可以根据当前轮和上一轮的坏块数量变化情况判断flash设备的磨损情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1917828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作,索引已经建过了,本文主要讲Elasticsearch更新指定字段语句,下面开始写更新语句执行更新啦! 查询数据 查…

Flat Ads:金融科技应用的全球化趋势与发展前景

近年来,全球金融应用市场遭遇了重大严峻考验与深刻变革,但即便在全球经济承受重压、市场波动加剧的背景下,金融科技应用仍展现出了强大的韧性与蓬勃的增长动力。相关机构预计,2023 年全球金融应用市场的总收入达到 15.5亿美元的新高,实现了同比19%的显著增长,而到2027年,这一数…

【源码+文档+调试讲解】超市进销存管理系统

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

探索 ASTRA.AI:打造低代码多模态 AI 应用的开源平台

声网(Agora)研发的 ASTRA 平台,作为一款面向大语言模型应用开发的开源解决方案,无疑为 AI 领域注入了新的活力。它巧妙地结合了 BaaS(后端即服务)概念与大型语言模型的运营,使得创建高性能的生成…

开发情绪识别人工智能时的道德考量

情绪调节人工智能是机器学习领域的最新技术进步之一。尽管它显示出巨大的潜力,但道德问题将影响其采用率和寿命。人工智能开发人员能克服这些问题吗? 什么是情绪识别人工智能? 情绪识别人工智能是一种机器学习模型。它通常依赖于计算机视觉…

AI算力中心研究分析

中国 AI 算力中心研究报告 算力产业稳健发展,算力创新能力持续增强,推动我国数字经济量质齐升。 2022 年我国算力规模稳步扩张,算力发展为拉动我国 GDP 增长做出突出贡献,在 2016-2022 年期间,我国算力规模平均每年增…

基于springboot+vue的文件管理系统

一、系统架构 前端:vue2 | element-ui 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. 注册 02. 登录 03. 管理员-首页 04. 管理员-个人中心-修改密码 05. …

Idea 2023 使用GitLab提交代码提示输入Token

项目场景: 今天电脑换硬盘了,安装了 IDEA2023 款的社区版开发工具,下载代码后,提交并推送代码到远程服务器的时候,提示输入Token,并不是用户名和密码。 问题描述 推送代码到远程GitLab本地仓库的时候&…

通用代码生成器模板体系,域对象,枚举和动词算子

通用代码生成器模板体系,域对象,枚举和动词算子 通用代码生成器或者叫动词算子式通用目的代码生成器是一组使用Java编写的通用代码生成器。它们的原理基于动词算子和域对象的笛卡尔积。它们没有使用FreeMarker和或者Velocity等现成的文件式模板引擎。而…

php快速入门

前言 php是一门脚本语言,可以访问服务器,对数据库增删查改(后台/后端语言) 后台语言:php,java,c,c,python等等 注意:php是操作服务器,不能直接在…

曝宝马汽车门店亏损严重价格战带来的伤害太大了

今年以来不仅餐饮行业难,就连一些车企都陷入困境当中,多家车企选择打价 格战。只不过日前的时候媒体爆料称,宝马汽车门店因为打价格战,最终亏损严 重,为了避免亏损再度出现,因此宝马7月将会开始降量保价。文章来源于:股城网www.gucheng.com 实际上,进入2024年…

分享语音音浪的自制动态特效

主要使用小程序实现的&#xff1a; <!-- wxml --> <view class"audio"><view class"audio-item" wx:for"{{list}}" wx:key"index" style"{{item}}"></view> </view> //js list: [animation…

Sentieon Arm版本:进一步降低基因组计算成本

前不久&#xff0c;Arm在其社区的HPC blog上发布了一篇Sentieon在低通量全基因组&#xff08;LP-WGS&#xff09;的应用案例。 图1 伴随着大规模基因组学的需求持续增长&#xff0c;基因测序成本的降低使得研究和分析更加广泛。而在基因组学的每一个应用背后,都有一系列计算密…

C++对顶堆(求第k大、k小数)+P1801题解

这里借鉴了一些别人题解的思路&#xff0c;仅供自己收藏使用。 题目大意&#xff1a;动态修改数组&#xff0c;求第k小的数。 from&#xff1a;7KByte P1801题解 对此&#xff0c;POISONN大佬发表了他的意见&#xff1a;楼主写法应该是让大根堆里有k-1个元素&#xff0c;然后…

如何从硬盘恢复已删除的视频

您是否想知道是否可以恢复已删除的视频&#xff1f; 幸运的是&#xff0c;您可以使用照片恢复从硬盘、SD 卡和 USB 闪存驱动器恢复已删除的视频文件。 您是否曾发生过这样的情况&#xff1a;当您随机删除文件以释放空间时&#xff0c;您不小心按下了一些重要视频的删除按钮并…

捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性

在现代电子制造领域&#xff0c;随着技术的进步&#xff0c;电子设备变得越来越小型化和高性能化。细间距芯片作为实现这一目标的关键组件&#xff0c;其制造工艺要求极为严格。在这些要求中&#xff0c;表面处理工艺尤为关键&#xff0c;因为它直接影响到芯片的焊接质量和长期…

教你如何快速输入公式——Mathpix

概述 相信各位博主在撰写技术性博客时&#xff0c;都遇到在markdown编辑器中输入公式的问题&#xff0c;自己慢慢输入公式太过麻烦&#xff0c;想要直接复制文献中的又显示异常&#xff0c;是在叫人为难。这里&#xff0c;教大家使用一个只用截图&#xff0c;就能自动生成公式…

宁盾单点登录厂商-快速实现统一身份认证、单点登录SSO、MFA多因素认证

在当今数字化时代&#xff0c;企业的IT基础设施日益复杂&#xff0c;多系统、多设备的应用场景使得统一身份认证和单点登录&#xff08;SSO&#xff09;成为企业提升安全性和业务效率的关键需求。宁盾&#xff0c;作为数字身份基础设施提供商&#xff0c;凭借其单点登录&#x…

使用AutoGPT构建智能体:从LSTM到Prompt编写实战教程001

如果报错,这里会有一个环境变量的设置需要设置上. 然后这一节我们来自己制作一个智能体,来感受一下,实际上现在,大模型还是可以做很多功能的. 可以看到上面是智能体的架构,之前也说过了, 上面这几个功能,如果用我们人类去操作,还是需要花些时间的,如果用大模型就快很多了. 以…

研究人员利用浏览器渲染过程来改变 PDF 发票定价

首发公众号网络研究观&#xff0c;微信搜索关注每日获取更多内容。 网络安全研究员 Zakhar Fedotkin 演示了如何利用不同浏览器和操作系统之间 PDF 渲染的差异来操纵 PDF 发票上显示的价格。 此漏洞可能会严重影响依赖数字发票进行交易的企业。 研究人员受到 Konstantin Wed…