闪存物理结构

640?wx_fmt=png

读者君知道,你一边吃着地铁口刚买的杂粮煎饼,一边啃读的这本书是ssdfans网站和微信公众号的几位作者倾力合著的,其中阿呆轮到的就是闪存这一章。有一个名人说过,书能传神,当你看书的时候,阿呆也闻到了杂粮煎饼那浓浓的葱香味儿。


闪存物理结构


闪存器件原理


前文已经讲过了固态硬盘的发展史,曾经的固态硬盘有过RAM等介质,但是目前绝大多数固态硬盘都是以闪存芯片为存储介质的。DRAM固态硬盘我们见得少,主要应用于特殊的场合。1978年诞生的世界上第一块固态硬盘就是基于DRAM的。但由于DRAM掉电易失性,当然还有成本因素,现在的固态硬盘一般都不用DRAM,而是使用闪存作为存储介质,并且是NAND 闪存。固态硬盘的工作原理很多也都是基于闪存特性的。比如,闪存在写之前必须先擦除,不能覆盖写,于是固态硬盘才需要垃圾回收(Garbage Collection,或者叫 Recycle);闪存每个块(Block)擦写次数达到一定值,这个块要么变成坏块,要么存储在上面的数据不可靠,所以固态硬盘固件必须做磨损平衡,让数据平均写在所有块上,而不是盯着几个块拼命写(不然很快固态硬盘就报废了)。还有类似很多例子,固态硬盘内部很多算法都是在为闪存服务的。所以,欲攻固态硬盘,闪存首当其冲。


闪存是一种非易失性存储器,也就是说,掉电了,数据也不会丢失。闪存基本存储单元 (Cell) 是一种类NMOS的双层浮栅 (Floating Gate) MOS管组成,如图3-1所示:


640?wx_fmt=png


图3-1 浮栅晶体管结构


在源极(Source)和漏极(Drain)之间电流单向传导的半导体上形成贮存电子的浮栅,浮栅上下被绝缘层所包围,存储在里面的电子不会因为掉电而消失,所以闪存是非易失存储器。


写操作是在控制极加正电压,使电子通过绝缘层进入浮栅极。擦除操作正好相反,是在衬底加正电压,把电子从浮栅极中吸出来,如图3-2所示:


640?wx_fmt=png

图3-2 左:写原理;右:擦除原理


在2014年的闪存峰会上,浮栅晶体管的发明人施敏(Dr.Simon Sze)被授予终身成就奖,以表彰他发明了浮栅极晶体管。据说,浮栅极晶体管的发明灵感是这样来的:有天,施敏和搭档Dawon Kahng在公司的食堂一起吃午餐,饭后甜点是奶酪蛋糕。看着夹心蛋糕,他们在想,如果在MOS场效应管中间加个东西,会怎样呢?于是,浮栅晶体管横空出世。截至2014年某个时间点,据统计,全世界生产的浮栅晶体管数目达1 074 344 929 692 350 000 000


这个数字还在继续增长着。阿呆觉得终身成就奖不够,施敏应该获得诺贝尔奖,毕竟机械硬盘机理——巨磁阻效应的发现人已经获得了诺贝尔奖。


获奖后,施敏在庆功宴上,为自己点了一份奶酪蛋糕。


SLC,MLC,TLC


一个存储单元存储1比特数据的闪存,我们叫它为SLC (Single Level Cell),2比特为MLC (Multiple Level Cell) ,3比特为TLC (Triple Level Cell)。现在已经有厂商在研发QLC,即一个存储单元存储4比特数据,本书不做介绍。


640?wx_fmt=png

图3-3 SLC,MLC,TLC原理


对SLC来说,一个存储单元存储两种状态,浮栅极里面的电子多于某个参考值的时候,我们把它采样为0,否则,就判为1。


图3-4是闪存芯片里面存储单元的阈值电压分布函数,横轴是阈值电压,纵轴是存储单元数量。其实在0或1的时候,并非所有的存储单元都是同样的阈值电压,而是以这个电压为中心的一个分布。读的时候采样电压值,落在1范围里面,就认为是1;落在0范围里面,就认为是是0。


擦除之后,闪存读出来的值为1,充过电之后,就是0。所以,如果需要写1,就啥都不用干,写0,就需要充电到0。


640?wx_fmt=png

图1-4 SLC电压分布(来源:Inside NAND Flash Memory)


对MLC来说,如果一个存储单元存储4个状态,那么它只能存储2比特的数据。通俗来说就是把浮栅极里面的电子个数进行一个划分,比如低于10个电子,判为0;11-20个电子,判为1;21-30,判为2;多于30个电子,判为3。


640?wx_fmt=png

图1-5 MLC电压分布(来源:Inside NAND Flash Memory)


依次类推TLC,若是一个存储单元有8个状态,那么它可以存储3比特的数据,它在MLC的基础上对浮栅极里面的电子数又进一步进行了划分。


640?wx_fmt=png

图1-6 TLC电压分布(来源:Inside NAND Flash Memory)


同样面积的一个存储单元,SLC,MLC和TLC,分别可以存储1,2,3 比特的数据,所以在同样面积的DIE上,闪存容量依次变大。


但同时,一个存储单元电子划分的越多,那么在写入的时候,控制进入浮栅极的电子个数就要越精细,所以写耗费的时间就越长;同样的,读的时候,需要尝试用不同的参考电压去读取,一定程度上加长读取时间。所以我们会看到在性能上,TLC不如MLC,MLC不如SLC。


下表所示是SLC,MLC和TLC在性能和寿命(Endurance)上的一个直观对比

(不同制程和不同厂家的闪存,参数不尽相同,数据仅供参考):


闪存类型

SLC

MLC

TLC

每单元比特数

1

2

3

擦写次数

~10万次

~5000

~1000

读时间

~25微秒

~50微秒

~75微秒

写时间

~300微秒

~600微秒

~900微秒

擦除时间

~1500微秒

~3000微秒

~4500微秒

 

 

3D TLC逐渐成为主流。同时,QLC也马上要量产了,每个存储单元存储4比特数据,比TLC还要慢,还要不可靠。之前怀疑TLC可靠性的人们,怎么看QLC?


640?wx_fmt=gif



本文节选自《深入浅出SSD:固态存储核心技术、原理与实战》一书

640?wx_fmt=png

查看我们精华技术文章请移步:

Linux阅码场原创精华文章汇总

扫描下方二维码关注"Linux阅码场"

640?wx_fmt=png


您的耐心阅读,请随手点个“在看”吧


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 设计一个数据库的物理结构,需要考虑以下几个方面: 1. 存储介质:数据可以存储在硬盘、闪存、云存储等介质上。选择存储介质需要考虑数据的规模、访问频率、读写速度和可靠性等因素。 2. 存储格式:数据可以以文本、二进制、XML、JSON等格式进行存储。选择存储格式需要考虑数据的类型、结构和使用场景等因素。 3. 数据库引擎:数据库引擎是负责管理数据库的软件系统。不同的数据库引擎有不同的优势和适用场景。选择合适的数据库引擎需要考虑数据量、性能、可靠性、扩展性、安全性等因素。 4. 数据库表结构:数据库表结构是指数据表的字段、类型、约束条件等。设计数据库表结构需要考虑数据的逻辑结构和数据访问方式等因素。 5. 数据库索引:索引是一种加速数据访问的技术。设计数据库索引需要考虑查询频率、查询方式、数据的访问方式等因素。 综合考虑以上几个方面,可以设计出一个合适的数据库物理结构。在设计过程中需要注意遵循数据库设计原则,例如避免数据冗余、保证数据一致性、优化查询性能等。同时需要进行充分的测试和优化,确保数据库的稳定和可靠性。 ### 回答2: 设计数据库的物理结构是指确定数据库中表、字段、索引等对象在磁盘上的存储方式和组织结构。以下是设计数据库物理结构的一般步骤。 1. 数据库服务器选择:选择合适的数据库服务器,考虑硬件配置、操作系统以及数据库软件版本等因素。 2. 存储引擎选择:根据需求选择合适的存储引擎,如InnoDB、MyISAM等。存储引擎的选择会影响数据的存储方式、事务处理和性能。 3. 创建表结构:根据应用需求和数据类型,设计表结构,包括表名、字段名、数据类型、约束条件等。合理规划表的关系和属性,尽量避免冗余数据和空间浪费。 4. 划分数据和索引文件组:将表按照访问频率、数据特点等划分为不同的数据和索引文件组。在磁盘上分配合适的存储空间,并考虑数据文件和日志文件的分离以提高性能。 5. 设计索引:根据查询需求和表的特点,设计合适的索引,提高查询性能。选择适当的索引类型,如主键索引、唯一索引、聚集索引等。 6. 考虑数据分区:根据实际数据量和性能要求,将表按照某种规则进行分区,例如按时间范围、地域等。数据分区可以提高查询效率和管理灵活性。 7. 数据备份和恢复策略:设计合理的数据备份和恢复策略,考虑定期备份、增量备份以及灾备等。尽量避免单点故障和数据丢失。 8. 性能调优:根据实际负载和性能监控,进行性能调优。可以进行索引优化、查询优化、磁盘IO优化等手段,提高数据库的响应速度和并发处理能力。 总之,设计数据库的物理结构需要综合考虑应用需求、数据类型和访问模式,以及硬件和存储引擎的限制。合理的物理结构设计可以提高数据库性能、可维护性和可扩展性。 ### 回答3: 设计数据库的物理结构是指确定数据库实际存储在硬盘上的方式和布局。以下是设计数据库物理结构的一般步骤: 1. 确定数据量和访问模式:首先根据数据库中的数据量和不同的访问模式(读取或写入)来确定数据库的需求,例如确定预计的数据行数、表的数量和大小、数据的读写频率等。 2. 选择存储介质:根据数据库的需求,选择合适的存储介质,例如磁盘、固态硬盘(SSD)或内存。不同的存储介质有不同的读写速度和容量,需要根据实际需求进行权衡。 3. 设计数据文件组:将数据库文件组织成逻辑组,可以根据不同的表空间或数据类型进行划分。每个数据文件组包含一个或多个数据文件,用于存储数据表和索引。 4. 划分表空间和数据文件:将数据文件组进一步划分成表空间和数据文件。表空间是逻辑的存储单位,用于存储数据库中的表、索引和视图。每个表空间包含一个或多个数据文件,每个数据文件可以存储一个或多个数据库对象。 5. 设计索引和分区:根据查询需求和对数据的访问模式,设计合适的索引来提高检索效率。可以使用不同的索引类型,如B树索引、哈希索引或全文索引。同时,根据数据的特性,可以使用分区来提高查询性能。 6. 考虑数据完整性和安全性:在设计数据库的物理结构时,需要考虑数据的完整性和安全性。可以使用约束(如主键、外键、唯一约束)来确保数据的完整性,同时设置适当的访问权限和安全措施来保护数据。 7. 性能优化和监测:设计数据库物理结构后,需要进行性能优化和监测。可以使用性能监测工具来检查数据库的性能,并根据需要进行调整和优化,以提高数据库的性能和可靠性。 通过以上步骤,设计数据库的物理结构可以帮助提高数据库的性能和可靠性,以满足实际需求。同时,根据实际情况,还可以进行灵活调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值