TrueFFS原理

TrueFFS原理

引用TrueFFS原理及其在CF卡上的实现的部分内容
“1
Wear-Leveling

闪速存储器不能无限次重复使用。它的每个扇区的擦除次数虽然很大,但却有限;因此,随着使用次数的加长,它最终会变成只读状态,所以应该尽最大可能延长它的寿命。行之有效的方法就是平衡使用所有的存储单元,而不让某一单元过度使用。这种技术被称之为损耗均衡。TrueFFS使用一种基于一张动态维护表的存储器——块映射的翻译系统来实现损耗均衡技术。当块数据被修改、移动或碎片回收后,这张维护表会自动调整。然而,如果存储在Flash上的一些数据本质上是静态的,就会产生静态文件锁定问题。存储这些静态数据的区域根据不会被轮循使用,其它区域就会被更频繁地使用,这将降低Flash期望的生命值。TrueFFS通过强制转移静态区域的方法成功克服了静态文件锁定问题。因为映射表是动态的,TrueFFS能够以对文件系统不可见的方式转移这些静态数据区域。由于绝对强制损耗均衡方式会对性能产生一些负面影响,所以TrueFFS采取了一种非绝对损耗均衡算法。它保证了所有空间的使用近似平等而不影响性

能。

2 碎片回收

块数据的修改使得Flash的一些块区域中的数据不再有效,并且这些区域在擦除之前变得不可写。如果没有机制来回收这些区域,Flash很快就会变成只读的状态了。不幸的是由于这些块不可能单独擦除,回收这些块就有些复杂了。单次擦除被限制在一个叫作擦除单元的较大范围内,如对于AMDAm29LV065D芯片来说是64KBTrueFFS使用一种被称为碎片回收的机制来回收那些不再包含有效数据的块。该机制从一个预擦除单元内复制所有的有效数据块到另一个新的被称为转移单元的擦除单元。然后,TrueFFS更新映射表,再擦除这个废旧的预擦除单元。这样,原来的块出现在外界时仍然包含了原来的数据,虽然这些数据现在已经存放在Flash存储器的其它空间。

碎片回收算法会找到并回收与下面标准最吻合的擦除单元:

废块最多;

擦除次数最少;

最静态的区域。

3 块分配和关联数据集结

为了提高数据的读取效率,TrueFFS使用一种灵活的空间分配策略:将关联的数据(如由同一个文件的内容组成的多个块)集结到同一个单独擦除单元内的一段连续的区域中。为此,TrueFFS尽量在同一个擦除单元内维持一个由多个物理上连续的自由块组成的存储池。如果这样连续的存储池无法实现,TrueFFS分尽量保证池中的所有块是在同一个擦除单元内。如果连这样的情况也不可能的话,TrueFFS会尽量把块池分

配到一个拥有最多可用空间的擦除单元内。这种集结关联数据的途径有几个好处。首先,如果TrueFFS必须从一个小的存储窗口来访问Flash,那么这样集结了的关联数据可以减少调用映射物理块到该窗口的次数,加快了文件继续访问速度。其次,这种策略可以减少碎片的产生。这是因为删除一个文件可以释放掉更容易回收的完整块,意味着碎片回收会变得更快。另外,它可以使属于静态文件的多个块存放在同一地址,这样当损耗均稀算法决定移动静态区域时,转移这些块就变得更加容易了。

4 Power Failure Management

Flash写数据有时可能会出错,比如在响应文件系统写请求时、碎片回收期间甚至在TrueFFS格式化或擦除Flash时。在这些情况下,TrueFFS能够从错误中恢复过来;但在新数据第一次写入Flash时如果出错就会丢失这些数据。然而,TrueFFS非常仔细地保证所有已经存放在Flash上的数据是可恢复的,甚至能够避免用户由于不耐烦或好奇而猛地拔出Flash卡而可能造成的灾难性后果。

TrueFFS algorithms based on “erase after write” instead of"erase before write"健壮的关键是它使用了一种先写后擦的策略。当更新Flash一个扇区的数

据时,只有在更新操作完成并且新存储的数据校验成功后,先前的数据才会被允许擦掉。这样的结果是数据扇区不能处于部分写状态。操作成功的话新扇区的数据有效,否则老扇区的数据有效。很明显,这样有利于用户已经写到Flash上的数据的稳定性

       看到这里,想起以前编程序使用的 ISD5116, 当时也是考虑到使用的频率问题,做的是绝对均衡,不过看看这篇文章,深有同感。

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

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

相关文章

winform 判断控件有没有被遮挡_编程入门基础之 winform(2)

在编程入门1中,我们通过WINFORM等控件画出了登录界面,我们今天写登录界面的登录按钮事件。装修预算小程序登录按钮事件在上图中,我们看到了,有几个判断 ,在C#中,if ,else是作为条件判断语句来使用。条件判断…

利用python读取点矢量对应栅格值

每行代码都有详细注解 所需库 # GDAL是栅格和矢量地理空间数据格式的转换器库 # 旧版本加载库的方法 #import gdal,gdalconst # from 语句让你从模块中导入一个指定的部分到当前命名空间中 # GDAL数据驱动,与OGR数据驱动类似 gdal是读取栅格数据 ogr是读取矢量数据 # 查看支持…

在CF卡上实现TrueFFS

CF卡是一种基于Flash技术的容量大、携带方便的存储介质,已在嵌入式系统等领域得到广泛的应用;但是,有限的擦写次数极大地限制了CF卡的使用寿命。TrueFFS通过一系列算法,能够延长CF卡的使用寿命,提高CF卡的使用效率。文…

python中安装opencv一直说不是内部或外部文件_Window系统下Python如何安装OpenCV库

关于OpenCV简介OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图…

解决input设置背景后,在ie7下浏览内容过长背景跟着滚动

先发发牢骚,万恶的IE啊。这么点问题害我走弯路,浪费时间,浪费生命。本以为加上background-attachment:fixed;问题就没了,结果问题依然存在,查资料说好像是ie bug。无语,天杀的IE,谁叫人家IE是老…

python打开文件中文名_windows下Python打开包含中文路径名文件

windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存。打开文件的函数中使用诸如open(filename.encode(‘gbk‘))可以很好的解决。#coding:utf8if __name__ ‘__main__‘:srcfile r"D:/测试路径/测试文件.txt"f open(srcfile.deco…

利用python读取栅格数据

代码具有详细说明注释 所需库 #gdalconst中的常量都加了前缀,力图与其他的module冲突最小 from osgeo import gdal,gdalconst from osgeo import gdal_array as ga # 用于引入一个模块的同时为该模块取一个别名 from osgeo.gdalconst import GA_ReadOnly# 开始对栅…

uC/GUI 在Cortex-M3 内核上的移植

屈环宇--嘉兴学院一、简介是一种专为嵌入式系统设计的图形界面支持系统。它的代码全部由标准C编写,模块化的设计,具有很强的可移植性。uC/GUI 适应大多数的黑白或彩色LCD 的应用,还提供一个可扩展的2D 图形库及占用极少RAM 的窗口管理体系。二…

从零开始破解WEP、WPA无线网络

以前出差时在机场用过无线网络,小区内是否也有无线网络呢?随便一搜,果然有几个无线网络信号,于是打起了免费蹭网的主意,但信号最好的几个网络的WEP或WPA密码成为了一个门坎,于是在公司上网查到相关资料&…

python读取栅格gdal库下载链接

gdal下载链接 安装 再下载后的文件所在文件下的路径 在此输入cmd

python中回车怎么表示_如何在python中使用读取行仅拆分回车符?

I have a text file that contains both \n and \r\n end-of-line markers. I want to split only on \r\n, but cant figure out a way to do this with pythons readlines method. Is there a simple workaround for this?解决方案As eskaev mentions, youll usually want t…

STM32移植UCGUI3.90笔记

在MDK环境下,终于将3.90版本的UCGUI移植到STM32下了,在网上看到的都是例程代码,很少看到有关于在STM32下移植UCGUI的教程方法,为了方便大家,特写此移植方法,大家可以借鉴(有错误之处&#xff0c…

get与post的区别与联系

这里来说说get与post的区别与联系: 区别与联系: 1、get是从服务器上获取数据,post则是向服务器传送数据; 2、get将表单中数据的按照variablevalue的 形式,添加到action所指向的URL后面,并且两者使用“?”连…

net能和python结合吗_如何不用安装python就能在.NET里调用Python库

前言Pythonnet这个屌爆的项目的出现,使得我们可以用一种新的方式,让C#可以和Python之间进行互操作。但是它的设置和部署可能有点问题,真的是这样吗?本文我会介绍Python.Included这个项目,它不但优雅的解决了这个问题&a…

spectral安装

Spectral Python (SPy) 是一个纯 Python 模块,用于处理高光谱图像数据。它具有读取、显示、操作和分类高光谱图像的功能。 SPy 需要 Python 并依赖于其他几个免费提供的 Python 模块。在安装 SPy 之前,您应该确保满足其依赖项。虽然您可以仅使用 Python…

打工是最愚蠢的投资——李嘉诚在深圳大梅沙演讲

打工是最愚蠢的投资——李嘉诚在深圳大梅沙演讲 很多人会认为打工并不是投资, 强烈反对这种观念。 其实打工才是最大 最愚蠢的投资。 人生最宝贵的是什么?除了我们的青春还有什么更宝 贵?很多人都抱怨我穷,我没钱想做生意又找不到…

windows远程桌面端口修改

远程桌面服务所使用的通信协议是Microsoft定义RDP(Reliable Data Protocol)协议,RDP协议的TCP通信端口号是3389。为了安全起见,我们常需要更改其端口。 运行注册表编辑器,找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal …

python将字典作为参数传入函数

示例 max_d {"scholl":123} print(*max_d) print(**max_d) 运行结果 scholl Traceback (most recent call last):File "D:/pythonProject1/test.py", line 3, in <module>print(**max_d) TypeError: scholl is an invalid keyword argument for …

wxpython图形_wxPython(Python的GUI图形库)v3.0.2.0免费版-独木成林

wxPython(Python的GUI图形库) v3.0.2.0免费版wxPython2.8-win32-ansi-py27 对应于32位 python 2.7版本.简单例子:#!/usr/bin/env pythonimport wxapp wx.App(False) # Create a new app, dont redirect stdout/stderr to a window.frame wx.Frame(None, wx.ID_ANY, "He…

epoll或者kqueue的原理是什么?

首先我们来定义流的概念&#xff0c;一个流可以是文件&#xff0c;socket&#xff0c;pipe等等可以进行I/O操作的内核对象。 不管是文件&#xff0c;还是套接字&#xff0c;还是管道&#xff0c;我们都可以把他们看作流。 之后我们来讨论I/O的操作&#xff0c;通过read&#xf…