CN115878023A - 写入数据到闪存存储器的方法及装置 - Google Patents
写入数据到闪存存储器的方法及装置 Download PDFInfo
- Publication number
- CN115878023A CN115878023A CN202210339875.9A CN202210339875A CN115878023A CN 115878023 A CN115878023 A CN 115878023A CN 202210339875 A CN202210339875 A CN 202210339875A CN 115878023 A CN115878023 A CN 115878023A
- Authority
- CN
- China
- Prior art keywords
- data
- virtual vehicle
- engine
- end processing
- processing stage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Networks & Wireless Communication (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Read Only Memory (AREA)
- Debugging And Monitoring (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Stored Programmes (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及一种写入数据到闪存存储器的方法及装置,其中该写入数据到闪存存储器的方法,由加速器的控制器执行,包含:从静态随机存取存储器读取虚拟载具的操作设定;当操作设定指出虚拟载具的第一数据需要经过中端处理阶段时,依据静态随机存取存储器中存储的中端参数集设定独立硬盘冗余数组引擎;当操作设定指出虚拟载具的第一数据不需要经过中端处理阶段,或者虚拟载具的第一数据已经经过中端处理阶段时,依据操作设定判断虚拟载具的第二数据是否需要经过后段处理阶段;以及当操作设定指出所述虚拟载具的第二数据需要经过后端处理阶段时,依据静态随机存取存储器中存储的后端参数集发送编程索引给数据存取引擎。通过专属的加速器的设置,主要处理单元不需要监督整个数据写入的数据流运作,提升系统的整体效能。
Description
技术领域
本发明涉及存储装置,尤指一种写入数据到闪存存储器的方法及装置。
背景技术
闪存通常分为NOR闪存与NAND闪存。NOR闪存为随机存取装置,中央处理器(Host)可于地址引脚上提供任何存取NOR闪存的地址,并及时地从NOR闪存的数据引脚上获得存储于该地址上的数据。相反地,NAND闪存并非随机存取,而是串行存取。NAND闪存无法像NOR闪存一样,可以存取任何随机地址,中央处理器反而需要写入串行的组字节(Bytes)的值到NAND闪存中,用于定义请求命令(Command)的类型(如,读取、写入、抹除等),以及用在此命令上的地址。地址可指向一个页面(闪存中写入操作的最小数据块)或一个区块(闪存中抹除操作的最小数据块)。提升闪存模块的数据写入效能,一直是影响闪存控制器的系统整体效能的重要课题。因此.本发明提出一种写入数据到闪存存储器的方法及装置,用于提升数据写入效能。
发明内容
有鉴于此,如何减轻或消除上述相关领域的缺陷,实为有待解决的问题。
本发明涉及一种写入数据到闪存存储器的方法,由加速器的控制器执行,包含:从静态随机存取存储器读取虚拟载具的操作设定;当操作设定指出虚拟载具的第一数据需要经过中端处理阶段时,依据静态随机存取存储器中存储的中端参数集设定独立硬盘冗余数组引擎(Redundant Array of Independent Disks,RAID Engine);当操作设定指出虚拟载具的第一数据不需要经过中端处理阶段,或者虚拟载具的第一数据已经经过中端处理阶段时,依据操作设定判断虚拟载具的第二数据是否需要经过后段处理阶段;以及当操作设定指出所述虚拟载具的第二数据需要经过后端处理阶段时,依据静态随机存取存储器中存储的后端参数集发送编程索引给数据存取引擎。
本发明还涉及一种写入数据到闪存存储器的装置,包含:静态随机存取存储器;以及控制器,耦接静态随机存取存储器。控制器用于从静态随机存取存储器读取虚拟载具的操作设定;当操作设定指出虚拟载具的第一数据需要经过中端处理阶段时,依据静态随机存取存储器中存储的中端参数集设定独立硬盘冗余数组引擎;当操作设定指出虚拟载具的第一数据不需要经过中端处理阶段,或者虚拟载具的第一数据已经经过中端处理阶段时,依据操作设定判断虚拟载具的第二数据是否需要经过后段处理阶段;以及当操作设定指出所述虚拟载具的第二数据需要经过后端处理阶段时,依据静态随机存取存储器中存储的后端参数集发送编程索引给数据存取引擎。
上述实施例的优点之一,通过专属的路由引擎和加速器来统合主机接口、RAID引擎和数据存取引擎的运作以完成各式各样的数据写入操作,让闪存控制器的主要处理单元不需要监督整个数据写入的数据流运作,以及在数据流运作的过程中等待主机接口、RAID引擎和数据存取引擎的状态回复。这些节省下的时间和运算资源可以让闪存控制器的主要处理单元执行其他的任务,提升系统的整体效能。
上述实施例的另一个优点,通过柜位标志可让主机接口在前端处理阶段中以乱序和分开执行的项目,在中端和后端处理阶段中由加速器回复到原来的执行顺序。
上述实施例的另一个优点,通过项目概要的操作设定,让路由引擎可跳过不需要执行的前端处理阶段,以及让加速器可跳过不需要执行的中端和/或后端处理阶段,提供配置的弹性。
本发明的其他优点将配合以下的说明和附图进行更详细的解说。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为依据本发明实施例的电子装置的系统架构图。
图2为依据本发明实施例的闪存模块的示意图。
图3为依据本发明实施例的数据写入流程图。
图4为依据本发明实施例的项目概要示意图。
图5为依据本发明实施例的路由引擎的框图。
图6为依据本发明实施例的前端处理阶段的方法流程图。
图7为依据本发明实施例的加速器的框图。
图8为依据本发明实施例的中端和后端处理阶段的方法流程图。
其中,附图中符号的简单说明如下:
10:电子装置;110:主机端;130:闪存控制器;131:主机接口;132:路由引擎;133:加速器;134:第一处理单元;135:RAID引擎;136:随机存取存储器;137:数据存取引擎;138:第二处理单元;139:闪存接口;150:闪存模块;151:接口;153#0~153#15:NAND闪存单元;CH#0~CH#3:通道CE#0~CE#3:启动信号;S310~S360:方法步骤;410:前置信息;420:柜位标志;510:状态队列;520:控制器;530:启动队列;S610~S670:方法步骤;710:控制器;720:执行表;730:中端参数集;740:后端参数集;750:编程表;S810~S880:方法步骤。
具体实施方式
以下将配合相关附图来说明本发明的实施例。在这些附图中,相同的标号表示相同或类似的组件或方法流程。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用于表示存在特定的技术特征、数值、方法步骤、作业处理、组件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、组件、组件,或以上的任意组合。
本发明中使用如“第一”、“第二”、“第三”等词是用来修饰权利要求中的组件,并非用来表示之间具有优先权顺序,先行关系,或者是一个组件先于另一个组件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的组件。
必须了解的是,当组件描述为“连接”或“耦接”至另一组件时,可以是直接连结、或耦接至其他组件,可能出现中间组件。相反地,当组件描述为“直接连接”或“直接耦接”至另一组件时,其中不存在任何中间组件。用于描述组件之间关系的其他词语也可以类似方式解读,例如“介于”相对于“直接介于”,或者“邻接”相对于“直接邻接”等等。
在闪存控制器中,整个数据写入的数据流可分为三个处理阶段:前端(Front-end);中端(Mid-end);和后端(Back-end)。前端处理阶段负责获取即将写入的数据,其中还包含获取数据的来源地址、数据的大小、静态随机存取存储器(Static Random AccessMemory,SRAM)中暂存这些数据的位置等信息。中端处理阶段涉及数据安全,其中包含数据重新排序、协调独立磁盘冗余数组引擎(Redundant Array of Independent Disks,RAIDEngine)来执行数据加密,产生奇偶校验页面(Parity Page)等操作。后端处理阶段包含从静态随机存取存储器取得数据、后数据处理(包含数据乱序、在数据后加上低密度奇偶校验码等)、物理数据写入的控制等操作。需要注意的是,系统可依据数据写入的不同特性忽略以上三个阶段中的任何一个或两个。在以前的实施方式,当闪存控制器执行主机写入命令时,通常使用固件(也可称为固件转译层,Firmware Translation Layer,FTL)来启动、控制和监督数据流,以至于消耗了大部分的处理器负载和计算资源在如上所述的任务上。详细来说,固件可能消耗大量的时间和计算资源来检查必要的数据是否已经存储到静态随机存取存储器中的指定位置,询问相关的硬件(例如独立磁盘冗余数组引擎、闪存接口等),以及等待回复以知道运作的状态等。为了解决如上所述的问题,本发明实施例修改了目前的架构,设置能够和固件搭配的专属硬件电路,用于加速数据写入的整题处理。
参考图1。电子装置10包含主机端(Host Side)110、闪存控制器130及闪存模块150,并且闪存控制器130及闪存模块150可合称为装置端(Device Side)。电子装置10可实施于个人电脑、笔记本电脑(Laptop PC)、平板电脑、移动电话、数码相机、数码摄影机等电子产品之中。主机端110与闪存控制器130的主机接口(Host Interface)131之间可以通用串行总线(Universal Serial Bus,USB)、先进技术附件(advanced technologyattachment,ATA)、串行先进技术附件(serial advanced technology attachment,SATA)、快速外设元件互联(peripheral component interconnect express,PCI-E)、通用闪存存储器(Universal Flash Storage,UFS)、嵌入式多媒体卡(Embedded Multi-Media Card,eMMC)等通信协议彼此通信。闪存控制器130的闪存接口(Flash Interface)139与闪存模块150之间可以双倍数据率(Double Data Rate,DDR)通信协议彼此通信,例如,开放NAND闪存接口(Open NAND Flash Interface,ONFI)、双倍数据率开关(DDR Toggle)或其他通信协议。闪存控制器130包含第一处理单元134(又可称为主要处理单元,Primary ProcessingUnit),可使用多种方式实施,如使用通用硬件(例如,单一处理器、具并行处理能力的多处理器、图形处理器或其他具运算能力的处理器),并且在执行软件以及/或固件指令时,提供之后描述的功能。处理单元134通过主机接口131接收主机命令,例如读取命令(ReadCommand)、写入命令(Write Command)、丢弃命令(Discard Command)、抹除命令(EraseCommand)等,调度并执行这些命令。闪存控制器130另包含随机存取存储器(Random AccessMemory,RAM)136,可实施为动态随机存取存储器(Dynamic Random Access Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)或上述两者的结合,用于配置空间作为数据缓冲区,存储从主机端110读取并即将写入闪存模块150的使用者数据(也可称为主机数据),以及从闪存模块150读取并即将输出给主机端110的使用者数据。随机存取存储器136另可存储执行过程中需要的数据,例如,变量、数据表、主机与闪存地址对照表(Host-to-Flash Address Mapping Table,简称H2F表)、闪存与主机地址对照表(Flash-to-Host Address Mapping Table,简称F2H表)等。
闪存控制器130中可配置共享总线架构(Shared Bus Architecture),用于让元件之间彼此耦接以传递数据、地址、控制信号等,这些元件包含主机接口131、第一处理单元134、RAID引擎135、RAM 136、数据存取引擎(Data Access Engine)137等。总线包含并行的物理线,连接闪存控制器130中两个以上的元件。共享总线是一种共享的传输媒体,在任意的时间上,只能有两个装置可以使用这些线来彼此通信,用于传递数据。数据及控制信号能够在元件间分别沿数据和控制线进行双向传播,但另一方面,地址信号只能沿地址线进行单向传播。例如,当处理单元134想要读取RAM 136的特定地址上的数据时,处理单元134在地址线上传送此地址给RAM 136。接着,此地址的数据会在数据线上回复给处理单元134。为了完成数据读取操作,控制信号会使用控制线进行传递。
闪存控制器130中还可配置专属总线(Dedicated Bus),独立于共享总线架构之外,让第一处理单元134、路由引擎(Routing Engine)132和加速器(Accelerator)133彼此连接,用于传递控制信号和控制信息。路由引擎132用于完成前端处理阶段的任务,加速器133用于完成中端和后端处理的任务。路由引擎132和加速器133可不耦接共享总线架构,避免占据共享总线架构的频宽,降低整体的系统效能。
闪存模块150提供大量的存储空间,通常是数百个千兆字节(Gigabytes,GB),甚至是数个万亿字节(Terabytes,TB),用于存储大量的使用者数据,例如高分辨率图片、影片等。闪存模块150中包含控制电路以及存储器数组,存储器数组中的存储单元可配置为单层式单元(Single Level Cells,SLCs)、多层式单元(Multiple Level Cells,MLCs)三层式单元(Triple Level Cells,TLCs)、四层式单元(Quad-Level Cells,QLCs)或上述的任意组合。第一处理单元134可通过闪存接口139写入使用者数据到闪存模块150中的指定地址(目的地址),以及从闪存模块150中的指定地址(来源地址)读取使用者数据。闪存接口139使用数个电子信号来协调闪存控制器130与闪存模块150间的数据与命令传递,包含数据线(Data Line)、时钟信号(Clock Signal)与控制信号(Control Signal)。数据线可用于传递命令、地址、读出及写入的数据;控制信号线可用于传递芯片启动(Chip Enable,CE)、地址提取启动(Address Latch Enable,ALE)、命令提取启动(Command Latch Enable,CLE)、写入启动(Write Enable,WE)等控制信号。
参考图2,闪存模块150中的接口151可包含四个输出输入通道(I/O channels,以下简称通道)CH#0至CH#3,每一个通道连接四个NAND闪存单元,例如,通道CH#0连接NAND闪存单元153#0、153#4、153#8及153#12。每个NAND闪存单元可封装为独立的芯片(die)。闪存接口139可通过接口151发出启动信号CE#0至CE#3中的一个来启动NAND闪存单元153#0至153#3、153#4至153#7、153#8至153#11、或153#12至153#15,接着以并行的方式从启动的NAND闪存单元读取使用者数据,或者写入使用者数据至启动的NAND闪存单元。
参考图3所示的数据写入的流程图。前端处理阶段检查操作设定,判断是否存在关联于主机接口131的待执行任务(步骤S310)。如果是(步骤S310中“是”的路径),驱动主机接口131以从主机端110获取数据,并且将数据存储在RAM 136中的指定地址(步骤S320)。否则(步骤S310中“否”的路径),流程直接进入下个阶段(也就是中端处理阶段)(步骤S330)。中端处理阶段检查操作设定,判断是否存在关联于RAID引擎135的待执行任务(步骤S330)。如果是(步骤S330中“是”的路径),驱动RAID引擎135以从RAM 136的指定地址读取数据,重新排序获取的数据以恢复既有的数据顺序,为重新排序后数据的数据群组进行加密或者产生奇偶校验页面的数据,并将加密后数据或者奇偶校验页面的数据存储在RAM 136中的指定地址(步骤S340)。否则(步骤S330中“否”的路径),流程直接进入下个阶段(也就是后端处理阶段)(步骤S350)。后端处理阶段检查操作设定,判断是否存在关联于数据存取引擎137的待执行任务(步骤S350)。如果是(步骤S350中“是”的路径),驱动数据存取引擎137以从RAM136的指定地址读取数据,这些数据可以是从主机端110获取的数据、RAID引擎135加密后的数据、RAID引擎135产生的奇偶校验页面的数据等等。此外,驱动数据存取引擎137以对读取数据执行后处理,例如对读取数据进行乱序,附加读取数据的低密度奇偶校验码等等,以及写入后处理过的数据到闪存模块150中的指定地址(步骤S360)。否则(步骤S350中“否”的路径),流程结束。
在先前的实施方式中,通常使用第一处理单元134执行固件来启动、控制和监督整个数据写入的数据流。为了减少占用第一处理单元134的时间和计算资源,本发明实施例在闪存控制器130中设置了包含由专属电路实作的路由引擎132和加速器133,用于让第一处理单元134通过一种控制协议来选择性地启动路由引擎132、加速器133和第二处理器138,并且让整个数据流的执行能够被路由引擎132、加速器133和第二处理器138自己串接起来。除此之外,此控制协议还可依据数据写入的特性选择性地忽略数据流中的一个或二个阶段。
本发明实施例提出以逐项目(Transaction by Transaction)的方式来管理数据写入的整个数据流运作,用于让欲写入的数据可流经指定硬件以被处理。为了让路由引擎132、加速器133和第二处理器138知道数据写入的项目概要(Transaction Profile),本发明实施例让第一处理单元134产生和传送前置信息(Leading Information)和柜位标志(Cargo Flags)给路由引擎132和加速器133,用于通知路由引擎132、加速器133和第二处理器138每个项目(也可称为数据写入项目)所要写入的数据属于哪个载具(Carrier),此载具中每个柜位(Cargo)的准备状态,以及此载具需要经过哪些处理阶段等信息,以协调路由引擎132、加速器133和第二处理器138之间的执行。参考图4的项目概要的示意图,包含2个字节(Byte0~Byte1)的前置信息410和4个字节(Byte2~Byte5)的柜位标志(Cargo Flags)420。假设一次写入128KB的数据到闪存模块150可以得到较佳的效能:闪存控制器130可在每次搜集完成128KB的数据后,驱动数据存取引擎137将128KB的数据以多通道交错的方式写入闪存模块150中的多个NAND闪存单元。因应以上的示例,前置信息410的第0个字节(Byte0)存储载具标识码(Carrier ID),用于指出特定的128KB数据。前置信息410的第1个字节(Byte1)存储操作设定(Operation Setting)的信息,其中的最低三个存储是否启动三个处理阶段的信息,例如,当第1个字节中的最低三个比特为“0b111”时,代表前端、中端及后端处理阶段都要启动。通过载具标识码的提供,让具有相同载具标识码的128K数据就好像装载在同一个虚拟载具(Virtual Carrier)上,协同每个项目在路由引擎132和加速器133之间的运行。在这里需要注意的是,一个虚拟载具也可依据不同类型的闪存模块装载不同大小的数据,例如16KB、32KB、64KB等大小的数据。由于一个项目可能无法用于控制整个128KB的数据写入操作,柜位标志420中的每个比特用于指出128KB数据中的特定位置(也可称为柜位)的数据是否已经准备就绪,“1”代表已经准备就绪,“0”代表尚未就绪。例如,当第2个字节(Byte2)中的最低两个比特为“0b11”时,代表128KB数据中的第0个和第1个4KB数据已经准备就绪。当第3个字节(Byte3)中的最低两个比特为“0b11”时,代表128KB数据中的第8个和第9个4KB数据已经准备就绪。在这里需要理解的是,在一些系统的设置中,4KB的数据也可当作一个主页面(Host Page,包含八个连续的LBAs)的数据。
举一个例子来说,当第一处理单元134执行的固件通过主机接口131接收到主机端110指示写入128KB数据的主机写入命令时,产生如下项目概要:载具标识码为“0x00”;操作设定为“0x07”,代表这个项目需要启动前端、中端和后端处理阶段;柜位标志为“0x00000000”(可称为初始化的柜位标志),代表没有任何数据已经准备就绪。接着,第一处理单元134将项目概要、主机写入命令、以及RAM 136中用以存储128KB数据的指定地址(亦可称为目的地址)传送给路由引擎131。主机写入命令可包含以下的信息:操作码、开始的逻辑区块地址编号(Logic Block Address,LBA Number)、LBA长度等。主机写入命令和目的地址可合称为前端参数集(Front-end Parameter Set)。一个LBA通常指向512B的数据,而一个主页面(Host Page)包含八个连续LBA的数据。虽然本发明实施例描述了一个LBA的大小为512B且一个主页面包含八个LBA的数据,所属技术领域人员可依据系统的需要将一个LBA的大小修改为其他的长度(如256B、1KB、2KB等),和/或将一个主页面修改为包含更多或更少数目的LBA的数据。
举另一个例子来说,当第一处理单元134执行的固件通过主机接口131接收到主机端110指示写入64KB数据的主机写入命令时,产生如下前置信息:载具标识码为“0x01”;操作设定为“0x07”;柜位标志为“0xFFFF0000”(可称为初始化的柜位标志),代表第0个到第15个柜位的数据尚未就绪,而第16个到第31个柜位的数据已经就绪(也隐含了可以忽略这些数据,不需要再处理)。接着,第一处理单元134将项目概要、主机写入命令的信息、以及RAM136中用以存储64KB数据的指定地址给路由引擎131。
举另一个例子来说,当第一处理单元134执行的固件在垃圾回收程序中搜集了128KB数据时,产生如下的前置信息:载具标识码为“0x01”,操作设定为“0x04”,代表这个项目只需要启动后端处理阶段;柜位标志为“0xFFFFFFFF”(可称为初始化的柜位标志),代表所有数据已经准备就绪。
第一处理单元134传送以上所述的每个项目的初始的柜位标志给路由引擎132和加速器133,用于通知路由引擎132和加速器133关于每个所述项目中的哪些部分的数据需要在前端处理阶段准备完成。
在实际将一个项目的前置信息和前端参数集推入到路由引擎132之前,第一处理单元134还需要准备关联于此项目的中端参数集和后端参数集。第一处理单元134执行的固件可存储最多不超过一个数目(例如64个)的项目的中端和后端处理阶段的操作细节至加速器133中的静态随机存取存储器(Static Random Access Memory)。中端参数集指出如何驱动RAID引擎135以完成中端处理阶段的细节,可包含RAM 136中配置来存储原始数据的来源地址、用于设定RAID引擎135的加密或编码的参数、RAM 136中配置来存储加密后或编码后的结果的目的地址等。后端参数集指出如何驱动数据存取引擎137以完成后端处理阶段的细节,可包含编程表和此编程表的索引。此编程表的索引可用于计算加速器133的SRAM中配置来存储此编程表的地址。编程表包含RAM 136中配置来存储来源数据的地址(可称为来源地址)、一系列的闪存命令及其编程参数(例如命令类型、编程模式、欲写入的物理地址等)。物理地址(可称为目的地址)可包含通道编号、物理块编号、物理页面编号、区段编号等信息。
因应一系列的主机写入命令或者背景程序的执行,第一处理单元134产生多个项目的前置信息、初始的柜位标志、前端参数集、中端参数和后端参数集。第一处理单元134将多个项目的前置信息、初始的柜位标志和前端参数集传给路由引擎132,以及将多个项目的前置信息、初始的柜位标志、中端参数和后端参数集传给加速器133之后,路由引擎132、加速器133和数据存取引擎137就能够据以完成各式各样的数据写入操作,而不需要第一处理单元134监督整个数据写入的数据流运作,以及在数据流运作的过程中等待主机接口131、RAID引擎135和数据存取引擎137的状态回复。换句话说,第一处理单元134在数据写入的过程中不会直接驱动主机接口131、RAID引擎135和数据存取引擎137以完成如上所述的前端、中端和后端处理阶段的操作,而是通过路由引擎132和加速器133来完成对主机接口131、RAID引擎135和数据存取引擎137的驱动。这些节省下的时间和运算资源可以让第一处理单元134执行其他的任务,提升系统的整体效能。之后,第一处理单元134每隔一段时间可从RAM 136中的指定地址读取每个项目的执行状态,或者询问路由引擎132和/或加速器133以获取每个项目的执行状态。
路由引擎132从第一处理单元134接收到一个项目的操作设定和前端参数集,操作设定指出前端处理阶段、中端处理阶段和后端处理阶段中的每一个是否需要启动的信息。当路由引擎132依据操作设定判定需要启动前端处理阶段时,依据前端参数集驱动主机接口131,使得主机接口131从主机端110获取数据,并且通过共享总线架构将获取的数据存储至随机存取存储器136的指定地址。
参考图5所示的路由引擎132的框图,路由引擎132包含状态队列510、控制器520和启动队列530,控制器520可使用通用处理器或者专属电路实施,并且状态队列510和启动队列530可实施在SRAM中预先配置的空间。路由引擎132可通过高级高性能(Advanced High-Performance,AHB)总线和第一处理单元134进行一系列的信号交互。如果存在任何项目(也就是虚拟载具)需要通过主机接口131从主机端110获取数据,第一处理单元134中执行的固件将项目概要(包含初始化的柜位标志)和前端参数集推入状态队列510,用于指示路由引擎132如何驱动主机接口131以获取指定的数据并存储到RAM 136中的指定地址。前端参数集指出主机数据的逻辑地址范围(可使用起始LBA编号和LBA长度表示),以及RAM 136中存储主机数据的指定位置。
另参考图6所示的由控制器520执行的前端处理阶段的方法流程图,此方法会反复执行一个外循环(从步骤S610至S670)和一个内循环(从步骤S630至S660)。大循环的每次反复都是由控制器520从状态队列510推出一个项目开始(步骤S610),接着依据项目中的操作设定判断此项目的数据是否需要经过前端处理阶段(步骤S620)。如果是(步骤S620中“是”的路径),开始执行小循环,用于依据项目的内容驱动(或启动)主机接口131以从主机端110获取指定逻辑地址的主机数据,并且存储所获取的主机数据到RAM 136中的指定地址(步骤S630)。需要注意的是,为了获得更好的效能,排队中的项目的启动顺序可能与它们到达状态队列510的时间顺序不一致。也就是说,较早到达状态队列510的项目,并不一定是较早被控制器520处理的项目。换句话说,在控制器520驱动主机接口131以完成一个项目的前端参数集所指示的操作的期间,状态队列510中可能还存储着更早到达的项目尚未被处理。
由于控制器520可能以多个批次来完成一个项目的主机数据的获取,每次只要有任何主页面的(或者是任何LBA区间的)主机数据已经成功的存储到RAM 136中的指定位置后(步骤S630),控制器520更新柜位标志以反映主机接口131的执行状态(步骤S640),并且将前置信息和更新后的柜位标志推入启动队列530,用于让加速器133可据以决定是否启动后续处理阶段的操作(步骤S650)。举例来说,推出的项目纪录了如下项目概要:载具标识码为“0x01”;操作设定为“0x07”;和柜位标志为“0xFFFF0000”,并且控制器520使用两个批次来驱动主机接口131以完成整个64KB数据的读取。在第一个批次的32KB数据的执行成功后,控制器520更新柜位标志成为“0xFFFF00FF”,并且将更新后的项目概要(包含载具标识码“0x01”;操作设定“0x07”;和柜位标志“0xFFFF00FF”)推入启动队列530。在第二个批次的32KB数据的执行成功后,控制器520更新柜位标志成为“0xFFFFFF00”,并且将更新后的项目概要(包含载具标识码“0x01”;操作设定“0x07”;和柜位标志为“0xFFFFFF00”)推入启动队列530。
如果项目中的操作设定指出此项目的数据不需要经过前端处理阶段(步骤S620中“否”的路径),控制器520直接将原始的项目概要推入启动队列530(步骤S670)。
每次当控制器520原始的或者更新后的项目概要推入启动队列530时,可代表控制器520通知加速器133相应项目的启动信息。
加速器从第一处理单元134接收到一个项目的操作设定、中端参数集和后端参数集,操作设定指出前端处理阶段、中端处理阶段和后端处理阶段中的每一个是否需要启动的信息。当加速器133从路由引擎132接收到此项目的启动信息,以及当加速器133依据操作设定判定需要启动中端处理阶段时,依据中端参数集驱动RAID引擎135,使得RAID引擎135通过所述共享总线架构从RAM 136的指定地址获取数据,加密获取的数据或者依据获取的多个页面的数据产生奇偶校验页面的数据。接着,当加速器133依据操作设定判定此写入项目不需要启动中端处理阶段或者是此写入项目的中端处理阶段已经执行完成时,以及当加速器133依据操作设定判定需要启动后端处理阶段时,依据后端参数集驱动数据存取引擎137,使得数据存取引擎137通过共享总线架构从RAM 136的指定地址获取数据,并且将获取的数据写入闪存模块150的指定地址。
参考图7所示的加速器133的框图,加速器133包含控制器710、执行表720、中端参数集730、后端参数集740和编程表750,控制器710可使用通用处理器或者专属电路实施,并且执行表720、中端参数集730、后端参数集740和编程表750可实施在加速器133的SRAM中预先配置的空间。加速器133可通过高级高性能总线和第一处理单元134进行一系列的信号交互。执行表720存储多个项目(也就是虚拟载具)的项目概要,执行表720的内容由第一处理单元134填写。执行表720的示例如表1所示:
表1
项目编号 | 前置信息 | 柜位标志 |
entry#0 | leadInfo#10 | cargoFlag#10 |
entry#1 | leadInfo#11 | cargoFlag#11 |
entry#2 | leadInfo#12 | cargoFlag#12 |
entry#3 | leadInfo#13 | cargoFlag#13 |
: | : | : |
entry#62 | N/A | N/A |
entry#63 | N/A | N/A |
第一处理单元134依据项目的执行顺序依序填写项目概要(包含前置信息和柜位标志)。例如,第一处理单元134分别依序填入第10个到第13个项目的项目概要到执行表720中的第0项(entry#0)到第3项(entry#3)。第10个项目的项目概要包含相应的前置信息(leadInfo#10)和柜位标志(cargoFlag#10),第11个项目的项目概要包含相应的前置信息(leadInfo#11)和柜位标志(cargoFlag#11),依此类推。虽然启动队列530中的项目的推入顺序不一定是第一处理单元134原来推入到状态队列510的顺序,控制器710必须按照执行表720中的存储顺序来执行项目。也就是说,当第10个项目所需的中端处理阶段和/或后端处理阶段还没有完成时,控制器710不能为第11个到第13个项目中的任何一个驱动RAID引擎135和数据存取引擎137。
如果存在任何项目需要通过RAID引擎135处理,第一处理单元134事先将相应的中端参数集730存储至加速器133的SRAM中的指定地址,让控制器710可据以设定RAID引擎135来完成此项目的中端处理操作。如果存在任何项目需要通过数据存取引擎137处理,第一处理单元134事先将相应的后端参数集740和编程表750存储至加速器133的SRAM中的指定地址,让数据存取引擎137中的第二处理单元138可据以驱动闪存接口139来完成此项目的后端处理操作。
另参考图8所示的由控制器710执行的中端和后端处理阶段的方法流程图,此方法会反复执行一个循环(从步骤S810至S880)。循环的每次反复都是由控制器710从启动队列530推出一个项目开始(步骤S810),接着将推出项目中的柜位标志和执行表720中的相应柜位标志进行逻辑或运算,将计算结果更新回执行表720中的相应柜位标志(步骤S820),并且判断执行表720中的第零个项目的柜位标志是否等于0xFFFFFFFF(步骤S830)。如果是(步骤S830中“是”的路径),代表第零个项目的前端处理阶段已经执行完成或者不需要执行前端处理阶段,让执行表720中的第零个项目进入中端处理阶段(步骤S840至S860)。如果不是(步骤S830中“否”的路径),代表第零个项目的前端处理阶段尚未执行完成,控制器710继续从启动队列530推出下一个项目来处理(步骤S810)。
举例来说,假设执行表720存储两个项目。在时间点t0,第零个项目包含如下项目概要:载具标识码为“0x10”;操作设定为“0x07”;和柜位标志为“0x00000000”。第一个项目包含如下项目概要:载具标识码为“0x11”;操作设定为“0x07”;和柜位标志为“0x00000000”。
在时间点t1,控制器710从启动队列530推出一个项目,包含如下项目概要载具标识码为“0x10”;操作设定为“0x07”;和柜位标志为“0x0000FFFF”(步骤S810)。控制器710将推出项目中的柜位标志“0x0000FFFF”和执行表720中的相应柜位标志(也就是第零个项目的柜位标志)“0x00000000”进行逻辑或运算,并且将计算后的结果为“0x0000FFFF”更新回执行表720中的相应柜位标志(步骤S820)。由于执行表720中的第零个项目的柜位标志“0x0000FFFF”不等于0xFFFFFFFF(步骤S830中“否”的路径),因此流程并不能够向下执行。
在时间点t2,控制器710从启动队列530推出一个项目,包含如下项目概要载具标识码为“0x11”;操作设定为“0x07”;和柜位标志为“0xFFFFFFFF”(步骤S810)。控制器710将推出项目中的柜位标志“0xFFFFFFFF”和执行表720中的相应柜位标志(也就是第一个项目的柜位标志)“0x00000000”进行逻辑或运算,并且将计算后的结果为“0xFFFFFFFF”更新回执行表720中的相应柜位标志(步骤S820)。由于执行表720中的第零个项目的柜位标志“0x0000FFFF”还是不等于0xFFFFFFFF(步骤S830中“否”的路径),就算第一个项目已经准备好,流程还是并不能够向下执行。
在时间点t3,控制器710从启动队列530推出一个项目,包含如下项目概要载具标识码为“0x10”;操作设定为“0x07”;和柜位标志为“0xFFFF0000”(步骤S810)。控制器710将推出项目中的柜位标志“0xFFFF0000”和执行表720中的相应柜位标志(也就是第零个项目的柜位标志)“0x0000FFFF”进行逻辑或运算,并且将计算后的结果为“0xFFFFFFFF”更新回执行表720中的相应柜位标志(步骤S820)。由于执行表720中的第零个项目的柜位标志“0xFFFFFFFF”等于0xFFFFFFFF(步骤S830中“是”的路径),流程继续进行第零个项目的中端处理阶段(步骤S840至S860)。在这里需要注意的是,当流程执行完后端处理阶段时,控制器710会删除执行表720中原来的第零个项目的数据,并且将执行表720中原来的第一个以及以后项目的数据向前移动一个项目。也就是说.更新后的执行表720的第零个项目中包含如下的概要信息:载具标识码为“0x11”;操作设定为“0x07”;和柜位标志为“0xFFFFFFFF”。
在中端处理阶段的一开始,控制器710通过项目中的操作设定判断第零个项目的数据是否需要经过中端处理阶段(步骤S840)。如果是(步骤S840中“是”的路径),依据第零个项目的中端参数集730设定RAID引擎135,用于驱动RAID引擎135为第零个项目的数据完成指定的数据加密或数据编码操作(步骤S850)。由于RAID引擎135的编码需要花费一段时间,控制器710可每隔一段时间发出询问(Polling)给RAID引擎135,并依据回复的状态判断是否完成中端处理阶段(步骤S860)。如果尚未完成中端处理阶段(步骤S860中“否”的路径),则继续等待与询问。如果完成中端处理阶段(步骤S860中“是”的路径),流程进入下个阶段(也就是后端处理阶段)(步骤S870和S880)。此外,如果不需要执行中端处理阶段(步骤S840中“否”的路径),流程直接进入下个阶段(步骤S870和S880)。
RAID引擎135可依据加速器133发出的指令执行清除和编码(Clear and Encode)、编码(Encode)、结束编码(Terminate Encode)、中断(Terminate)、中断后回复(Resume)等功能。当接收到清除和编码指令时,RAID引擎135中的控制器通过共享总线从RAM 136的指定地址(可称为来源地址)读取多个主页面(例如32个主页面)的数据,并且以读取的数据覆写RAID引擎135中的SRAM所存储的数据。当接收到编码指令时,RAID引擎135中的控制器通过共享总线从RAM 136的指定地址读取多个主页面的数据,将读取的数据和RAID引擎135中的SRAM所存储的数据进行互斥或(Exclusive-OR)计算,并且将计算结果覆写RAID引擎135中的SRAM所存储的数据。当接收到结束编码指令时,RAID引擎135中的控制器通过共享总线从RAM 136的指定地址读取多个主页面的数据,将读取的数据和RAID引擎135中的SRAM所存储的数据进行互斥或(Exclusive-OR)计算,将计算结果覆写RAID引擎135中的SRAM所存储的数据,并且将计算结果通过共享总线存储到RAM 136的指定地址(可称为目的地址)。
举例来说,第一处理单元134可在执行表中存储64个项目(其载具标识码依序为“0x20”至“0x5F”)。第0个项目的中端参数集730包含清除和编码指令,第1至第62个项目的中端参数集730包含编码指令,并且第63个项目的中端参数集730包含结束编码指令。于是,第一处理单元134可通过RAID引擎135执行这64个项目的指令来获得相应主机数据的奇偶校验页面。
在后端处理阶段的一开始,控制器710通过项目中的操作设定判断第零个项目的数据是否需要经过后端处理阶段(步骤S870)。如果是(步骤S870中“是”的路径),控制器710依据第零个项目所关联的后端参数集740发送信息给第二处理单元138,用于完成指定的数据写入操作(步骤S880)。如果不需要经过后端处理阶段(步骤S870中“否”的路径),控制器710继续从启动队列530推出下一个项目来处理(步骤S810)。
控制器710发送给第二处理单元138的信息中包含编程索引(Programming Index)和来源地址,编程索引指向加速器133的SRAM中的特定地址,而来源地址指向RAM 136中所存储的欲写入到闪存模块150的数据。第二处理单元138依据来源地址通过共享总线从RAM136的指定地址读取数据,依据编程索引从加速器133的SRAM读取相应于第零个项目的编程表750,以及依据读取的编程表750中的闪存命令及其编程参数驱动闪存接口139,用于将读取的数据写入闪存模块150中的指定物理地址。
在这里需要注意的是,第一处理单元134负责整个闪存控制器130的运行,包含系统开机、系统关机、各种主机命令的操作调度和执行、背景操作的调度和执行、瞬间断电回复(Sudden Power-Off Recovery,SPOR)的处理等等,而第二处理单元138主要负责和闪存模块150之间交互的任务,包含驱动闪存接口139来从闪存模块150的指定地址读取数据,写入数据到闪存模块150的指定地址,抹写闪存模块150的指定物理块等。
如上所述的设计能够让整个系统有弹性的配置数据流,举例来说,表2显示四个项目的数据写入都需要经过前端、中端和后端的处理阶段,并配置成并行执行的流水线。
表2
表3显示第0至第2个项目的数据写入需要经过前端和中端处理阶段,第3个项目的数据写入都需要经过前端、中端和后端处理阶段,并配置成并行执行的流水线。
表3
时间 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端处理 | |||
t1 | 中端处理 | 前端处理 | ||
t2 | 中端处理 | 前端处理 | ||
t3 | 中端处理 | 前端处理 | ||
t4 | 中端处理 | |||
t5 | 后端处理 |
表4显示第0至第1个项目的数据写入需要经过前端和中端处理阶段,第2个项目的数据写入只需要经过中端处理阶段,第3个项目的数据写入需要经过中端和后端处理阶段,并配置成并行执行的流水线。
表4
时间 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端处理 | |||
t1 | 中端处理 | 前端处理 | ||
t2 | 中端处理 | |||
t3 | 中端处理 | |||
t4 | 中端处理 | |||
t5 | 后端处理 |
表5显示第0至第2个项目的数据写入需要经过前端处理阶段,第3个项目的数据写入需要经过前端和中端处理阶段,并配置成并行执行的流水线。
表5
时间 | Carrier#0 | Carrier#1 | Carrier#2 | Carrier#3 |
t0 | 前端处理 | |||
t1 | 前端处理 | |||
t2 | 前端处理 | |||
t3 | 前端处理 | |||
t4 | 中端处理 |
本发明所述的方法中的全部或部分步骤可以由计算机程序实现,例如存储装置中的固件转换层(Firmware Translation Layer,FTL)、特定硬件的驱动程序、或软件程序。此外,也可实现于如上所示的其他类型程序。所属技术领域中的技术人员可将本发明实施例的方法撰写成程序代码,为求简明不再加以描述。依据本发明实施例方法实施的计算机程序可存储于适当的计算机可读取存储介质,例如DVD、CD-ROM、U盘、硬盘,也可置于可通过网络(例如,互联网,或其他适当介质)存取的网络服务器。
虽然图1、图2、图5、图7中包含了以上描述的组件,但不排除在不违反发明的精神下,使用更多其他的附加组件,以达成更佳的技术效果。此外,虽然图3、图6、图8的流程图采用指定的顺序来执行,但是在不违反发明精神的情况下,本领域技术人员可以在达到相同效果的前提下,修改这些步骤之间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。此外,本领域技术人员也可以将若干步骤整合为一个步骤,或者是除了这些步骤外,循序或并行地执行更多步骤,本发明也不应因此而局限。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,本领域技术人员在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所限定内容为准。
Claims (14)
1.一种写入数据到闪存存储器的方法,由加速器的控制器执行,其特征在于,所述写入数据到闪存存储器的方法包含:
从静态随机存取存储器读取虚拟载具的操作设定,其中,所述加速器包含所述静态随机存取存储器;
当所述操作设定指出所述虚拟载具的第一数据需要经过中端处理阶段时,依据所述静态随机存取存储器中存储的中端参数集设定独立硬盘冗余数组引擎,用于驱动所述独立硬盘冗余数组引擎为所述虚拟载具的所述第一数据完成指定的数据加密或数据编码操作;
当所述操作设定指出所述虚拟载具的所述第一数据不需要经过中端处理阶段,或者所述虚拟载具的所述第一数据已经经过中端处理阶段时,依据所述操作设定判断所述虚拟载具的第二数据是否需要经过后段处理阶段;以及
当所述操作设定指出所述虚拟载具的所述第二数据需要经过所述后端处理阶段时,依据所述静态随机存取存储器中存储的后端参数集发送编程索引给数据存取引擎,使得所述数据存取引擎依据所述编程索引从所述静态随机存取存储器读取编程表,并且依据编程表的内容将所述虚拟载具的所述第二数据写入闪存模块的指定地址。
2.如权利要求1所述的写入数据到闪存存储器的方法,其特征在于,所述操作设定由处理单元产生,并且所述处理单元在数据写入的过程中不会直接驱动所述独立硬盘冗余数组引擎和所述数据存取引擎。
3.如权利要求1所述的写入数据到闪存存储器的方法,其特征在于,所述中端参数集包含随机存取存储器中配置来存储所述虚拟载具的所述第一数据的第一地址,存储加密后或编码后的结果的第二地址,以及用于设定所述独立硬盘冗余数组引擎的参数;所述随机存取存储器设置在所述加速器之外。
4.如权利要求3所述的写入数据到闪存存储器的方法,其特征在于,所述编程表包含所述虚拟载具的所述第二数据所存储在的随机存取存储器的地址,一系列的闪存命令及其编程参数;所述随机存取存储器设置在所述加速器之外。
5.如权利要求1所述的写入数据到闪存存储器的方法,其特征在于,包含:
在设定所述独立硬盘冗余数组引擎之后,不断发出询问给所述独立硬盘冗余数组引擎,直到所述独立硬盘冗余数组引擎所回复的状态指出所述中端处理阶段已经完成。
6.如权利要求1所述的写入数据到闪存存储器的方法,其特征在于,包含:
从路由引擎获取关联于所述虚拟载具的第一柜位标志;
从所述静态随机存取存储器读取所述虚拟载具的第二柜位标志;
依据所述第一柜位标志和所述第二柜位标志产生第三柜位标志;以及
依据所述第三柜位标志中的信息判定所述虚拟载具中所有柜位的数据都已经经过前端处理阶段或者不需要经过所述前端处理阶段之后,判断所述操作设定是否指出所述虚拟载具的所述第一数据需要经过中端处理阶段。
7.如权利要求6所述的写入数据到闪存存储器的方法,其特征在于,所述第三柜位标志是所述第一柜位标志和所述第二柜位标志进行逻辑或运算后的结果,并且所述第三柜位标志中的所有比特皆为”1”。
8.一种写入数据到闪存存储器的装置,其特征在于,包含:
静态随机存取存储器,用于存储虚拟载具的操作设定;
控制器,耦接所述静态随机存取存储器,用于从所述静态随机存取存储器读取所述虚拟载具的所述操作设定;当所述操作设定指出所述虚拟载具的第一数据需要经过中端处理阶段时,依据所述静态随机存取存储器中存储的中端参数集设定独立硬盘冗余数组引擎,用于驱动所述独立硬盘冗余数组引擎为所述虚拟载具的所述第一数据完成指定的数据加密或数据编码操作;当所述操作设定指出所述虚拟载具的所述第一数据不需要经过中端处理阶段,或者所述虚拟载具的所述第一数据已经经过中端处理阶段时,依据所述操作设定判断所述虚拟载具的第二数据是否需要经过后段处理阶段;以及当所述操作设定指出所述虚拟载具的所述第二数据需要经过所述后端处理阶段时,依据所述静态随机存取存储器中存储的后端参数集发送编程索引给数据存取引擎,使得所述数据存取引擎依据所述编程索引从所述静态随机存取存储器读取编程表,并且依据编程表的内容将所述虚拟载具的所述第二数据写入闪存模块的指定地址。
9.如权利要求8所述的写入数据到闪存存储器的装置,其特征在于,所述操作设定由处理单元产生,并且所述处理单元在数据写入的过程中不会直接驱动所述独立硬盘冗余数组引擎和所述数据存取引擎。
10.如权利要求8所述的写入数据到闪存存储器的装置,其特征在于,所述中端参数集包含随机存取存储器中配置来存储所述虚拟载具的所述第一数据的第一地址,存储加密后或编码后的结果的第二地址,以及用于设定所述独立硬盘冗余数组引擎的参数;所述随机存取存储器设置在所述装置之外。
11.如权利要求8所述的写入数据到闪存存储器的装置,其特征在于,所述编程表包含所述虚拟载具的所述第二数据所存储在的随机存取存储器的地址,一系列的闪存命令及其编程参数;所述随机存取存储器设置在所述装置之外。
12.如权利要求8所述的写入数据到闪存存储器的装置,其特征在于,所述控制器用于在设定所述独立硬盘冗余数组引擎之后,不断发出询问给所述独立硬盘冗余数组引擎,直到所述独立硬盘冗余数组引擎所回复的状态指出所述中端处理阶段已经完成。
13.如权利要求8所述的写入数据到闪存存储器的装置,其特征在于,所述控制器用于从路由引擎获取关联于所述虚拟载具的第一柜位标志;从所述静态随机存取存储器读取所述虚拟载具的第二柜位标志;依据所述第一柜位标志和所述第二柜位标志产生第三柜位标志;以及依据所述第三柜位标志中的信息判定所述虚拟载具中所有柜位的数据都已经经过前端处理阶段或者不需要经过所述前端处理阶段之后,判断所述操作设定是否指出所述虚拟载具的所述第一数据需要经过中端处理阶段。
14.如权利要求13所述的写入数据到闪存存储器的装置,其特征在于,所述第三柜位标志是所述第一柜位标志和所述第二柜位标志进行逻辑或运算后的结果,并且所述第三柜位标志中的所有比特皆为”1”。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/879,232 US20230094250A1 (en) | 2021-09-29 | 2022-08-02 | Method and apparatus for programming data into flash memory |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163249702P | 2021-09-29 | 2021-09-29 | |
US63/249,702 | 2021-09-29 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115878023A true CN115878023A (zh) | 2023-03-31 |
Family
ID=85769324
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210333516.2A Pending CN115878020A (zh) | 2021-09-29 | 2022-03-31 | 编码历程信息的存取方法和计算机可读取存储介质和装置 |
CN202210339875.9A Pending CN115878023A (zh) | 2021-09-29 | 2022-04-01 | 写入数据到闪存存储器的方法及装置 |
CN202210338471.8A Pending CN115878021A (zh) | 2021-09-29 | 2022-04-01 | 计算机可读取存储介质、写入数据到闪存存储器的方法及装置 |
CN202210339320.4A Pending CN115878022A (zh) | 2021-09-29 | 2022-04-01 | 写入数据到闪存存储器的方法及装置 |
CN202210339882.9A Pending CN115878024A (zh) | 2021-09-29 | 2022-04-01 | 写入数据到闪存存储器的方法及装置 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210333516.2A Pending CN115878020A (zh) | 2021-09-29 | 2022-03-31 | 编码历程信息的存取方法和计算机可读取存储介质和装置 |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210338471.8A Pending CN115878021A (zh) | 2021-09-29 | 2022-04-01 | 计算机可读取存储介质、写入数据到闪存存储器的方法及装置 |
CN202210339320.4A Pending CN115878022A (zh) | 2021-09-29 | 2022-04-01 | 写入数据到闪存存储器的方法及装置 |
CN202210339882.9A Pending CN115878024A (zh) | 2021-09-29 | 2022-04-01 | 写入数据到闪存存储器的方法及装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11966604B2 (zh) |
CN (5) | CN115878020A (zh) |
TW (5) | TWI821965B (zh) |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8027194B2 (en) * | 1988-06-13 | 2011-09-27 | Samsung Electronics Co., Ltd. | Memory system and method of accessing a semiconductor memory device |
US9582431B2 (en) * | 2010-03-22 | 2017-02-28 | Seagate Technology Llc | Storage address space to NVM address, span, and length mapping/converting |
TWI432987B (zh) | 2011-03-15 | 2014-04-01 | Phison Electronics Corp | 記憶體儲存裝置、其記憶體控制器與病毒掃描方法 |
US20130318285A1 (en) * | 2012-05-23 | 2013-11-28 | Violin Memory Inc | Flash memory controller |
US8661301B1 (en) * | 2012-09-07 | 2014-02-25 | Storart Technology Co. Ltd. | Method for dodging bad page and bad block caused by suddenly power off |
US9383795B2 (en) * | 2013-03-10 | 2016-07-05 | Seagate Technololgy Llc | Storage device power failure infrastructure |
WO2016038710A1 (ja) * | 2014-09-11 | 2016-03-17 | 株式会社日立製作所 | ストレージシステム |
CN105653609B (zh) * | 2015-12-24 | 2019-08-09 | 中国建设银行股份有限公司 | 基于内存的数据处理方法及装置 |
TWI614759B (zh) * | 2016-04-27 | 2018-02-11 | 慧榮科技股份有限公司 | 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與記憶裝置 |
CN112463433B (zh) * | 2016-04-27 | 2024-03-29 | 慧荣科技股份有限公司 | 存取闪存模块的方法及相关的闪存控制器与记忆装置 |
CN109308280B (zh) * | 2017-07-26 | 2021-05-18 | 华为技术有限公司 | 数据处理方法和相关设备 |
TWI721565B (zh) * | 2017-10-20 | 2021-03-11 | 慧榮科技股份有限公司 | 儲存裝置以及其介面晶片 |
KR20190063054A (ko) * | 2017-11-29 | 2019-06-07 | 삼성전자주식회사 | 메모리 시스템 및 이의 동작 방법 |
TWI661307B (zh) | 2017-12-06 | 2019-06-01 | 慧榮科技股份有限公司 | 資料儲存裝置、主機裝置、以及資料寫入方法 |
CN109901782A (zh) * | 2017-12-07 | 2019-06-18 | 上海宝存信息科技有限公司 | 数据储存装置与数据储存方法 |
GB2569358B (en) * | 2017-12-15 | 2020-01-29 | Advanced Risc Mach Ltd | Code realms |
EP3726364B1 (en) * | 2017-12-28 | 2022-07-27 | Huawei Technologies Co., Ltd. | Data write-in method and solid-state drive array |
US10599548B2 (en) * | 2018-06-28 | 2020-03-24 | Intel Corporation | Cache monitoring |
TWI664634B (zh) | 2018-08-17 | 2019-07-01 | 慧榮科技股份有限公司 | 快閃記憶體控制器、管理快閃記憶體模組的方法及相關的電子裝置 |
TWI703501B (zh) * | 2018-08-23 | 2020-09-01 | 慧榮科技股份有限公司 | 具有分散式信箱架構的多處理器系統及其溝通方法 |
TWI677879B (zh) * | 2018-09-03 | 2019-11-21 | 慧榮科技股份有限公司 | 資料儲存裝置與資料處理方法 |
TWI703438B (zh) | 2018-09-11 | 2020-09-01 | 慧榮科技股份有限公司 | 映射表更新方法 |
CN112823331B (zh) * | 2018-10-10 | 2024-03-29 | 阿里巴巴集团控股有限公司 | 用于具有较细粒度的并行多租户ssd中的数据恢复的系统和方法 |
US10909012B2 (en) * | 2018-11-12 | 2021-02-02 | H3 Platform, Inc. | System having persistent memory |
US11003373B2 (en) * | 2019-06-28 | 2021-05-11 | Western Digital Technologies, Inc. | Systems and methods for managing physical-to- logical address information |
CN110688242A (zh) * | 2019-09-10 | 2020-01-14 | 苏州浪潮智能科技有限公司 | SSD异常掉电后恢复block信息的方法及相关组件 |
CN112905854A (zh) * | 2021-03-05 | 2021-06-04 | 北京中经惠众科技有限公司 | 数据处理方法、装置、计算设备及存储介质 |
-
2022
- 2022-03-31 TW TW111112364A patent/TWI821965B/zh active
- 2022-03-31 CN CN202210333516.2A patent/CN115878020A/zh active Pending
- 2022-04-01 CN CN202210339875.9A patent/CN115878023A/zh active Pending
- 2022-04-01 CN CN202210338471.8A patent/CN115878021A/zh active Pending
- 2022-04-01 TW TW111112706A patent/TWI787110B/zh active
- 2022-04-01 TW TW111112709A patent/TWI799221B/zh active
- 2022-04-01 TW TW111112708A patent/TWI801191B/zh active
- 2022-04-01 TW TW111112707A patent/TWI805302B/zh active
- 2022-04-01 CN CN202210339320.4A patent/CN115878022A/zh active Pending
- 2022-04-01 CN CN202210339882.9A patent/CN115878024A/zh active Pending
- 2022-08-02 US US17/879,182 patent/US11966604B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
TWI821965B (zh) | 2023-11-11 |
TWI801191B (zh) | 2023-05-01 |
TWI787110B (zh) | 2022-12-11 |
TWI805302B (zh) | 2023-06-11 |
CN115878021A (zh) | 2023-03-31 |
CN115878024A (zh) | 2023-03-31 |
US11966604B2 (en) | 2024-04-23 |
TW202314516A (zh) | 2023-04-01 |
CN115878022A (zh) | 2023-03-31 |
TW202314528A (zh) | 2023-04-01 |
TW202314529A (zh) | 2023-04-01 |
TW202314515A (zh) | 2023-04-01 |
CN115878020A (zh) | 2023-03-31 |
TWI799221B (zh) | 2023-04-11 |
TW202314517A (zh) | 2023-04-01 |
US20230103723A1 (en) | 2023-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101105489B1 (ko) | Nand 플래시 메모리의 커맨드 기반 제어 | |
CN108205499B (zh) | 用于将数据处理转移到混合存储设备的方法和装置 | |
KR102711044B1 (ko) | 메모리 시스템에서의 유효 데이터 체크 방법 및 장치 | |
CN101297276A (zh) | 具有本地执行功能和存储功能的大容量存储设备 | |
KR102563760B1 (ko) | 인터페이스 유닛 및 그것의 동작방법 | |
CN104281413A (zh) | 命令队列管理方法、存储器控制器及存储器储存装置 | |
CN114063893A (zh) | 数据储存装置与数据处理方法 | |
CN115113799A (zh) | 主机命令的执行方法及装置 | |
CN111796759A (zh) | 多平面上的片段数据读取的计算机可读取存储介质及方法 | |
KR20210039171A (ko) | 메모리 시스템을 포함하는 데이터 처리 시스템에서 동작 정보를 송수신하는 방법 및 장치 | |
KR20220050407A (ko) | 컨트롤러 및 컨트롤러의 동작방법 | |
KR102708925B1 (ko) | 메모리 시스템에서의 유효 데이터 체크 방법 및 장치 | |
KR102702680B1 (ko) | 메모리 시스템 및 메모리 시스템의 동작방법 | |
CN113448487A (zh) | 写入闪存管理表的计算机可读取存储介质、方法及装置 | |
KR20210018570A (ko) | 컨트롤러, 컨트롤러의 동작 방법 및 이를 포함하는 저장 장치 | |
CN115878023A (zh) | 写入数据到闪存存储器的方法及装置 | |
CN110633225A (zh) | 实体存储对照表产生装置及方法 | |
TWI805505B (zh) | 排程和執行主機資料更新命令的方法及電腦程式產品及裝置 | |
TWI818762B (zh) | 排程和執行主機資料更新命令的方法及電腦程式產品及裝置 | |
TWI835027B (zh) | 更新主機與閃存位址對照表的方法及電腦程式產品及裝置 | |
TWI774277B (zh) | 主機命令的執行方法及裝置 | |
TWI822516B (zh) | 執行主機寫入命令的方法及電腦程式產品及裝置 | |
TWI844174B (zh) | 主機命令的邏輯位址區間搜索方法及裝置 | |
TWI822517B (zh) | 執行主機寫入命令的方法及電腦程式產品及裝置 | |
TWI695264B (zh) | 資料儲存裝置與資料處理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |