USB记忆棒:充电不可忽略





在互联网上,发生了一次骚乱,称为“为什么要为USB闪存驱动器充电”。乍一看,这很有趣,但我建议您再考虑一下并理解问题。阅读本文之后,您也将开始为闪存驱动器充电。



就个人而言,无线电电子行业的一家企业的首席设计师用“您想邻居吗?”一词删除了该文章的链接。



几个相关的链接:



  • www.youtube.com/watch?v=EuCSS9VtxCA
  • zen.yandex.ru/media/id/5cebc7044d24ad00b31ddccc/zachem-liudi-zariajaiut-fleshnakopiteli-5d113734e1551900b0ad97a9


当然,我笑了,但不是因为你的想法。我必须参与基于NAND闪存的固态驱动器的开发,包括USB记忆棒。乍一看,对于精通技术的人来说,将驱动器连接到充电器似乎是毫无意义的,因为除了供电以外,驱动器没有其他动作,因此,除了散热之外,我们什么也不会得到。互联网上有许多不同的“启示”,对可怜的人道主义者开怀大笑,甚至开玩笑,他们问是否值得为闪存驱动器充电。您可能会笑,但是我亲眼看到了闪存驱动器的开发人员如何通过将它们安装在充电器中一段时间​​来“充电”​​其产品!



USB闪存驱动器是一个块存储设备:整个地址空间分为512字节的扇区。操作系统可以访问特定扇区(LBA)的地址并对其进行读取或覆盖,一切都很简单。



现在,让我们看一下我们的闪存驱动



器的内幕...闪存驱动器包括微电路:



  • 控制器
  • NAND闪存。


内存芯片在寻址,写入和存储数据方面非常具体,这由其架构决定(我们应该以它的原样来爱它)。为NAND闪存定义了以下规则:



  • 内存分为兆字节数量级的块;
  • 在写入存储块之前,必须先将其擦除。擦除时,块中的所有数据字节均设置为0xFF;
  • 该块由页面组成,大小为数十KB。
  • , ;
  • ;
  • .


在这里,这组规则将这种简单的操作(从用户的角度来看)变成了如何将一个扇区写入USB闪存驱动器,这对于该闪存驱动器控制器的开发者来说是一个难题。







试想像一下如何解决这个问题,并且您会看到与玩具河内塔的相似之处



为了“结识朋友”,该驱动器的用户友好块寻址和NAND闪存的虐待狂用户寻址,一个处理器正在闪存驱动器的控制器内部旋转,该处理器实现了地址转换算法,即FTL(闪存转换层)。FTL算法的任务包括:



  • 建立和维护页面映射表;
  • 垃圾收集;
  • NAND闪存模块的损耗均衡。


懂行的人会说,也有其他任务,如跟踪的NAND闪存(坏块管理)的坏块,但我不想谈这个了,因为它并不适用于当前的情况下...



所指示的点一点教育计划:



页面映射



好吧,这里也许一切都清楚了......驱动器(LBA)的逻辑地址空间通过一个巨大的数组转换为NAND闪存的块和页的地址(物理地址),其索引代表LBA,而元素的值就是物理地址。如果需要重写一页,则将该页的数据按顺序写入空闲块,然后在数组中,页号将替换为新写入的一页。当学生购买32GB的闪存驱动器并发现它只有29 GB时,该学生还不知道是不是中国人偷走了工厂中丢失的空间,而是FTL算法的开发者。为了能够将数据写入驱动器。







垃圾收集



失去相关性的页面会发生什么?不再需要写入其中的数据,但是我们不能擦除它,因为仅允许在块中进行擦除,并且在同一块中可能仍然存在实际的页面。迟早会有一种情况出现,那就是我们将不再有空闲的块可用于编写页面。但是,在其余的块中,到处都是不相关的页面。为了防止这种情况的发生,“垃圾收集器”的功能在驱动器中旋转,以寻找具有相关页面数最少的“泄漏”块,并将实际页面转移到新块中。因此,“泄漏”块完全从实际页面中释放出来并可以擦除。在新块中,所有页面仍然相关。让人联想到碎片整理。







磨损平衡



没有什么可以永远持续下去,尤其是NAND闪存。碰巧,NAND闪存的资源有限,这由有限的块擦除周期(块寿命)表示。擦除次数更多的块(旧块)比磨损较少的块(年轻块)更有可能失败。



您是否曾经考虑过将FAT表从驱动器的零地址移到其他地方,以免抹掉闪存驱动器的地址空间?这是不可能的,不应该考虑。因为块磨损平衡机制在闪存驱动器中起作用。其本质是,年轻的积木被迫与旧的积木交换位置,以便在驱动器运行期间所有积木的磨损均匀。因此,驱动器有机会从此过上幸福的生活,直到一天之内所有存储块都消失。







现在最主要的是-为什么要“为闪存驱动器充电”?



1)您是否曾经遇到过日复一日要洗袜子的情况,但每天晚上事实证明不是这样?然后就是这么一刻,明天就没有干净的袜子了!然后,您必须牺牲睡眠来洗袜子。如果您必须手持吹风机上班迟到,那就更糟了。



FTL中的垃圾回收算法也是如此。用户经常使用USB闪存驱动器将某些数据从一台计算机传输到另一台计算机。在这种情况下,操作方案如下:将USB闪存驱动器插入计算机-快速写入文件-拔出USB闪存驱动器-运行到另一台计算机-插入USB闪存驱动器-读取文件。一段时间后,用户开始注意到他的驱动器运行缓慢。通常,在这种情况下,罪过是“好吧,这只是一个便宜的旧闪存驱动器。在这里,我要买新的,它会飞的!”的确如此!但是她很可能会在一段时间后遭受同样的命运。事实是,此类“短片”的场景不允许垃圾回收算法释放用于写入的块,这或早或晚将导致以下事实:根本不会再有空闲块。然后,控制器被迫首先处理释放块,然后仅将文件写入其中,从而降低了速度。为了准备以全速接收数据,驱动器需要提前一段时间才能“洗袜子”。您可能会猜到,为闪存驱动器“充电”可以消除此问题,从而使控制器有足够的时间来恢复数据中的顺序。







2)控制器缺少“个人时间”的问题也与损耗均衡算法有关。当驱动器空闲时,而没有写入或读取用户数据的任务,则由控制器执行损耗均衡算法。如果驱动器在“短片”模式下工作,那么根本没有时间来平整胶块的磨损。砌块磨损不均匀会导致旧砌块失效。同时,直到关键时刻到来之前,可用于写入的块数量一直在减少,此时根本不会有任何可用的块可以写入,尽管整个NAND闪存尚未用完并且可以使用很长时间。







3)进化教会我们将珍贵的贵重物品埋在远离通道的地方。这非常适合珍宝和无人居住的岛屿。但是对于数字数据和NAND,情况恰恰相反。当然,您曾经有过将朋友的婚礼上的一些照片扔到闪存驱动器上的情况,该闪存驱动器在抽屉中放置了一年(在您看来,这是安全可靠的),然后其中一些照片只被读取了一半。事实是,一旦记录在NAND闪存中的信息就会随着时间的流逝而“腐烂”。存储器制造商不保证100%的数据保留,而只是宣布可能出现误码。



当然,驱动控制器通过向数据中添加冗余代码来解决消除位错误的问题,但是无论该代码有多大,随着时间的流逝,NAND存储单元中的电荷都会溶解,并且位错误的数量可能会超过任何校正能力。数据不应在NAND闪存中长时间放置;必须加以照顾。即-定期覆盖。正确的控制器会定期重新读取数据,检查误码数量,并在必要时重写数据(直到误码数量超过允许值)。当然,控制器为此也需要“空闲时间”。



综上所述,我将总结:毫不犹豫地为闪存驱动器“充电”,这对其速度和可靠性产生了有益的影响。如果有新手打您,请给他们一个指向本文的链接。



All Articles