Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1209952
  • 博文数量: 185
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 1418
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-02 15:12
个人简介

治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu

文章分类

全部博文(185)

文章存档

2019年(1)

2018年(12)

2017年(5)

2016年(23)

2015年(1)

2014年(22)

2013年(82)

2012年(39)

分类: LINUX

2016-10-10 11:11:27

转载地址:

闪存的读写单位为页,而页的大小一般为4KB或8KB,但我们的操作系统读写数据是按 HDD的扇区尺寸进行的(512Byte(字节)),更麻烦的是闪存擦除以块作单位,而且未擦除就无法写入,这导致操作系统现在使用的文件系统根本无法管 理SSD,需要更换更先进、复杂的文件去解决这个问题,但这样就会加重操作系统的负担。
       而为了不加重操作系统的负担,SSD采用软件的方式把的操作虚拟成的独立扇区操作,这就是FTL。因FTL存在于文件系统和物理(闪存)之间,操作系统只需跟原来一样操作LBA即可,而LBA到PBA的所有转换工作,就全交由FTL负责。(请看下图)
003.jpg
       FTL算法,其实就是一种LBA到PBA的映射。当文件系统发送指令要写入或者更新一个特定的页 时,FTL实际上是把数据写入到一个不同的空闲物理页并更新映射表(LBA和PBA的关联数据),并把这个页上包含的“旧数据”标记为“无效”(更新后的 数据已经写入新的PBA,旧地址的数据自然就失效了)。正是因为FTL的存在,操作系统才能把SSD当成HDD那样操作,因此FTL转换的性能也就直接影 响SSD的性能表现。
       我们现在看下图,假设在page0上写入数据(物理地址n),接下来写入数据到page1(物理地址n+1)。接着page0数据被更新,但是更新后的数 据并不是覆盖上去,FTL会把它写入到地址(n+2)上,然后标记(地址n)为“无效”。经过多次这样的操作后,这个块上就会装满了许多“有效”及“无 效”的数据。如果要再次写入到这个块,就需要先擦除整个块的数据,当然就需要先把所有“有效”的数据复制到另外的空白块上再进行擦除。这样的操作就是。

004.jpg


阅读(1780) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~