SSD基本工作原理了解

SSD与RAM的原理有些类似,RAM使用晶体管和电容来表示0或1,晶体管用于将电荷转移到电容器或从电容器中吸取电荷,并且电荷必须每几微秒刷新一次。

而SSD相比于RAM的非易失性来自于其使用的浮栅晶体管。其创造了一个小笼子,不需要外界的电容来保持充电,并通过鼓励电子通过量子隧穿效应来进出笼子。

储存介质

NOR

使用晶体管最简单的方法是将每一行和每一列连接在一起,以便读取每个单独的位。这种特殊的布局在NOR flash中使用。连接每一行的电路称为“word line”,而连接每一列的电路称为“bit line”。读取操作在这种情况下非常简单:对每个word line施加一个电压,bit line将根据每个单元格存储的是0还是1来显示电压(或不显示)。

为了更详细地理解它是如何工作的,我们必须首先了解浮栅晶体管。一个普通的晶体管有三种连接方式,根据所用技术的不同分别命名为gate、drain和source

当电压加到gate时,电流就可以从source流向drain。当在栅极上施加低电压时,从source流向drain的电压与栅极电压成比例变化(因此,低栅极电压导致source流向drain的低电流,高电压导致高电流)。当栅极电压足够高时,比例响应停止。这使得晶体管既可以用作放大器(应用于门极的小信号会在source极产生成比例的大信号),也可以用作开关(仅在门极使用高电压或零电压,source极和drain之间要么有大电流,要么没有电流)。

浮动栅极位于栅极和晶体管的其余部分之间,它在一个重要的方面改变了栅极的行为。所述晶体管的浮栅部分中包含的电荷改变所述晶体管的电压阈值。当栅极电压高于某个值(称为Vread)时,通常在0.5 V左右,开关将始终闭合。当栅极电压低于这个值时,开关的开度由浮动栅极决定。

如果浮栅没有电荷,那么在栅上施加一个低电压仍然可以关闭开关,并允许电流从source流向drain。如果浮栅确实储存一个电荷,那么完整的Vread电压需要被施加到栅极以使电流流动。也就是说,无论浮栅是否包含电荷,晶体管的栅极必须施加多少电压才能导通或不导通。

在cell的网格中,word line与晶体管的gate相连接。bit line与drain相连。source连接到第三组线,称为source line。与bit line一样,同一列中的所有晶体管的source都连接在一起。

我们可以通过在门上施加低电压来读取单元的内容,看看是否有电流流过。具体来说,所述单元所连接的word line被通电到Vread以下的某个电压。当且仅当电池的浮栅不含电荷(a 1)时,电流将流过电池source line到其连接的bit line。如果浮栅含电荷(a 0),则整个电池的电压阈值过高,小电压无法克服。然后检查连接到该cell的bit line的电流。如果它有电流,则将其视为逻辑1;如果没有,则为逻辑0。

这种晶体管的排列方式在NOR flash中使用。它被命名为NOR的原因是它类似于字行上的逻辑NOR- low电流,与浮栅中的电荷无关。如果你应用Vread,浮栅没有电荷,那么位线显示电荷(0或0 = 1),而浮栅不会传导低读电流,如果它包含电荷(0或1 = 0)。

NOR虽然设计概念简单,但芯片本身相当复杂,因为NOR闪存要占用大量的word line和bit line连接——每个晶体管都必须有这些连接,这导致了大量的连接。实际上,我们不需要那种极端粒度的访问,相反,用户一次只能读写整个扇区就够了

在这里插入图片描述

NAND flash

NAND相比于NOR,其bit line发生了改变——每一列中的晶体管串联起来,一个晶体管的drain与另一个晶体管的source相连。

在这里插入图片描述

为了读取栅格内的单个位,bit line select和source select晶体管都被打开。然后,所有没有读取的字行都被应用了Vread,迫使晶体管导电,不管它们的浮动门是否有电荷。只有感兴趣的比特的word line有较低的电压。如果该位有一个存储电荷(因此是逻辑上的0),晶体管将保持开路状态,没有电流通过晶体管链。如果它没有储存电荷(因此是逻辑1),晶体管将关闭,电流将流过。在位线上检测到电流的存在或不存在,并分别视为1或0。所有位线将同时并行地传递一个信号。

与NOR flash相比,将flash单元的列串联起来可以消除大量的结构;用NAND flash构建的给定容量的存储空间比用NOR flash构建的相同结构所占用的物理空间少60%。

但也有一个缺点,那就是失去了单独读写每个比特位的能力。NAND flash一次只能读写一页(一行)的数据。与传统观点相反,NAND flash的布局本身并没有阻止单个单元格的读写;相反,为了坚持NAND flash的设计目标,即比NOR flash更简单、更小,NAND芯片可以接受和理解的标准化命令的结构使页面成为最小的可寻址单元。这节省了存储更多指令所需的硅空间,并能够保存单元到页的映射。

MLC

浮栅晶体管具有存储少量电荷的能力,而少量并不意味着单个,事实上还可以储存多个电荷水平,这就引入了MLC

相比于SLC

  • MLC读取读取更复杂。需要依次测量每个可能的阈值电压,看看哪一个足以使晶体管打开。
  • SLC更可靠、更简单、错误率更低。
  • MLC更便宜

读写

覆盖

SSD能读写页,但却不能覆盖页。空页储存了1,1可以在页级别转换为0,但这个过程是单向的,也就是将0转换为1将是一个潜在的危险操作因为这会使用高压电,高压电将会使得相邻的cell也发生改变。当然也可以通过隧道抑制来防止——对周围的所有细胞施加非常大的电压,这样它们的电子就不会随着目标细胞一起隧穿——但这会导致cell上的的压力被清除。因此,为了避免损坏,ssd只能以整个块的增量进行擦除,而不是不需要耗能的隧道抑制

顺便说一句,虽然NOR闪存允许逐位写入,但它保留了其他限制:1s只能被0覆盖,并且将0重置为1s需要一次擦除整个块,这也是由于高压和如果以较小粒度执行会损坏相邻单元的风险。

这意味着SSD必须先擦除再写入。比如在8192(2^13)byte每页,256页每块的情况下,写入8kb的文件,会先复制2MB的数据到缓存,然后擦除整块,并重写这2MB数据。

这样带来的不利之处在于除非SSD有一个可用的已擦除页面准备就绪并等待数据,否则它不能立即执行写操作。如果没有已擦除的页面,它将不得不找到一个未使用(但尚未擦除)页面的块,擦除整个块,然后将块的旧内容与新页面一起写入。那么ssd会越使用越慢。

弊端

SSD尽管速度快,然而只能用于有限数量的写入。

我们已经知道,SSD中数据是通过改变单元行和列的电压来读取的,在写入的时候要通过量子隧穿效应迁移电子。

然而当每次电池经过程序/擦除周期时,一些电荷被捕获在构成浮栅的材料的介电层中。这种被捕获的电荷改变了栅极的电阻。随着电阻的变化,改变栅极状态所需的电流增加,栅极翻转需要更长的时间。随着时间的推移,这种电阻的变化变得足够显著,以至于将0写入单元所需的电压量变得如此之高,并且单元更改所需的时间变得如此之长,以至于单元作为快速数据存储设备的组件变得毫无价值

而MLC ssd比SLC ssd更容易退化,因为MLC驱动器中的每个单元有四种可能的状态并存储两个比特,因此每个单元对剩余电荷的变化更敏感,或者难以添加新电荷。此外,随着半导体工艺尺寸路线图的进一步缩小,闪存单元的尺寸也在不断减小。因为它们在物理上更小,在变得太无反应而无用之前可以吸收更少的剩余电荷。

权衡

对于SSD有两大问题——块级别擦除、有限生命周期

为了权衡,采用了以下方案

  • over-provisioning: 总容量预留部分空间,方便写入
  • garable collection:回收那些过时的页(也就是该页已经不是最新,被修改过的)。现在操作系统一般都不实际删除文件,在配置TRIM的情况下,操作系统可以发送SSD表明页不包含有效内容,那样SSD可以对这些操作系统认为删除的数据进行垃圾回收

写放大

写放大是逻辑写入次数和实际写入次数的差异。比如说要写入x=1,逻辑上只要写入一次,但实际上可能还有垃圾回收、块擦除等写入。

在SSD中会进行持续迁移,因此逻辑写入128KB数据,实际每次都会大于128KB

在ssd中写放大有以下情况引发

  • 垃圾回收:若一个驱动正在努力保持最大可用空间,并由TRIM辅助,那么将会在没有任何用户输入的情况下执行大量写入,导致高写放大以及降低cell寿命
  • 磨损均衡:磨损均衡是SSD维持所有cell使用情况在同一水平线的手段,会尽量占用那些使用比较少的cell进行储存
  • 无空闲页:在无空闲页的情况下,每次写入将会先读再擦最后重写

Ref

  1. https://arstechnica.com/information-technology/2012/06/inside-the-ssd-revolution-how-solid-state-disks-really-work/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现快速迁移TB级别的mysql数据库?

在大数据的领域,TB级别大小的数据库,一点都不夸张,这不我这一个客户就是这样 ,原本使用的是腾讯云的云服务器,奈何配置不够用,考虑再三换成了独立物理机,但是迁移数据库就成了一大难题!经过多方尝试,目前的方法可能是最快的了! 方法一:使用ssh指令将旧服务器的数据…

适配器模式实现stack和queue

适配器模式实现stack和queue 什么是适配器模式?STL标准库中stack和queue的底层结构stack的模拟实现queue的模拟实现 什么是适配器模式? 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff…

MPP 还是主流架构吗

MPP 架构: MPP 架构的产品: Impala ClickHouse Druid Doris 很多 OLAP 引擎都采用了 MPP 架构 批处理系统 - 使用场景分钟级、小时级以上的任务,目前很多大型互联网公司都大规模运行这样的系统,稳定可靠,低成本。…

<深度学习基础> 激活函数

为什么需要激活函数?激活函数的作用? 激活函数可以引入非线性因素,可以学习到复杂的任务或函数。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从…

如何在服务器上用kaggle下载数据集

S1 服务器上安装kaggle cli工具 pip install --user kaggleS2 服务器上创建kaggle目录 mkdir ~/.kaggleS3 进入kaggle账户创建token 生成token 点击右上角头像,选择setting 点击create new token 进入你的浏览器下载页,可以看到有了一个kaggle.jso…

【Linux操作系统】Linux系统编程中信号捕捉的实现

在Linux系统编程中,信号是一种重要的机制,用于实现进程间通信和控制。当某个事件发生时,如用户按下CtrlC键,操作系统会向进程发送一个信号,进程可以捕获并相应地处理该信号。本篇博客将介绍信号的分类、捕获与处理方式…

ImportError: cannot import name ‘SQLDatabaseChain‘ from ‘langchain‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

深度学习基本理论下篇:(梯度下降/卷积/池化/归一化/AlexNet/归一化/Dropout/卷积核)、深度学习面试

深度学习基本理论上篇:(MLP/激活函数/softmax/损失函数/梯度/梯度下降/学习率/反向传播) 深度学习基本理论上篇:(MLP/激活函数/softmax/损失函数/梯度/梯度下降/学习率/反向传播)、深度学习面试_会害羞的杨…

全国城市内涝排涝模拟技术及在市政、规划设计中应用教程

详情点击链接:全国城市内涝排涝模拟技术及在市政、规划设计中应用教程 一,数据准备 通过标准化的步骤,利用CAD数据、GIS数据,在建模的不同阶段发挥不同软件的优势,实现高效的数据处理、准确的参数赋值、模型的快速建…

API接口漏洞利用及防御

API是不同软件系统之间进行数据交互和通信的一种方式。API接口漏洞指的是在API的设计、开发或实现过程中存在的安全漏洞,可能导致恶意攻击者利用这些漏洞来获取未授权的访问、篡改数据、拒绝服务等恶意行为。 1.API接口漏洞简介 API(Application Progr…

Maven 配置文件修改及导入第三方jar包

设置java和maven的环境变量 修改maven配置文件 &#xff08;D:\app\apache-maven-3.5.0\conf\settings.xml&#xff0c;1中环境变量对应的maven包下的conf&#xff09; 修改131行左右的mirror&#xff0c;设置阿里云的仓库地址 <mirror> <id>alimaven</id&g…

无涯教程-PHP - sql_regcase()函数

sql_regcase() - 语法 string sql_regcase (string string) 可以将sql_regcase()函数视为实用程序函数&#xff0c;它将输入参数字符串中的每个字符转换为包含两个字符的带括号的表达式。 sql_regcase() - 返回值 返回带括号的表达式字符串以及转换后的字符。 sql_regcase…

[Mac软件]MacCleaner 3 PRO 3.2.1应用程序清理和卸载

应用介绍 MacCleaner PRO是一个应用程序包&#xff0c;将帮助您清除磁盘空间并加快Mac的速度&#xff01; MacCleaner PRO - 让您的Mac始终快速、干净和有条理。 App Cleaner & Uninstaller PRO - 完全删除未使用的应用程序并管理Mac扩展。 磁盘空间分析仪PRO-分析磁盘空…

PHP求职招聘系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 求职招聘系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88240283 论文 https://down…

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)

&#xff08;二&#xff09;Git在公司中团队内合作和跨团队合作和分支操作的全部流程&#xff08;一篇就够&#xff09;https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*&#xff0c;可以快速高效地…

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

您将会学到 您将学会如何基于Astro零代码能力&#xff0c;DIY开发&#xff0c;完成问卷、投票、信息收集、流程处理等工作&#xff0c;还能够在线筛选、分析数据。实现一站式快速开发个性化应用&#xff0c;体验轻松拖拽开发的乐趣。 您需要什么 环境准备 注册华为云账号、实…

Eureka注册中心

全部流程 注册服务中心 添加maven依赖 <!--引用注册中心--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 配置Eureka 因为自…

单链表Single-LinkList

0、节点结构体定义 typedef struct LNode{int data;struct LNode *next;} Lnode, *LinkList; 1、初始化 bool InitList(LinkList &L) //初始化 {L new LNode;if(!L){return false;}L->next NULL;return true; } 2、创建 &#xff08;1&#xff09;头插法 void Cr…

Java 项目日志实例:综合应用

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 本文介绍 JCL(java common logging) 和 SLF4J 分别与 Log4j 结合使用的示例。 1 JCL Log4j 使用示例 1、JCL(java common logging) Log4j 介绍 使用 commons-logging 的 …

HCIP学习--三层架构

未完成 网关作为了一个广播域的中心出口&#xff1b;生成树的根网桥也是一棵树的中心&#xff0c;也是流量的集合点&#xff1b; 若将两者分配不同的设备将导致网络通讯资源浪费&#xff0c;故强烈建议两者在同一台汇聚层设备上 举个例子 看下图若VLAN2要去找VLAN3设备需要…