SSD基本原理

SSD组成

      SSD Controller、Flash Array(Flash NAND ,存储颗粒)、Dram(option)、PCB、Host Interface(eg. SATA、SAS、PCIe)

存储介质

存储介质
光学存储介质
CD\DVD
半导体存储介质
磁性存储介质
非易失性
易失性
新型介质
3D XPoint
MRAM:磁阻
RRAM:阻变
FRAM:铁电
PCM:相变
SRAM
DRAM
EEPROM
PROM
EPROM
Flash
NOR
NAND
2D NAND
3D NAND
磁带\软盘\HDD

SSD基本工作原理

      从主机PC端开始,用户从操作系统应用层面对SSD发出请求,文件系统将读写请求经drive转化为相应的符合协议的命令,SSD收到命令执行相应操作,然后输出结果。
      对SSD来说,输入是Command,输出是Data和Command Status。SSD前端(Front End)接受用户命令请求,经过内部处理,输出用户请求的数据或状态。
      SSD前端负责和主机直接通信,接受主机发来的命令和相关数据,命令经SSD处理后,最终交由前端返回命令状态数数据给主机。
      SSD通过SATA、SAS、PCIe等类型接口与主机相连,遵守相应的ATA、SCSI、NVMe协议。如表所示:

接口类型协议命令主机控制器接口标准组织文档链接
SATAATA/SATA Command SetAHCI(Advanced Host Controller Interface)ATA-IOSATA Spec
SASSCSI Command SetSCSIT10 of INCITsSCSI Express
PCIeNVMe Command SetNVMePCI Express/NVM ExpressPCI-SIG

nvm Express

下面是SSD系统调用的一张简要示意图:
在这里插入图片描述
从图中可以看出,SSD主要有三大功能模块组成:

  1. 前端接口和相关协议模块
  2. 中间FTL层(Flash Translation Layer)模块
  3. 后端和闪存通信模块

SSD写和读操作

      主机通过接口发送写命令给SSD,SSD收到命令后执行,并接受主机将要写入的数据。数据一般会先缓存在SSD内部的RAM中,FTL为每个逻辑数据块分配一个闪存地址,当数据凑到一定数量后,FTL发送写入闪存请求给后端,后端根据写请求,把缓存里的数据写到对应的NAND内存空间。
      对于一个写满的块(block),由于闪存(Flash)不能覆盖写,Flash block要擦除才能写入。主机发来的某个数据不是写在固定位置,SSD内部需要FTL这样一个东西,来完成逻辑数据块到物理数据块的映射。
      假设一个128G的SSD,logic block大小为4KB,所以该SSD一共有128GB/4KB = 32M 个logic block。每个logic block都有一个映射,即每个逻辑数据块在闪存空间都有一个存储位置。闪存地址大小如果用4bytes表示,那么存储32M个逻辑数据块在闪存中的地址则需要32M*4B=128MB大小的映射表。
      SSD内部维护了一张逻辑地址到物理地址的映射表,当主机发来都命令时,SSD能根据需要读的逻辑数据块查找该映射表,获取这些逻辑数据在闪存空间所在的位置,后端便能从闪存上把对应数据读到SSD内部缓存空间,然后前端负责把这些数据返回给主机。
      前面有说,闪存不能覆盖写,随着用户不断写入数据,闪存空间会产生垃圾(无效数据),FTL还要适时做垃圾回收(Garbage Collection),来腾出空间。
      由于本篇只讲SSD层级的,更多细节上的实现,这里就不再写了,有关FTL的详细部分请参阅:FTL

参考书籍:深入浅出SSD-固态存储核心技术、原理与实战

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值