从主机PC端开始,M.2硬盘盒用户从操作系统应用层面对SSD发出请求,文件系统将读写请求经驱动转化为相应的符合协议的读写和其他命令,M.2硬盘盒收到命令执行相应操作,然后输出结果,每个命令的输入和输出经协议标准组织标准化,这是标准的东西,和HDD硬盘盒无异,只不过HDD替换成M.2硬盘盒硬件存储数据,访问的对象变成SSD硬盘盒。
M.2硬盘盒的输入是命令(Command),输出是数据(Data)和命令状态(Command Status)。SSD前端(Front End)接收用户命令请求,经过内部计算和处理逻辑,输出用户所需要的数据或状态。
M.2硬盘盒主要有三大功能模块组成:
M.2硬盘盒主要有三大功能模块组成:
前端接口和相关的协议模块;
·中间的FTL层(Flash Translation Layer)模块;
·后端和闪存通信模块。
M.2硬盘盒前端负责和主机直接通信,接收主机发来的命令和相关数据,命令经M.2硬盘盒处理后,最终交由前端返回命令状态或数据给主机。硬盘盒通过诸如SATA、SAS和PCIe硬盘盒等接口与主机相连,实现对应的ATA、SCSI和NVMe等协议。
表1-5 SATA/SAS/PCIe接口协议
我们看看SSD是怎么进行读写的,以写为例。
主机通过接口发送写命令给SSD硬盘盒,SSD接收到该命令后执行,并接收主机要写入的数据。数据一般会先缓存在SSD内部的RAM中,FTL会为每个逻辑数据块分配一个闪存地址,当数据凑到一定数量后,FTL便会发送写闪存请求给后端,然后后端根据写请求,把缓存中的数据写到对应的闪存空间。
由于闪存不能覆盖写,闪存块需擦除才能写入。主机发来的某个数据块,它不是写在闪存固定位置,SSD硬盘盒可以为其分配任何可能的闪存空间写入。因此,M.2硬盘盒内部需要FTL这样一个东西,完成逻辑数据块到闪存物理空间的转换或者映射。
举个例子,假设M.2硬盘盒容量为128GB,逻辑数据块大小为4KB,所以该SS硬盘盒一共有128GB/4KB=32M个逻辑数据块。每个逻辑块都有一个映射,即每个逻辑块在闪存空间都有一个存储位置。