CN101965559B - 包括将处理器与内部存储器连接的交叉切换器的用于闪存的存储控制器 - Google Patents

包括将处理器与内部存储器连接的交叉切换器的用于闪存的存储控制器 Download PDF

Info

Publication number
CN101965559B
CN101965559B CN2008801276238A CN200880127623A CN101965559B CN 101965559 B CN101965559 B CN 101965559B CN 2008801276238 A CN2008801276238 A CN 2008801276238A CN 200880127623 A CN200880127623 A CN 200880127623A CN 101965559 B CN101965559 B CN 101965559B
Authority
CN
China
Prior art keywords
processor
flash memory
hemi
data
port
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.)
Expired - Fee Related
Application number
CN2008801276238A
Other languages
English (en)
Other versions
CN101965559A (zh
Inventor
道格拉斯·普林斯
阿伦·奥尔布里科
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Technologies LLC
Original Assignee
SanDisk Enterprise IP LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SanDisk Enterprise IP LLC filed Critical SanDisk Enterprise IP LLC
Priority to CN201210334987.1A priority Critical patent/CN103150275B/zh
Publication of CN101965559A publication Critical patent/CN101965559A/zh
Application granted granted Critical
Publication of CN101965559B publication Critical patent/CN101965559B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1657Access to multiple memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • G11C7/1063Control signal output circuits, e.g. status or busy flags, feedback command signals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

Abstract

提供了一种设计为与闪存存储模块一起使用的控制器,包括设计来将多个内部处理器与包括多个内部存储器的各种内部资源连接的交叉切换器。存储器包含用于处理器的工作列表。在一个实施例中,处理器通过使用交叉切换器在其它处理器的工作列表上放置任务来通信。

Description

包括将处理器与内部存储器连接的交叉切换器的用于闪存的存储控制器
相关申请的交叉引用
本申请要求2007年12月27日提交的、申请号为61/017,123的美国临时专利申请,以及2008年4月8日提交的、系列申请号为12/082,207的、题为“Storage Controller for Flash Memory Including a Crossbar Switch Connecting aPlurality of Processors With a Plurality of Internal Memories(用于闪存的、包括连接带有多个内部存储器的多个处理器的纵横切换器的存储控制器)”的美国专利申请的优先权,通过引用将它们的公开合并到这里,类似被在这里全文表述,用于所有的目地。
本申请还涉及:2008年4月8日提交的、系列申请号为12/082,202的、题为“System and Method for Performing Host Initiated Mass Storage CommandsUsing a Hierarchy of Data Structures(用于使用数据结构体系执行主机发起的大容量存储命令的系统和方法)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,205的、题为“Flash Memory Controller Having ReducedPinout(具有减少的引脚输出的闪存控制器)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,221的、题为“Multiprocessor StorageController(多处理器存储控制器)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,220的、题为“Flash Memory Controller and SystemIncluding Data Pipelines Incorporating Multiple Buffers(包括合并了多个缓存器的数据流水线的闪存控制器和系统)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,206的、题为“Mass Storage Controller Volatile MemoryContaining Meta Data Related to Flash Memory Storage(包含涉及闪存存储的元数据的大容量存储控制器易失性存储器)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,204的、题为“Patrol Function Used in FlashStorage Controller to Detect Data Errors(在闪存控制器中检测数据错误的巡逻功能)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,223的、题为“Flash Storage Controller Execute Loop(闪存控制器的执行环)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,222的、题为“Metadata Rebuild in a Flash Memory.Controller Following a Loss of Power(掉电后闪存控制器中的元数据重建)”的美国专利申请;2008年4月8日提交的、系列申请号为12/082,203的、题为“Flash Memory Controller Garbage CollectionOperations Performed Independently in Multiple Flash Memory Groups(在多个闪存组中独立执行的闪存控制器垃圾收集操作)”的美国专利申请,通过引用将它们的公开合并到这里,类似被在这里全文表述,用于所有目的。
技术领域
这里所描述的发明涉及数据存储领域,特别涉及使用固态非易失性存储器件的数据存储应用。该技术特别相关于包含部署在大型数据中心的多用户计算和存储平台的高性能企业系统,但其也可应用于较小规模的企业应用和最终用户大容量存储。
背景技术
目前企业级的大容量存储依靠硬盘驱动器,所述硬盘驱动器的典型特征为3.5英寸形状因子,15000rpm的转轴马达、以及73GB和450GB之间的存储容量。该机械设计与带有单个致动器与横穿8个表面移动的8个读/写头的传统硬盘驱动器相同。头(head)/介质技术的约束将读/写能力限制为每次仅一个有效头。发送到该驱动器的所有数据请求被以串行的方式处理,这在每个如致动器将读/写头移动到所需位置、以及介质旋转以将数据置于读/写头下的操作之间导致很长的延迟。
由于等待致动器的请求队列,系统观察到响应时间增加到用户不可忍受的程度。大容量存储系统已经通过限制对每个驱动器的未决请求的数量来适应该问题。这具有这样的效果:即使这些驱动器具有高至450GB的容量,也将每个驱动器的有效和可用的容量降低到每个驱动器12GB。随之,该较低的容量恶化了分层空间、冷却与功率的问题,对企业级的大容量存储系统,所有这些都变得极为成问题。
为了试图减轻这些问题,该行业转向2.5英寸的驱动器。然而,虽然较小的形状因子在相同空间中允许更多数量的驱动器,但硬盘驱动器操作的串行性质意味着即使较小形状因子的驱动器也存在严重的空间、冷却与功率的问题。
因为闪存系统没有与硬盘驱动器关联的机械延迟,从而允许更高的性能以及相当低的成本、功率、发热与空间使用,所以在企业级存储环境中,闪存很有吸引力。然而,传统上,由于某些技术限制,闪存未被用于这样的环境中。
第一个技术问题是写速度,其可以低至机械硬盘驱动器的写速度的十分之一。这是由于这样的事实:如果在写之前没有很长的擦除周期,数据就不能被覆写在NAND闪存上。因为擦除周期直接影响写性能,所以,大多数闪存设计将写数据移动到新位置,并将擦除延迟到以后。在繁忙的系统中,所延迟的擦除周期可逐步增大,直到处理器耗尽了空闲闪存页面而不得不停下来创建新页面为止,因此非常影响系统的性能。
第二个技术问题是对于每个闪存页面的特定限制:对“单层单元”(“SLC”)器件来说,100000个擦除周期;对“多层单元”(“MLC”)器件来说,10000个周期。这些对以不可预见的数据流操作的数据中心造成可以引起“热点”的特殊问题,产生存储器中某些遭受大量次数的擦除而被高度使用的区域。
第三个问题是数据丢失,其可以由于各种影响闪存的因素而发生,所述因素包括读干扰或程序干扰,它们导致由与被干扰的单元相邻的存储器单元的读或写引起的数据比特的丢失。由于时间的流逝,闪存单元的状态可能也以不可预见的方式改变。
这些技术问题对闪存在高容量、高性能的存储应用中的使用产生严重的问题。在每种情况中,存在技术解决方案,但这些解决方案对通常包括单个处理器的标准闪存控制器中可用的处理能力施加了很大的压力。该压力使得很难克服这些环境中的技术问题。
发明内容
在一个实施例中,所描述的对闪存的性能限制的解决方案包括在控制器设计中使用多个微处理器,由此创建多个并行的独立流水线,每个流水线都能够处理单个事务的一部分。该设计最大化主机和闪存接口的使用,并允许单个事务被分解为许多小部分,这些小部分可以被重新排序并被并行地处理,以提高性能。设计该结构来允许多个处理器在不使用代价高且无效率的中断的情况下执行它们的功能。
并行流水线的使用允许控制器有效地掩盖闪存的使用中固有的写等待时间。此外,多个独立处理器的使用提供足够的处理能力来处理由解决上述寿命和错误问题所施加的系统开销。通过将主机发起的事务分解为大量独立闪存读写,这里所描述的控制器结构允许在使用传统控制器设计中不可能的高水平性能。
附图说明
图1图示包含SSD(“固态驱动器”)控制器和闪存的系统。
图2图示用于将主机命令转换为闪存读和写的数据结构的分级结构。
图3更详细地图示了图1的系统。
图4以高级别图示了主机读操作。
图5以高级别图示了主机写操作。
图6图示闪存的组织。
图7图示闪存组和闪存端口之间的关系。
图8图示对闪存器件的输入和输出信号。
图9图示对闪存HEMi块的输入和输出信号。
图10图示闪存端口与闪存子组(bank)之间的连接。
图11图示将CS和RB信号复用到单个引脚上。
图12图示闪存分级结构。
图13图示S页面区段的组织。
图14图示闪存页面的构在。
图15图示超级块(SuperBlock)内的数据的组织。
图16图示数据的分条(stripe)组织。
图17图示穿过主机端口的数据和控制流。
图18图示主机端口。
图19图示基元(primitive)匹配逻辑。
图20图示命令解析器块。
图21图示命令分布块。
图22图示HEMi和共享RAM数据结构之间通过交叉切换器的连接。
图23图示RAM控制器。
图24图示共享RAM控制器与共享RAM子组之间的关系。
图25图示DRAM信道。
图26图示HEMi级。
图27图示闪存HEMi及其紧密耦接的逻辑块。
图28图示接收HEMi和传送HEMi唯一寄存器。
图29图示闪存HEMi mRAM的内容。
图30图示从共享RAM的数据块传输。
图31图示ECC逻辑。
图32图示数据路径DRAM的内容。
图33图示转发表。
图34图示反转表。
图35图示超级块元数据表。
图36图示IOP数据缓冲器。
图37图示CDBinfo。
图38图示IOP。
图39图示传输请求。
图40图示页面请求。
图41图示共享RAM块的内容。
图42图示启动器信息。
图43图示SLC闪存写定时。
图44图示MLC闪存写定时。
图45图示当接收到主机命令时主机端口遵循的步骤。
图46图示CDB的处理的初始阶段。
图47图示特殊情况的CDB处理。
图48图示基于CDBinfo设立IOP和传输请求的方式。
图49图示闪存HEMi设立页面请求的方式。
图50图示闪存HEMi的执行循环。
图51图示页面请求读的处理程序。
图52更详细地图示闪存读操作。
图53图示页面请求写处理程序的执行。
图54图示向页面请求分配超级页面。
图55图示完成的事务的清理。
图56图示垃圾收集处理。
图57图示巡逻功能处理。
图58图示重建处理。
具体实施方式
I.概述
A.系统概述
在当前的优选实施例中,这里所描述的系统被设计来以各种企业级大容量存储协议操作,所述企业级大容量存储协议包括SAS(“串行附接SCSI”)、FC(“光纤信道”)以及FC-AL(“光纤信道仲裁环”),所有这些都基于小型计算机系统接口(“SCSI”)与串行ATA(“SATA”)协议。本领域的技术人员对这些协议都非常熟悉,因此这里不再描述。除了特定协议被调用的情况之外,这里所公开的系统和方法不依赖于使用的特定协议,而是被设计来以所有这些协议正确地操作。此外,这些系统和方法可以适应以其它现用的或还未开发的类似协议的使用,包括为企业级应用设计的协议、以及为其它应用(诸如最终用户)设计的协议。
为了方便,这里的相关协议时常被统称为“SCSI协议”,但应该理解,它包括非SCSI协议,而不包括不相关的SCSI协议。
这里所描述的系统包括用于控制包括闪存芯片的大容量存储模块的新颖结构。在图1中以高度概述的形式示出了整个系统。与这里的其它框图一样,图1所示的元件本质上是概念性的,它们示出了这些功能块之间的互相关系的性质,而不意在表示实际的物理电路级实施。
主机101和102是传统主机设备,例如使用大容量存储资源的两个服务器或为一个这样的服务器服务的两个总线适配器。在某些协议中,每个主机可以支持多个启动器(initiator)。在基于SCSI的系统中,启动器是主机侧的用于数据传输的端点,并且可以构成单独的物理设备或处理。
板103(由虚线表示)表示一个或多个PCB。例如,其可以包括单个PCB板或以母子结构连接在一起的多个板。在当前的优选实施例中,板103被设计为使得从主机101和102的角度,板103呈现为构成传统的旋转盘大容量存储装置。这需要主机端口104和105被设计为它们在物理和逻辑上与传统大容量存储接口不可区分,其中已经为该传统大容量存储结构设计了主机101和102。由此,在当前的优选实施例中,板103的使用不需要主机101和102的任何重新设计。
在当前的优选实施例中,SSD控制器106表示附接到板103的以200MHz运行的单个集成电路器件。在替代实施例中,SSD控制器106可以由多于一个集成电路器件构成,而不偏离这里描述的发明的原理。时钟速度当然表示一个实施选择,并将可以在实施中变化。
在当前的优选实施例中,数据路径DRAM 107是64位宽的、256M字节的、具有200MHz时钟速度的DDR SDRAM,该DDR SDRAM由爱达荷州博伊西的Micron技术公司出售,产品型号为MT47H16M16BC-5E。它提供了每周期128位的数据传输的有效速度,由两个每周期64位的传输构成。为了简化的目的,这里将其描述为128位接口。该器件自动检查所有传输上的ECC。在涉及更大的总存储容量的替代实施例中,可以替代使用512M字节的、型号为Micron MT47H32M16CC-5E的DDR SDRAM。应该理解,许多不同选择可以被用于数据路径DRAM,包括使用不是DRAM的类型的存储器,并且,这里所识别的特定产品并非这里所公开的发明的必要部分。如图1中所示,数据路径DRAM 107与SSD控制器106通信,但其不具有与系统中任何其它元件的任何直接连接。
闪存模块108表示许多闪存芯片。在当前的优选实施例中,闪存模块108包括192个2G字节的NAND闪存芯片,每个芯片以40MHz运行。如以下所解释,该配置提供300G字节的用户数据容量。应该理解,所描述的系统可以以更大或更小的总容量、具有比2G字节多或少的容量的闪存芯片、以及以比当前优选的速度快或慢的速度操作的闪存芯片操作。此外,闪存模块108可以包括多个叠放在一起的“子板”。
闪存模块108与SSD控制器106通信,但其不具有与系统中任何其它元件的任何连接。
如图1中所示,因为SSD控制器106与系统中的所有其它元件通信,而所述其它元件互相都不通信,所以SSD控制器106占据了中心位置。下文将详细描述作为板103的部分示出的每个元件的设计和操作。
B.数据结构概述
SSD控制器106通过从主机接收命令并将这些命令分解为最终导致闪存模块108中的读写序列的更小的任务而操作。图2在以高级别图示了该处理。
当SSD控制器106接收到主机发起的读或写命令时,其创建被称为“CDBinfo”的数据结构(例如,CDBinfo 201),该数据结构包含命令描述符块(“CDB”)或其它相应的来自主机的命令相关的信息。在其它信息之中,CDBinfo在逻辑块地址(“LBA”)中指定了要从中读取或写入到其中的地址范围。
基于CDBinfo,SSD控制器106创建被称为“输入输出处理”(“IOP”)的数据结构(例如,IOP 202)。在大多数情况下,单个IOP控制由主机请求的整个事务。
每个IOP可以调用最多七个被称为“传输请求”的数据结构(例如传输请求203-209)。每个传输请求被设计来处理由IOP指定的LBA范围的一部分。
每个传输请求可以调用最多三个被称为“页面请求”的数据结构(例如,由传输请求206调用的页面请求210、211和212;由其它传输请求调用的页面请求未在图2中示出)。每个页面请求被设计来从或向对应于由传输请求指定的LBA范围的部分的闪存模块108的段读或写。
如图2所示,三个说明性的页面请求各自访问闪存模块108的被称为“超级页面(SuperPage)”的区域(例如,超级页面213、214和215)。如下面进一步描述的,每个超级页面包括四个闪存页面,每个闪存页面被存储在不同的闪存电路小片(Die)中。
下文将更详细地描述这些数据结构中的每个。
C.详细的系统概述
图3提供了图1所示的整个系统设计的额外细节,但,与前面一样,为了清楚,省略了大量的元素和细节。图3示出了连接到板103的主机101和102,板103包括SSD控制器106、数据路径DRAM 107以及闪存模块108。
闪存模块108被分为八个闪存组,被指定为闪存组0-7。在这些之中,图中示出了三个:闪存组0、1和7,被指定为301、302和303。在当前的优选实施例中,闪存模块108可以保持有八至十二个之间的闪存组。
SSD控制器106还包含与存储模块108中包含的闪存组的数量相同数量的闪存端口,例如闪存端口304、305和306。每个闪存端口与一个闪存组通信(例如,闪存端口0 304与闪存组0 301通信)。与闪存组相同,在当前的优选实施例中,SSD控制器106可以具有最少八个至最多十二个闪存端口,并且所示的实施例包含八个,其中示出了三个。如以下所述,每个闪存端口独立地操作,由此支持闪存组中的并行操作。
每个闪存端口包括闪存HEMi和级缓冲器(Stage Buffer)(例如,闪存端口0 304包括闪存HEMi 0 307和闪存级缓冲器0 308)。“HEMi”代表硬件执行机器。HEMi是作为专用的、特定目的的微处理器操作的逻辑块。下文将更详细地描述HEMi的设计和功能。每个闪存HEMi控制针对单个闪存组的传输操作(例如,闪存HEMi 0 307控制闪存组0 301,闪存HEMi 1 309控制闪存组1 302等)。
闪存级缓冲器(例如,闪存级缓冲器0 308)被用来缓冲数据路径DRAM107和闪存组之间的数据传输。在当前的优选实施例中,每个闪存级缓冲器是可以同时处理一次读和一次写的双端口SRAM,并且都能够保存表示四个闪存页面的16K字节数据。如下面所解释,它构成数据的“超级页面”。
如下面所描述,在当前的优选实施例中,来自每个闪存组的数据接口能够一次传送32位(一个双字),然而,数据路径DRAM 107能够一次发送或接收128位的数据(如上所述,在当前的实施例中,数据路径DRAM以64位组块为单位传送和接收数据,但在每时钟进行该操作两次,由此提供128位的有效的数据速率)。
闪存级缓冲器缓冲闪存组和数据路径DRAM之间的通信,并因此允许传输在不需要DRAM的部分上的等待状态的情况下发生。在当前的优选实施例中,在从闪存组向DRAM传送的情况中,闪存级缓冲器以双字组块为单位接受数据。一旦接收了足够的数据量(优选地,整个超级页面),闪存级缓冲器随后便在使用整个数据路径DRAM数据总线的DMA传输中向数据路径DRAM突发(burst)传输数据。由处理向和从DRAM的DMA传送的DMA逻辑控制闪存级缓冲器(见下文图10的讨论)。
如图3所示,主机101和102与主机接口310通信,应该理解,主机接口310包括主机端口104和105(未示出)。一般地,主机发出命令,提供要向大容量存储装置写入的数据,并且从大容量存储装置请求数据。如本领域的普通技术人员所理解的,主机与大容量存储通信的方式的细节是协议相关的。然而(且没有限制),典型地,主机使用包括命令和/或数据的“帧”与大容量存储装置通信。典型地,命令被包含在命令描述符块(“CDB”)中,本领域的普通技术人员很熟悉CDB。
主机接口310被设计来以对主机透明的方式响应CDB,这意味着从主机101的角度,主机接口310呈现为构成对传统大容量存储设备的接口。
控制流如下进行(下文更详细地解释所提及的逻辑块和元数据结构中的每个):在接收到请求读或写的CDB时,主机接口310产生用来处理操作的CDBinfo(例如,CDBinfo 201)。该CDBinfo接着被传递给命令解析器块(Command Parser Block)311。
在接收到CDBinfo时,命令解析器块311执行一致性(coherency)与其它类型的检查(将在下文描述),然后将CDBinfo传递给命令分布块(CommandDistribution Block)312。
命令分布块312评估CDBinfo,并创建IOP(例如,IOP 202),来执行所请求的传输。命令分布块312接着产生一个或多个传输请求(例如,传输请求203-209),每个传输请求用来执行被IOP请求的传输的部分。对于每个传输请求,命令分布块312接着确定哪个闪存组包括要被读取的数据,或者要写入的地址位置。
命令分布块312接着将传输请求传递给对应于包含相关闪存地址的闪存组的闪存端口,例如闪存端口0 304、闪存端口1 305以及闪存端口7 306。
当闪存端口从命令分布块312接收到传输请求时,用于该闪存端口的闪存HEMi将传输请求分解为页面请求(例如页面请求210、211和212),并且使用页面请求来控制相关联的闪存组中的实际的读和写操作,其中,每个页面请求最多访问超级页面的数据。
因此,图3中用于闪存组0的读或写操作的的控制流如下进行。主机101→主机接口310→命令解析器块311→命令分布块312→闪存HEMi 0 307→闪存组0 301。
数据流不同地进行。在读的情况下,从闪存组向包含在所连接的闪存端口中的闪存级缓冲器返回数据。例如,闪存级缓冲器0 308连接到闪存组0301,闪存级缓冲器1 314连接到闪存组1 302,以及闪存级缓冲器7 315连接到闪存组7 303。
通过闪存级缓冲器,从闪存组获得的数据被通过总线316写入数据路径DRAM 107。从数据路径DRAM 107,数据经过主机接口310到达主机101。写操作在相反的方向上进行:主机101→主机接口310→数据路径DRAM 107→闪存级缓冲器0 308→闪存组0 301。
通过图3中连接各种元件的线图示控制流和数据流沿着不同的路径的事实。因此,将闪存HEMi与闪存组连接的箭头象征了这些元件之间的控制流,而将闪存组与级缓冲器连接的箭头指示了数据流。
图3还示出了RAM控制器317以及共享RAM块318,下文将更详细地描述它们中的每一个。一般地,共享RAM块318包括被HEMi使用的存储器,RAM控制器317包含控制数据路径DRAM 107和共享RAM块318的逻辑,并对这两个资源任意访问。
D.读和写概述
图4图示了用于由SSD控制器106处理的读操作的高级别数据流。
在步骤401中,主机(例如,主机101)发出读命令,包括数据的LBA。
在步骤402中,SSD控制器106在闪存模块108中识别所请求的LBA的位置,并向闪存模块发出一个或多个读命令。
在步骤403中,闪存模块108执行读操作,并将数据返回给SSD控制器106。
在步骤404中,所返回的数据通过SSD控制器106,并被存储在数据路径DRAM 107中。
在步骤405中,进行检查来确定是否已获得主机101所请求的所有数据。如果没有(步骤405的“否”结果),则控制返回到步骤403,以便可以从闪存模块获得额外的数据,并将其存储在数据路径DRAM中。
一旦已经从闪存模块获得主机所请求的所有数据,并且这些数据都已经被存储在数据路径DRAM中(步骤405的“是”结果),则在步骤406中,数据被从数据路径DRAM 107读出到SSD控制器106中。
在步骤407中,从SSD控制器106向主机101传送数据,由主机101请求的读操作结束。
应该理解,图4使用高级别概念性的步骤描述了读操作,下文将解释它的细节。
图5使用类似的高级别概念性的步骤来图示写操作,其中,主机101寻求在存储器中存储数据。
在步骤501中,主机101发出带有LBA的写命令,并且向SSD控制器106提供数据。
在步骤502中,SSD控制器106在数据路径DRAM 107中存储要被写入的数据。
在步骤503中,SSD控制器106在闪存模块108中识别LBA的位置。
在步骤504中,SSD控制器106向闪存模块108发出足够读取包含LBA的超级页面的读命令。该读命令不将数据存储到DRAM中,因此从图4的步骤403跳过步骤404向步骤405进行,并且在这两个步骤之间循环直到接收到所有数据。
在步骤505中,来自数据路径DRAM 107的数据被传输到控制器,并与从闪存模块读取的数据集成。由于该集成,控制器现在保持一超级页面,在该超级页面中,新数据覆写了在所述LBA处存储的旧数据,但该超级页面中的所有其它LBA不变。
在步骤506中,SSD控制器106向闪存模块108发出写命令。
在步骤507中,闪存模块108执行写操作。
在步骤508中,进行检查,来确定是否已将所有信息写入闪存模块108中。
如果需要额外的写操作(来自步骤508的“否”结果),则控制返回到步骤507。
如果所有数据都已被写入闪存模块108(来自步骤508的“是”),则在步骤509中,SSD控制器106为所写入的LBA更新位置信息。如下文将详细解释的,由于闪存的性质,写操作并不物理地覆写现有的超级页面,而是将更新的超级页面写入闪存模块108的新地址,从而需要对与存储在该超级页面中的LBA关联的地址转换信息的更新。
然后,写操作完成。
II.闪存结构
A.物理存储器结构
图6图示了一个闪存组(例如,闪存组0 301)的组织、以及其与所关联的闪存端口(例如,闪存端口0 304)的关系。应该理解,该组织的细节在不同的实施例中可以不同。
闪存组301包括八个闪存芯片,指定为601-608。每个闪存芯片包括两个电路小片;例如,闪存芯片601包含电路小片609和610。
在一个实施例中,每个电路小片(例如,电路小片609)具有约1.11G字节的原始容量(raw capacity),包括8224个块,每个块包括64个页面,每个页面包括2212个字节。当去除了系统和备用(spare)存储空间后,留给用户约每个电路小片1G字节的数据容量,或每个NAND闪存芯片2G字节的容量。在包括十二个闪存组以及每个闪存组八个子组(bank)的系统中,提供了约384G字节的原始用户存储空间,但对于用户数据总共可用的空间约为300G字节,这是因为某些空间被用于备用和系统功能,它们不落入用户可用的LBA地址空间内。系统空间存储各种类型的系统元数据,包括SCSI模式页面,系统空间还含有空闲空间。
各自包含两个1G字节的电路小片的2G字节的NAND闪存芯片的使用,是可用闪存技术的现有技术状态的反映。所描述的系统以其它闪存大小和配置可以同样好地操作,包括在一个闪存芯片中包含四个电路小片,或每芯片一个电路小片。因为下一代的NAND闪存芯片将每芯片合并四个电路小片,所以,很可能闪存组301将使用这种芯片。这里所描述的原理可以简单地应用于四电路小片的设计。例如,如果四电路小片芯片中的每个电路小片具有自己的CE和RB引脚,但所有四个电路小片共享公共地址/命令/数据引脚,则每个电路小片可以被合并到单独的子组中。另一方面,如果每个四电路小片芯片具有两个CE和RB引脚,其中两个电路小片共享每个引脚,则从SSD控制器106的角度,共享公共CS和RB引脚的两个电路小片将表现得与上述的单个电路小片(例如,电路小片609)不可分辨。
当前的优选实施例采用1G字节的NAND闪存芯片也同样好地操作,每个所述NAND闪存芯片包含2个半G字节的电路小片。在该配置中,每个电路小片仅包含4112个块。除容量外,该配置与上述配置相同地操作。
注意,闪存芯片自身是传统设计,并且,图6中的图示并不意在传达这些芯片的内部设计的细节,而是考虑对芯片的组织以及电路小片与系统其余部分接口方式的理解。
闪存组301被分为四个子组(611、612、613以及614),每个子组包括四个电路小片。因此,子组611包括来自闪存601的电路小片609、来自闪存602的电路小片615、来自闪存603的电路小片616以及来自闪存604的电路小片617。子组612包括来自闪存601的电路小片610、来自闪存602的电路小片618、来自闪存603的电路小片619以及来自闪存604的电路小片620。子组613和614在其它闪存和电路小片中被类似地组织。
图6示出了四个子组。在当前的优选实施例中,取决于用户所期望的容量,每个闪存组包括四至八个子组。
图7提供关于闪存模块108、SSD控制器106与数据路径DRAM 107之间的互联的额外细节。虽然图7示出了闪存组0 301与闪存端口0 304,但相同的互联存在于所有闪存组与它们伴随的闪存端口和数据路径DRAM 107之间。
如图7所示,闪存组0 301通过两个总线(闪存总线701与CS/RB总线702)连接到闪存端口0 304。
CS/RB总线702包括将闪存HEMi 307连接到每个闪存组301的子组的单独的线。在所示的具有四个子组的实施例中,CS/RB总线702包括四条线:线703,将闪存HEMi 307与子组614连接;线704,将闪存HEMi 307与子组613连接;线705,将闪存HEMi 307与子组612连接;以及线706,将闪存HEMi 307与子组611连接。在包括更多数量的子组(例如,八个)的实施例中,CS/RB总线702将包括相应的更多数量的信号。应该理解,来自闪存HEMi307的信号通过SSD控制器106上的引脚传播。图7不意在示出传送路径的物理细节,而是图示数据和控制信号流。
CS/RB总线702的线携带从闪存组301向闪存HEMi 307的准备好-忙碌(“RB”)信号、以及从闪存HEMi 307向闪存组301的芯片选择(“CS”)信号。
在任何给定时间,CS/RB总线702上携带的CS信号中的仅一个是有效的。连接到当前有效的CS信号上的子组连接到闪存总线701,并且所有其它子组从该总线断开(再次,这是逻辑或者非物理概念;根据该实施,“连接的”子组可以与闪存总线通信,而所有其它子组忽略闪存总线,即使闪存总线和所有子组之间存在物理连接也是如此)。
在闪存总线701上将来自闪存HEMi 307的地址和控制信息传送到每个子组。其包括控制信号708(下文结合图8描述)与地址/命令信号709(下文结合图9描述)。类似地,总线707将闪存级缓冲器308连接到闪存总线701。在总线707上,从级缓冲器308沿着闪存总线701向子组传送数据。在相反方向从子组向级缓冲器308传送数据。
如图7进一步所示,数据路径DRAM 107连接到级缓冲器308。因此,数据从数据路径DRAM 107向级缓冲器308传递,然后被沿着总线701向具有当前有效的CS信号的子组发送。来自闪存组301的数据被沿着相反路径传送到数据路径DRAM 107。
图8示出单个闪存芯片(例如,包括电路小片609和610的闪存芯片601)的引脚输出部分。在当前的优选实施例中,闪存芯片使用标准的NAND闪存接口,典型地在相关部分(in relevant part)包括8位的地址/数据(801),4位的控制(地址锁存使能(“ALE”)信号802、命令锁存使能(“CLE”)信号803、写使能(“WE”)信号804以及读使能(“RE”)信号805,它们被统称为控制信号708),每电路小片一个芯片使能引脚(其连接到来自控制器的CS信号,并且有时将可以互换地使用标示“芯片使能”和“芯片选择”),以及每电路小片一个准备好/忙碌线。如所示的,A/D信号801与ALE、CLE、WE和RE信号全连接到闪存总线701,然而它们不是仅有的连接到该总线的信号。
如图8所示,ALE、CLE、WE、RE与两个芯片使能信号是向闪存601的输入。A/D总线801由八个双向信号构成。所述两个RB信号是输出。
除了两个CE和两个RB信号之外,图8中所示的所有信号都被所述两个电路小片共享。因此,电路小片609与610共享相同的八个A/D引脚801。从图6的讨论应该理解,这些电路小片每个都在单独的子组中。因此原因,引脚的共享不产生冲突,因为这些信号绝不可能同时对于多个子组有效。
作为闪存所典型的,每个电路小片具有所关联的闪存页面缓冲器,该缓冲器可以保持正被写入相应电路小片或从相应电路小片读出的一页面数据。图8将它们示出为页面缓冲器806和807。
图9图示了闪存HEMi(例如,闪存HEMi 307)专用于闪存端口(例如,闪存端口0 304)的信号输出的部分。应该理解,闪存HEMi 307还具有额外的专用于其它功能的输入和输出。如上所解释,通过SSD控制器106的引脚,来路由将闪存HEMi 307与闪存组连接的信号。这些引脚与处理该路由的逻辑都未被示出。如其它示出信号路由的图中确切的那样,图9意在作为概念性阐述,而不意在示出实际物理布局的细节。
闪存HEMi 307的接口的该部分由专用于以下功能的信号构成:
1.控制信号708,其由四条控制线构成:ALE信号802、CLE信号803、WE信号804以及RE信号805。这些信号是从闪存HEMi 307的输出。
2.CS/RB总线702,其由CS/RB线703-706构成。如以上所解释,每个闪存HEMi可以每连接的CS/RB线控制一个闪存子组。因此,在图9所示的实施例中,闪存HEMi 307控制四个闪存子组(例如,图6中所示的子组611、612、613、614)。在每闪存组包括八个子组的系统中,每个闪存HEMi将具有八个专用于该目的的信号(注意,支持额外四个信号所必需的逻辑即使在这些信号实际上不被使用的情况下也存在)。
CS/RB总线702从HEMi 307向闪存子组传送CS信号,并且从闪存子组向HEMi 307传送RB信号。因为信号以这种方式被复用,所以,每个这样的线一次仅可以传送一种类型的信号。CS/RB信号是“一个热(one hot)”信号,即,在任何给定时间点,这些信号中的一个且仅有一个可以是有效的。
为CS和RB目的两者使用相同的信号在SSD控制器106上节约了引脚,并因此降低了SSD控制器的成本与复杂度。然而,这限制了可以由闪存HEMi307控制的子组的数量,这是因为每个子组需要一个RB信号以及因此的一个引脚。因为在当前实施例中,SSD控制器106对于每个闪存端口包括八个CS/RB引脚,所以在该实施例中,每个闪存HEMi最多可以控制八个子组。
3.构成地址/命令信号709的31个信号。连接到闪存总线701的该总线以与闪存芯片相同的40MHz的速度运行,并且携带从闪存HEMi 0 307向闪存组0 301的地址和命令。地址/命令信号709可以被认为作为四个单独的八位总线(包括线0-7、8-15、16-23以及24-31),所述八位总线中的每个向闪存子组中的单独电路小片路由八位有效载荷。因此,来自地址/命令总线709的八条线连接到A/D信号801,如图8所示。
根据前文应该清楚,SSD控制器106的44个引脚被专用于每个闪存端口(记住,每个闪存端口可以支持最多八个子组,并因此需要八个CS/RB引脚,虽然图9中仅示出了四个这样的信号)。因为SSD控制器106可以支持最多12个闪存端口,所以SSD控制器106的528个引脚被专用于闪存接口,然而如果使用少于12个的闪存端口,则这些引脚中的某些可以是无连接的。注意,如果需要单独的CS和RB引脚,则对于闪存接口还将需要额外的96个引脚(每个子组1个引脚×8个子组×12个闪存端口)。因此,将CS和RB信号组合到单个引脚上在所需引脚的数目上提供了显著的节约。
虽然图9所示的实施例是当前优选的,但各种其它实施例也是可能的。在不同的实施例中,当前专用于特定闪存组的八个CS/RB引脚连接到位于闪存组中的复用器或其它类似逻辑器件。该复用器随之具有一组连接到子组中的所有闪存电路小片的CE输入的输出信号,其中每个信号引起对特定子组的CE输入的选择。因为该八个SSD控制器CS/RB引脚在理论上能够传送256个单独状态,所以,可以通过设计该复用器或其它逻辑、以便为所述256个可能的输入状态中的每个产生沿着不同输出线的信号,使用这些引脚在256个单独子组之中选择。然而,因为在当前实施例中,所有子组共享同一A/D总线,所以加入这么大数量的子组将没有或几乎没有益处。替代地,在更期望的实施例中,这种复用器或其它类似逻辑可以被用于加入中等数量的子组(例如八个),或被用于降低每子组的CS/RB引脚的数量(例如,从八个到四个)。
注意,在该替代实施例中,因为CS/RB引脚的数目比子组的数目少,所以CS/RB引脚不可以再为每个子组处理RB信号。因此,在该实施例中,SSD控制器CS/RB引脚不再处理RB输入。然而,因为标准闪存芯片支持RB状态的仅软件状态检查,所以每个闪存HEMi可以使用A/D总线检查子组的RB状态。
因此,该替代实施例允许SSD控制器106将更少的引脚专用于闪存接口或利用相同数量的引脚支持更大数量的子组,然而,代价为某个附加的逻辑复杂度。
图10图示了单个子组中的电路小片(例如,子组611中的电路小片609、615、616和617)连接在一起、并连接到所关联的闪存端口(例如,闪存端口0304,包含闪存HEMi 307和级缓冲器308)的方式。
如图6所示,电路小片609是闪存芯片601中的两个电路小片之一,电路小片615是闪存芯片602中的两个电路小片之一,电路小片616是闪存芯片603中的两个电路小片之一,以及电路小片617是闪存芯片604中的两个电路小片之一。为了图示的简单,图10仅示出了每个闪存芯片中的两个电路小片之一(如上所述,存储模块108可以很好地合并具有四个(或更多)电路小片的闪存芯片,而这里所公开的设计的原理将保持相同)。
如所示,线706构成闪存HEMi 307与子组611之间的CS/RB信号接口。该线携带从闪存HEMi 307向子组611的CS信号,以及从子组611向闪存HEMi 307的RB信号。图10通过显示在闪存HEMi 307向线706上的点1001之间的双向上前进的箭头图示了这一点。从点1001,信号路径分路,并且携带CS信号作为向电路小片的输入(由指向每个电路小片的、带有标记“CS”的箭头示出),以及携带RB信号作为从每个电路小片的输出(由从每个电路小片指出的、带有标记“RB”的箭头示出)。应该理解,点1001本质上是象征性的,并且,不论是它还是该图的其余部分都不意在作为物理实施的直接图示。
如所示,来自子组中的每个电路小片的RB输出信号一起被进行逻辑“或”(或其它类似地组合),从而,如果子组中的四个电路小片中的任何一个输出“繁忙”,则从子组611沿着线706向HEMi 307发送繁忙信号。线706还携带从闪存HEMi 307向子组中的每个电路小片的CS信号。当专用于子组的CS信号被通过闪存HEMi 307设置时,该信号被同时发送到子组中的每个电路小片的CE引脚,由此,同时选择每个这样的电路小片。
图10还示出地址/命令总线709,其表示闪存芯片601-604的A/D引脚与HEMi 307的地址/命令信号之间的连接。如所示,32位的总线709携带从闪存HEMi 307向总线切换器1002的信号。总线切换器1002表示如所述地组合、分路和路由信号的逻辑,并且不一定构成单个物理切换器。
总线切换器1002将来自总线709的信号分路为子总线。使用8位的总线801将信号0-7传送到闪存芯片601的A/D引脚(还如图8所示),使用8位的总线1003将信号8-15传送到闪存芯片602的A/D引脚,使用8位的总线1004将信号16-23传送到闪存芯片603的A/D引脚,以及使用8位的总线1005将信号24-31传送到闪存芯片604的A/D引脚。注意,A/D引脚被闪存芯片中的所述两个电路小片共享,从而将可以由合适的电路小片以对闪存芯片的内部设计特定的方式接收传送到闪存芯片引脚的信号。
图10还示出了闪存HEMi 307的控制信号708与每个电路小片之间的连接。如上所示,这些控制信号包括ALE、CLE、RE与WE,并且它们被从闪存HEMi 307传送到闪存电路小片。控制信号708被从闪存HEMi 307发送到总线切换器1002。从总线切换器1002,控制信号(在每个情况中都被标记为708)的相同集合被传送到每个闪存芯片。与A/D引脚一样,ALE、CLE、RE与WE引脚被每个闪存芯片中的两个电路小片共享。
图10还示出闪存缓冲器308,其通过32位的总线707连接到总线切换器1002。与总线709不同,总线707是双向的,并因此在双向上传送数据。
在级缓冲器308与电路小片之间的传输在级缓冲器DMA控制器1006的控制下发生。
注意,闪存级缓冲器308还连接到闪存芯片的RE和WE输入。这些连接被用于控制DMA操作,为了清楚,图中未示出这些连接。
总线切换器1002将来自总线707的信号分路为八位信号的四个集合,并且使用8位总线801、1003、1004和1005将这些信号传送到电路小片609、615、616和617。类似地,总线切换器1002在8为总线801、1003、1004和1005上从电路小片609、615、616和617接收数据,然后在总线707上将整个32位值传送到级缓冲器308。
因此,切换器1002在相同的8位总线上复用来自闪存HEMi 307的信号,以及去向和来自级缓冲器308的信号。切换器1002根据读或写周期的特定阶段,利用来自在所述周期的一个阶段中连接到电路小片的闪存HEMi 307的地址信息,确定哪个集合的信号通过到8位总线,然而,去向或来自级缓冲器308的数据在所述周期的不同阶段连接到该8位总线(再次,如上所述,切换器1002本质上是概念性的,并且不一定构成单个专用切换器。此外,也可以在其它逻辑块中发现所描述的与切换器1002联系的功能的方面)。
图10仅示出单个闪存子组611。在实际的实施例中,总线切换器1002可以与闪存组中的每个闪存子组接口,并且每个接口都可以复制除信号706外的所有从总线切换器1002向子组611输出的信号(如图10中所示),如上文所解释,信号706专用于子组611。还如上文所解释,闪存切换器1002将总线707、708和709连接到每个闪存子组,但仅响应的子组是与来自闪存HEMi 307的当前有效CS信号关联的子组。
注意,闪存总线701包括总线708、801、1003、1004和1005。
图11更详细地示出了与线706相关的CS和RB逻辑。如所示,SSD控制器CS/RB引脚1101连接到与闪存电路小片609和615关联的RB和CE引脚上。如上联系图6所述,电路小片609和615是子组611的四个电路小片中的两个。为了图示的目的,未示出子组中的其它两个电路小片,但其以与电路小片609和615相同的方式连接。
SSD控制器106将CS/RB引脚1101驱动到高来选择子组611。该信号被反转器1102反转,并被子组中的电路小片的CE引脚接收为低。这些引脚是以低为有效的。
当SSD控制器106将相同闪存组中的另一CS引脚驱动为高(由此选择该闪存组中的另一子组)时,CS/RB引脚1101被SSD控制器106驱动为低。
当闪存HEMi 307想要读子组611的准备好-繁忙状态时,SSD控制器106浮接CS/RB引脚1101。当CS/RB引脚被SSD控制器浮接时,如果闪存电路小片RB引脚的任何一个正在驱动指示该子组繁忙的低信号,则CS/RB引脚将接收低输入,这是因为任何电路小片RB引脚上的低输出将优先于上拉1103。另一方面,如果子组在准备好的状态中,则闪存电路小片允许PB引脚浮接。因为上拉1103连接到RB引脚,所以,当所有这些引脚都浮接时,并且当CS/RB引脚1101被浮接时,该CS/RB引脚接收到高输入信号,这指示该子组已准备好。
因此,该电路以“或”结构将子组的R/B引脚连接在一起,这是因为,为了CS/RB引脚1101接收到准备好的信号,所有引脚都必须在准备好的状态(浮接),从而该电路有效地将这些引脚的繁忙状态一起进行“或”操作。反转器1102的使用允许SSD控制器106驱动CS信号为高来选择子组,即使该子组的CE引脚是以低为有效的。因为必须将CS信号驱动为高、以便优先于传入的RB信号,所以,这是必要的。以该方式,向SSD控制器106的RB输入可以是以高为有效的,但是,因为高CS输出将优先于由上拉1103生成的高RB输入,所以CS/RB引脚1101上的高输出仍然可以优先于其。
B.逻辑存储结构
诸如101和102的主机典型地以逻辑块地址(或“LBA”)组织存储器。当主机向大容量存储装置写入数据时,虽然主机通信的细节根据主机所使用的特定协议而变化,但主机典型地传送包含写命令和LBA的CDB。当主机随后希望读数据时,它发出使用相同LBA的读命令。
典型地,主机的存储结构将数据分为数百万个LBA,每个LBA被从LBA0开始顺序编号。如本领域的技术人员所熟悉的,主机将经常与大量大容量存储控制器通信,并将主机整个LBA范围的子集分配给每个控制器。在当前的实施例中,SSD控制器106响应于从LBA 0开始、以该控制器可寻址的最高LBA结束的LBA范围。将LBA序列映射到更大的主机LBA地址空间上是主机或主机总线适配器的责任,并且对SSD控制器106是透明的。
图12图示了当前优选实施例中、在闪存模块108中使用的存储器分级结构。
每个闪存组由许多子组(例如,子组611)构成。每个子组包括许多块,标记为块0-块n(例如,块0 1201)。如闪存系统中所普遍的,块表示能够以单次操作擦除的闪存段。
子组中所存储的块的确切数量与实施相关。例如,在提供300G字节可用用户数据的系统中,根据各种因素,包括缺陷管理与留为空闲空间的存储量,每个子组的块的数量一般将在7000-9000的范围中。
如图12中所示,每个块包括64个超级页面,标记为超级页面0-63。如以上所解释的,每个超级页面包括四个闪存页面(例如,超级页面30包括页面30 1202、页面30 1203、页面30 1204以及页面30 1205)。页面1202、1203、1204与1205被存储在相同闪存子组中的四个不同闪存电路小片上的相同地址位置。因此,超级页面30横跨四个单独的电路小片。如闪存系统中作为标准的,每个页面表示可以从其读出或写入到其的闪存的最小增量。
如图12所示,每个页面存储十五个被称为P区段(PSector)的存储段,标记为P区段0-14。
图12还示出额外的存储结构:S页面(SPage)区段01206。如所示,S页面区段0包括四个P区段0,每个页面上一个。
S页面区段0一般对应于经典的大容量存储区段,但物理上横跨四个P区段,其中每个被存储在相同子组上不同电路小片的相同地址中。
当前的优选实施例还使用图12中未示出的额外存储结构:超级块(SuperBlock),其由闪存组中的每个子组上的相同块构成(例如,块0 1201是闪存组的超级块0的部分)。
在所描述的实施例中,与特定LBA关联的数据和元数据被存储在单个S页面区段中(例如,S页面区段1206),并且在这里被称为区段内容,由区段数据和区段元数据构成。
图13图示超级页面区段的组织,例如,S页面区段1206。整个S页面区段在闪存中包括556个字节。每个S页面区段被分为四个P区段,每个包括139个字节,每个在不同的闪存电路小片上。
在所示的例子中,S页面区段1206的528个字节被分配给数据,如区段数据字段1301所示。不同的主机协议将不同数量的数据与单个地址关联,从而,根据所使用的协议,区段数据字段1301可以小至512字节。
如图13中所示,在当前的优选实施例中,每个S页面区段还包括8字节的端到端(“E2E”)信息(字段1302)和20字节的ECC信息(字段1303)。这些字段共同组成区段元数据。
通过SCSI协议的较新的版本指定E2E信息。该信息可以被启动器用来追踪数据和确保由大容量存储设备返回的数据与所请求的数据匹配。ECC信息被用于错误校正的目的。
E2E字段1302进一步被分为参考标签(RefTag)字段1304、应用标签(AppTag)字段1305以及CRC字段1306。
参考标签字段1304包括四个字节并包含可以被启动器与区段数据关联的地址。SCSI协议不需要参考标签支持(并且,参考标签支持不是该协议较早版本的一部分),因此启动器可以使用也可以不使用参考标签。如果启动器确实使用参考标签,则与参考标签字段1304关联的值被从CDB中取得,该CDB触发了区段内容的原始写入。典型地,该值与LBA相同,然而,启动器可以分配不同的参考标签。启动器可以选择使为在相同写入中的每个后续区段的参考标签值递增,或者为与单个写入关联的所有区段分配单个参考标签值。如果选择递增选项,则SSD控制器106基于初始参考标签值与所接收的区段的数量来执行该操作。
如果启动器不支持参考标签的使用,则SSD控制器106在参考标签字段1304中填充LBA地址。不论启动器是否请求参考标签的使用,该字段都被SSD控制器106用于内部错误检查的目的。
存储在参考标签字段1304中的值应该匹配任何引起后续的向分配给该S页面区段的任何LBA读或写的CDB的参考标签值(如果启动器未分配参考标签,则参考标签值应该匹配基于CDB的LBA)。如果两个值不匹配,则其指示某种类型的错误,该错误可以源自所接收的参考标签中的错误、参考标签字段1304中的数据破坏、或者由SSD控制器106用来选择S页面区段1206作为用于读或写的合适的目标的地址转换表中的问题。如果检测到,则这样的情形导致向主机发出合适的SCSI感测码(sense code),其指示事务失败(或其它类似的通信,取决于所使用的协议)。
应用标签字段1305包括两个字节,并被用于启动器指定的、与创建所关联的区段数据的特定应用相关的信息。SCSI协议支持应用标签信息,但并不需要它。如果启动器未提供该信息,则用所选择的缺省值填充应用标签字段1305,以便该缺省值将不重叠任何由确实支持使用应用标签的启动器分配的有效应用标签值。
如与参考标签值一样,可以相对由启动器提供的作为部分读命令的应用标签来检查关于从闪存接收的数据的应用标签信息,其中失配指示错误。
CRC字段1306包括两个字节,并包含循环冗余校验(“CRC”)数据,CRC数据被用于检查存储在S页面区段1206中的数据和元数据的完整性。如与参考标签和应用标签信息一样,可以相对从启动器接收的值检查CRC标签,以确定该数据与元数据是否正确。
SCSI协议允许启动器请求对任何或所有三个E2E的值的检查。
ECC字段1303包含错误校正码(“ECC”)信息,ECC信息可以被用于校正LBA数据和区段元数据中的错误。下面联系图31描述在优选实施例中使用的ECC检查。
返回图12,在当前的优选实施例中,每个页面(例如,页面1202)包括2212个字节的闪存空间,并包括15个P区段(每个情况下都被标记为P区段0-14)以及元数据(未示出)。
在当前的优选实施例中,构成S页面区段的四个P区段中的每个都存储在所述S页面区段中存储的区段内容的四分之一。以字节交错为基础在P区段之间分配数据。因此,区段内容的第一个双字的第一个字节被写入页面1202的P区段0的第一个字节,第一个双字的第二个字节被写入页面1203的P区段0的第一个字节,第一个双字的第三个字节被写入页面1204的P区段0的第一个字节,第一个双字的第四个字节被写入页面1205的P区段0的第一个字节,第二个双字的第一个字节被写入页面1202的P区段0的第二个字节,等等。
根据该解释应该理解,存储在S页面区段0中的区段内容在四个P区段0中展开。因此,所述四个页面中的每个存储区段内容的四分之一,或139个字节(556/4)。
图14以额外的细节图示了闪存页面1202,示出了图12中未示出的元素。在典型的闪存结构中,闪存页面包括2048个字节的数据和/或元数据、以及额外的用于其它目的的64个“备用”字节,加起来一共2212个字节。在当前的优选实施例中,另一方面,虽然每个页面包括2212个字节,但这些字节中的2085个被用于区段内容(15×139),而额外的27个字节存储与超级页面关联的元数据。图14示出了包括2085个字节的P区段0-14,以及包括每闪存页面27个字节的超级页面元数据1401。如与P区段一样,超级页面元数据横跨构成超级页面的所有四个闪存页面展开,从而超级页面元数据字段1401存储与该超级页面关联的元数据的四分之一。
超级页面元数据1401包括S页面索引(index)1402与时间戳1403。S页面索引1402将索引存储到被称为“转发表(Forward Table)”的表,该表包含用于LBA的物理位置信息。下文联系图33描述转发表。
时间戳1403包含表示超级页面被写入的时间的时间戳。
S页面索引和时间戳被冗余地写入构成超级页面的四个闪存页面的每个中。因为该元数据不被保护其它信息的ECC机制保护,所以该冗余是必需的。
当写入超级页面时,由闪存HEMi填入超级页面元数据1401。闪存HEMi从发起该写入的页面请求中获取S页面索引,并且从内部时钟获取时间戳信息。超级页面元数据被用于在不可预见的掉电(power loss)之后重构开放的超级块。下文联系图58描述掉电重构。
图15图示了在子组的块0和块1之间组织区段内容的方式。应该理解,对于存储在子组中的所有剩余块,遵循相同的组织。
每个S页面区段存储与单个LBA关联的区段内容,并且,超级页面的S页面区段存储与十五个连续的LBA关联的区段内容。然而,如下文所解释,与一个超级页面关联的十五个连续LBA可以和与下一个超级页面关联的十五个连续LBA没有关系。
通过由字母识别LBA来图示该组织。因此,LBA(A)指示特定地址,并且LBA(A+14)指示比LBA(A)高14个LBA的地址(例如,如果LBA(A)是LBA(0),则LBA(A+14)将是LBA(14))。然而,在LBA(A)和LBA(B)之间没有关系,例如,除了每个将可以被15整除。因此,LBA(A)可以表示LBA(9000),而LBA(B)可以表示LBA(60)。
注意,存储在每个超级页面中的LBA将在操作期间变化。例如,在一个点上,子组0的超级页面1的S页面区段0可以存储与LBA(0)(B=0)关联的区段内容,而在另一点上,其可以存储与LBA(900)(B=900)关联的区段内容。下文描述LBA与超级页面和子组的关联在使用中变化的方式。
图16图示在初始化期间主机地址空间被映射到闪存模块108上的方式。如以上所述,主机典型地使用LBA发出读和写,LBA将主机与物理存储器组织的细节隔离。
在当前的优选实施例中,每个闪存组具有相同的大小,并且每个存储对应于相同数量的LBA(或其它主机寻址方案)的数据。在当前的实施例中,因为如下面所描述,45个LBA是单个传输请求所能处理的最大数量,所以在闪存组之间以45的倍数的集合分布LBA。当前的优选实施例使用90个LBA的分条(stripe)大小,从而LBA 0-89被分配给闪存组0,90-179被分配给闪存组1,LBA 180-269被分配给闪存组2等,直到到达最后的闪存组为止,在该点上,LBA分配循环回到闪存组0。各种其它分条算法是可能的。在可选实施例中,可以允许用户指定分条大小,然而,优选以传输请求能处理的LBA的数量的倍数进行其。
图16示出闪存空间的简化版本。该简化版本由三个闪存组(标记为0-2)构成。在该简化示例中,一个块包括两个超级页面,标记为SP0和SP1。因此,闪存组0的子组0的块0包括写入标记为1601的存取位置(slot)的数据。可以看出,在该简化示例中,每个子组仅包含单个块。
如上所述,超级块包括每个子组上相同的块。因此,在图16所示的简化结构中,闪存组0的超级块0包括来自每个子组的块0,在图16中标记为1602(在该简化示例中,即整个闪存组)。
如下所述,每个超级块的块0的超级页面0包含被称为超级块元数据表(SuperBlock Metadata Table)的数据结构。在每个闪存组的子组0的SP0中将其示为“SMT”。
表中所有其它方格表示存储在特定超级页面中的LBA范围。因此,闪存组0的子组1的超级页面0包含LBA 0-14,闪存组0的子组1的超级页面1包含LBA 300-314,等。
可以看出,LBA被分配在各自有90个LBA的“分条”中。第一个这样的分条(LBA 0-89)被分配给闪存组0的子组1-6上的超级页面0。下一个90个LBA(90-179)的分条被分配给闪存组1的子组1-6上的超级页面0。下一个分条(LBA 180-269)被分配给闪存组2的子组1-6上的超级页面0。
在该点,因为已经到达最后一个的闪存组(在该简化示例中),所以下一分条被写入闪存组0,在前一分条停止的地方开始。因此,LBA 270-284被写入闪存组0的子组7的超级页面0。因为在闪存组0中不再有超级页面0可用,所以分条的分配以子组0的超级页面1继续,并继续到子组4的超级页面1。
除了当到达超级块的末端时的边界情况外,从该点的分配是直接易懂的。例如,新分条从闪存组0的子组5的超级页面1开始。因为在超级块中仅剩三个超级页面,所以该分条在闪存组1的子组5的超级页面1上继续。在该方法中,尽管超级块不保持相同数量的分条,但LBA仍被分配给每个超级块中的每一个超级页面。
分配LBA的该方法倾向于最大化闪存的并行性。因为每个闪存组独立地操作,所以,横跨闪存组来对LBA进行分条具有优势,因为其最大化单个事务将寻址在多于一个闪存组中保持的数据的可能性,由此允许与事务相关的多个闪存读或写同时发生。因为传输请求仅可以在单个闪存组上寻址LBA,所以,以45(可以被传输请求寻址的LBA的最大数量)的增量指定分条大小,从而最小化事务所需要的传输请求的数量是合理的。在当前的实施例中,由两个这样的45-LBA增量构成分条,这是因为其表示六个超级页面。如下所述,闪存组可以处理五个单独子组上的五个同时的写操作。由于大的传输可以在每个闪存端口执行五个同时的写,并且可以并行地在多个闪存端口上执行,所以,使用90个LBA的分条大小倾向于最大化闪存接口的并行使用。因此,该组织贡献了SSD控制器106使用高度并行性快速处理主机发起的大的读或写的能力。
因此,如图16中所示的涉及LBA 0-190的假想传输可以使用一个IOP和五个传输请求发生。第一个传输请求可以处理LBA 0-44,第二个传输请求可以处理LBA 45-89,第三个传输请求可以处理LBA 90-134,第四个传输请求可以处理LBA 135-179,第五个传输请求可以处理LBA 180-190。注意,该传输涉及三个不同的闪存组,由此允许高度的并行性。此外,因为(如下文所解释)目标为不同子组的页面请求可以并行地甚至在相同的闪存组上操作,所以,在该示例中,因为每个页面请求目标为不同的子组,所以,由每个传输请求发出的页面请求也可以并行地操作。
LBA向闪存组的分配是永久性的。然而,向闪存组内的子组的分配可随着时间变化。如下文所解释,当对某个LBA接收到主机写、因此需要包含该LBA的超级页面失效并且将新数据(以及来自该超级页面的任何未被覆写的旧数据)写入新超级页面时,闪存HEMi尝试使用来自与旧超级页面相同的子组的新超级页面。然而,有时这不可能,并且,闪存HEMi将把LBA移动到另一子组上的超级页面。这将倾向于影响闪存系统的性能,因为,如果足够的这种转变发生,则数据的分条可能被集中在单个或相对小数量的子组上,因此,降低并行操作的机会。然而,实际中,从子组向子组的转换倾向于以无规则(patternless)的方式发生,从而,即使在重大操作之后,在给定分条中的LBA组也倾向于横跨这些子组,从而可以保持高度的并行性。
III.硬件细节
A.主机接口
图17比图3中所示更详细地示出了主机接口310。主机接口310包括物理接口1701以及两个单独的主机端口,被标记为主机端口0 104和主机端口1 105。下文进一步描述物理接口1701,但为了当前目的,理解其在主机101和102以及主机端口104和105之间路由信号就足够了。每个主机端口能够与单独主机对接。
一般地,主机接口310在接收侧执行以下功能:
接收帧
将帧解构为要素特征
将命令信息传递到下一级
将数据传递到数据路径DRAM
一般地,主机接口310在传送侧执行以下功能:
从数据路径DRAM 107接收数据,并组织用于向主机传送的数据
产生用于向主机传送的帧
向主机传送包括数据帧的帧
每个主机端口包括接收HEMi(1702和1703)、传送HEMi(1704、1705)、接收级缓冲器(1706、1707)以及传送级缓冲器(1708、1709)。
如所示,每个接收HEMi从一个主机通过物理接口1701接收控制信息,并向SSD控制器106的其它元件传递控制信息。在该上下文中,“控制”信息意味着命令、控制信号以及地址,但不包括数据。注意,被每个接收HEMi从主机接收的控制信息可以与由接收HEMi传递的控制信息不同。
每个传送HEMi从其它SSD控制器元件接收控制信息,并通过物理接口1701向一个主机传递控制信息。再次,由传送HEMi向主机传送的控制信息可以与由传送HEMi接收的控制信息不同。
每个接收级缓冲器通过物理接口1701从一个主机接收数据,并且向数据路径DRAM 107传送该数据。接收级缓冲器是16K字节,其允许它们接收最多4个FC_AL(“光纤信道仲裁环”)数据帧。
每个传送级缓冲器从数据路径DRAM 107接收数据,并且通过物理接口1701将该数据传送到一个主机上。传送级缓冲器是4K字节,其允许它们存储一个流出帧与一个来自数据路径DRAM 107的流入帧。
图18示出有关主机端口0 104的某些额外细节。如本领域的普通技术人员所理解的,根据主机所使用的特定协议的规定组织SSD控制器106与主机101之间的通信。一般地,相关协议(例如,SAS、SATA、光纤信道)指定向和从主机的通信使用帧发生,所述帧包括命令和数据的定义组。
因为在各种相关的协议之中使用的精确的帧格式不同,所以必须为每个协议修改SSD控制器106。然而,SSD控制器106已经被设计为使得所述修改很小,总共(amount to)是用于接收和传送HEMi的不同固件、以及不同的物理连接器。SSD控制器106的所有其它方面对于各种协议来说不变。这是SSD控制器106的流水线化和模块化设计、以及主机接口310的设计的重大优点。
虽然帧组织的具体细节随着协议的不同而不同,但SATA协议的某些方面将被用于阐述主机端口0 104的设计和操作。在该协议中,帧包括帧开始(“SOF”)基元、帧头(由协议指定的元数据、但一般包括识别有效载荷与可能的启动器所必需的信息)、有效载荷(例如,数据、命令等)、用于整个帧的验证的CRC值、以及帧结束(“EOF”)基元。主机端0 104的接收侧负责接收帧,将其分为它的构成部分,以及执行将数据路由到它预期的目的地和/或建立事务所需要的任何动作。主机端口的传送侧负责从SSD控制器106的其它元件接收相关数据和命令信息,并且将该信息包装到帧中用于向主机101传送。
由GigaBlaze 1801处理与主机的直接通信,其是可从LSI公司获得的、型号为0.11微米的GigaBlaze
Figure BPA00001211866800281
GflxTM x1 Core的收发器核,LSI公司总部在加州的米尔皮塔斯。该核包含8b/10b编码器、串行器/解串行器以及phy,其执行所接收的比特与电压电平之间的物理转换。GigaBlaze 1801具有两个能够附接到3G SATA、3G SAS、4g FC_AL与4G FC总线的串行端口。除了其处理到主机的物理接口外,这里不涉及GigaBlaze 1801内部操作的细节。在所示的实施例中,GigaBlaze 1801连接到主机101。注意,虽然图18仅示出了SSD控制器106上的两个主机端口之一,但另一主机端口完全相同,并且包含它自己的GigaBlaze。
如图18所示,GigaBlaze 1801连接到基元匹配逻辑1802(Primitive MatchLogic)。基元匹配逻辑被设计来允许相同的物理层协议与不同地处理帧和基元的各种不同的逻辑层协议进行接口。当GigaBlaze 1801从主机101接收基元时,GigaBlaze 1801将该基元路由到基元匹配逻辑,下文联系图19详细描述基元匹配逻辑。
基元匹配逻辑控制帧路由器1803,帧路由器1803从GigaBlaze 1801接收帧,并在基元匹配逻辑的控制下路由这些帧的部分。数据被路由到接收级缓冲器0 1706,头部被路由到非数据有效载荷FIFO 1804,以及基元被路由到进站(Inbound)基元FIFO 1808。
接收HEMi 0 1702使用头部和基元FIFO中的信息来识别要执行的动作。路由到接收级缓冲器的数据经由DMA传输被发送到数据路径DRAM 107。
接收HEMi 1702产生基元,并将它们路由到出站(outbound)基元FIFO1805。这些产生的基元包括ACK(确认帧的正确接收)、NAK(指示未正确接收到帧)、以及RRDY(向启动器报告帧信用(credit))。出站基元FIFO 1805上的基元被立即插入到向主机101的传送,并且可以被插在其它事务(例如,出站数据帧)中间。
图18中所示的主机端口的传送侧由传送HEMi 1704、传送级缓冲器01708与传送帧缓冲器1806构成。传送级缓冲器0 1708包含从数据路径DRAM107接收的数据,其要被传送到主机101作为响应于读命令的帧的一部分。传送帧缓冲器1806包括一个或多个保持用于构建帧的元数据的缓冲器。传送帧缓冲器与接收侧缓冲器类似地操作,然而,应该理解,它们被用于构建帧而不是解构帧。
直通(Cut-Through)逻辑1807帮助将SSD控制器106接口到光纤信道网路。如果SSD控制器106连接到光纤信道网络,则基元匹配逻辑1802评估接收的基元,来确定这些基元是否意在用于SSD控制器106。确定不意在用于SSD控制器的基元被发送到直通逻辑1807。直通逻辑接着将这些基元传递到GigaBlaze,以返回到光纤信道网络,用于传送到网络中的下一个节点。
各种不同协议(SAS、SATA与光纤信道)所需要的物理连接器不兼容。在当前的优选实施例中,SSD控制器106的不同版本将为每个协议存在。然而,因为基元匹配逻辑利用这些协议中的每个都正确地操作(见下),所以对于每个协议所需要的仅有的不同是使用不同的物理连接器,然而,对于接收和传送HEMi来说也可能需要不同的固件。在不同的实施例中,SSD控制器106可以合并三个不同的物理连接器,每个协议一个,并因此允许利用任何协议使用相同的物理控制器。
图19中更详细地示出了基元匹配逻辑1802。该逻辑包括状态机,其匹配接收的基元,并基于所匹配的基元与当前状态识别要执行的动作。
从Gigablaze 1801向基元锁存器(Primitive Latch)1901传送从主机接收的基元。接着,针对包含在基元匹配寄存器1902中的位模式(bit pattern)来匹配基元,基元匹配寄存器1902包括十六个寄存器。如果未发现匹配,则来自基元锁存器1901的值被直接路由到进站基元FIFO 1808上。
基元匹配控制寄存器1903包括十六个寄存器,每个基元匹配寄存器一个。基元匹配控制寄存器包含指示为了发现全面匹配,所关联的基元匹配寄存器中的哪些位必须与基元锁存器1901中的值匹配的位。例如,这些位可能需要第一个字节匹配,而不需要任何其它位匹配。因此,来自基元匹配控制寄存器的这些位担当掩码(mask),允许多个接收的基元匹配单个基元匹配寄存器。这在要为一类接收的基元执行相同的动作的情况中有用,也在筛选表示除了命令之外的数据的部分基元时有用。
如果基元匹配寄存器1902的相应寄存器中的值匹配基元锁存寄存器1901,则基元匹配控制寄存器1903中的其它位指示要执行的动作。例如,这些位可以控制帧路由器1803,以便跟随基元的某些数据移动到非数据有效载荷FIFO 1804中,并且,跟随该数据的数据被移动到接收级缓冲器1706中。通常,这会发生在连同数据帧一起接收SOF基元的情况下。
基元匹配控制寄存器作为状态机操作。例如,某些位可以设置可以引起一定数目的后续基元被当前控制寄存器而不是通过基元匹配寄存器选择的控制寄存器操作的计数器(未示出)。此外,基元匹配控制寄存器可以改变包含在各种其它未示出的寄存器中的值。
应该理解,基元匹配逻辑1802包含这样的逻辑:执行基元锁存器1901与基元匹配寄存器1902之间的比较,以及实施基元匹配控制寄存器1903所需要的控制功能。
如下文联系图28所解释,使用数据覆盖(overlay),通过关联的接收HEMi加载基元匹配寄存器1902与基元匹配控制寄存器1903。因为每个协议具有其自身的基元集,所以,这些覆盖被用于对不同协议(例如,SAS、SATA)定制(customize)基元匹配逻辑1802。此外,覆盖可以被用于在单个协议内处理不同的基元集、或不同的状态。从初始化固件代码载入(firmware code load)中获取被接收HEMi用于加载基元匹配和基元匹配控制寄存器的值。因此,在许多情况下,可以为新协议或通过对接收HEMi固件的修改而对现有协议的修改,来更新基元匹配逻辑1802,而对硬件没有任何改变。
因此,基元匹配逻辑中不同覆盖的使用允许SSD控制器106响应于不同的协议,而不需要用于每个协议的个别化逻辑。
基元匹配逻辑1802还包含帧破解逻辑(Frame Cracking Logic)1904。该逻辑块接收帧中的初始双字,并评估该双字来确定帧的性质(例如,数据、命令)。基于帧的类型,帧破解逻辑将该帧合适地路由。例如,如果该帧是命令帧,则帧破解逻辑向非数据有效载荷FIFO 1804路由整个帧,而如果该帧是数据帧,则帧破解逻辑向非数据有效载荷FIFO路由头部部分,并且向合适的接收级缓冲器路由数据部分。
如上所述,基元匹配逻辑的有利之处在于:在不需要软件或重大的硬件改变的情况下,其允许SSD控制器106处理不同的协议,所述不同的协议涉及不同的帧编码。此外,在元数据和命令信息被路由到不同的FIFO(例如,非数据有效载荷FIFO 1804以及进站基元FIFO 1808)的同时,通过向包含在接收级缓冲器中的专门的数据FIFO路由数据,接收主机端口设计允许更有效率的数据传输,这是因为,数据FIFO仅包含数据而不包含命令或元数据,并允许与头部和基元元数据上的接收HEMi操作并行地,经由DMA传输将数据传输到数据路径DRAM,由此提高整个系统性能。
如上所述,SSD控制器106可以被用于多种不同的协议,仅需要对HEMi固件的修改与不同的物理连接器。所有上述协议都相对类似。还可以容易地使SSD控制器106适用于与上述协议具有重大区别的协议。例如,在一个实施例中,SSD控制器106可以适用于面向通道(lane-oriented)的协议,如PCIExpress。如本领域的技术人员所理解,在PCI Express系统中,外部设备使用“通道”传送和接收数据和元数据,每个通道利用横跨这些通道被分条的双字数据来携带传送的一部分。通道的数量是实施相关的,但SSD控制器可以通过增加两个额外的GigaBlaze(应该理解,每个GigaBlaze将是为PCI Express接口设计的版本)、两个额外的接收HEMi和两个额外的传送HEMi而适用于4通道PCI EXPRESS系统。一个GigaBlaze、一个接收HEMi和一个传送HEMi专用于每个通道。在该实施例中,未使用SCSI HEMi 2001(见下)。该HEMi可以被替代地用作额外的RdWr HEMi。
在该实施例中,在外部主机上操作的设备驱动器负责将PCI EXPRESS传送格式化为IOP。因此,大多数主机端口逻辑是不必要的(例如,基元匹配、各种FIFO等)。接收和传送HEMi分别负责对数据取消分条(destriping)和重新分条(restriping)。一旦所接收的IOP已被取消分条,则其随后可以被直接传递到RdWr HEMi(见下)。然后,处理根据如上面描述的其它协议进行。
虽然带有面向通道的协议(诸如PCI EXPRESS)的SSD控制器106的使用需要某些额外的修改,但这些修改相对较小,并且,由于控制器的模块化设计,所述修改容易被接纳。HEMi的增加和减少相对简单,并且因为控制器流水线的不同级独立操作,所以,一个级(例如主机端口)处的改变不需要其它级(例如,闪存端口)处的改变。
可以简单地设计SSD控制器106,以用于iSCSI协议,尽管这需要向主机端口增加一个或多个TCP/IP栈,同时,接收HEMi负责从所述栈中提取CDB,并且传送HEMi负责编码TCP/IP协议所需要的帧信息。
B.命令解析器
图20示出了关于来自图3的命令解析器块311的额外的细节。如联系图3所描述,命令解析器块311与主机接口310和命令分布块312通信。
命令解析器块311包括SCSI HEMi 2001。SCSI HEMi 2001从接收HEMi1702和1703接收主机命令。SCSI HEMi 2001确定主机命令是读/写、还是某个其它类型的命令。如果命令不是读/写命令,则SCSI HEMi 2001将该命令交给ARM处理器2002,其处理非读/写命令。下文进一步描述ARM处理器2002。
如果SCSI HEMi 2001确定命令是读/写命令,则其验证该命令,以确保一致性,这意味着:如果读或写命令涉及与当前正被命令分布块312处理的读或写命令相同的数据,则第二个命令被延迟直到完成了第一个命令的特定处理。
SCSI协议不需要读/写一致性,该SCSI协议允许对读和写重新排序。然而,如下文所描述,SSD控制器106将主机发起的命令分解为多个子操作,并且,可以不按顺序处理这些子操作。
如果SSD控制器106要允许多于一个命令同时在相同的数据上操作,则可能在第一个命令已完成之前执行第二个命令的部分。例如,如果SSD控制器106要接收到对特定LBA块的写命令,并且接着要接收到对重叠的LBA块的读命令,并且如果允许读命令在写命令已结束之前开始操作,则可能读命令导致返回某些已经被写命令更新了的数据、以及某些还未被更新的数据。
为此原因,SSD控制器106在如下两个位置上跟踪当前有效的命令:在SCSI HEMi 2001中、以及在闪存HEMi(下文描述)中。
存储在被称为其mRAM(联系图26,见下文)的HEMi的内部存储器中的SCSI HEMi命令表2003包含每个主机读和写命令的LBA和传输长度,该读和写命令已经被SCSI HEMi 2001向命令分布块312发送,但还没有被发送到闪存HEMi上。
如下文所述,命令分布块包含几个被称为RdWr HEMi的HEMi。命令表2003包含处理每个命令的RdWr HEMi的标识符。SCSI HEMi 2001使用该信息在RdWr HEMi之间平衡工作负荷,向带有相对较少的当前有效命令的RdWr HEMi发送新命令。
当接收到新命令时,SCSI HEMi 2001检查命令表2003,以确定被该命令影响的LBA地址是否已经存在。如果发现匹配,则SCSI HEMi 2001停止(stall)新命令的执行直到前一命令从表中被移除。一旦被分派了命令的RdWr HEMi报告其已经创建和分派了对应于该命令的所有传输请求(下文描述RdWrHEMi分派这种传输请求的处理),就从命令表2003中移除该命令。此时,新命令不再被停止。应该理解,此时,较早的命令仍然在执行,但现在在闪存HEMi层对该命令进行一致性检查(下文描述)。
因此,SSD控制器106在主机命令的流水线执行中的两点上增强了读/写一致性:SCSI HEMi 2001停止与现有命令的LBA范围冲突的新命令,直到现有命令已被发送到闪存HEMi为止,以及每个闪存HEMi在其自身的操作上增强一致性,从而,其停止覆盖与现有命令相同的范围的新命令的执行,直到现有命令完成。
一致性增强的所述两级系统是有利的,这是因为,只要冲突的命令在流水线的不同级上,则允许继续它们的处理。因此,RdWr HEMi可以在与第一冲突命令在闪存中操作的同时设立第二冲突命令,由此提高整个系统性能。
如上所述,命令解析器块311还包含ARM处理器2002,其控制某些内部管理操作,并负责处理除了读或写之外的主机发起的命令。在当前的优选实施例中,ARM处理器2002是ARM7TDMi-s,其可以从英国剑桥的ARM持股公司获得。然而,应该理解,ARM处理器2002的功能可以由多种逻辑器件处理。
虽然由ARM处理器2002处理的主机命令的准确性质是协议相关的,但在一个实施例中,这些命令包括:
测试单元准备(Test Unit Ready)
读容量(Read Capacity)
模式选择(Mode Select)
模式感测(Mode Sense)
逻辑选择(Log Select)
逻辑探测(Log Sense)
报告Luns(Report Luns)
发送诊断(Send Diagnostic)
请求探测(Request Sense)
写缓冲(Write Buffer)
读缓冲(Read Buffer)
C.命令分布
图21详细图示了命令分布块312。如所示,命令分布块312构成一组RdWrHEMi,标记为2101-2106。在当前的优选实施例中,命令分布块312包括六个RdWr HEMi。然而,因为SSD控制器106的模块化设计,所以RdWr HEMi的数量可以被增加或减少,而不需要控制器的其余部分的重大重新设计。更大数量的RdWr HEMi提高性能,但具有昂贵且更复杂的代价。
如图21所示,SCSI HEMi 2001向每个RdWr HEMi传递信息。一般地,所述信息包括CDBinfo,基于该HEMi相对于其它RdWr HEMi的相对工作负荷,SCSI HEMi 2001将CDBinfo分配给特定RdWr HEMi。
RdWr HEMi基于CDBinfo产生IOP,接着产生如IOP所需要的传输请求,并基于要传输的数据的闪存地址将这些传输请求传送到特定闪存端口。RdWrHEMI还与传送HEMi通信;在主机写的情况中,负责的RdWr HEMi向传送HEMi发送通信,指示该传送HEMi应该向主机通知控制器对于与写关联的数据准备好。
D.交叉(Crossbar);共享RAM;DRAM
前述图已经图示了功能块之间在数据和控制流方面的相互联系,并且没有试图示出物理细节。图22图示了当前实施例中SSD控制器106的许多功能块物理互联的方式。
图22示出了交叉切换器2201。如本领域的普通技术人员所共同理解的,交叉切换器操作,以便将切换器一侧上的任意元件与切换器另一侧上的任意元件连接。以下文将解释的方式,交叉切换器2201将其HEMi侧上的元件与其共享RAM侧上的元件连接。
交叉切换器2201的HEMi侧具有向包含在SSD控制器106中的每个HEMi的双路连接(图22中所示的HEMi实际上是HEMi和与每个HEMi关联的紧密耦接的逻辑的组合,这里的其它地方将进一步描述该逻辑)。
如这里其它地方所述,HEMi的数量可以根据实施决定而不同(例如,控制器可以包括八和十二之间的闪存HEMi)。
在当前的实施例中,交叉切换器2201的共享RAM侧连接到十个RAM子组,标记为共享RAM子组0(2202)至共享RAM子组7、全局寄存器2203以及PIO缓冲器2204,并且共同标记为共享RAM块318。在当前的优选实施例中,每个共享RAM子组包括4K字节的RAM存储空间。交叉切换器2201被设计来连接到更多数量的共享RAM子组,因此支持模块扩展性,如下文所解释。
虽然所有十个共享RAM子组共享地址空间,但如上文所解释,这些子组中的某些具有专门的功能。
如图22所示,交叉切换器2201对于每个共享RAM子组包括一个端口。每个共享RAM子组包括四个FIFO和数据结构段(section),并且,由关联的FIFO寄存器块控制每个FIFO(例如,寄存器块2205控制FIFO 0,块2206控制FIFO 1,等)。
如连接共享RAM端口0与共享RAM子组0的箭头所示,共享的RAM端口0仅是向共享RAM子组0的FIFO 0-3或数据结构段的输入或输出路径,该路径通过关联的寄存器去往和来自这些FIFO。如下文所解释,对FIFO的读或写通过关联的寄存器块发生,而对数据结构段的读或写在不通过关联的寄存器的情况下访问该段。
在当前的优选实施例中,实际上仅使用这些FIFO中的27个(23个用于HEMi工作列表,四个用于空闲列表)。其余五个可用于扩展系统所支持的HEMi的数量。
交叉切换器2201的全局寄存器端口2207连接到全局寄存器2203,其包括由执行多种功能的寄存器构成的RAM子组,所述功能包括控制GigaBlaze1801与设立DRAM控制器2305(下文联系图23描述)。
交叉切换器DRAM端口2208连接到PIO(“编程的IO”)DRAM缓冲器2204,其接着连接到数据路径DRAM 107。PIO DRAM缓冲器2204是包含在共享RAM的子组中的64个双字的FIFO,其被用于缓冲HEMi与数据路径DRAM之间的通信。因为数据路径DRAM以更高的时钟速度运行并且能够同时读或写四个双字,而HEMi仅能够同时读和写单个双字,所以需要这种缓冲。为了避免减慢数据路径DRAM的操作,PIO DRAM缓冲器2204缓冲向和从DRAM的数据传输。当HEMi正向数据路径DRAM写入数据时,PIODRAM缓冲器2204存储该数据,一次一个双字,直到该写入完成或缓冲器满了为止,此时,其将数据突发发送(burst)给数据路径DRAM。当HEMi正从数据路径DRAM读取数据时,PIO DRAM缓冲器2204每次存储来自数据路径DRAM的数据的四个双字,并且,一旦所有必需的数据都可用(或者PIO缓冲器满了),则HEMi以突发方式读取数据,一次一个双字。再次,应该理解,实际上,在DRAM与大量缓冲器中的一个之间传输数据。
注意,从交叉切换器2201到PIO缓冲器2204的连接不被用于数据路径DRAM与闪存端口级缓冲器之间、或者主机接口传送与接收级缓冲器之间的数据传输,而替代地,其仅用于与HEMi的通信。向和从各种级缓冲器的传输不通过交叉切换器2201。
交叉切换器调试端口2209连接到调试FIFO 2210。调试FIFO 2210是担当用于调试来自HEMi的信息的FIFO的大SRAM子组。调试FIFO 2210接受来自HEMi的信息,每次一个双字,并且将该信息存入4个双字宽的FIFO结构中。一旦调试FIFO 2210达到设置的容量阈值,则其仲裁(arbitrate)访问DRAM端口,并且,一旦其已获得了这样的访问,其将调试信息突发地写入DRAM 107中,一次4个双字。
如交叉切换器所惯例的,交叉切换器2201可以同时将来自HEMi侧的多个元件与共享RAM侧的多个元件连接,其仅由每侧的端口数量限制。
交叉切换器2201能够将每个HEMi连接到每个共享的RAM子组、以及切换器的共享RAM侧上的其它资源。然而,应该理解,切换器不将HEMi彼此直接连接,也不将共享RAM子组彼此直接连接。通过使用交叉切换器2201将信息留在共享RAM子组中,间接地完成HEMi之间的通信。
因此,当(如下所述),作为所接收的CDB的结果,SCSI HEMi 2001产生IOP,并且,将该IOP传递到RdWr HEMi,这被通过SCSI HEMi 2001将指向IOP位置的指针存储在用于RdWr HEMi的工作列表中而处理,所述工作列表还可以被存储在共享RAM子组的一个FIFO中。然后,RdWr HEMi通过检查工作列表、识别包含IOP的位置、以及从所述位置将IOP复制到它自身的内部存储器中,接收IOP。在其它HEMi之间的通信以类似的方式进行。下文描述包含在共享RAM子组中的数据结构的细节、以及HEMi使用这些数据结构传输信息的方式。
DRAM访问寄存器块2211控制对数据路径DRAM 107的访问。如上文所解释,HEMi不直接访问数据路径DRAM 107,而是替代地,使用PIO缓冲器2204用于此目的。这些是DMA传输,其需要HEMi仅提供起始地址和传输的大小。
地址寄存器2212在用于该传输的数据路径DRAM中存储起始位置。传输计数(count)寄存器2213存储所需要传输的数量。数据寄存器2214存储要被发送到PIO缓冲器2204或从PIO缓冲器接收的数据。
从数据路径DRAM 107的读以HEMi在寄存器2212中放置DRAM地址以及将传输的大小(以四个双字的形式)放入传输计数寄存器2213中开始。这些动作引起DRAM DMA引擎2302(见下文)以四个双字组块的形式将数据传输到PIO缓冲器2204中。当每个传输发生时,DRAM DMA引擎递减传输计数寄存器2213,并且,当传输计数寄存器2213达到0时,DMA传输结束。
在DMA传输完成之后,以双字的增量,自动从PIO缓冲器向数据寄存器2214读取数据。
从HEMi向数据路径DRAM 107的写类似地操作。
注意,每次传输计数寄存器2213递减时,地址寄存器2212递增。这对于当前发生的传输来说不必要,这是因为,DRAM DMA引擎仅需要初始地址加上传输计数。然而,递增地址寄存器2212导致一旦传输完成,用于传输的结束地址被保持在所述寄存器中,而且这可以在设定未来的传输中有用。
在图23中图示RAM控制器317。一般地,RAM控制器控制和仲裁对共享RAM块318和数据路径DRAM 107的访问。
RAM控制器317包括以下逻辑块(应该理解,并且如这里其它硬件图也是正确的,图23中的图示本质上是概念性的并且不意在传达实际物理布局的细节):
共享RAM控制器1201。
交叉切换器2201。
DRAM控制器2305,包括从加利福尼亚州帕洛阿尔托的Denali软件公司购买的逻辑,其管理进入数据路径DRAM 107的物理接口。
DRAM控制器2305包括DRAM DMA引擎2302。DMA引擎2302处理数据路径DRAM 107和与DRAM通信的各种缓冲器(例如,接收缓冲器1706、传送缓冲器1708、闪存级缓冲器308、PIO缓冲器2204、调试FIFO 2210)之间的DMA传输。DMA引擎2303从HEMi接收起始地址和DMA传输的传输计数,并且控制从那里的传输,而不需要来自HEMi的附加信息。
E2E逻辑2303执行三种涉及E2E标签的任务,上文联系图13描述了E2E标签:(a)将E2E标签附接到正被发送到闪存的数据的每个区段;(b)相对期望值检查标签值,并且,如果所述值不匹配,产生错误情形;以及(c)如果启动器未使用这些值(并因此不期望它们),则从正被传送到主机的数据中剥离E2E标签。
附接到数据的每个区段的E2E标签是参考标签1304、应用标签1305以及CRC 1306。如上文所解释,对于从支持E2E的启动器接收的数据,从自启动器接收的信息中获取这些值,或基于从启动器接收的信息计算这些值,而对于从不支持E2E的启动器接收的数据,这些值被内部产生。
E2E逻辑2303能够检查参考标签、应用标签或CRC值。上文联系图13描述了这些检查。只要当在数据路径DRAM 107与闪存级缓冲器之间传输数据或在数据路径DRAM 107与接收缓冲器或传送缓冲器之间传输数据时,E2E逻辑2303便执行这些检查。除非启动器不支持E2E,否则启动器指定要检查这些字段中的哪些。如果启动器不支持E2E,则基于由用户在初始化时选择的参数执行检查。注意,为了内部错误检查的目的,始终检查参考标签值,即使启动器不支持E2E且用户不要求进行该检查的情况下也是如此。
E2E逻辑2303将E2E标签附接到从数据路径DRAM 107向闪存级缓冲器传递的数据的每个区段。如上文联系图13所解释,如果启动器支持E2E,则从由启动器提供的信息中获取参考标签信息。启动器可能需要为每个数据区段递增参考标签,其中,E2E逻辑2303在附接参考标签前执行递增操作。如果启动器不支持E2E,则E2E逻辑2303将LBA插入参考标签字段1304中。如果启动器支持E2E,则应用标签和CRC字段被填入由启动器提供的信息。如果启动器不支持E2E,则应用标签被填入缺省值,并且,根据用户在初始化时的选择,CRC字段被填入缺省值或内部计算的CRC值之一。
DRAM调度器2304包括可以访问数据路径DRAM 107的每个信道的排序列表。下文联系图25描述这些信道。因为DRAM仅具有单个输入/输出端口,所以同时仅一个信道可以访问DRAM端口。DRAM调度器2304轮换(rotate)经过每个信道,检查该信道是否需要访问DRAM,如果需要,则允许该信道连接到DRAM端口。一旦所述访问完成,DRAM调度器2304移动到列表中的下一信道。以该方法,DRAM调度器2304以循环的方式仲裁对DRAM端口的访问。
图24示出共享RAM控制器2301、以及包含在共享RAM控制器2301中的寄存器块和包含在共享RAM中的FIFO之间的关系的某些方面。特别地,图24示出FIFO指针寄存器2205、2206、2401和2402,其与包含在共享RAM子组0 2202中的FIFO 0-3相关。共享RAM控制器2301每个共享RAM子组包含4个指针寄存器块,总共32个,不过它们中的某些可能未被使用。注意,为了清楚的目的,未示出控制除子组0之外的共享RAM子组的共享RAM控制器2301的部分。
如图23所示,FIFO 0指针寄存器2205与包含在共享RAM子组0 2202中的FIFO(2403)关联。指针寄存器2205包括以下寄存器:
基址(base)寄存器2404包含指向共享RAM子组2202内的地址位置的指针,所述地址位置构成共享RAM子组2202中的专用于FIFO 2403的部分的一个边界。上限地址(ceiling)寄存器2405包含指向共享RAM子组0内的地址位置的指针,所述地址位置构成共享RAM子组2202中的专用于FIFO 2403的部分的另一边界。这些寄存器定义FIFO 0的位置和大小。在当前的优选实施例中,在初始化时设置它们,并且在操作期间中不改变。在替代实施例中,可以动态地重新设置这些值,由此允许在共享RAM子组2202内更有效率的空间分配,但具有增加的复杂性的代价。
FIFO 2403是先进先出存储器结构。如此,其具有:顶部(top),表示最近插入的条目(entry);以及底部(bottom),表示最旧的条目。FIFO 2403是回卷的(wraps around),并且当前顶部和当前底部的位置将在使用期间改变。
顶部寄存器2406包含指向共享RAM子组2202内的构成FIFO 2403的当前顶部的地址位置的指针。底部寄存器2407包含指向共享RAM子组2202内的构成FIFO 2403的当前底部的地址位置的指针。
计数寄存器2408包含表示FIFO 2403中当前有效的元件的数目的值。可以通过比较顶部寄存器2406与底部寄存器2407来获取相同的信息,但是,由于不需要计算就使该信息可用,所以得到性能优势。只要有数据项(item)加入FIFO 2403时,就自动递增计数寄存器2408,并且,只要数据项被移除时,就自动递减计数寄存器2408。
如图24所示,尽管未示出下述各个寄存器,但共享RAM控制器2301还包含对应于FIFO 1-3的FIFO指针寄存器2206、2401和2402。
共享RAM子组0还包含数据结构2409。如联系图41所解释的,在共享RAM中存储了多种非FIFO数据结构,包括启动器表、CDBinfo表、IOP表、传输请求表、以及全局变量。
注意,每个空闲列表与其关联的表必须被存储在相同的共享RAM子组上(见下文,联系图41)。
共享RAM控制器2301还包含交叉仲裁逻辑2410。如上所述,交叉切换器2201对于每个HEMi具有一个端口,并且将这些端口与八个共享RAM端口(每个共享RAM子组一个)、全局寄存器、调试FIFO r以及数据路径DRAM连接。这需要一些手段来在这些HEMi(在当前实施例中的23个)之间仲裁访问共享的RAM和DRAM端口。
由交叉仲裁逻辑2410处理该仲裁。该逻辑使用公平的仲裁算法,以在多于一个HEMi需要访问相同端口的情况下在这些HEMi之间仲裁。在当前的优选实施例中,该仲裁以循环的方式进行,从最近获得对该端口的访问的HEMi开始,通过所述HEMi向上计数直到到达期望访问的第一个HEMi为止,从最大编号的HEMi(在当前实施例中的HEMi 22)回卷到HEMi 0。因此,如果HEMi 5和10需要访问特定共享RAM端口,并且最近访问该端口的HEMi是HEMi 15,则将准许HEMi 5访问,这是因为,交叉仲裁逻辑2410将从15起向上计数,在22后回卷,并且HEMi 5将是需要访问该端口之中的其第一个到达的HEMi。应该理解,可以使用多种其它的仲裁算法。
交叉仲裁逻辑2410还包含这样的机制:在已经获得对端口的访问的HEMi的请求时,在端口上放置保留(hold)。这允许HEMi完成不应被中断的事务。
注意,图24中所示的设计允许模块的可扩展性,这是因为每次加入单个闪存端口可以提高系统的容量。这么做需要加入闪存端口、闪存、以及闪存HEMi,并为每四个被加入的HEMi加入一个共享RAM(以保持HEMi工作列表(见下文)),再对于每个共享RAM加上四组FIFO指针寄存器。加入共享RAM还添加了可以被分配到附加CDBinfo、IOP以及传输请求的空间。此外,向交叉切换器2201加入新共享RAM端口相对容易。
该类型的扩展需要共享RAM子组的布局的很小的重新设计,从而将数据跨越新加入的子组分散,但可以通过修改用于初始化共享RAM子组的数据来处理它。不需要对HEMi或HEMi固件的改变。
该模块化设计允许从包含两到三个闪存端口的简单系统向包含至多23个闪存端口的大得多的系统扩展,而不需要任何软件或主要的硬件改变。因此,可以将相同的结构用于仅包括两到三个HEMi的便宜的工作站设计,或大得多的系统。
共享RAM控制器2301还包括共享RAM访问寄存器块2411,其被HEMi用于访问共享RAM块318。块2411包括以下寄存器:
共享RAM地址寄存器2412包含双字形式的共享RAM中的地址,该双字是访问的对象。该地址的高位指示要选择的特定共享RAM子组,低位指示该子组中的位置。
共享RAM数据自动递增(Autoinc)寄存器2413保持从存储在地址寄存器中的地址读取或要向其写入的双字数据。共享RAM数据自动递增寄存器的使用导致地址寄存器2412中的值自动递增。在读时,一旦数据被复制进寄存器2413,地址寄存器2412就递增。在写时,一旦从寄存器2413向外写数据,地址寄存器2412就递减。
与重复计数(Repeat Count)寄存器2702(见下文,联系图27)一起使用该自动递增寄存器,用于数据的DMA型块传输。所需的传输次数被写入重复计数寄存器2702,并且初始地址被写入地址寄存器2412。然后,数据自动递增寄存器2413随后将重复读或写在重复计数寄存器中指示的重复次数,其中每次重复导致地址寄存器2412递增,从而下一访问针对共享RAM中的下一双字。
共享RAM数据寄存器2414执行与数据自动递增寄存器相同的功能,但不引起地址寄存器2412递增。寄存器2414被用于对相同存储位置的多次访问,例如,读取变量然后修改它。
映射号(Mapnum)寄存器2415被用于选择共享RAM块318中的一个FIFO。
顶部(top)寄存器2416、添附(Append)寄存器2417、推入(Push)寄存器2418、以及弹出(Pop)寄存器2419各自保持双字数据。这些寄存器被用于对由数据映射寄存器2415选择的FIFO的四个不同类型的访问。HEMi可以从FIFO的顶部读值而不修改FIFO中的顶部值的位置,或者,其可以使顶部值从FIFO中“弹出”,由此引起FIFO顶部指向FIFO中的下一值。这些操作导致返回值被分别写入顶部寄存器2416或弹出寄存器2419中。
HEMi还可以将值“推入”到FIFO的顶部,从而该新值变成FIFO的新顶部,或者将值添加到FIFO的底部。对于这些操作,由HEMi将要被写入的数据分别放置到推入寄存器2418或添附寄存器2417中。
在FIFO的顶部或底部放置信息的能力提供了额外的灵活性。例如,这允许将更重要的任务放置在工作列表的顶部,而将较不重要的任务放置在底部。
图25图示了向和从数据路径DRAM 107的输入和输出路径。在当前的实施例中,SSD控制器106可以包括需要访问DRAM的18个资源(取决于结构):至多12个闪存级缓冲器(示出为FSB 0 308、FSB 1 314以及FSB 11 2501,为了清楚的目的,未示出1和11之间的闪存级缓冲器;如上所解释,SSD控制器106的特定实施可以具有少于12个闪存端口,并因此具有少于12个闪存级缓冲器)、PIO缓冲器2204、调试FIFO 2210、接收级缓冲器0 1706、传送级缓冲器0 1708、接收级缓冲器1 1707以及传送级缓冲器1 1709。
这些资源与数据路径DRAM之间的路径在这里被称为“信道”。应该理解,虽然每个资源都有必要通过物理传送路径连接到DRAM,但信道本质上是概念性的,且其不一定反映实际的总线结构。
在当前的实施例中,数据路径DRAM 107具有标记为DRAM端口2502的单个输入/输出端口,然而,用于此目的的其它存储器可以具有更多数量的端口。如上所解释,DRAM调度器2304在这些信道之间以循环方式仲裁向需要访问DRAM端口2502的信道分配访问。在替代实施例中,可以使用其它仲裁方案。例如,可以根据被传输的数据类型将访问按优先级排序,或者可以让寻求访问DRAM的资源(例如,调试FIFO 2210)的优先级低于闪存级缓冲器访问。
图25图示了信道与DRAM端口2502之间通过切换器2503的连接。通过在DRAM调度器2304的控制下操作,切换器2503每次将一个信道连接到DRAM端口2502。图25中所示的箭头图示了所允许的连接的方向性,例如,闪存级缓冲器308可以从DRAM读、或向DRAM写,调试FIFO 2210可以向DRAM中写,但不可以从DRAM读,而传送缓冲器1708可以从DRAM读,但不能向DRAM写。
切换器2503本质上是概念性的,且不一定表示单个大切换器。相反,此功能性(functionality)可以包括大量部署在不同位置的逻辑门。该功能性的准确物理设计是实施特定的。
当信道获得对DRAM端口2502的访问时,数据在该信道与DRAM之间的移动以突发包的方式发生,其由各自包括四个双字的传输构成。该突发包继续,直到读或写完成,或者直到连接到该信道的资源满了(对于来自DRAM的传输)或空了(对于向DRAM的传输)为止。一旦突发包被中止,该信道便失去其通过切换器2503的访问,并且,DRAM调度器2304将访问赋予需要该访问的下一个信道。
E.HEMi
如上所述,SSD控制器106包含在这里称为HEMi的大量处理器。如这里所使用的,词汇“处理器”或“微处理器”指代包括能够执行至少基本算数和/或逻辑操作的ALU、处理器专用的保持数据的存储器、以及控制ALU的操作的控制逻辑(所述控制逻辑包括硬件、软件和/或固件)的任何分立的逻辑块。如这里所使用的,“HEMi”指代在当前优选实施例中使用的特定处理器,然而,应该理解,内部HEMi设计的大量细节在这里是无关的,并且,为了清楚而将它们忽略。此外,虽然HEMi设计构成当前的优选处理器实施例,但如本领域的普通技术人员所理解的,也可以使用许多其它的处理器设计。
在当前实施例中,SSD控制器106可以包含至多23个HEMi,标记为如下(注意,在该实施例中,编号系统包括间隙):
HEMi 0:用于主机端口0的接收HEMi(1702)
HEMi 1:用于主机端口0的传送HEMi(1704)
HEMi 2:用于主机端口1的接收HEMi(1703)
HEMi 3:用于主机端口1的传送HEMi(1705)
HEMi 8:SCSI HEMi(2001)
HEMi 9-14:RdWr HEMi(2101-2106)
HEMi 15-26:闪存HEMi(例如,307、309、313)。
图26图示了HEMi的内部功能的某些方面。在当前的优选实施例中,所有HEMi共享相同的硬件元件,但其通过使用不同的固件布局、以及通过连接到不同的紧密耦接的元件而被定制用于不同的功能,下文更详细地描述这两点。
每个HEMi包括iRAM 2601,其是能够保持实施1000个56位VLIW指令的固件的指令RAM。这些指令每个都能够读1-2个共享RAM或寄存器位置、执行ALU操作、以及按结果写回或分支。
如下所述,数据路径DRAM 107为每个类型的HEMi存储最多八个不同的固件覆盖,并且,当基于执行的功能而需要时,将这些覆盖复制到iRAM2601中。这允许每个HEMi实施比在将固件限制于iRAM的大小的情况下可能的指令多得多的指令。
基于16位地址提取(fetch)HEMi指令。该地址的3位选择固件覆盖,并且,13位构成iRAM 2601中的指令的地址。如果被提取的指令的3个固件覆盖位与当前存储在iRAM 2601中的覆盖不匹配,则触发固件交换。
一般地,通过将支持需要执行公共任务的指令的固件集合在一起而避免交换固件覆盖。例如,单个固件覆盖可以处理读和写所必需的大多数公共操作。其它固件覆盖处理例如初始化和错误校正处理。
每个HEMi还包括2K字节的mRAM 2602,其用作正被HEMi使用的数据的存储空间。
如图26所示,每个HEMi包括六级流水线,其由提取级2603、I缓冲器级2604、解码级2605、读级2606、ALU级2607与写回级2608构成。在当前的优选实施例中,每个这些级在HEMi内构成逻辑块,然而,在替代实施例中,这些可以表示HEMi状态,与用于产生状态的下层处理器硬件无关。
提取级确定与要执行的指令关联的固件的iRAM地址。然后,将该地址传递到iRAM,如提取级2603和iRAM 2601之间的箭头所指示。
然后,在该地址处的固件被载入缓冲器,如iRAM 2601和I缓冲器级2604之间的箭头所指示。
然后,该固件被转交给解码级2605(如I缓冲器级2604和解码级2605之间的箭头所示)。解码级解码指令,并执行跳转和调用。其将跳转和调用传送回提取级2603(如从解码级2605到提取级2603的箭头所指示)。在直线指令执行的情况下,解码级2605将参数传递到读级2606。这些参数包括为所需要的操作检索数据的位置。
读级2606读指令所需要的1个或2个存储器或寄存器位置。在读两个位置的情况中,读级2606重复,如从读级2606的输出向其输入循环回来的箭头所指示。如从外部读2609到读级2606的箭头所指示,用于该信息的资源包括mRAM 2602与外部存储器或寄存器(由外部读2609概念性地指示)。信息还可以来自图26中未示出的内部寄存器。
读级2606将获得的信息传递到ALU级2607,用于由HEMi的ALU进行的运算。来自运算的结果被传递到提取级2603(在条件分支的情况下)或写回级2608。
写回级2608将ALU运算的结果写入由指令指定的位置。如从写回级2608向外指向的箭头所指示,结果可以被写入mRAM 2602或外部资源(由外部写2610概念性地指示)。
图27图示了在图26中未示出的HEMi设计的方面,包括用于访问各种存储器范围的寄存器以及紧密耦接到HEMi的逻辑(紧密耦接的逻辑块2701)。应该理解,HEMi和紧密耦接的逻辑两者都可以包括寄存器和这里未示出的其它部件。此外,为了阐述的目的,寄存器组自身已被简化。
图27图示了闪存HEMi 307及其紧密耦接的逻辑块2701。如上所述,HEMi的内部设计是相同的。然而,不同类型的HEMi具有不同的密耦合的逻辑块。块2701专用于闪存HEMi。下文描述用于其它类型的HEMi的密耦合的逻辑的区别。
HEMi 307包括重复计数寄存器2702,其保持用于计算操作应被重复的次数的值。将值载入重复计数寄存器导致由HEMi执行的下一个操作被重复特定次数,其中每次重复导致重复计数寄存器中的值递减。
在以下各种情况下,可以将值“1”强制赋予重复计数寄存器2702,由此结束循环:
(a)如果条件分支指令由于重复计数寄存器而正在循环,并且该条件发生,从而执行该分支,则重复计数寄存器被自动强制为“1”,这具有导致下一指令出现一次的效果。应该理解,在条件分支的情况中,所述下一指令将是该分支中的第一个指令。
(b)当设置与重复计数寄存器关联的标志时,任何将某些FIFO计数寄存器从0递增到1的动作将值1强制赋予重复计数寄存器。FIFO计数寄存器是与用于HEMi的工作列表关联的寄存器(例如,联系图24所描述的计数寄存器2408)、以及接收缓冲器计数寄存器(下文结合图28描述)。
当HEMi有任务执行时,该能力被用于强制HEMi离开休眠模式。当HEMi没有工作执行时,其进入休眠模式,在该模式中,空指令(nop)被重复设定的次数,接着,HEMi唤醒,检查它的工作列表,并且,如果没有任务出现在工作列表中,则恢复执行空指令。这通过将设定数载入重复计数寄存器2702中以及接着执行空指令而完成。
当HEMi在休眠模式中时,将任务写入HEMi的工作列表(见下文)中导致HEMi唤醒。这通过来自相关计数寄存器的信号完成,该信号将“1”强制赋予重复计数寄存器2702,由此导致HEMi唤醒并在执行了下一空指令之后执行合适的动作。
使用重复计数寄存器强制重复的空指令允许HEMi进入低功率休眠模式,而不需要任何专门的休眠模式逻辑。此外,这在HEMi将保持在休眠模式中多长时间方面允许非常细腻的颗粒度。例如,如果HEMi因为当前没有要完成的工作而进入休眠模式,则将最大值写入重复计数寄存器。在当前的优选实施例中,该值略高于100万,并引起HEMi保持在休眠模式中(除非被提前唤醒)约4毫秒。
在另一示例中,当HEMi开始乘法或除法运算时,重复计数寄存器可以被用于强制32个空指令,因为这样的运算花费32个HEMi周期。这允许HEMi进入低功率休眠模式,同时等待下文描述的乘法或除法的结果,并由可以与HEMi的其余部分的操作独立地操作的逻辑处理所述乘法或除法。
注意,仅在执行空指令的情况下使用上述标志,以使得重复计数被强制为1,因为在其它情况下可能中断代码循环。为此原因,当空指令跟随循环计数时设置该标志,而对于其它指令不设置该标志。
HEMi 307还包括局部寄存器模块2703,其控制对HEMi的iRAM 2601和mRAM 2603的访问。
局部地址寄存器2704保持局部存储器中的地址。根据地址的高位,该地址可以在iRAM或mRAM中。局部数据自动递增寄存器2705保持从局部存储器中读取或写入局部存储器的双字数据。从该寄存器的写导致局部地址寄存器2704递增。通过将值写入局部地址寄存器2704,将值载入重复计数寄存器2702、以及执行从mRAM向寄存器2705与从寄存器2705向另一位置的移动(可以在一个指令中执行这些移动),HEMi可以从mRAM中的连续地址执行一系列双字的如同DMA的移动。每次循环引起寄存器2704自动递增、以及重复计数寄存器2702自动递减,并且该移动继续到重复计数寄存器2702到达0为止。注意,如果目标(target)类似地使用数据自动寄存器,则该移动将再次被存储在该目标的连续的地址中,而不需要额外的逻辑或指令。
局部数据寄存器2706保持从局部存储器中读取的或写入其中的双字数据,但该寄存器不引起地址递增。
ARM 2002与局部寄存器块2703通过专用端口通信。ARM 2002是能够将地址写入对应于iRAM 2601的局部地址寄存器2704的仅有资源。ARM2002使用该能力来控制将新固件覆盖到iRAM 2601中的处理。
HEMi 307还包括窗口寄存器2707,其包括五个寄存器,每个都保持HEMi的mRAM 2602中的地址。四个这样的寄存器被用于在mRAM中设立窗口,每个窗口包括128个双字。这些窗口被用于操纵数据结构,如传输请求和页面请求。例如,如果需要闪存HEMi操作页面请求,则该页面请求在iRAM中的地址可以被加载到一个窗口寄存器中。接着,对页面请求的特定区域的访问可以被处理为从窗口寄存器中的值的偏移,因此,当需要对数据结构重复操作时,简化了地址计算处理。
第五窗口寄存器被用于mRAM栈,其存储局部变量与函数自变量。栈窗口寄存器与其它四个窗口寄存器类似地操作,除了HEMi具有特别的栈相关的指令之外,该指令自动递增或递减栈窗口寄存器中的值,并提供用于对栈窗口地址增加偏移的自动化机制,由此允许一个时钟栈操纵。
HEMi内部寄存器(包括局部寄存器块2703和窗口寄存器2707)被“危险(hazard)检查”。因为HEMi是流水线化的处理器,所以,如果写操作在没有这种保护的情况下紧挨在移动操作之前,则写可能实际上在移动之后发生。因此,如果写指令将值写入寄存器中,并且紧挨的后续操作将寄存器内容移动到另一位置,则流水线可以导致在写之前移动寄存器的旧内容。危险检查通过检查这种情况并延迟后续指令直到已加载了合适的数据而避免这种可能性。
乘法/除法引擎2717被用于执行乘法和除法运算。因为乘法/除法引擎可以与HEMi的其余部分独立地操作,所以,HEMi可以将要被运算的值写入乘法/除法引擎2717中的寄存器中,然后在运算进行的同时进入休眠状态,从而省电。上文描述了该休眠模式。
手动CRC引擎2719产生针对通过关联的HEMi写入的信息的CRC值。
切换字节顺序(Switch-Endian)引擎2720是自动交换写入该寄存器的数据的字节顺序的32位寄存器。因为不同的协议具有不同的字节排序,所以使用它。数据以小尾数法(little-endian)格式存在在闪存中,但对于特定协议,其被以大尾数法(big-endian)格式接收而且必须以大尾数法格式传输。
每个HEMi还具有关联的密耦合的逻辑块,例如,密耦合的逻辑块2701。密耦合的逻辑块2701图示了密耦合到每个闪存HEMi的逻辑。如下所述,密耦合到其它类型的HEMi的逻辑块在某些方面与密耦合的逻辑块2701不同。因此,即使所有HEMi的内部设计都相同,不同密耦合的逻辑的使用加上不同固件的使用也允许每种类型的HEMi针对特定的任务而被定制。
密耦合的逻辑块2701包括“密耦合”到HEMi 307的资源,意味着HEMi307是可以访问这些资源的仅有的HEMi,这些资源共享一个地址空间,并且对这些资源的访问在无等待状态的基础上发生。
虽然在当前的优选实施例中,密耦合的逻辑在HEMi的外部,但在替代实施例中,该逻辑中的某些或全部可以被合并到HEMi本身中。
密耦合的逻辑块2701包括级缓冲器访问寄存器块2708,其控制对与闪存HEMi关联的闪存级缓冲器(例如,闪存级缓冲器308)的访问。
地址寄存器2709、数据寄存器2710与数据自动递增寄存器2711与共享RAM访问寄存器块2411中的对应寄存器类似地操作。
闪存HEMi使用对级缓冲器的此访问路径,来修改存储在通过级缓冲器的超级块元数据表中、且在意外的掉电之后的重建期间所需要的时间戳信息(下文联系图58描述该重建处理)。
闪存传输计数寄存器2712、闪存地址寄存器2713与闪存数据寄存器2714控制闪存组与闪存级缓冲器之间的DMA操作。寄存器2713包含要访问的闪存地址。寄存器2712包含以双字形式的读或写数量。寄存器2714包含从闪存中接收或要被发送到闪存的数据。
DMA地址寄存器2715和DMA传输计数寄存器2716被用于控制数据路径DRAM 107与级缓冲器之间的DMA传输的级缓冲器侧。寄存器2715保持用于传输的级缓冲器地址,并且,寄存器2716保持要在级缓冲器与PIO缓冲器之间传输的双字的数量。将值写入寄存器2716中导致级缓冲器与PIO缓冲器之间的DMA传输的开始。
一般地,HEMi可以使用内部移动命令来在内部位置、密耦合的逻辑与某些外部位置之间移动数据。因此,例如,当需要新固件覆盖时,ARM处理器2002在DRAM地址寄存器2212中为覆盖建立DRAM地址(如下文所述,固件覆盖被存储在DRAM中),在局部地址寄存器2704中为覆盖建立iRAM地址,在传输计数寄存器2213中放置来自DRAM传输的数量,并且,在重复计数寄存器2702中放置传输所需要的双字的数量。从DRAM通过PIO缓冲器到数据寄存器2214的DMA传输如上所述进行。内部HEMi逻辑引起来自寄存器2214的数据被写入局部数据自动递增寄存器2705,并且从其被写入到由局部地址寄存器2704所指向的iRAM位置。接着,重复计数寄存器2702被递减,局部地址寄存器递增,并且该处理重复。ARM 2002在系统引导时使用该能力将初始固件覆盖加载到每个HEMi的iRAM中。
为考虑另一示例,将IOP从共享RAM(见下文,联系图41)复制到HEMi的mRAM中仅需要四个HEMi命令:
写共享RAM地址寄存器,共享RAM地址;这将共享RAM中的IOP的地址写入寄存器2412中。
写局部地址寄存器,mRAM地址;这将IOP被存储到的mRAM中的地址写入寄存器2704中。
写重复计数寄存器,IOP中的#双字;这将包含在IOP中的双字的数量载入重复计数寄存器2702。
移动局部数据自动递增寄存器,共享RAM数据自动递增寄存器;这将值从寄存器2413移动到寄存器2705。寄存器2413中的值是寄存器2412指向的共享RAM中的双字。将该值移动到寄存器2705使其被传输到地址寄存器2704所指向的mRAM位置。指定两个数据自动递增寄存器自动引起所关联的地址寄存器一旦发生移动时便递增。如上所述,该移动指令重复,直到重复计数寄存器达到0为止。
如此,HEMi可以完成自动发生并利用最小数量的命令的DMA型的访问。
密耦合的逻辑块2701还包括调试寄存器块2718,其包括与向和从调试FIFO 2210的传输有关的寄存器。
如以上所指出,密耦合的逻辑块2701专用于闪存HEMi。与其它HEMi关联的密耦合的逻辑块不包括级缓冲访问寄存器块2708。
用于接收和传送HEMi(例如,接收HEMi 0 1702和传送HEMi 0 1704)的密耦合的逻辑块包括设计来支持主机端口操作的附加寄存器。在图28中示出这些寄存器。
用于接收HEMi的密耦合的逻辑块包含用于与涉及主机端口的接收功能通信以及对其控制的寄存器,包括以下:
接收缓冲访问寄存器块2801:其用于设立从接收级缓冲器向数据路径DRAM 107的DMA传输。该块包括保持用于该传输的DRAM地址的DMA地址寄存器2802、以及保持要进行的传输的数量的DAM传输计数寄存器2803。
接收缓冲计数寄存器2804:其给出接收级缓冲器数据FIFO中的条目的数量。如果接收HEMi处于休眠模式,则将值写入该寄存器引起接收HEMi唤醒。
基元FIFO访问寄存器块2805:该组寄存器与进站基元FIFO 1808通信。这些寄存器包括顶部寄存器2806(从FIFO中读,而不改变FIFO的顶部)、弹出寄存器2807(从FIFO中读取顶部数据项,并且将FIFO顶部移动到下一数据项)、计数寄存器2808(包含FIFO中的数据项的数量)以及添附寄存器2809(将数据项加入到FIFO的末端)。
非数据有效载荷访问寄存器块2810:该组寄存器与非数据有效载荷FIFO1804通信。这些寄存器包括顶部寄存器2811、弹出寄存器2812、计数寄存器2813以及添附寄存器2814,它们与基元FIFO访问寄存器块中相似名称的寄存器相同地操作。
头部大小寄存器2815:其指示当前头部有多长。该值允许接收HEMi在非数据有效载荷FIFO上的一个头部与下一个头部之间不同。
基元匹配寄存器块2816:这些寄存器被用于将值载入基元匹配逻辑1802,来针对特定协议定制基元匹配逻辑。上文联系图19解释了基元匹配逻辑1802的使用和定制。
如上所述,基元匹配逻辑1802包含两组寄存器:基元匹配寄存器1902与基元匹配控制寄存器1903。基元匹配#寄存器2817指向每组中十六个寄存器之一,导致存储在基元匹配加载寄存器2818中的值被载入基元匹配寄存器1902中对应的寄存器中,并且存储在基元匹配控制加载寄存器2819中的值被载入基元匹配控制寄存器1903中对应的寄存器中。
WWN散列(Hash)引擎2830被用于产生所接收的64位的全球(Worldwide)名称值的24位散列。该散列被内部使用,以便所接收的帧(其可以包含发送者的WWN的24位散列值)可以与启动器表4108(见下文)匹配,启动器表4108包含64位值。
图28还示出唯一的传送HEMi密耦合的寄存器:
传送缓冲访问寄存器块2820:其被用于设立从数据路径DRAM 107的DMA传送的传送级寄存器侧。该寄存器块包括DMA地址寄存器2821和DAM传输计数寄存器2822。
传送帧缓冲FIFO访问寄存器块2823:该组寄存器与作为传送帧缓冲器1806的部分的FIFO通信。这些寄存器包括弹出寄存器2824、计数寄存器2825与添附寄存器2826。
命令FIFO访问寄存器块2827:该组寄存器与作为传送帧缓冲器1806的部分的FIFO通信。这些寄存器包括计数寄存器2828与添附寄存器2829。
图29图示了闪存HEMi(例如,HEMi 307)的mRAM的内容:
1.局部传输请求表2901。其包含用于保持最多六个传输请求的空间。这些传输请求可以是从共享RAM复制到该闪存HEMi的mRAM中的传输请求与局部传输请求的组合,局部传输请求被连同内部操作(诸如垃圾收集(见下文))一起发出。例如,存取位置2902可以存储一个传输请求,存取位置2903可以存储第二个传输请求。
2.局部传输请求队列2904。其是存储在表2901中的传输请求的FIFO队列,并且排队来被闪存HEMi操作。
如下所解释,一般地,当与传输请求关联的页面请求已经完成并且传输请求本身准备好进入完成状态时,传输请求被置于该队列中。
3.局部传输请求空闲列表2905。其保持指针列表,该指针指向局部传输请求列表2901中的存取位置,该存取位置是空的,并因此能够保持新传输请求。
4.页面请求表2906。其包含用于保持最多十八个页面请求的空间。每个传输请求可以调用三个页面请求,于是,页面请求表2906包含用于十八个页面请求的空间,所述十八个页面请求可以由可以适合闪存HEMi传输请求表2901的六个传输请求调用。在所示示例中,页面请求表2906包括存取位置2907和2908中的页面请求,存取位置2907和2908保持用于闪存HEMi传输请求表2901的存取位置2902中的传输请求的页面请求,并且,存取位置2909中的页面请求用于存取位置2903中的传输请求。在该示例中,其它页面请求存取位置是空的,意味着这些空间已被分配但当前没有被填入有效的页面请求。
5.页面请求空闲列表2910。其是页面请求表2906中的所有空闲页面请求存取位置的列表,意味着它们当前未保持有效页面请求。因此,该列表表示闪存HEMi可以发出的新页面请求。
6.子组队列2911。其是存储在表2906中的页面请求的一组FIFO队列。闪存组中的每个子组都有单独的页面请求队列。一旦页面请求准备好被执行,其被添附到用于保持该页面请求需要从中读或向其写的地址的子组的子组队列的末端。该闪存HEMi在子组队列之间依次轮换。当其轮换到包含页面请求的子组队列时,其评估该队列上的顶部页面请求,以确定用于页面请求的继续执行所必需的资源是否可用。如果所述资源可用,则闪存HEMi执行页面请求所要求的在给定可用资源下可能的那些任务,接着闪存HEMi轮换到下一子组队列。如此,闪存HEMi以循环的方式处理页面请求,而不需要任何仲裁逻辑。从子组队列中移除已经完成处理的页面请求。联系图53更详细地解释该处理。
在当前实施例中,子组队列是FIFO,并且以接收的顺序处理页面请求。在替代实施例中,高优先级的页面请求被加入子组队列的顶部,而不是被添附到底部。在该实施例中,可以基于在调用传输请求中识别特别重要事务的优先级位,在页面请求中设置优先级位。
8.超级块空闲列表2912。其包含用于包含在由该闪存HEMi控制的闪存组中的空闲的并因此可以被写入的超级块的标识符。
9.超级块空闲列表计数器2913。其包含空闲列表2912上的超级块的数量。该数量被单独地作为性能优化而追踪,从而根据需要而并不必须计算它。
10.开放超级块指针2914。其保持用于当前对写开放的超级块的编号。
11.垃圾收集阈值2915。在当前实施例中,其保持两个变量,两者都被用于垃圾收集的目的:临界阈值与非临界阈值。下文描述这些变量在垃圾收集中的使用。
12.局部变量2916。在当前实施例中,其保持各种由HEMi使用的局部变量。
13.栈空间2917。其保持由HEMi使用的用于处理任务的栈。
14.命令表2918。其保持由当前正被闪存HEMi处理的所有传输请求影响的命令和LBA范围的列表。
如上所述,SSD控制器106增强了读/写一致性,以确保操作不在次序混乱的情况下完成。命令表2918被闪存HEMi用于增加闪存端口层的一致性。当从闪存HEMi的工作列表中将传输请求弹出、并将其复制到局部传输请求表2910中时,相对命令列表2918检查由该传输请求影响的LBA范围。如果重叠存在,则停止传输请求的执行,直到在先传输请求已经完成,此时,从命令表2918中移除在先传输请求的条目,并且移除对在后传输请求的保持。一旦传输请求已准备好在闪存HEMi中执行,被该传输请求影响的LBA范围被加入到命令表2918。
15.超级页面指针列表2919。该列表对于闪存组中的每个子组而包含与该闪存HEMi关联的一个条目。对于每个子组,所关联的条目指向当前开放的超级块中的下一空闲的超级页面。当超级块初始是开放的,且未包含数据时,子组1-7指向超级页面0,并且,子组0指向超级页面1(每个超级块的子组0的超级页面0包含超级块元数据表,并因此不可用于常规写入)。
闪存HEMi使用这些计数器将超级页面分配到包括写命令并因此需要空闲超级页面的页面请求。当超级页面已经被分配给页面请求时(这在页面请求初始化期间发生),用于包含该超级页面的子组的超级页面指针列表2919中的条目被递增。
注意,在一个实施例中,列表2919可以包含在与开放超级块2914信息相同的数据结构中。
16.子组位图2920。该表对于每个子组保持两个比特。所述两比特之一指示子组队列顶部的页面请求是否需要该子组操作。第二位指示用于子组的R/B信号是否在准备好的状态。闪存HEMi在确定是否开始服务页面请求时检查该位图。
在图30中图示了使用共享RAM访问寄存器块2411访问共享RAM,其示出了用于传输来自共享RAM的数据块(例如,传输请求)的步骤序列。
在步骤3001中,共享RAM中所期望数据的地址被写入共享RAM地址寄存器2412中。在该示例中,这是传输请求表4111中传输请求的地址(见下文)。
在步骤3002中,数据要被传输到的HEMi mRAM地址被写入局部地址寄存器2704中。在该情况中,该地址指向局部传输请求表2901中的空存取位置。
在步骤3003中,对应于将被需要来完成传输的双字的数量的值被写入重复计数寄存器2702中。
在步骤3004中,HEMi执行引起从共享RAM向共享RAM数据自动递增寄存器2413、以及从那里向局部数据自动递增寄存器2705的读的命令。从共享RAM的读在共享RAM地址寄存器2412中指定的地址处发生。向局部数据自动递增寄存器的读导致数据被写入mRAM中由局部地址寄存器2704指定的位置。两个数据自动递增寄存器的使用引起各个地址寄存器自动递增。命令的执行引起重复计数寄存器2702递减。注意,HEMi设计允许利用单个指令处理该步骤。
在步骤3005中,重复计数寄存器2702被检查,以确定其是否包含值0。
如果重复计数寄存器2702具有值0(步骤3005的“是”结果),则传输完成,并且处理结束。
如果重复计数寄存器2702具有超过0的值(步骤3005的“否”输出),则其指示需要额外的传输。控制返回到步骤3004用于下一双字的传输。
注意,在没有闪存HEMi进一步干扰的情况下,步骤3004和3005之间的循环继续。递增的地址寄存器以及强制执行指令的重复的重复计数寄存器允许HEMi在DMA型的突发包中快速且有效率地传输数据。
F.ECC处理
当数据被写入闪存模块108或从闪存模块108被读取时,SSD控制器106产生和检查错误校正码(“ECC”)信息(如上所述,数据路径DRAM 107还具有内部ECC能力,但SSD控制器106不控制该能力,并且,仅在报告错误的情况下与其接口,这引起SSD控制器106发出错误消息)。
在图31中图示ECC处理,其示出闪存端口0 304。如上所述,闪存端口0包括闪存HEMi 0 307与闪存级缓冲器0 308,并且连接到闪存组0 301。
图31还示出ECC校正引擎3101。如上所解释,SSD控制器106包括大量闪存端口,每个具有关联的闪存组。然而,在当前的实施例中,SSD控制器106仅包括单个ECC校正引擎,其被在闪存端口之间共享。因为仅一个ECC校正引擎存在,所以,当闪存HEMi需要ECC校正引擎时,其必须检查ECC引擎是否忙碌。如果ECC校正引擎不忙碌,则闪存HEMi可以使用它。如果ECC校正引擎忙碌,则闪存HEMi必须将其ID添附到包含在全局寄存器2203中的ECC校正FIFO(见图22)。该FIFO包括需要访问ECC校正引擎的所有闪存HEMi的排序的列表。当HEMi的ID来到FIFO的顶部时,该HEMi被批准访问ECC校正引擎。
在不同的实施例中,SSD控制器106可以包括多于一个ECC校正引擎,最多到总共每个闪存端口一个。该实施例增加成本和复杂度,但如果必须校正大量的数据,则允许更快的性能。在该实施例中,不需要闪存HEMi等待访问ECC校正引擎。在其它替代实施例中,可以对于给定数量(例如,两个或四个)的闪存端口具有一个ECC校正引擎。
如图31所示,闪存端口0 304包括ECC逻辑3102。ECC逻辑3102还包括ECC产生(ECC Generation)3103以及ECC检查3104。
ECC产生3103一次为一个区段的数据产生ECC位。当正在闪存级缓冲器308与闪存组301之间传输数据时这么做。当从级缓冲器向闪存组写入时,与数据一起存储ECC信息,该ECC信息被存储在S页面区段的ECC字段1303中(见图13)。当从闪存组向级缓冲器读取时,ECC信息被ECC检查3104使用,如下所述。
在当前的优选实施例中,ECC产生3103使用汉明(Hamming)算法为每个区段产生十二个ECC码元,因此每个区段使用12个ECC字节。这需要略少于20个字节用于存储,并且,由于此原因,S页面区段的ECC字段1303包括20个字节。基于在初始化时在ECC逻辑3102中设置的寄存器,每个区段产生的ECC的量可被编程的。在替代实施例中,通过将ECC大小设为0,并重新安排或消除由其它字段占据的空间,将可以缩小S页面区段的大小,并因此允许每个超级页面保持16个区段(并因此处理16个LBA)。
当从闪存组301中读取数据时,ECC产生3103为每个区段产生ECC位的新集合。然后,ECC检查3104将新产生的ECC位与ECC字段1303的内容比较。使用标志传达该比较的结果,该标志指示是ECC位匹配还是发现了错误。在本领域中公知用于产生和检查ECC信息的方法,这里不再描述。
当ECC检查3104发现ECC错误时,闪存HEMi 307将区段数据和元数据(包括ECC字段1303)从级缓冲器308复制到ECC校正引擎3101中。ECC校正引擎使用ECC字段1303的内容来设法校正在写入或读出闪存组301的过程中引入到数据中的错误。再次,本领域中公知ECC校正处理的细节,这里不再描述。在当前的优选实施例中,基于约20个字节的ECC信息,ECC校正引擎能够校正每区段十二个错误。
如果ECC校正引擎3101成功校正了数据,则闪存HEMi 307获取从ECC校正引擎3101的输出,并将其写回级缓冲器308中,然后,已校正的数据被用于最终向主机的传送(从以上讨论,联系图27应该理解,虽然涉及两个传输,但HEMi设计允许使用单个HEMi指令将数据的每个双字从ECC校正引擎3101传输到级缓冲器308)。如果错误的数量太大以至于ECC校正引擎3101不能校正,则调用第二级的错误校正协议。该协议具有两个阶段。在第一阶段,从闪存组向级缓冲器的读被重复一次或多次,再次以相同的区段启动错误校正循环。这么做是因为错误有时来自在报告一个状态与另一状态之间阈值处的单元,并且重读可以产生额外的有效位。如果ECC校正引擎能够第二(或后续)次校正该数据,则进行校正,物理区段被标记为“坏”,并且数据被重新写入另一区段。
在第二级错误校正协议的第二阶段中,数据被重复地读取并且与在前读取的结果一起“或”。由于“或”操作,如果在任何读取期间,比特位置处遇到“1”,则将保持该“1”,即使该比特位置处的值在在先或在后读取期间被读为“0”也是如此。使用该过程是因为:闪存错误通常来自电荷从闪存单元的泄漏,导致该单元中的值被读为“0”而不是“1”(例如,读干扰)。因为该泄漏可以导致单元中具有在0和1之间的中间电荷水平,所以不同的读可导致不同的值返回。“或”处理最大化了从读中接收的1的数量。一旦已经完成“或”处理设定次数后,该值被返回ECC校正引擎3101,以确定该数据现在是否可以被校正。
如果数据破坏来自单元中的电荷增加,从而“0”值被间歇地读为“1”,则“或”处理可以实际上提高数据破坏。然而,该情况相对稀少,尽管仅在第二级错误校正的第一阶段(没有“或”的读取)失败之后使用“或”处理才有道理。
如果ECC校正引擎3101最终不能校正该数据,则闪存HEMi发出错误消息,其被通过主机端口发送到与数据关联的启动器。
在当前的优选实施例中,已校正的错误不被写回到闪存中,除非错误数量超过了阈值。基于可校正的错误数量(在当前实施例中,每个区段12个)减去基于在后续读中引入额外错误的可能性而计算的保护带,来设置该阈值。在当前的优选实施例中,发明人已经确定在区段读中发现的错误的数量不大可能比在该区段的紧挨在前的读中发现的错误的数量多三个(或少三个)以上。因此,例如,如果在一次读时,区段具有三个可校正的错误,则在下一次读时,其很可能具有六个或少于六个的可校正错误。
应该理解,该行为意味着,如果在一次读时,区段具有九个或少于九个可校正错误,则很可能在下一次读时,该区段将具有十二个或少于十二个错误,意味着在下一次读时,该错误将可校正。这,接着,意味着不必要将已校正的错误写回闪存。避免这样的写很重要,因为将已校正的数据写入闪存需要重写整个超级页面。
在当前实施例中,保护带被设为四,而不是三,以进一步最小化在后续的读上发现不可校正的错误的可能性。因此,在读上发现的可校正的错误的阈值设为八。如果发现多于八个错误,则调用写处理程序,并且将包括已校正数据的、包含该区段的超级页面重写入闪存。如果发现少于八个错误,则不重写该超级页面,这是因为,预见到该数量的错误在下一次读时仍将可校正。
在替代实施例中,因为在某些区段中的错误的存在意味着相邻区段也包含错误,可以识别包含错误的超级块用于优先垃圾收集。优先垃圾收集包括一定的无效率性,因为所选择的超级块将很可能比未选作优先的超级块包括更多有效的数据(见下文对垃圾收集的讨论),但该无效率性比由立即重写任何发现一定错误的超级页面所施加的无效率性小得多。
IV.元数据结构
A.DRAM结构
图32图示数据路径DRAM 107中发现的数据结构,在系统初始化时设立和初始化它们中的每个。它们包括以下结构:
转发表3201,其被用于在LBA地址和闪存地址之间转换。联系图33更详细地描述该表。
IOP数据缓冲器3202,其存储在主机接口310与闪存模块108之间传输的数据。
ARM执行代码3203,其存储由ARM处理器2002执行的软件。在当前的优选实施例中,用C++编程语言编写该软件。
ARM数据3204,其构成由ARM处理器2002在处理期间使用的存储空间。
反转(reverse)表块3206,其用于垃圾收集以及从掉电中恢复。反转表块3206为每个闪存端口包含单独的表,例如,表3205包含用于闪存端口0的反转表。联系图34更详细地描述反转表3205。
超级块元数据表块3207,其为每个闪存端口包含用于当前开放的超级块的元数据表。联系图35进一步描述这些表。
HEMi代码覆盖表3208,其包含初始化时载入每个HEMi中的固件。该表为每种类型的HEMi包含八个代码覆盖,例如,条目3209包含用于两个接收HEMi的八个固件覆盖,条目3210包含用于两个传送HEMi的八个固件覆盖,等等。根据需要以上文详细解释的方式将这些覆盖交换进和交换出HEMiiRAM。
SCSI标签表3211,其对于每个当前有效的启动器包含一行,并且,对于根据SCSI协议允许用于SCSI标签的65536个可能值中的每个包含一列。当接收到包含特定SCSI标签的CDB时,在对应于该启动器和该SSCI标签的SCSI标签表位置设置该比特。当CDB的执行已经完成时,清除该比特。这允许SSD控制器106检查,以确保所有接收到的SCSI标签都是唯一的,并且启动器从不具有带有相同SCSI标签的两个有效CDB。
调试缓冲器3212,其是存储从调试FIFO 2210接收的调试数据的循环缓冲器。响应于HEMi固件中的调试命令,在常规系统操作期间收集所述调试数据。所收集的信息包含所接收的CDB的基本命令流以及作为结果产生的数据结构(CDBInfo、IOP、传输请求)。在检测到错误的情况中,收集附加调试信息,以识别错误的类型以及对错误做出的响应(如果存在)的性质。
图33示出了转发表3201。转发表3201被用于将从主机101和102接收的LBA地址转换为闪存模块108中的实际物理闪存地址。
由LBA对转发表3201进行索引,并且,转发表3201对于系统可以支持的每十五个LBA包含一个条目。如图33中所示,转发表3201中的第一条目涉及LBA 0-14,第二条目涉及LBA 15-29,第三条目涉及LBA 30-44,等。注意,每个条目的LBA的数量与可以被存储在超级页面中的LBA的数量相同。在包括更大或更小的超级页面的不同实施例中,每个转发表条目的LBA的数量将同样变得更大或更小。
转发表3201的大小取决于闪存模块108的总存储大小。在当前的优选实施例中,300G字节的闪存模块可以存储约6亿个LBA,由此在转发表3201中需要约4000万个可能的条目。对于更大或更小量的存储量,转发表3201的大小将相应地更大或更小。
对于每个LBA条目,转发表3201包括可以被用于识别物理闪存芯片上相应数据的位置(端口、子组、块和页面)的信息。
此外,转发表3201包含标记为“用户”的字段,其可以存储特定客户可以发现有用的信息。在一个实施例中,用户字段存储所关联的LBA在预定的维护期间(例如,一个月)中已经访问(读或写)的次数。用户可以使用该信息来确定LBA的特定组包含较经常使用还是较不经常使用的信息。经常使用的信息可以被移动到较快、较高成本的存储器中。不经常使用的信息可以被移动到较慢的档案存储器中。
在操作中,转发表3201如下操作:从主机接收LBA,例如,LBA23。将LBA除以15,整数商被用于获得进入转发表3201的索引。例如,对于LBA23,除以15给出商“1”,意味着通过对进入转发表的一行进行索引而发现对于该LBA的物理地址信息。在图33中,其为标注为LBA 15-29的行。
所选择的行识别存储LBA信息的端口,并因此识别用于访问该信息的闪存HEMi和闪存组。所选择的行还识别存储信息的特定子组,并由此识别被所选择的闪存HEMi使用来选择该信息的CS信号。
所选择的行还识别在其中发现信息的块。注意,这是在子组的每个芯片上的相同的块。
最后,所选择的行识别在其中发现信息的页面。例如,该行可以识别块1的页面1(应该理解,在该示例中,LBA将实际地存储在块1的超级页面1中)。
如上所述,每个超级页面包括十五个S页面区段,每个区段可以存储涉及单个LBA的内容。一旦已经从转发表3201中识别了超级页面,通过从上述除法中获取余数而获得超级页面中的实际S页面区段。在所给定的示例中,余数是8(23/15=1,余数8)。因此,将在每个选择的页面中的第九个P区段存取位置中发现所请求的LBA信息(第九,而不是第八,这是因为,表从LBA 0开始)。
图34示出反转表3205。如上所述,数据路径DRAM 107对于每一个闪存组包含一个反转表。
如上所述,每个块包括64个超级页面,每个超级页面由来自四个页面的存储空间构成,子组中的每个电路小片一个。还如上所述,超级块包括来自该组中的每个子组的相同块。例如,特定闪存组的超级块0包括来自该组中的所有子组的所有块0。
列3401表示超级块(0),行代表子组0的超级页面0-63、子组1的超级页面0-63等,一个子组上的每组64个超级页面表示块。
表3205中的每个超级页面行(例如,行3402)包含用于每个超级块中的相同超级页面(例如,超级块0-n的超级页面0)的条目。
反转表3205中的每个超级页面字段包括单个有效位。当设为“1”时,该有效位指示该超级页面包含当前有效的编程数据(即,该超级页面已经被写入了保持有效的数据),或者已被擦除并可用于写入(即,包含值0xffffffff,其是擦除后的缺省状态)。当被设为“0”时,该有效位指示超级页面包含无效数据,意味着其不可以被读取也不可用于写入。当存储在超级页面上的LBA被进行了之后的写入时,使该超级页面无效。因为闪存不允许直接的覆写,所以,当超级页面上的LBA被覆写时,该新数据与该超级页面上任何保持有效的旧数据一起被复制到新页面,并且,旧超级页面被标记为无效,意味着其不再被使用(未决的(pending)垃圾收集,其在下文被描述)。
因此,例如,字段3403中的“1”将指示闪存组的子组0的块0的超级页面1含有有效数据、或者已经被擦除且可用于写入,然而,该字段中的“0”将指示闪存的子组0的块0的超级页面1是无效的。
反转表3205还包含计数行。该行中的每个条目包含表示超级块中当前无效的超级页面的总数量的数。因此,字段3404存储表示超级块0中当前无效的超级页面的数量的数。
也可以通过对列中“0”有效位的数量求和来计算该计数。但是,计数被单独地保持,作为性能优化,这是因为,在单独字段中保持总计数避免了在需要时计算该数的必要。该计数以下文更详细描述的方式用于垃圾收集目的。
反转表3205还包含时间戳行,如行3405所示。其包含指示最初每个超级块对写关闭的时间的时间戳。该字段的使用包括重建处理,下文联系图58对其描述。
反转表3205还包括擦除计数行,如行3406所示。其包含超级块已经被擦除过的次数的计数,并且,可以被用于例如以更高的擦除计数按优先级排序超级块,以用于垃圾收集。
图35图示了超级块元数据表3501,其包含涉及一个超级块的元数据信息。超级块元数据表被存储在每个超级块的子组0的超级页面0中(例如,用于端口0的超级块0的超级块元数据表被存储在端口0的块0的超级页面0中)。此外,用于每个闪存组中当前对写入开放的超级块的超级块元数据表被存储在DRAM 107的超级块元数据表块3207中。
超级块元数据表3501对于超级块中的每个超级页面包含一行,通过子组组织超级页面。因此,行3502包含用于子组0的超级页面0的信息。行3503跟随其后,行3503包含用于从子组0的超级页面1直到子组0的超级页面63的信息,随后是行3504,其包含用于从子组1的超级页面0直到所到达的最后一个子组(图35中标记为子组n)的信息。
超级块元数据表3501对于每个超级页面存储三种类型的元数据:超级页面时间戳、缺陷标志以及LBA。
超级页面时间戳列3505包含超级页面被写入的时间。该信息还被添附到超级页面的末端,并被用于在数据丢失情况下以下文描述的方式重建的目的。
缺陷标志列3510包含指示超级页面是否已被标记为“有缺陷”的单个比特。如果在闪存读或写期间来自超级页面的任何页面被指示为有缺陷,则超级页面被识别为有缺陷的。在一个实施例中,如果这在读期间发生,则超级块被强制进入垃圾收集。在一个实施例中,如果这在写期间发生,则不同的超级页面被用于写。在任一情况下,都设置该缺陷标志。
LBA列3511包含写入到超级页面中的数据的LBA地址。如以上所解释,每个页面包含来自一组15个连续LBA的数据。LBA列3511识别该组中的第一个LBA。
子组0的超级页面0是特殊情况,这是因为,其包含用于超级块的超级块元数据表,并因此不保持对应于任何LBA的数据。为此原因,与该超级页面关联的LBA字段不包含LBA信息。
超级块元数据表3501还包含不专用于特定超级页面的四个字段,而是包含与整个超级块相关的元数据:超级块时间戳3506、擦除计数字段3507、开放标志3508以及关闭标志3509。
超级块时间戳3506包含反映对写关闭的超级块的时间的时间戳,如下所述,该字段被用于掉电恢复。
擦除计数字段3507包含超级块已被擦除的次数。如下所述,该字段可以被用于磨损均衡(wear leveling)目的。
当超级页面对写开放时,设置开放标志3508。
当超级页面被关闭时,设置关闭标志3509。如下所述,开放和关闭标志被用于掉电恢复。
当超级块对写开放时,其元数据表被从闪存复制进DRAM 107中。当每个超级页面被写入时,将合适的LBA写入对应于该超级页面的LBA字段中,并且将超级页面被写入的时间写入列3505中的超级页面时间戳条目。类似地,如果超级页面被发现有缺陷,则填充对应于该超级页面的缺陷字段。
当超级块被关闭时,所关联的超级块元数据表被从DRAM 107写入到包含该超级块的闪存组的子组0的块0的超级页面0中,并且接着通过用于下一个要开放的超级块的超级块元数据表而被覆写在超级块元数据表块3207中。
超级块元数据表在三个单独的情形中被写入闪存中:
1.当超级块被擦除并被置于空闲列表上时。此时,元数据表被写入闪存中,然而,仅缺陷和擦除计数数据是有效的。
2.当超级块开放时。此时,该表被复制到级缓冲器中。闪存HEMi设置开放标志,并将该表写回到闪存中(不过,应该理解,副本保留在级缓冲器中,并且,仅表的部分需要被写入闪存中)。这允许开放的超级页面在不可预见的掉电的情况中被识别。
3.当超级块被关闭时。此时,被填充了的表被复制回到闪存中。在那发生之前,闪存HEMi设置关闭标志。因此这两个标志指示超级块的所有可能的状态:空闲(两个标志都未被设置)、开放(开放标志被设置、关闭标志未被设置)、以及关闭(两个标志都被设置)。
图36图示IOP数据缓冲器3202。如图32所示,IOP数据缓冲器3202被存储在数据路径DRAM 107中。该缓冲器被用于缓冲由数据路径DRAM107从主机接口310、或从闪存模块108接收的数据。
IOP数据缓冲器3202对于每个可以被SSD控制器106支持的IOP包含一行(在当前优选实施例中,其为60)。每行对于保持315个S页面区段都足够大,315个S页面区段是对于IOP来说可以返回的最大数据量(7个传输请求×3个页面请求×15个LBA)。
在写操作时,IOP数据缓冲器3202保持从主机接收的数据。在读操作时,数据缓冲器保持从闪存接收的数据。在任一情况中,都以LBA顺序来存储数据。这使得计算用于涉及特定传输请求和特定页面请求的数据的准确位置更容易。例如,涉及由IOP发出的第一传输请求的第一页面请求的数据将始终在数据缓冲器3202中该IOP的条目的开始处被发现(IOP(0)的第一位置被示为位置3601)。涉及第一传输请求的第二页面请求的数据将始终在从该条目的开始的偏移处(例如,位置3602)被发现,基于要被第一页面请求传输的LBA的数量计算所述偏移(注意,如果传输的起始LBA落入超级页面内,则该第一页面请求将传输少于完全的超级页面)。
因此,根据主机发起的读和写操作被分为可以在不同时间或无次序地完成的传输请求和页面请求的事实,IOP数据缓冲器3202操作来隔离向和从主机101和102的数据流。尽管数据传输具有乱序性质,但IOP数据缓冲器3202以主机期望的LBA顺序存储数据。
对于主机发起的读,IOP数据缓冲器3202保持由传输请求返回的数据直到所有请求的数据出现,此时,数据被以LBA顺序读出到主机接口。对于主机发起的写,IOP数据缓冲器3202保持从主机接收(还以LBA顺序)的数据,直到所有数据都已被接收,此时,数据被传输到闪存级缓冲器。该机制也允许SSD控制器106即使主机发起的数据传输操作被内部分为小得多的闪存读和写、也以主机期望的顺序向和从主机接受和传送数据,并且还允许数据路径DRAM以最大的速度操作,而不管控制器中的其它元件以较低的速度传输数据的事实。
B.事务结构
如上所述,SSD控制器106使用四种类型的数据结构在闪存模块108中控制读和写操作:CDBinfos、IOP、传输请求和页面请求。
如基于SCSI协议的系统中所常规的,通过从主机接收到命令描述器块(“CDB”)而发起读或写(其它协议包括类似机制,但CDB将被用于阐述的目的)。SSD控制器106以被称为CDBinfo的结构存储CDB。控制器可以一次处理最多144个CDBinfo,不过,如下文更详细地描述的,其中的16个被保留用于特殊目的,从而可以一次处理128个标准的主机发起的读/写命令,尽管它们中的某些可能正被“暂停”,等待必要资源的可用性。
SSD控制器106通过将主机发起的读和写命令分为分级移动来处理主机发起的读和写命令。系统通过产生IOP来处理CDBinfo而开始。一次总共可以有60个IOP是有效的。每个IOP可以发出七个传输请求(尽管一次最多仅可以有120个传输请求是有效的),它们中的每个可以发出三个页面请求。每个页面请求引起最多一个超级页面(例如,超级页面213)的数据和元数据的移动。如上所解释,每个超级页面存储与15个LBA关联的区段内容。
该结构被设计来允许单个IOP处理大多数主机发起的传输,其包括256个连续LBA。如下所解释,根据要被传输的第一个和最后一个LBA落入超级页面内的位置,以及它们落入数据分条内的位置,第一个和/或最后一个页面请求将可以仅仅传输一个LBA,以及,第一个和/或最后一个页面请求还将可以仅仅传输一个超级页面。因此,在某些情况中,在序列中的第一个和/或最后一个传输请求实际上可以传输仅与单个LBA关联的区段内容。因此,单个IOP能够处理至少225个LBA,并且最多315个。然而,在实践中,IOP可以处理少于256个LBA的情况相对较少,从而,在当前结构中,单个IOP将几乎总能够处理包括256个LBA的事务。
如SCSI协议所要求的,通过重复地调用相同的IOP,系统可以处理更多数量的LBA的传输。然而,根据经验,发明人相信256个LBA将是通常操作情形下实际上遇到的最大移动。注意,每个LBA对应于一个标准硬盘驱动器区段,并且IDE驱动器一般一次仅能传输256个区段。假如设计现有主机,以满足该256区段限制,则可能单个IOP将能够处理所遇到的绝大多数主机发起的传输。
图37图示了示例性CDBinfo(例如,CDBinfo 201)的结构。
自指针3701识别该特定CDBinfo在CDBinfo表4109中的位置,以下联系图41对其描述。该值被传递到其它需要识别该CDBinfo的数据结构。
自指针3701被用于调用CDBinfo 201,并通过希望使用该CDBinfo的操作为此目的而复制。此外,自指针3701被用于错误检查。自指针3701应该始终指向CDBinfo 201。如果其不指向其自身,则意味着有操作利用不正确的数据覆写了该CDBinfo。注意,该描述对于包含在其它类型的数据结构中的自指针也正确。
CDB字段3702包含从主机获得的CDB(或类似数据结构)的副本。由主机协议指定CDB的格式,但CDB始终至少包含命令、用于数据传输的LBA以及传输长度。
启动器字段3703包含指向共享RAM启动器表4108(见图41)中对应于负责该CDB的启动器的启动器条目的指针。从由带有该CDB的主机提供的元数据获得该信息。将该元数据与启动器表4108比较。如果发现匹配,则指向启动器表4108中匹配位置的指针被置于启动器字段中。如果未发现匹配,则从启动器空闲列表4112(见图41)中弹出新启动器,新启动器被输入表4108中,并且,指向该新启动器的指针被置于启动器字段3703中。
IOP字段3704指向被产生来执行CDBinfo所要求的事务的IOP。
SCSI标签3705包含从启动器接收的SCSI(或队列)标签。如在本领域中所理解的,当最初形成连接时,SCSI标签是从启动器接收的信息的一部分。在对CDB的任何响应中,该信息都必须被返回到启动器。
SCSI标签3706包含SCSI协议所要求的标志。
突发包长度控制字段3707包含从启动器信息突发包长度字段4204复制的突发包长度控制信息,下文联系图42对其描述。
参考标签字段3708包含连同CDB一起接收的参考标签(如果存在),上文解释了它们的使用。
应用标签字段3709包含连同CDB一起接收的应用标签与应用标签掩码(如果存在),上文解释了它们的使用。
图38图示IOP(诸如IOP 202)的内部结构。如下所述,IOP被存储在共享RAM块318的IOP表4110中(见图41,下文),并且,当IOP被HEMi使用时,该IOP还被复制到该HEMi的mRAM中。
在当前的优选实施例中,每个IOP是包含以下字段的32双字的数据结构:
自指针3801。其包含共享RAM IOP表4110(见下文)内该IOP所处的地址。在初始化时设置该字段。当IOP在IOP空闲列表4103(见下文)上时,这是IOP中唯一包含有效数据的字段。
调用HEMi字段3802包含用于当前操作该IOP的HEMi的标识符。这是被授权修改IOP 202中任何数据(除了中止(Abort)标志3811,下文对其进一步描述)的唯一HEMi。
主机端口字段3803识别接收引起IOP的调用的初始主机命令的主机端口(0或1)。如下所解释,当命令完成时,这是IOP必须被发送到的端口。
启动器字段3804包含指向共享RAM启动器表4108(见下文)中对应于初始负责导致该IOP的调用的CDB的启动器的启动器条目的指针。
CDBinfo字段3805包含指向共享RAM CDBinfo表4109(见下文)中引起该IOP被调用的CDBinfo的指针。
命令字段3806识别IOP被指定来执行的命令的类型。在一个实施例中,仅为主机的读或写命令产生IOP。在不同的实施例中,还可以为其它类型的命令产生IOP。在该实施例中,IOP被传送到ARM处理器2002用于非读/写命令的处理。
已分配传输请求字段3807包含IOP已经为当前读或写操作分配的传输请求的数量。当IOP被RdWr HEMi初始化时,该HEMi计算执行由CDBinfo指定的读或写命令所必需的传输请求的数量,并将该数量输入到该字段中。在当前优选实施例中,该数量被设置为最大值7。
剩余传输请求字段3808包含由还未完成的IOP分配的传输请求的数量。当IOP被初始设立时,该字段包含与已分配传输请求字段3807相同的值。随着每个传输请求完成,剩余传输请求字段3808被递减。
传输请求指针阵列3809对于IOP分配的每个传输请求包含一个条目。对于每个这样的传输请求,传输请求指针阵列3809包含指向正在处理传输请求的闪存HEMi的指针,以及指向传输请求表4111(见下文)中该传输请求自身的指针。当传输请求从传输请求空闲列表4104(见下文)中弹出时,从传输请求的自指针(见下文)复制指向传输请求的指针。
传输请求指针阵列字段3809被用于识别当IOP的执行完成时应该被返回到传输请求空闲列表4104的传输请求。在IOP的中止标志3811被设置的情况下,该字段还被用于识别应该被中止的传输请求。下文进一步描述中止操作。
状态变量字段3810包含用于追踪IOP的状态的信息,包括关于命令是否完成、错误是否发生等的信息。该字段还指示IOP是新的还是“再进入的(re-entrant)”。如上所述,如果CDB需要传输比单个IOP可以处理的数据多的数据,则传输被分解为段,并且相同的IOP被重复地调用,以处理每个段。状态变量字段3810追踪IOP在该处理中的位置。
中止标志3811。该标志指示IOP的操作应该被中止。这是IOP可以被除了在调用HEMi字段3802中识别的HEMi外的任何HEMi写入的仅有部分。
参考标签字段3812包含参考标签,上文描述了它的使用。
应用标签字段3813包含应用标签掩码与应用标签,上文描述了它们的使用。
图39图示了传输请求(如传输请求203)的内部结构。在初始化时,为每个传输请求在传输请求表4111(见下文)中分配包括16个32位双字的空间。在当前优选实施例中,仅使用这些双字中的14个。为将来的扩展保留附加的两个双字。
传输请求是由RdWr HEMi创建并由闪存HEMi使用的数据结构。它们包含以下字段:
自指针3901。其识别传输请求表4111(见下文)中的特定传输请求的位置。其被传递到其它需要识别该传输请求的数据结构,例如,需要识别调用传输请求的页面请求。
调用IOP字段3902。其包含引起该传输请求被创建并从IOP自指针3801取得的IOP的识别。
LBA字段3903。其包含用于该传输的起始LBA。例如,如果调用的IOP需要从LBA 0-100中读,则用于第一个传输请求的LBA字段3903将读为“0”,用于第二个传输请求的LBA字段3903将读为“45”,以及用于第三个传输请求的LBA字段3903将读为“90”(如上所解释,每个传输请求可以处理最多45个LBA)。
传输长度字段3904。其包含要被传输的LBA的数量。
数据路径DRAM指针3905。其包含指向IOP数据缓冲器3202中为该传输请求数据被写入或被读出的地址的指针。如上所解释,IOP数据缓冲器3202由IOP组织,并且包含用于从闪存模块108中读取或被写入到该闪存模块的数据的空间。
中止标志3906。该标志指示传输请求的操作应该被中止。在传输数据之前由传输请求检查中止标志,以确保不为已经中止的命令传输数据。下文进一步描述中止处理。
命令字段3907。其识别所请求的命令的性质。可能的状态包括读、写、格式化、移动以及擦除。
状态变量3908。它们包含用于追踪传输请求的当前状态的变量。当闪存HEMi开始对传输请求的操作时,其检查这些变量,以确定需要什么类型的执行。例如,“完成”状态变量告知闪存HEMi:传输请求已完成,以及清理(clean-up)例程(下文描述)应该开始。
参考标签字段3909。其存储用于作为传输请求的对象的第一区段的参考标签。从调用的IOP的参考标签字段3812取得该信息,然而,对于除由IOP调用的第一个传输请求外的传输请求,必须对其进行调整。
应用标签字段3910。其存储应用标签和应用标签掩码。从调用的IOP的应用标签字段3813中取得该信息。
已分配页面请求字段3911包含传输请求已经为当前读或写操作分配的页面请求的数量。在当前优选实施例中,该数量设置为最大3。
剩余页面请求字段3912包含传输请求分配的还未完成的页面请求的数量。该字段起初包含与已分配页面请求字段3911相同的值。随着每个页面请求完成,闪存HEMi递减剩余页面请求字段3912。
页面请求指针阵列3913。该字段包含指向分配来处理传输请求所要求的传输的每个页面请求的指针。
已分配页面请求字段3911、剩余页面请求字段3912以及页面请求指针阵列字段3913不包括在存储在共享RAM中的传输请求表4111(见下文)中的传输请求中。相反,当传输请求被存储在闪存HEMi的mRAM中时,在下文更详细解释的处理中,将这些字段加入到传输请求。
图40图示页面请求(如页面请求210)的结构。页面请求被存储在闪存HEMi的mRAM中。当闪存HEMi从RdWr HEMi接收到传输请求时,闪存HEMi设立执行该传输请求所必需的页面请求,并且利用识别这些页面请求的信息填充传输请求的页面请求的指针阵列3913。每个页面请求包括以下字段:
页面请求自指针4001。其指向闪存HEMi的mRAM中的页面请求表2906中保持该页面请求的页面请求的位置。
调用传输请求4002。其包含用于调用该页面请求、并从传输请求自指针3901中复制的传输请求的标识符。
命令字段4003,其被从调用的传输页面的命令字段3907中取得。该字段中的可能的值包括:
读/修改/写
擦除
注意,如果传输请求中的命令字段3907是“写”,并且页面请求的传输长度字段4010(见下文)指示该写针对少于完整页面,则设置读/修改/写状态。如下所解释的,在该情况中,需要读/修改/写,这是因为,闪存写以每次一个完整页面发生,并且,如果页面请求是写入少于完整的超级页面,则旧超级页面的剩余部分必须被复制和写入到新超级页面中。
数据路径DRAM指针字段4004。其被从传输请求的DRAM指针字段3905获取,但被修改来反映设计该特定页面请求的数据应该被置于哪里或者应该在分配给传输请求的DRAM空间中哪里发现它(例如,将在传输请求空间的开始处发现涉及第一个页面请求的数据,涉及第一个页面请求的数据将被偏移到传输请求空间中,等等)。
S页面索引字段4005存储进入表示正被该页面请求处理的LBA范围的转发表3201的索引。基于传输请求LBA字段3903产生该信息,根据需要而修改它,以反映由于相同传输请求而发起的其它页面请求。
闪存读地址字段4006。其包含闪存组中读将发生的地址,并且通过子组、块和页面识别位置。从转发表3201获取该信息。当闪存HEMi接收到传输请求时,闪存HEMi使用来自传输请求的LBA字段3903中的信息来发现对应于转发表3201中的LBA的闪存地址信息。如上所解释,通过将LBA除以15来找到转发表中的行,并使用来自所述除法的余数来识别区段的物理位置,将LBA转换为物理闪存地址。
闪存写地址字段4007。其包含被页面请求用于写的闪存组地址,并且基于要用于写的超级页面来计算其。下文描述超级页面被选择的方式。因为读-修改-写需要读地址和写地址字段两者,所以页面请求包括两者。
头长度字段4008。在传输在超级页面的中间开始的部分传输的情况中,该字段保持LBA在超级页面的开始与传输假定开始的位置之间的偏移。通过取得用于确定闪存读地址或闪存写地址(见上文)的LBA并将其除以15来计算该字段。来自该除法的余数被用于头长度字段。
尾长度字段4009。在传输在超级页面中间结束的部分传输的情况中,该字段保持LBA在超级页面的末端与该传输假定结束的位置之间的偏移。通过将头长度字段4008中的值加上传输长度字段4010中的值并从“15”减去结果值来计算该字段。
传输长度字段4010。其指定该页面请求所需要的传输的长度。由闪存HEMi基于传输请求的传输长度字段3904以及该特定页面请求将被要求处理的传输部分产生该信息。注意,头长度字段4008、尾长度字段4009与传输长度字段4010的总和将始终是单个超级页面中的LBA的数量(在当前实施例中为15)。
状态变量字段4011。该字段由一系列用于追踪页面请求210的当前状态的标志构成。联系图51和图53描述使用状态变量的示例。可以同时设置多个标志,但某些组合不合法。在当前的优选实施例中,该字段包括以下标志,然而,应该理解,所使用的准确标志是实施相关的,并且不同集合的状态标志可以被用于获得相同的结果:
命令:其指示页面请求准备好向闪存发出命令
准备好/等待:其指示页面请求准备好进行,以及等待资源可用
需要级缓冲器:其指示页面请求需要闪存级缓冲器来进行
闪存传输完成:其指示页面请求所需要的闪存读或写完成
第一、第二:其指示事务的当前阶段。例如在读/修改/写中,在事务的不同阶段,需要页面请求向闪存发出不同的命令。该字段允许页面请求追踪其在该处理中的位置。
页面请求完成:其指示页面请求已经完成所有必须的操作。
数据传输错误:其指示由页面请求处理的传输导致了错误。
参考标签字段4012存储被页面请求寻址的数据的第一个区段的参考标签。从调用的传输请求的参考标签字段3909获取该信息,然而,对于除由传输请求调用的第一个页面请求外的页面请求,偏移是必要的。
应用标签字段4013存储从调用的传输请求的应用标签字段3910中取得的应用标签和应用标签模板信息。
C.共享RAM结构
图41图示存储在共享RAM块318中的信息。
共享RAM块318包含涉及启动器的两个数据结构:启动器空闲列表4112和启动器表4108。
在当前实施例中,SSD控制器106能够响应来自十六个同时有效的启动器的命令。因此,启动器表4108包含十六个存取位置,其中每个都包含用于涉及单个启动器(指示为启动器0-15)的信息的空间,例如,启动器信息块4101,下文联系图42对其进一步描述。虽然SCSI协议要求SSD控制器106响应至少十六个有效的启动器,但在替代实施例中,可以将SSD控制器106设计:通过提高启动器表4108和启动器空闲列表4112的大小,以响应比该协议所需要的数量更多的启动器。
启动器空闲列表4112是包含指向启动器表4108中空存取位置的指针的深度16(16-deep)的FIFO队列。当新启动器最初寻求与SSD控制器106通信时,来自启动器空闲列表4112的顶部的指针从队列中弹出,并且启动器列表4108中由该指针引用的存取位置(例如存取位置4101)被用于有关新启动器的信息的存储。如果启动器列表4112是空的,则其指示SSD控制器106不能处理任何额外的启动器。SSD控制器106可以通过经由主机接口310提供状态信息而响应该情形。
应该理解,将启动器信息传递到SSD控制器106的方式是协议特定的。然而,一般地,在启动器首次开始发起SSD控制器处指示的命令之前提供的数据结构中传递该信息。该数据结构中的信息被用于填充启动器表4108中的启动器的条目。
共享RAM块318包含两个涉及CDBinfo的数据结构:CDBinfo表4109和CDBinfo空闲列表4102。
CDBinfo表4109包含用于144个CDBinfo(标记为CDBinfo 0-143)的存取位置。这些存取位置中的每个存储单个CDBinfo,例如,CDBinfo 201。联系图37描述存储在CDBinfo中的信息。
空闲列表4102是包含指向CDBinfo表4109中空存取位置的指针的深度144的FIFO队列。当需要新CDBinfo时,从空闲列表4102的顶端弹出指针。然后,将用于新CDBinfo的信息写入CDBinfo表4109中由所弹出的指针指向的空存取位置中。当完成CDBinfo的处理时,擦除该CDBinfo,并且,指向CDBinfo表4109中包含该CDBinfo的存取位置的指针被加入空闲列表4102,由此释放空间,以便其被用于新CDB。
SCSI协议需要SSD控制器106甚至在资源不可用的情况中也保证在特殊环境下处理CDB的能力。下文联系图46和图47详细描述这些影响控制空闲列表4102的方式的需求。
共享RAM块318包含两个涉及IOP的数据结构:IOP表4110和IOP空闲列表4103。它们与对应的CDBinfo结构类似地操作。IOP表4110对于SSD控制器106一次可以处理的60个IOP中的每个包含一个存取位置。联系图38描述包含在IOP表4110的每个存取位置中的IOP信息的格式。IOP空闲列表4103是包含指向IOP表4110中空闲(未填充有效IOP)的存取位置的指针的深度60的FIFO队列。
共享RAM块318包含两个涉及传输请求的数据结构:传输请求表4111和传输请求空闲列表4104。它们与对应的IOP结构类似地操作。传输请求表4111对于SSD控制器106一次可以处理的120个传输请求中的每个包含一个存取位置。联系图39描述该信息的格式。传输请求空闲列表4104是包含指向传输请求表4111中空闲的存取位置(未填充有效传输请求)的指针的深度120的FIFO队列。
共享RAM块318还对于包含在SSD控制器106中的每个HEMi包含一个工作列表。虽然所描述的实施例包括23个HEMi,其中每个在共享RAM块318中都具有关联的工作列表,但图41仅示出了它们中的三个:4105、4106和4107。应该理解,HEMi的数量在实施之间变化,并且共享RAM块318将始终对于每个HEMi包含一个工作列表。
每个HEMi工作列表是要被关联的HEMi操作的任务的队列。一般地,HEMi工作列表包含指向CDBInfo表4109中的CDBInfo、IOP表4110中的IOP以及传输请求表4111中的传输请求的指针,并且HEMi工作表上这样的指针的出现指示关联的HEMi被要求执行涉及所识别的CDBinfo、IOP或传输请求的处理任务。HEMi通过在HEMi工作列表上放置指针而互相通信。
在当前的实施例中,工作列表是FIFO,并且被FIFO指针寄存器控制,指针寄存器如联系图24所描述(例如,指针寄存器2205)。任务以被接收的顺序从工作列表中弹出,而不试图对特定任务赋予优先级。在替代实施例中,通过例如在IOP中包括优先级位而对任务赋予优先级。由设置有优先级位的IOP调用的传输请求也可包括优先级位。这样的高优先级传输请求可以被加入到HEMi工作列表的顶部,而不是附加到底部,从而,这样的传输请求变成下一个由HEMi处理的传输请求,即使其它传输请求已经在列表上。
一旦CDBinfo、IOP或传输请求被移动到HEMi工作列表,没有其它的HEMi能够修改该结构(除了中止相关的信息)。
共享RAM块318还包括全局变量4113。它们存储由处理中的HEMi使用的变量。
图42图示启动器表4108中的条目的结构。每个这样的条目(例如,启动器0 4101)包含启动器自指针字段(4201),其指向表4108中的启动器的位置。
启动器标识符字段4202包含识别该特定启动器的信息。从主机接收该信息,并且其被用在主机与SSD控制器106之间的通信中,从而主机可以从SSD控制器106向合适的启动器路由通信。通过从主机接收第一个指示新启动器已经请求访问SSD控制器106的请求的接收HEMi填充启动器标识符字段4202(这种请求的格式对特定协议是特定的,例如,SAS、FCAL等,并且本领域的普通技术人员理解这一点)。当接收到这样的指示时,接收HEMi使启动器从启动器空闲列表4112中弹出,并利用从主机接收的识别信息填充启动器标识符字段。在当前优选实施例中,启动器标识符包括作为启动器的开放帧接收的全球名称。
计数字段4203包含从还未完成的启动器接收的CDB的数量。当接收到CDB时,接收HEMi识别启动器,并为该启动器递增计数字段4203。当IOP完成执行时,作为清理处理的一部分,计数字段4203递增。
当计数字段4203到达0时,其指示该启动器在系统中没有剩下的命令。此时,在一个实施例中,启动器信息被擦除,并且数据结构被返回到启动器空闲列表4112。在替代实施例中,仅当空闲列表是空的并需要新启动器时,启动器才被返回到空闲列表。
突发包长度字段4204包含当启动器最初被设立时从主机作为元数据的一部分接收的突发包长度控制信息。由SCSI协议指定的突发包长度控制信息被用于设置突发包数据传输的最大长度。如果向或从启动器的传输超过该最大长度,则SSD控制器106必须中断该传输,允许向或从其它启动器的传输发生,并且接着恢复该传输。这由正处理该传输的传送HEMi处理。在达到该限制之后,传送HEMi断开传输,并接着立即设法重新连接。
V.操作
A.写性能
对于高容量固态驱动器,主要性能瓶颈是与闪存的接口。因此设计SSD控制器106来最大化该接口的使用。通过将事务分解为相对较小的组块(chunk),并以高度并行性执行这些组块,意在保持闪存接口尽量忙碌来这么做。因此,闪存模块108包含大量闪存组,每个组具有与系统的其余部分的独立接口,以及允许每个闪存组独立而并行地操作的关联闪存端口。在每个闪存组内,存储器被分解为子组,每个子组可以并行地操作。虽然每个闪存组一次仅有一个子组可以与SSD控制器106通信,但小事务部分被输入到多个子组,允许子组在闪存接口被用于其它目的同时执行内部闪存操作。这连同多个缓冲器的使用允许事务比在读或写必须串行发生的情况中所可能的速度快得多地完成。
以40MHz工作的典型的同时代单层单元闪存芯片执行一个页面的写操作花费大概200微秒(本领域的技术人员应该理解,闪存写操作经常包括读-修改-写)。此外,将一超级页面的数据从级缓冲器移动到闪存芯片缓冲器中花费约50微秒。这意味着闪存组可以使对不同的子组的五个连续的写操作流水线化,并由此保持闪存接口被完全占用:每个写操作需要总线50微秒,并接着内部操作200微秒,在这期间,四个其它的写操作可以使用该总线。因此,数据可以在500微秒内被写入90个LBA的完整分条中。
这在图43中图示,其包含交叉引用一个闪存组的子组0-7与以50微秒为递增的时间的表。该表示出了对子组0-5(包括90个LBA)上的超级页面的六超级页面的写。
在第一个50微秒时间段中,子组0使用总线将一超级页面的数据从级缓冲器移动到子组0的闪存页面缓冲器。这在图43中被示为“M”。在接下来的四个50微秒时间段中,子组0上的闪存电路小片执行从它们的页面缓冲器到闪存的内部写操作(在图43中被示为“W”)。
因为在初始时间段之后子组0不需要总线,所以,在第二个50微秒时间段(标记为时间100)期间,子组1能够从级缓冲器向子组1的页面缓冲器移动数据。然后,子组1可以开始内部闪存写操作,将总线移交给子组2。对子组3、4和5的写类似地进行。
可以看出,该六超级页面的写花费500微秒。闪存总线在该时间段中的300微秒期间处于使用状态。因为闪存写操作可以与总线操作并行地发生,所以,在约三分之一的时间中完成了在串行情况下将花费1500微秒(6×250)的写。
此外,在300微秒之后,闪存总线是空闲的,因此允许其它事务获得对总线的访问,并因此允许多个事务重叠。
图43示出了写操作,因为包含在这样的操作中的等待时间比读操作大得多,其中读操作花费约100微秒(50微秒用于将数据读取到闪存页面缓冲器,50微秒用于将数据移动到级缓冲器),所以,所描述的结构被设计来最大化写的性能,尽管其也倾向提高读的性能,但程度较低,其中假定在相同的闪存组上仅可以重叠两个读操作(一个从闪存读,一个将数据移动到级缓冲器)。
因为相同程度的性能并行地发生在每个闪存端口上,而且因为数据横跨闪存组被分条,所以,与没有使用该并行流水线化结构所可能的情形相比,大事务可以迅速得多发生。因此,理论上,包含12个闪存组的系统可以在500毫秒时间段中写1080个LBA(12×90)。在真实世界中通常不可能获得该理论最大值,这是因为其需要每个写以子组和闪存组的形式完美地排队。但是,应该很显然,所描述的结构的并行性和流水线化掩盖了闪存引入的等待时间,并允许以比传统硬盘驱动器或闪存设备高得多的性能处理读写序列。
因为所描述的结构包括可观的超过合并了标准SLC闪存芯片的系统所必需的性能净空(headroom),所以其可以在没有大修改的情况下适用于较低速的MLC闪存。如在本领域中所理解的,MLC(“多级单元”)每个闪存单元存储两个(或更多个)比特。因此,对于给定的存储量,MLC芯片更便宜。然而,MLC芯片在读和写上更慢。
图44示出了在单个由MLC闪存芯片构成的闪存组上的90个LBA的写,该MLC闪存芯片需要350微秒用于一个页面的写(当前市场上的MLC芯片的典型性能)。可以看出,在600微秒内完成整个写。虽然这超过了图43中所示的用于SLC器件的500微秒,但是,尽管MLC芯片为每个写都花费额外的100微秒,而对于六个完整页面的写,差别也仅有100微秒。如上文,可以横跨多个闪存组并行地完成该写。该并行性足够很大程度地掩盖MLC芯片的额外等待时间,从而,无论使用SLC还是MLC芯片,对于主机,系统跨越主机接口的响应度都将完全可接受。
B.读和写处理
图45包含图示当接收到主机发起的写命令时主机端口(例如,主机端口0104)遵循的步骤的流程图。该流程图假定所接收的初始帧是写,并在该基础上进行。为此原因,未示出实际实施中所需要的大量步骤(例如,确定所接收的命令是读还是写,并相应地分支)。
在步骤4501中,GigaBlaze 1801接收来自主机的基元。
在步骤4502中,GigaBlaze 1801将基元发送到基元匹配逻辑1802。
在步骤4503中,基元匹配逻辑将基元识别为帧开始(“SOF”)基元,指示其后跟随着帧(应该理解,该描述本质上是概念性的,并不意在描述所接收的基元的特定性质。还应该理解,通信的性质一定程度上取决于特定协议,并且该处理的细节根据所使用的协议而不同)。
在步骤4504中,在对应于来自基元匹配寄存器1902的与所接收的基元匹配的寄存器的来自基元匹配控制寄存器1903的寄存器的控制下,帧破解逻辑1904评估帧的第一个双字。
在步骤4505中,帧破解逻辑确定帧是命令帧。
在步骤4506中,在基元匹配逻辑1802的控制下操作的帧路由器1803将帧路由到非数据有效载荷FIFO 1804。这在基元匹配控制寄存器和帧破解逻辑的控制下完成。
在步骤4507中,用于主机端口的接收HEMi(例如,接收HEMi 1702)使命令帧从头部FIFO中弹出。
在步骤4508中,接收HEMi评估帧并确定其包含CDB。
在步骤4509中,作为确定帧包含CDB的结果,接收HEMi产生CDBinfo。
在步骤4510中,接收HEMi将CDBinfo发送到SCSI HEMi 2001。
在步骤4511中,SCSI HEMi 2001确定CDB包含写命令。
在步骤4512中,基于CDB包含写命令的确定,SCSI HEMi 2001将CDBinfo发送到RdWr HEMi。
在步骤4513中,基于CDBinfo,RdWr HEMi产生IOP。
在步骤4514中,RdWr HEMi将IOP发送到传送HEMi(例如,1704)。
在步骤4515中,传送HEMi产生传输准备好的帧,其被设计来向主机指示SSD控制器106现在准备好接收包含要被写的数据的数据帧。
在步骤4516中,传送HEMi将传输准备好的帧发送到GigaBlaze 1801。
在步骤4517中,GigaBlaze将传输准备好的帧发送到主机。
在步骤4518中,GigaBlaze接收由主机发送的响应于传输准备好的帧的基元,其用信号发送第一个数据帧的开始。
在步骤4519中,GigaBlaze 1801将基元发送到基元匹配逻辑1802。
在步骤4520中,基元匹配寄存器匹配该基元作为SOF。
在步骤4521中,在基元匹配控制寄存器1903的控制下,帧破解逻辑1904评估帧的第一个双字。
在步骤4522中,帧破解逻辑确定该帧是数据帧。
在步骤4523中,在基元匹配逻辑1802控制下操作的帧路由器1803将帧的头部部分路由到非数据有效载荷FIFO 1804,并将帧的数据部分路由到接收级缓冲器1706。这由于基元匹配控制寄存器中的基元的匹配以及帧被识别为数据帧而完成。在该情况中,基元匹配控制寄存器引起路由逻辑将设置数量的双字路由到非数据有效载荷FIFO,并接着将后续双字路由到级缓冲器。
在步骤4524中,接收HEMi使头部从非数据有效载荷FIFO中弹出。
在步骤4525中,接收HEMi评估头部并确定其表示数据帧。
在步骤4526中,接收HEMi检查头部的目标端口传输标签(“TPTT”)部分。与所有帧一起接收的该字段包含将与单个事务关联的帧连接在一起的数据,例如,包含写命令的命令帧与包含要写入的数据的数据帧。TPTT信息被复制到作为传入的命令的结果而创建的IOP中。接收HEMi使用该信息将接收的数据帧与在步骤4513中创建的IOP关联。
在步骤4527中,接收HEMi设立包含在接收级缓冲器中的数据到数据路径DRAM 107中由IOP指定的位置的DMA传输。下文描述写操作随后进行的方式。
图46包含图示SSD控制器106处理CDB的最初阶段的流程图。该流程图图示从从主机接收CDB一直到将CDBinfo传递到RdWr HEMi的处理。
应该理解,并且对于在这里使用的所有流程图来说都正确的,图46从算法的角度图示了该处理,而不意在描述实现细节,也不意在描述具体的软件步骤。此外,某些步骤的排序是任意的,因为在后的步骤不依赖于在先的步骤的结果。实际实施例中排序这种步骤的方式是实施相关的。
在步骤4601中,主机101通过物理接口1701将CDB传送到接收HEMi1702。如上所述,CDB由包括启动器的标识的元数据伴随。接收HEMi 1702在它的mRAM中临时存储CDB和元数据。
在步骤4602中,接收HEMi 1702通过交叉切换器2201访问共享RAM快318,并且检查CDBinfo空闲列表4102,以确定是否超过16个CDBinfo可用。
如果16或更少个可用(步骤4602的“否”结果),则处理进行到图47所示的流程图,其涉及特殊情形的处理,联系该图更详细地讨论所述处理。
如果超过16个CDBinfo可用(步骤4602的“是”结果),则在步骤4603中,接收HEMi 1702通过交叉切换器2201访问共享RAM块318,并检查启动器表4108,以查看在元数据中识别的启动器是否已经存在。注意,该步骤还可以作为图47所示的流程图的结果之一而被到达。
如果启动器不在启动器表4108中(步骤4603的“否”结果),则在步骤4604中,接收HEMi 1702检查启动器空闲列表4112,以确定是否有空闲启动器可用。
如果没有空闲启动器可用(步骤4604的“否”结果),则在步骤4605中,接收HEMi 1702调用队列满例程。在当前的优选实施例中,SSD控制器106处理该情况的方式取决于用户在初始化时可设置的参数。用户可以决定在该情况中进行队列满报告,其具有引起启动器重试命令直到资源可用的效果。可选地,用户可以决定要求启动器表4108的“清除(scrub)”,以确定该表是否包含任何具有0的计数字段4203的启动器,具有0的计数字段4203的启动器意味着它们没有有效的命令。可以从表中清除这种启动器,由此释放用于新启动器的空间。如果清除打开一启动器,则处理可以继续。否则,进行队列满报告。
如果有空闲启动器可用(步骤4604的“是”结果),则在步骤4606中,接收HEMi 1702使启动器从启动器空闲列表4112中弹出。
在步骤4607中,接收HEMi 1702使用在伴随该CDB的元数据中接收的识别信息填充启动器标识符字段4202。
在步骤4608中,接收HEMi 1702为该启动器将计数字段4203加上1。无论启动器是(步骤4603的“是”结果)否(来自步骤4607)已经存在在启动器表4108中,都执行该步骤。
在步骤4609中,接收HEMi 1702使顶部CDBinfo(例如,CDBinfo 201)从CDBinfo空闲列表4102中弹出。
在步骤4610中,接收HEMi 1702将CDBinfo从CDBInfo表4109复制到其自己的mRAM中。注意,此时,CDBinfo除自指针字段3701外是空的。
在步骤4611中,接收HEMi 1702如下填充CDBinfo的字段:
在CDB字段3702中,其放置从主机101接收的CDB的副本。
在启动器字段3703中,其放置来自启动器表4108中用于该启动器的条目的自指针4201的副本。
在SCSI标签字段3705、SCSI标签字段3706、参考标签字段3708以及应用标签字段3709中,其放置在包括该CDB的传送中从主机101中接收的元数据。联系图37描述该元数据的性质。
在突发包长度控制字段3707中,其放置包含在与在启动器字段3703中识别的启动器关联的启动器信息的突发包长度控制字段4204中的信息的副本。
在步骤4612中,接收HEMi 1702访问交叉切换器2201,并将填充的CDBinfo 201复制到CDBinfo 表4109中被自指针字段3701指向的存取位置。
在步骤4613中,接收HEMi 1702在用于SCSI HEMi 2001的工作列表中放置自指针字段3701的副本。
如果用于SCSI HEMi 2001的工作列表先前是空的,则将指针置于该工作列表中会唤醒SCSI HEMi。如果其它任务已经存在在工作列表上,则SCSIHEMi完成这些任务。在任一情况下,在某些点上,指向CDBinfo 201的指针在工作列表的顶部,并且,在步骤4614中,SCSI HEMi 2001使用交叉切换器2201访问其工作列表,并使该指针弹出。
在步骤4615中,SCSI HEMi 2001使用交叉切换器2201访问CDBinfo表4109中的CDBinfo 201的位置,并且将该CDBinfo复制到其自身的mRAM中。
在步骤4616中,SCSI HEMi 2001从CDBinfo 201的CDB字段3702中读取CDB的命令部分,以确定其是否是数据传输(读或写)。
如果命令不是读或写(步骤4616的“否”结果),则在步骤4617中,SCSIHEMi 2001将CDBinfo传递到ARM处理器2002,其负责处理除读或写之外的命令。此时,图46中所述的处理结束。
如果命令是读或写(步骤4616的“是”结果),则在步骤4618中,SCSI HEMi2001将存储在CDBinfo 201的CDB字段3702中的CDB的LBA和传输长度字段与命令表2003比较,如上所述,命令列表2003被存储在SCSI HEMi 2001的mRAM中。通过该比较,SCSI HEMi 2001确定在命令表中是否已识别任一需要被CDB传输的LBA。匹配意味着新CDB的主题的某些或全部LBA已经是现有传输的主题。如上所述,需要SSD控制器106保持一致性,从而LBA不经受不一致的命令。
如果SCSI HEMi 2001发现命令列表匹配(步骤4618的“是”结果),则在步骤4619中,其停止CDBinfo的执行并返回到步骤4618。该循环继续直到匹配不再存在。
如果未发现匹配(步骤4618的“否”结果),则在步骤4620中,SCSI HEMi2001将LBA和传输长度从CDB字段3702放置到命令列表2003中。
在步骤4621中,SCSI HEMi 2001为每个RdWr HEMi工作列表访问计数寄存器(例如,计数寄存器2408),以确定这些工作列表中的哪个包含最少的任务。
在步骤4622中,SCSI HEMi 2001将指向CDBinfo 201的指针放置在识别的工作列表上,例如用于RdWr HEMi 2101的工作列表,并且图46所描述的处理完成。
注意,步骤4602之后步骤4609之前的启动器相关的步骤仅对于允许超过一个启动器的协议(例如,SAS和光纤信道)是必要的。对于仅允许单个启动器的协议(例如,SATA),这些步骤不必要。替代地,对于基于SATA的系统,当接收到最初的设置特征命令时,控制器106设立启动器。如本领域中所理解,设置特征命令包括需要用于突发包长度字段4204的突发包长度信息。在设立了启动器之后,CDB的处理如图46中所示地进行,然而,应该理解,对步骤4603的回答总是“是”,并且处理进行到步骤4608(其不必要但也无害)然后进入步骤4609。这允许对SATA、SAS以及光纤信道使用公共的代码库(code base)。
在替代实施例中,略有不同的代码库被用于SATA系统,该系统完全没有启动器。在这样的实施例中,图46的处理将跳过步骤4602至步骤4609。在再一实施例中,基于使用的协议设置变量,并且在该变量识别SATA协议的情况下,处理跳过步骤4602至步骤4609。
如上所述,当接收到CDB时,如果CDBinfo空闲列表4102上16个或更少的CDBinfo可用,则调用特殊的处理例程。两个特殊情形必须被检查和处理(如果它们存在)。
首先,SCSI协议需要SSD控制器105确保最后一个CDB可以在SSD控制器106已经报告了缺乏资源之后被处理。尽管该协议需要控制器正确地响应这些情况下发出的任何CDB,但该能力通常意在允许主机发出要求关于错误情形的信息的请求探测CDB,
第二个特殊情况出现在客户要求强制SSD控制器106能够同时支持十六个有效的启动器的情况下,意味着其必须能够为每个可能的启动器(最多16个)支持至少一个有效的CDB。
该客户要求意味着:在少于16个当前有效的启动器的情况下,SSD控制器106必须维持足够的CDBinfo来保留,来为每个可以变为有效的额外启动器(最多16个)分配一个CDBinfo。注意,该特征是实施相关的,这是因为某些客户可能不需要它。在一个实施例中,通过在初始化时设置的变量来使能该特征。在另一实施例中,略有不同的代码库被用于需要以及不需要该特征的系统。
在一个实施例中,可以如图47中所示处理这些特殊情况的两者。注意,在图46中的步骤4602的“否”结果之后,由接收HEMi执行这些步骤。
在步骤4701中,检查CDBinfo空闲列表4102,以确定是否有任何空闲CDBinfo。
如果没有空闲CDBinfo存在(步骤4701的“否”结果),则处理进行到步骤4702,其调用队列满例程。虽然细节取决于使用的协议,但一般这包括向主机返回队列满消息。
如果有空闲CDBinfo(步骤4701的“是”结果),则在步骤4703中,检查空闲列表4102,以确定空闲列表上是否仅有单个空闲CDBinfo。
如果空闲列表上仅有一个CDBinfo(步骤4703的“是”结果),则在步骤4704中,检查保留标志。在初始化时该标志被设为“0”,并且在向空闲列表4102中加入CDBinfo的任何时候也将其设为“0”。保留标志指示当前CDB是否有权使用空闲列表中的最后一个CDBinfo。如上所述,SCSI协议需要在队列满被返回之后接受一个额外的CDB,意味着如果仅有一个CDBinfo剩余在空闲列表上,则第一CDB必须触发队列满指示,并且允许第二CDB使用CDBinfo。
如果保留标志未被设置(步骤4704的“否”结果),则在步骤4705中,设置保留标志。然后,处理继续到步骤4702,其指示队列满例程。
如果保留标志被设置(步骤4704的“是”结果),则在步骤4706中,处理返回到图46的步骤4603,其后,保留的CDBinfo将被分配给CDB。
如果空闲列表4102上的空闲CDBinfo的数量大于1(步骤4703的“否”输出),则处理进行到步骤4707,其中负责该CDB的启动器的计数字段4203被评估,以确定该启动器是否已经具有至少一个当前的CDB(计数字段≥1)。
如果启动器不具有任何有效的CDB(或者如果其为新启动器)(步骤4707的“否”结果),则处理进行到步骤4706,并且从那里进行到图46的步骤4603,其后,CDBinfo将为该启动器弹出,这是因为,系统允许启动器被保证至少一个有效的CDB。
如果启动器已经具有有效的CDB(步骤4707的“是”结果),则不需要系统向启动器保证CDB,并且处理进行到步骤4708,在其中,启动器表4108中具有至少为1的值的计数字段4203的条目的数量被放置在称为“Var1”的变量中。该数量表示当前有效的启动器的数量,每个启动器至少具有一个有效的命令。
在步骤4709中,从16减去Var1,并且将结果置于称为“Var2”的变量中。其表示必须被保证CDBinfo的额外启动器的数量。
在步骤4710中,将空闲列表4102中条目的数量与Var2比较。如果空闲CDBinfo的数量比Var至少大2(步骤4720的“是”结果),则处理进行到步骤4706,并且从那里进行到图46的步骤4603,其后,将CDBinfo弹出,这是因为,有足够的CDBinfo可用于满足该保证。
如果空闲CDBinfo的数量并非比Var2至少大2(步骤4710的“否”结果),则在步骤4702中,系统报告队列满。这是必须的,因为必须保持足够的空闲CDBinfo,以允许由Var2表示的数量的启动器的未来维护,加上一个必须维持保留的额外CDBinfo。
因此,图47所示的流程图检查上述的两个特殊情况。
图48包含图示基于CDBinfo设立IOP和传输请求的方式的流程图。
在步骤4801中,RdWr HEMi(例如,RdWr HEMi 2101)使用交叉切换器2201来访问其工作列表,并使指向CDBinfo(例如,CDBinfo 201)的指针弹出。
在步骤4802中,RdWr HEMi 2101使用交叉切换器2201访问CDBinfo表4109中的对应于所述指针的位置,并在该位置找到CDBinfo 201。RdWrHEMi 2101将CDBinfo 201复制到它的mRAM中。
在步骤4803中,RdWr HEMi 2101确定在IOP空闲列表4103上是否存在任何IOP。
如果在空闲列表上不存在IOP(步骤4803的“否”结果),则在步骤4804中,RdWr HEMi 2101等待IOP以完成执行,然后,一旦空闲IOP出现在空闲列表上,重新开始处理。
如果在空闲列表上存在IOP(步骤4803的“是”结果),则在步骤4805中,RdWr HEMi 2101使用交叉切换器2201访问共享RAM,并确定传输请求空闲列表4104上是否存在足够的传输请求用于处理IOP所需要数量的传输请求。
如果空闲列表上存在不足的传输请求(步骤4805的“否”结果),则在步骤4806中,RdWr HEMi 2101等待传输请求释放,然后进行到步骤4807。
如果空闲列表上存在传输请求(步骤4805的“是”结果),则在步骤4807中,RdWr HEMi 2101使顶部IOP指针从空闲列表中弹出。该指针被复制到CDBinfo的IOP字段3704中。
在步骤4808中,RdWr HEMi 2101将空闲列表上的顶部指针指向的IOP(例如,IOP 202)从IOP表4110复制到它的mRAM中。此时,包含在IOP中的仅有信息是自指针3801。
在步骤4809中,RdWr HEMi 2101将来自CDB字段3702的传输长度值从CDBinfo复制到名为“TLvar”的变量中。该变量贯穿所描述的算法的剩余部分存储当前传输长度(应该理解,在这个或其它情况中,该描述本质上是概念性的,并且实际实施可以包括也可以不包括带有该名称的变量)。
在步骤4810中,RdWr HEMi 2101将来自CDB字段3702的LBA值从CDBinfo复制到称为“LBAvar”的值中。该变量贯穿所描述的算法的剩余部分存储当前传输开始处的LBA。
在步骤4811中,RdWr HEMi 2101如下填充IOP 202:
在调用HEMi字段3802中,其放置其自身的指针。
在CDBinfo字段3805中,其放置早先从其工作列表弹出的CDBinfo指针。
在启动器字段3804中,其放置从CDBinfo 201的启动器字段3703中取出的启动器指针。
其设置状态变量字段3810,以指示IOP的当前状态。
其清零中止标志3811。
在参考标志字段3812和应用标志字段3813中,其复制CDBinfo 201的参考标签字段3708和应用标签字段3709的内容。
在步骤4812中,RdWr HEMi 2101使顶端传输请求指针从空闲列表中弹出。
在步骤4813中,RdWr HEMi 2101将由空闲列表上的顶部指针指向的传输请求从传输请求表4111复制到它的mRAM中。此时,包含在传输请求中的仅有信息是自指针3901。
在步骤4814中,RdWr HEMi 2101递增IOP已分配传输请求字段3807,以反映新传输请求。
在步骤4815中,RdWr HEMi 2101递增IOP剩余传输请求字段3808,以反映信息传输请求。
在步骤4816中,RdWr HEMi 2101将传输请求自指针3901复制到IOP传输请求指针阵列3809中。
在步骤4817中,RdWr HEMi 2101将来自LBAvar的值复制到传输请求LBA字段3903中。这是将被传输请求用于传输的开始的位置。
在步骤4818中,RdWr HEMi 2101利用通过从IOP传输长度中减去TLvar并将该结果加到指向IOP数据缓冲器3202中专用于该IOP的空间的指针上而计算的值填充传输请求DRAM指针字段3905。该结果指示涉及该传输请求的数据将存储在IOP的DRAM空间中的哪里。该值将为每个后继的传输请求增加等于由紧挨在前的传输请求处理的传输的大小的量。
在步骤4819中,RdWr HEMi 2101如下填充某些传输请求字段:
在调用IOP字段3902中,其放置指向从IOP空闲列表4103中弹出的IOP的指针。
在LBA字段3903中,其放置当前在LBAvar中的值的副本,指示用于该传输的起始LBA。
清除中止标志3906。
在命令字段3907中,其放置所要求的命令的类型。在该示例中,该命令是读。
利用从IOP 202的字段3812和3813中取得的信息,来填充参考标签字段3909和参考标签字段3910。
在步骤4820中,RdWr HEMi将传输请求LBA值除以15,并将商放置到名为“索引”的变量中。
在步骤4821中,RdWr HEMi使用索引在转发表3201中执行查找。该查找产生对应于包含在传输请求LBA字段中识别的LBA的超级页面的行。来自该行的端口字段被放置到名为“端口A”的变量中。
在步骤4822中,TLVar中的值被复制到名为“TLTemp”的变量中。
在步骤4823中,名为“页面”的变量被初始化为值1。如上所述,每个传输请求可以处理最多三个超级页面,每个超级页面可以处理15个LBA的块。该变量追踪分配到该传输请求的这种LBA块的数量。
在步骤4824中,从15减去来自在步骤4820中执行的除法的余数,并将结果放置在名为“偏移”的变量中。如上所述,每个超级页面包含15个LBA,并且,传输中的第一个LBA可以被偏移到操作页面的中间。还如上所述,每个传输请求可以发起三个页面请求,每个页面请求可以处理单个超级页面。结果,如果第一个LBA被偏移到超级页面中,则由传输请求发出的页面请求中的一个将处理少于十五个LBA。步骤4824处理该情况。
在步骤4825中,将偏移中的值与TLTemp中的值比较。
如果Offset比TLTemp大或相等(步骤4825的“是”结果),则这意味着传输将在可以由该传输请求处理的LBA范围中完成。
在步骤4826中,TLTemp中的值被写入传输请求传输长度字段3904中。
在步骤4827中,将传输请求放置在用于负责在端口A变量中识别的端口的闪存HEMi的工作列表上。因为用于该IOP所必需的所有传输请求都已经被分配,所以接着处理结束。
如果TLTemp比偏移大(步骤4825的“否”结果),则在步骤4828中,评估TLTemp,以确定其是否小于或等于15。
如果TLTemp小于或等于15(步骤4828的“是”结果),则其意味着传输将以该传输请求完成,并且,处理继续到步骤4826,其如上所述进行。
如果TLTemp大于15(步骤4828的“否”结果),则在步骤4829中,从TLTemp中减去偏移,并且将结果存回到TLTemp中。该步骤重复地递减TLTemp,以反映要被分配给当前正在设立的传输请求的LBA。然后,使用该值计算传输请求传输长度字段。
在步骤4830中,变量索引中的值被递增。
在步骤4831中,基于新索引值执行转发表查找。应该理解,这产生在由在前的查找提供的行之后的行,并因此产生下一个15个LBA的块。来自该行的端口值被写入名为“端口B”的变量。其表示存储下一LBA块的超级页面。
在步骤4832中,比较端口A和端口B。如果它们相同(,步骤4832的“是”结果),则其意味着包含所述15个LBA的下一块的超级页面与在前的超级页面存储在相同的闪存组中。这意味着当前传输请求理论上可以处理下一LBA块。
在步骤4833中,将页面变量与3比较。如果页面变量小于3(步骤4833的“否”结果),则其意味着:传输请求可以处理额外的15个LBA的块,因此,处理进行,以设立穿过传输请求循环的下一反复(iteration)。
在步骤4834中,递增页面变量,以反映在下一循环中新LBA块将被分配到传输请求的事实。
在步骤4835中,将值15写入到偏移变量中。因为用于下两个超级页面的LBA范围将在15的偶数倍处开始,所以对于任何在第一个超级页面后的超级页面不需要偏移。为了在步骤4825中的计算的目的,以及为了在步骤4829中递减TLTemp的目的,通过将偏移设为15来处理其。然后,处理循环到步骤4825,并为下一LBA块而进行。
如果端口B中的值与端口A中的值不同(步骤4832的“否”结果),则其意味着:下一LBA块处于与分配给传输请求的在前块不同的端口上。因为传输请求仅可以操作一个闪存组上的LBA,因此当前传输请求此时必须结束。类似地,如果页面变量等于3(步骤4833的“是”结果),则传输请求也必须结束,这是因为,这意味着传输请求已经被分配了相当三个超级页面的LBA。
在任一情况中,处理进行到步骤4836,其中,从TLVar减去TLTemp,并且将结果存储在传输请求传输长度字段3904中,该结果包含分配给传输请求的LBA的数量。
在步骤4837中,传输请求被添附到用于分配给与端口A变量中识别的端口关联的闪存组的闪存HEMi的工作列表中。
在步骤4838中,将TLTemp的值存储在TLVar中。这设立TLVar用于在产生下一传输请求中使用。
在步骤4839中,将LBAVar加到传输请求传输长度字段中的值上,并且将结果存回到LBAVar中。这设立LBAVar用于在产生下一传输请求中使用。
在步骤4840中,RdWr HEMi分析IOP已分配传输请求字段3807,以查看其是否等于“7”。
如果已经分配了七个传输请求(步骤4840的“是”结果),则IOP不能分配任何其它传输请求。如上所述,通过允许IOP完成并接着重新发出带有由于IOP的在前执行而修改的LBA和传输长度值的IOP来处理该情况。因此,在步骤4841中,完成了IOP的第一次反复,此时,处理循环到步骤4811,其中,为IOP的下一执行填充IOP字段。
如果已经分配的传输请求少于七个(步骤4840的“否”结果),则处理循环回到步骤4812,并且开始发出下一传输请求的处理。注意,新传输请求将获得已被基于紧挨在前的传输请求调整的LBA和传输长度值。
图49图示闪存HEMi(例如,闪存HEMi 307)基于在闪存HEMi的工作列表上存在的传输请求设立用于读或写操作的页面请求的方式。
在步骤4901中,闪存HEMi 307检查它的局部传输请求空闲列表2905,以确定局部传输请求表2901是否包含至少一个空闲存取位置。
如果否(步骤4901的“否”结果),则在步骤4902中,闪存HEMi 307等待,并接着返回到步骤4901。该等待可以是指定的时间段,也可以直到其它任务已经完成执行为止。
一旦存在空闲的局部传输请求可用(步骤4901的“是”结果),则在步骤4903中,闪存HEMi 307使用交叉切换器2201访问它的工作列表,并将该传输请求从工作列表中弹出。
在步骤4904中,闪存HEMi 307使指向下一空闲局部传输请求的指针从局部传输请求空闲列表2905中弹出。
在步骤4905中,闪存HEMi 307使用交叉切换器2201访问共享RAM块318中的传输请求表4111,并且将由工作列表指向的传输请求从表4111复制到来自局部传输请求表2901的由从局部传输请求空闲列表2905中弹出的指针指向的存取位置中。
在步骤4906中,来自传输请求LBA字段3903的值被复制到被称为LBAvar的变量中。
在步骤4907中,来自传输请求传输长度字段3904的值被复制到被称为TLvar的变量中。
在步骤4908中,来自传输请求数据路径DRAM指针字段3905的值被复制到被称为DPvar的变量中。
在步骤4909中,闪存HEMi使页面请求从它的页面请求空闲列表2910中弹出。注意,不需要检查来确定是否存在空闲的页面请求,这是因为,闪存HEMi 307的mRAM包含十八个页面请求,其是可以被闪存HEMi 307一次可以处理的六个局部传输请求要求的最大值。
在步骤4910中,将LBAvar的值除以15。
在步骤4911中,来自步骤4910的结果被用作进入转发表3201的偏移。该查找产生闪存中用于LBA的位置的子组、块和页面的地址信息。注意,来自转发表的端口信息不必要,这是因为,该信息被用在图48的流程图中,以将传输请求发送到所述闪存HEMi,该闪存HEMi仅控制单个端口。
在步骤4912中,将来自转发表的查找的子组、块和页面地址信息存储在页面请求闪存读地址字段4006中。注意,需要读地址用于写到少于一个完整页面的写操作,因为这种写操作需要读-修改-写。在带有传输长度15的页面请求写的情况中,跳过步骤4910-4913,该情况指示要写入完整页面。
在步骤4913中,来自步骤4910的余数被复制到头长度字段4008中。如果存在,其表示基于超级页面的偏移,在该点处开始传输。
在步骤4914中,来自DPvar的值被复制到数据路径DRAM指针字段4004。其指示数据路径DRAM 107中页面请求要读取数据的位置,或者页面请求要写入数据的位置。
在步骤4915中,基于传输请求,填充其它页面请求字段。联系图40如上描述这些字段。如下填充这些字段:
利用指向调用局部传输请求的指针(从局部传输请求空闲列表2905弹出的值)填充调用传输请求字段4002。
基于传输请求的命令字段3907填充命令字段4003。在传输请求写的情况中,如果该写覆盖超级页面的完整的15个LBA(传输长度=15)则利用平常的(plain)写来填充命令字段,或者,如果该写覆盖少于一个完整超级页面,则利用读-修改-写来填充命令字段。
如果命令字段4003识别该事务为写或读-修改-写,则利用要被写的超级页面的物理地址来填充闪存写地址字段4007。联系图54描述识别该超级页面的方式。
状态变量字段4011也在步骤4915中被初始化。
在步骤4916中,将TLvar与值“15”比较。
如果TLvar小于或等于15(步骤4916的“是”结果),则其意味着当前的页面请求表示传输请求所需要的最后一个页面请求。
在步骤4917中,尾长度字段4009被设为15-(TLvar+头长度)。其表示超级页面末端不包括LBA的部分传输。注意,对于传输请求中除最后一个页面请求外的所有页面请求,将尾长度字段设为0。
在步骤4918中,将传输长度字段4010设为TLvar。
在步骤4919中,将指向页面请求的指针放置在传输请求的页面请求指针阵列3913上。
在步骤4920中,来自页面请求指针阵列3913的每个指针被复制到子组队列2911中对应于在步骤4911中的查找中获得的子组的队列上。
在步骤4921中,为调用传输请求在传输请求状态变量3908中设置传输请求“完成”变量。在下次传输请求从局部传输请求队列2904中弹出时将检查该变量,并且其将指示对清理例程的需要。
然后,图49中所描述的处理结束。
如果TLvar大于15(步骤4916的“否”结果),则其意味着当前页面请求对于传输请求不是最后一个页面请求。在步骤4922中,将尾长度字段4009设为“0”。
在步骤4923中,将页面请求传输长度字段4010设为15减去在头长度字段4008中放置的值。对于不在超级页面的开始处开始的传输,其表示进入超级页面的偏移。
在步骤4924中,将指向超级页面的指针放置到传输请求的页面请求指针阵列3913上。
在步骤4925中,从TLvar减去15。
在步骤4926中,将来自传输长度字段4010的值加到LBAvar上。
在步骤4927中,将来自传输长度字段4010的值加到DPVar上。然后,处理循环回到步骤4909,用于新页面请求。
该循环继续,直到传输请求所要求的最后一个页面请求已被传输到子组队列上为止。
图50图示闪存HEMi执行循环。该循环处理传输请求和页面请求的执行。
在步骤5001中,闪存HEMi检查闪存端口,以确定其是否空闲(即,当前未使用于向或从闪存组的传输中)。
如果闪存端口不空闲(步骤5001的“否”结果),则页面请求处理程序不能操作。在步骤5002中,闪存HEMi检查,以确定在局部传输请求队列2904上是否存在任何传输请求。
如果队列包含局部传输请求(步骤5002的“是”结果),则在步骤5003中,闪存HEMi处理队列顶部的局部传输请求。
跟随步骤5003之后,或者,如果队列不包含局部传输请求(步骤5002的“否”结果),则在步骤5004中,闪存HEMi检查,以查看闪存HEMi的工作列表(例如,工作列表4107)上是否存在任何传输请求。
如果工作列表包含指向传输请求的指针(步骤5004的“是”结果),则在步骤5005中,闪存HEMi检查,以查看局部传输请求空闲列表2905是否包含任何空闲的局部传输请求。
如果有局部传输请求可用(步骤5005的“是”结果),则在步骤5006中,闪存HEMi处理工作列表顶部的传输请求,其包括将传输请求复制到闪存HEMi的mRAM中以及产生页面请求(见图49)。
跟随步骤5006、或者如果工作列表上没有传输请求(步骤5004的“否”结果)、或者如果没有空闲的局部传输请求(步骤5005的“否”结果),则在步骤5007中,闪存HEMi检查当前状态,以确定其是否需要进入休眠模式。例如,如果作为步骤5001、5002以及5004的“否”结果,已经到达步骤5007,则闪存HEMi不能对任何页面请求或传输请求操作,因此将进入休眠模式。如上所解释,通过进入休眠状态,闪存HEMi节电,并且在传输请求被加入到工作列表情况下允许其自身迅速响应。
在不同的实施例中,当其它任务不可得时,闪存HEMi不进入休眠状态,而是调用巡逻(patrol)功能处理程序。将在下文描述,该巡逻功能检查超级页面的错误,并且如果必要,校正这些错误。
在步骤5008中,闪存HEMi计算所需要的休眠时间段。其基于当前状态,并被设计来在任何执行任务完成之前唤醒闪存HEMi。因此,例如,如果闪存端口正被级缓冲器用于闪存传输,则闪存HEMi检查闪存传输计数寄存器2712,以确定传输的剩余部分将花费多久,并接着设置休眠模式时间段,以便休眠模式将在传输完成之前结束。如上所解释,通过重复一系列的空指令来设置休眠模式,从而基于所需要的休眠时间段确定所使用的空指令的数量。
在步骤5009中,闪存HEMi进入休眠模式。当其从休眠模式离开时,处理返回到步骤5001。
如果步骤5001的检查指示闪存端口是空闲的(步骤5001的“是”结果),则在步骤5010中,闪存HEMi检查子组位图2920,以确定是否有任何子组(a)被子组队列的顶部的页面请求需要(设置了需要子组标志)以及(b)准备好(设置了子组R标志)。
如果没有(步骤5010的“否”输出),则处理进行到步骤5002,以确定是否需要处理任何传输请求。
如果有子组既被需要又准备好了(步骤5010的“是”结果),则在步骤5011中,当前子组被设为满足这两个标准的最低子组。例如,如果子组位图2920指示子组0、2和4都具有所述两个标志被设置,则步骤5011将选择子组0。
在步骤5012中,检查所选择的子组队列(本实施例中的队列0)的顶部上的页面请求的状态变量字段,以确定该页面请求是否需要某些资源(例如,DMA信道)。如果页面请求需要资源(步骤5012的“是”结果),则在步骤5013中,闪存HEMi确定该资源是否可用。注意,对于闪存端口不需要检查,这是因为,在步骤5001中确认了它的可用性。
如果必要的资源可用(步骤5013的“是”结果),或者如果不需要资源(步骤5012的“否”结果),则处理进行到5014,在其中,检查包含在所选择的子组队列的顶部的页面请求中的命令字段,以确定命令是读、读-修改-写还是擦除,并且调用和执行合适的页面请求处理程序。
在页面请求处理程序返回之后,到达步骤5015。在该步骤中,检查来自处理程序的返回值,以确定该处理程序是否已经使用了闪存端口。
如果处理程序使用了闪存端口(步骤5015的“是”结果),则因为闪存端口现在忙碌,不能执行此外的页面请求,并且处理进行到步骤5007,用于确定闪存HEMi是否可以进入休眠模式。
如果处理程序未使用闪存端口(步骤5015的“否”结果),或者如果没有足够的资源可用于页面请求(步骤5013的“否”结果),则在步骤5016中,闪存HEMi检查子组位图2920,以确定是否有更高编号的子组既被需要又准备好。在以上给定的示例中,其中,子组0、2和4被需要且准备好,并且处理了子组0,步骤5016的结果将为“是”,这是因为子组2比子组0高,而且被需要并准备好。另一方面,如果步骤5014已经处理了子组4,则在该示例中,步骤5015的结果将是“否”,这是因为,即使子组0和2仍保持被需要且准备,也没有比4高的子组满足该条件。
如果有更高编号的子组既被需要又准备好(步骤5016的“是”结果),则在步骤5017中,当前子组被设为该更高编号的子组。然后处理返回到步骤5012,其中对步骤5017所选择的子组调用资源检查。
如果没有更高编号的子组既被需要又准备好(步骤5016的“否”结果),则处理返回步骤5004,以处理工作列表上的任何传输请求。注意,即使始终存在准备好处理的页面请求,处理也不返回到循环的顶部(步骤5001),以便确保页面请求处理程序循环将被周期性地中断,从而允许传输请求被定期地处理。
只要系统被加电,该循环便无限地继续。
图51图示了页面请求读处理程序。该流程图示出了:如果页面请求包含读命令,则在步骤5014中进行的步骤。
在步骤5101中,检查页面请求状态变量字段4011,以确定页面请求在哪个状态。一般地,页面请求读经过三个状态进行:命令、需要级缓冲器、以及闪存传输完成。在每个状态之后,处理程序返回到图50所示的执行循环的步骤5015。注意,在命令和需要级缓冲器阶段之后,页面请求保持在子组队列的顶部,从而,在这样的返回之后,闪存HEMi执行循环将在以后返回到相同的页面请求。
如果命令状态被设置(步骤5101的“命令”结果),则在步骤5102中,闪存HEMi为与页面请求弹出的子组队列关联的闪存子组建立(assert)CS信号(例如,在线703上建立CS)。
在步骤5103中,闪存HEMi建立CLE信号803,并将读命令的第一操作码(opcode)置于总线709上。闪存HEMi知道基于页面请求命令字段4003中读命令的存在来使用该操作码。CLE信号的建立需要在由CS信号所选择的子组中的闪存电路小片使能它们的命令锁存,从而在总线709上发送的比特将被作为命令锁存。
在步骤5104中,闪存HEMi建立ALE信号802,并且将用于读的物理地址置于总线709上。从闪存读地址4006中获得用于闪存页面的该地址。如果传输以一偏移、而不是在开头处开始进入页面,则从头长度字段4008中取得该偏移,并将其作为地址的一部分发送。该偏移被用于设置页面缓冲器中向总线709的传输将开始的位置。注意,没有理由发送在页面末端的偏移(尾长度),这是因为,一旦已经发送了合适数量的字节,则传输长度字段4010被用来停止该传输。
因为用于正确的子组的CS信号保持被建立,所以,该子组上的闪存电路小片接收ALE信号。该信号使它们将总线709上的比特锁存到它们的地址锁存中。如果上所解释,所有四个电路小片接收相同的地址,并且,其是每个电路小片中一个页面数据的起始地址。还如上所解释,子组的每个电路小片中的相同地址处的四个页面构成超级页面,并且,超级页面表示15个区段,其构成与15个连续LBA关联的内容。
在步骤5105中,闪存HEMi建立CLE信号803,并且将读命令的第二操作符置于总线709上。CLE信号的建立需要由CS信号所选择的子组中的闪存电路小片使能它们的命令锁存,从而在总线709上发送的比特将被作为命令锁存。当闪存电路小片接收到第二读操作码时,它们自动地开始从闪存中的之前所指定的地址向页面缓冲器读取。
在步骤5106中,闪存HEMi更新页面请求状态变量字段4011。在其它更新之中,当前状态被设为需要级缓冲器。
在步骤5107中,因为为命令状态所执行的系列步骤使用了闪存端口,但该使用很短并已完成,所以,返回值被设置为闪存端口不忙碌。
然后,页面请求读处理程序返回到图50的步骤5015。
第二次为该页面请求调用处理程序时,作为步骤5014的结果,在步骤5101中检查的状态是需要级缓冲器。
在步骤5108中,检查级缓冲器,以确定其是否空闲。如果不是(步骤5108的“否”结果),则页面请求读处理程序返回而不进行任何动作。如果级缓冲器是空闲的(步骤5108的“是”结果),则在步骤5109中,级缓冲器被分配给该处理。
在步骤5110中,闪存HEMi设立从闪存页面缓冲器(其由于闪存读而包含从闪存读出的值)到级缓冲器的DMA传输。
在步骤5111中,闪存HEMi更新页面请求状态变量字段4011。在其它更新中,当前状态被设为闪存传输完成。这反映了闪存传输将独立于闪存HEMi而发生的事实,因为这是DMA传输。在下次调用处理程序时,闪存传输将完成。
在步骤5112中,因为在页面请求读的处理程序返回之后、闪存页面缓冲器与级缓冲器之间的DMA传输将占用闪存端口一段时间,所以返回值被设为闪存端口忙碌。
然后,页面请求读的处理程序返回到图50的步骤5015。
在第三次为该页面请求调用处理程序时,作为步骤5014的结果,在步骤5101中检查的状态是闪存传输完成。
在步骤5113中,闪存HEMi确定作为向级缓冲器传输的一部分自动执行的ECC检查是否在读取的数据中识别了任何错误。
如果检测到了错误(步骤5113的“是”结果),则在步骤5114中,调用错误处理程序。处理程序进行的方式取决于所检测的错误的性质和数量。如果所检测的数量太大而不能校正,则错误处理程序可能使该数据被第二次读取,希望第二次读将产生更好的数据(如在一个或多个闪存单元接近有效数据与错误之间的阈值的情况下所可能的)。如果所检测错误的数量可以被校正,则错误处理程序可以通过ECC校正引擎3101校正数据(见联系图31的讨论)。
在步骤5115中,闪存HEMi设立从级缓冲器(其包含从闪存页面缓冲器读取的作为需要级缓冲器状态处理的结果的值)到数据路径DRAM107的DMA传输。
在步骤5116中,页面请求读的处理程序等待。因为向DRAM的DMA传输非常块,所以,读处理程序此时不返回,而是暂时停止。
在步骤5117中,闪存HEMi检查,以查看传输计数寄存器2716是否具有0的值,其指示DMA传输完成。如果不是(步骤5117的“否”结果),则等待步骤5116被重复。一旦DMA传输完成(步骤5117的“是”结果),则在步骤5118中,为其它操作的使用释放级缓冲器。
在步骤5119中,将页面请求从子组队列中弹出。因为不需要该页面请求的进一步处理,并且现在可以处理子组队列上的下一页面请求,所以完成这一步。
在步骤5120中,闪存HEMi递减传输请求剩余页面请求字段3912,反映该页面请求已经完成的事实。
在步骤5121中,闪存HEMi检查,以确定剩余页面请求字段是否已经到达0。
如果该字段已经到达0(步骤5121的“是”结果),则其意味着用于该传输请求的所有页面请求已完成。在步骤5122中,传输请求被添附到局部传输请求队列2904中,从而其将被闪存HEMi执行循环处理。注意,此时,传输请求具有完成的状态(见图49,步骤4921),从而,一旦其从局部传输请求队列中弹出,则将发起清理处理(见下文)。
如果对传输请求有额外的页面请求剩余(步骤5121的“否”结果),或者当步骤5122完成时,则到达步骤5123。在步骤5123,返回值被设为闪存端口不忙碌。
然后,页面请求读处理程序返回到图50的步骤5015。
图52更详细地图示闪存读操作的某些方面。
在步骤5201中,闪存HEMi驱动CS/RB总线702中的一条为低。随后反转该信号,使得信号在所选择的闪存子组的四个闪存芯片的芯片使能引脚上被接收为高。
在步骤5202中,闪存HEMi驱动CLE信号803为高。这通知所选择的子组上的电路小片:下一组信号将包括命令。
在步骤5203中,闪存HEMi驱动构成总线709上的读命令的第一阶段的八个比特。如在闪存器件中惯常的,读命令的第一阶段指示闪存电路小片准备接收读地址。命令的第一阶段构成八个比特,并且四个副本在32位的总线709上被并行地驱动。例如,如果第一读命令是操作码08,则总线709上的信息将是08080808,并且,命令的一个副本将被递送到每个电路小片。因为CLE先前已经被驱动为高,并且在所选择的子组的每个电路小片的CLE引脚上被接收,所以,子组上的每个电路小片将该命令锁存到它的命令锁存中。
在步骤5204中,闪存HEMi建立CLE信号为低,ALE信号802为高。这使闪存电路小片准备接收地址。
在步骤5205中,闪存HEMi发送要被读的地址的一个字节。这通过在总线709上发送地址的四个副本而完成。其使得该字节被锁存到所选择的子组上的每个闪存电路小片的地址锁存中。
在步骤5206中,闪存HEMi确定是否已经发送了所有地址。如果不是(步骤5206的“否”结果),则处理返回到步骤5205,以发送下一地址字节。在当前的优选实施例中,每个地址由五个字节构成,所以该循环将重复四次。
在当前的实施例中,五次地址选通(strobe)足以为闪存电路小片提供完全的地址。然而,典型的闪存芯片忽略超过芯片所需要的地址位的地址选通。为此原因,闪存电路小片可以被更小和更廉价的闪存芯片取代,而不需要寻址机制的任何重设计,因为虽然更小的闪存芯片将需要更少的地址字节(例如,四个字节而不是五个),但这些芯片将忽略所接收的任何不必要的地址字节,从而它们将被合并到该系统中,而不需要降低地址周期数。类似地,通过增加地址周期数,并因此增加地址字节数,系统可以被设计来处理任意大小的闪存芯片,而不需要对更小的芯片的任何地址相关的重新设计。
一旦已经发送了整个地址(步骤5206的“是”结果),处理以步骤5207继续,在其中,CLE被建立并且ALE被撤销(deassert)。
在步骤5208中,在A/D总线上发送读命令的第二阶段。传统上,读命令的第二阶段使闪存芯片开始从闪存电路小片向页面缓冲器的读取。
在步骤5209中,闪存电路小片每个都设置它们的准备好/忙碌引脚为忙碌。如上所述,这些引脚每个都连接到进一步连接到SSD控制器106的引脚上的一个CS/RB线上。这使得闪存HEMi辨认出闪存子组是忙碌的而不能接收额外的命令。联系图11详细地描述建立忙碌信号的方式。
在步骤5210中,每个闪存电路小片从所请求的闪存地址将数据提取到电路小片的内部页面缓冲器中。
在步骤5211中,来自闪存子组的R/B信号转变为“准备好”状态,其意味着所有四个来自电路小片的准备好/忙碌引脚已经从“忙碌”状态转变到“准备好”的状态,指示所请求的数据存在在每个芯片的页面缓冲器中,并且可被读取到总线709上。
在步骤5212中,闪存HEMi建立RE。作为传统,其使得在所影响的子组上的电路小片的页面缓冲器每个读取单个字节到总线709上。这四个字节构成一个双字。该双字被传输到级缓冲器。
在步骤5213中,递增闪存传输计数寄存器2712。该寄存器保持要被传输的双字的数量。如果该读仅将传输页面的一部分,则闪存传输计数寄存器在合适的点停止传输,即使页面缓冲器中可能存在额外的数据也是如此。下次使用该页面缓冲器时覆写所述额外数据。
在步骤5214中,检查闪存传输计数寄存器,以确定其是否已达到0。如果不是(步骤5214的“否”结果),则处理返回步骤5212,以到达(clock out)下一双字。
如果闪存传输计数为0(步骤5214的“是”结果),则从闪存的传输完成。此时,数据在级缓冲器中。如上所述,接着,从级缓冲器将数据传输到数据路径DRAM,并且从那里通过主机端口传输到主机。
图53图示作为图50的步骤5014的部分的页面请求写处理程序的处理。如本领域的普通技术人员所理解,闪存写不用新数据覆写闪存页面,而是用包含新数据的新闪存页面取代旧闪存页面,并将旧页面无效。因此,如果写仅改变页面的部分,则必须在被称为读-修改-写的操作中将未改变的页面部分复制到新页面中。
页面请求写处理程序从步骤5301开始,其检查页面请求状态变量4011。在读-修改-写操作的情况中,状态从将状态变量设置为命令开始。
在命令状态的识别之后的处理(步骤5302-5307)与读处理程序中命令状态的识别之后的处理(图51,步骤5102-5107)类似,这里将不再描述(应该理解,在实际软件实施例中这两组步骤可以被组合到单个软件例程中)。该处理以状态变量被设为需要级缓冲器和级1而结束。此时,闪存已被设立来读取包含受制于所述写的LBA的超级页面。写处理程序退出,并且,控制返回闪存HEMi执行循环(图50,步骤5015)。
需要级缓冲器1状态的处理(步骤5308-5312)与读处理程序中需要级缓冲器状态的识别之后的处理(图51,步骤5108-5112)类似。注意,虽然所影响的页面的全部存在在闪存页面缓冲器中,仅包含在写中不改变的LBA的区段被复制到级缓冲器中。该处理以状态变量被设为需要级缓冲器2而结束。写处理程序退出,并且控制返回到闪存HEMi执行循环(图50,步骤5015)。
在步骤5301中的需要级缓冲器2状态的识别之后的处理从步骤5313开始,其中,进行关于ECC逻辑3102是否从闪存的数据读中检测到任何ECC错误的确定。
如果检测到错误(步骤5313的“是”结果),则在步骤5314中,调用错误处理程序。该处理程序进行的方式取决于所检测的错误的性质和数量。如果所检测的错误的数量对于校正来说太大,则错误处理程序可以使数据读取第二次,希望第二次的读取将产生更好的数据(如在一个或多个闪存单元的状态接近有效数据与错误之间的阈值的情况下所可能的)。如果所检测的错误的数量可以被校正,则错误处理程序可以使得通过ECC校正引擎3101校正数据(见联系图31的讨论)。
如果未检测到错误(步骤5313的“否”结果),则在步骤5315中,设立DRAM到级缓冲器DMA的传输。一旦闪存HEMi设立了DMA传输,则DMA传输在没有HEMi进一步干预的情况下自动进行。注意,该传输仅包括对应于在写中改变的LBA的数据,并且该数据与从闪存中接收的数据合并,从而在该步骤之后,级缓冲器保持整个超级页面(四个页面)的数据,包括新写入的LBA以及对于来自超级页面中的未被覆写的LBA的旧数据。
步骤5316和5317与图51中的步骤5116和5117相同,将不再描述。
在步骤5318中,设置CS信号。该步骤与图51中的步骤5102相同。
在步骤5319中,设置CLE,并且将第一写操作码发送到闪存。该步骤与图51中的步骤5103类似地操作。
在步骤5320中,设置ALE,并且将用于写的地址发送到闪存。该步骤与图51中的步骤5104相同。
在步骤5321中,闪存HEMi设立从级缓冲器到闪存的DMA传输。然后,该传输自动发生,而没有闪存HEMi的进一步参与。
在步骤5322中,闪存HEMi更新页面请求状态变量,以指示下一状态是闪存传输完成。
在步骤5323中,将返回值设为闪存端口忙碌,跟随其后,写处理程序退出,并且控制返回到闪存HEMi执行循环(图50,步骤5015)。此时,将数据的超级页面从级缓冲器传输到闪存页面缓冲器,并且已经为从闪存页面缓冲器到闪存单元的写设立了闪存。
在下次调用写处理程序时,在步骤5301中识别闪存传输完成状态。在步骤5324中,设置CS。其与图51的步骤5102相同。
在步骤5325中,设置CLE,并且将第二写操作码发送到闪存。这使得闪存将值从闪存页面缓冲器写入闪存。
在步骤5326中,释放级缓冲器,以用于其它操作的使用。
在步骤5327中,闪存HEMi更新页面请求状态变量,以指示下一状态是页面请求完成。
在步骤5328中,将返回值设为闪存端口不忙碌,并且,写处理程序退出,并将控制返回到闪存HEMi执行循环(图50,步骤5015)。此时,将数据从闪存页面缓冲器发送到闪存单元。
在步骤5301中的页面请求完成状态的识别之后的处理从步骤5329开始,其中,进行检查,以确定在写上是否检测到任何错误。
如果检测到错误(步骤5329的“是”结果),则在步骤5330中,调用错误处理程序。该步骤与步骤5314类似地操作。
如果未检测到错误(步骤5329的“否”结果),则处理在步骤5331到5335中继续,它们与图51的步骤5119-5123相同。其后,写处理程序完成并退出,并且控制返回到闪存HEMi执行循环(图50,步骤5015)。
图53中所述的处理图示了读-修改-写操作。如果页面请求的传输长度是15,其指示写将替换整个超级页面,则该操作的读-修改部分不必要,并且不使用该命令和需要级缓冲器1路径。替代地,页面请求状态变量从需要级缓冲器2状态开始。
如上所述,在写操作的情况中,需要闪存HEMi向页面请求分配超级页面。图54中的流程图图示该处理。
在步骤5401中,闪存HEMi使用由传输请求分配给页面请求的第一个LBA作为用于进入转发表3201的查找的索引,并且识别当前保持与LBA关联的数据。
在步骤5402中,闪存HEMi检查超级页面指针列表2919,以确定子组上是否有任何可用的超级页面。选择用于读-修改-写的子组设法使用相同子组上的超级页面作为保持原始数据的超级页面。这大大增强性能,这是因为,可以通过从闪存向闪存页面缓冲器的数据读处理事务的读取侧,而不需要任何向级缓冲器的读。然后,在页面缓冲器中合并新和旧的数据。通过避免向级缓冲器的读,该方法提高了写操作的性能,并避免了占用闪存接口,从而使其空闲用于其它事务。
如果子组上有超级页面可用(步骤5402的“是”结果),则处理进行到步骤5403,其中,在超级块元数据表3501中检查对应于超级页面的条目,以确定超级页面是否已被识别为有缺陷。
如果超级页面是有缺陷的(步骤5403的“是”结果),则处理进行到步骤5404,其中,跳过有缺陷的超级页面。然后,处理返回步骤5402。
如果超级页面是无缺陷的(步骤5403的“否”结果),则处理进行到步骤5412,下文对其描述。
如果子组上无可用的超级页面(步骤5402的“否”结果),则在步骤5405中,闪存HEMi递增子组,由此移动到下一子组,并且如果必要,轮转回到子组0。
在步骤5406中,闪存HEMi确定其是否已经检查了闪存组中的所有子组(即,当前子组是否与被检查的第一个子组相同)。如果不是(步骤5406的“否”结果),则闪存HEMi返回到步骤5402,以确定下一子组上是否有超级页面可用。注意,作为步骤5405中递增的结果,每次检查通过新子组。
如果检查了所有的子组并且无超级页面可用(步骤5406的“是”结果),则当前开放的超级块满了且必须被关闭,而且必须开放新超级块。在步骤5407中,闪存HEMi将用于当前开放的超级块的超级块元数据表3501从数据路径DRAM 107复制到开放的超级块的子组0的超级页面0。这通过发出用来移动数据的内部传输请求而被完成。在复制操作之前,设置该表的关闭标志3509。
在步骤5408中,闪存HEMi使下一超级块从超级块空闲列表2912中弹出,并且将该超级块的标识符复制到开放的超级块指针2914中。
在步骤5409中,闪存HEMi将当前时间写入对应于新开放的超级块的反转表(例如,反转表3205)中的时间戳字段中。
在步骤5410中,闪存HEMi将超级块元数据表从新开放的超级块的子组0的超级页面0复制到数据路径DRAM 107的超级块元数据表3501中。此时,除缺陷和擦除计数信息以及开放标志3508(其被设置)之外,该表是空白的。
在步骤5411中,闪存HEMi初始化超级页面指针列表2919。因为超级块元数据表占用了超级页面0,所以,用于子组0的所述指针被设置到超级页面1。所有其它指针被设为超级页面0。然后,处理返回到步骤5402,用于向页面请求分配超级页面。
如果子组上有无缺陷的超级页面可用,则到达步骤5412(步骤5403的“否”结果)。在步骤5412中,闪存HEMi将指针列表上的下一超级页面分配给页面请求,从当前子组选择条目。闪存HEMi将超级页面的地址写入页面请求的闪存写地址字段4007中。注意,因为闪存地址的特征在于端口、子组、块和页面,所以整个地址可得。因为该闪存HEMi仅对单个端口操作,所以不需要端口信息,而且,基于用于识别使用了哪个超级页面列表的超级块标识符、超级页面号以及子组的组合,子组、块和页面信息可得。
在步骤5413中,闪存HEMi通过递增用于相关子组的指针而更新超级页面指针列表,以反映在步骤5412中分配的超级页面。
然后,该操作的处理结束。
在图55中描述完成的事务的清理。在该流程图中描述的处理被作为图50的步骤5003的部分执行。此时,作为页面请求处理程序确定用于传输请求的最后一个页面请求已经完成的结果(例如,图51,步骤5122),作为主机发起的读或写命令的部分调用的传输请求在局部传输请求队列上。
在步骤5501中,传输请求从局部传输请求队列中弹出。由在闪存HEMi上运行的传输请求处理程序执行步骤5501到步骤5504。
在步骤5502中,检查传输请求状态变量字段3908。一般地,队列上的传输请求将具有完成的状态(见,例如图49,步骤4921),主要例外是作为垃圾收集例程的部分调用的传输请求。在该情况中,因为传输请求来自于完成的读或写命令,所以其具有完成的状态。
在步骤5503中,将在页面请求指针阵列3913中识别的页面请求放置在页面请求空闲列表2910上。这些页面请求现在可用于被其它传输请求使用。
在步骤5504中,将内部传输请求放置在局部传输请求空闲列表2905上。该内部传输请求现在空闲,以被分配给闪存HEMi的外部工作列表上的传输请求。传输请求处理程序调用在闪存HEMi上运行的IOP处理程序,并终止。
在步骤5505中,在闪存HEMi上运行的IOP处理程序递减在传输请求的调用IOP字段3902中识别的IOP的剩余传输请求字段3808。注意,此时,IOP不在任何HEMi的工作列表上,从而,即使它不在闪存HEMi的工作列表上,也允许闪存HEMi访问它。
在步骤5506中,闪存HEMi确定剩余传输请求字段是否已达到0,其指示IOP不具有有效的传输请求。
如果该值大于0(步骤5506的“否”结果),则传输请求处理程序结束。因为IOP还未完成,所以不需要清理。
如果该值是0(步骤5506的“是”结果),则在步骤5507中,将IOP放置在用于与在IOP的主机端口字段3803中识别的端口关联的传送HEMi的工作列表上。然后,在闪存HEMi上运行的IOP处理程序终止。
在步骤5508中,评估IOP命令字段3806,以确定IOP是否涉及读或写命令。由在传送HEMi上运行的IOP处理程序执行这个以及所有后续步骤。
如果命令是读命令(步骤5508的“是”结果),则在步骤5509中,传送HEMi设立数据帧和向主机传输数据所必需的其它帧,并且将这些帧传送到主机。
在步骤5509之后,或者如果命令是写而不是读(步骤5508的“否”结果),则在步骤5510中,传送HEMi向主机传送指示命令已被完成的状态帧。
在步骤5511中,传送HEMi(a)将在IOP CDBinfo字段3805中识别的CDBinfo放置在CDBinfo空闲列表4102上,(b)将IOP放置在IOP空闲列表4103上,以及(c)将在IOP传输请求指针阵列3809中识别的传输请求放置在传输请求空闲列表4104上。
在步骤5512中,传送HEMi清理各种其它数据结构,以反映CDBinfo和IOP的关闭。例如,传送HEMi递减用于在IOP启动器字段3804中识别的启动器的启动器信息条目中的计数字段4203。
然后,清理处理结束。
C.垃圾收集
垃圾收集是释放闪存空间用于新写入的处理。当与每个端口关联的闪存HEMi确定是否需要垃圾收集用于与该端口关联的闪存组,并且如果必要执行垃圾收集操作时,在闪存端口上以闪存端口为基础执行该处理。
每个闪存组包括大量超级块,这些超级块处于三个状态之一:(1)开放(当前对写开放的单个超级块);(2)关闭(已被写入数据的超级块,但其不再对写开放);以及(3)空闲(超级块空闲列表2912上的超级块,其已被擦除并可用于将来的写)。关闭的超级块通常包括有效超级页面(包含带有当前有效的数据的区段)和无效超级页面(包含带有对应于已被后续地写入其它地方而因此不再有效的LBA的数据的区段)的组合。如联系图34所解释,在用于闪存组的反转表中如此指定无效超级页面。
为了操作,每个闪存组需要空闲超级块,这是因为,如果开放的超级块未包含用于写的足够空间(即,在超级页面指针列表2919上没有示出空闲超级页面),则该超级块必须被关闭,必须开放来自超级块空闲列表的超级块,并且,必须将新数据写入新开放的超级块中。垃圾收集是整合(consolidate)数据来为未来的写释放超级块的处理。
返回到图29,在当前的优选实施例中,在每次从超级块空闲列表2912分配超级块时,递减相关闪存HEMi的mRAM中的超级块空闲列表计数器2913。该计数器包含当前在超级块空闲列表2912上的超级块的数量。
在递减计数器2913之后,将计数器当前保持的值与在闪存HEMi的mRAM的垃圾收集阈值段2915中保持的两个值(临界阈值和非临界阈值)比较。在当前的优选实施例中,在初始化时,将这些值分别设置为缺省值“2”和“6”,但如下所讨论,可以使用其它值。此外,这些值是可编程的,因此可以由用户改变。
如果计数器值(以及因此的超级块空闲列表上的超级块的数量)在临界阈值或低于临界阈值,则设置临界标志,并且,闪存HEMi移入临界垃圾收集模式,其中垃圾收集操作优先于包含主机读和写的所有其它操作。这继续直到计数器值(以及因此的超级块空闲列表上的超级块的数量)超过临界阈值为止,这引起临界标志被复位。
如果计数器值大于临界阈值、但在非临界阈值点或低于非临界阈值,则闪存HEMi移入非临界垃圾收集模式,并且发起垃圾收集操作,但仅在已经处理了所有主机发起的读和写之后。如果可用的空闲空间量大于非临界阈值,则垃圾收集不发生。
在当前的优选实施例中,临界阈值被设为2,这是因为,所有时候都至少需要一个空闲的超级块,以确保可以接纳即将到来的写,并且,需要一个附加的超级块来针对临界标志被设置之前在局部请求队列2904上的传输请求可能用光附加超级块的可能性提供保护。注意,甚至在临界模式中,已经在局部传输请求队列上的传输请求也将在垃圾收集传输请求之前被闪存HEMi处理,该垃圾收集传输请求与所有其它新传输请求一样被添附到局部传输请求队列2904的底部。
在当前的优选实施例中,非临界阈值被设为“6”,其表示降低垃圾收集的频率(需要更低的数)与最小化主机发起的写的序列可能被对临界模式垃圾收集的需要中断的可能性(需要更高的数)之间的折衷。在替代实施例中,该数可以被设得略高或略低。注意,更低的数将倾向降低垃圾收集的频率,并因此将增加超级块在被垃圾收集之前保持关闭的时间量。由于随着时间的过去超级块包含的有效数据量将倾向减少(因为超级块中的有效超级页面是新写入的主题,所以被无效),因此垃圾收集对更老更旧的超级块更有效率,这是因为,这种超级块包含更少的必须被复制到开放的超级块中的有效信息。因此,将非临界阈值设置为更低的值倾向于通过增加给定超级块在被垃圾收集前关闭的时间量而提高垃圾收集操作的效率。然而,再次,这是一种折衷,因为该数越低,将越有可能达到临界阈值,此时,系统性能将下降,这是因为临界模式垃圾收集优先于常规读和写。
在图56所示的流程图中图示垃圾收集的处理。
垃圾收集的需要选择用于擦除的超级块。这在步骤5601中表示。因为其需要将来自所选择的超级块中的有效超级页面的数据写到当前开放的超级块中,所以,选择具有最少量有效数据的超级块是合理的。因此,当发起垃圾收集时,相关的闪存HEMi对用于闪存组的反转表中的每个超级块检查计数字段,从最近加入到超级页面空闲列表中的超级块之后的超级块开始(例如,如果作为垃圾收集的结果而加入到空闲列表的最后一个超级块是17,则在下一次垃圾收集操作中第一个被检查的超级块计数字段将是超级块18),并且以编号顺序经过每个超级块进行,回卷到超级块0。
闪存HEMi利用最高的计数字段值(指示最大数量的无效页面)选择超级块。如果对于最高计数字段,多于一个超级块是持平的,则在当前的优选实施例中,选择所遇到的第一个这种超级块用于垃圾收集。在可选的实施例中,可以通过对每个持平的超级块检查超级块元数据表(或反转表)中的擦除计数字段来打破持平,其中选择具有较低擦除计数的超级块。该选择具有施加一定程度的磨损均衡的优点。本领域的普通技术人员将理解,擦除操作倾向造成对闪存的损耗,从而具有更高次数擦除的那些块将趋向具有更高数量的缺陷。该类型的磨损均衡趋向横跨块平均化缺陷数量,然而付出了在每个垃圾收集之前施加额外操作的代价。
一旦超级块被选择用于垃圾收集,则在步骤5602中,关联的闪存HEMi创建足够将数据从该超级块中的每个有效的超级页面移动到当前开放的超级块中的一系列内部传输请求。
内部传输请求由特定闪存HEMi发出并专用于特定闪存HEMi。它们与常规传输请求的不同在于:内部传输请求仅被保持在发出请求的闪存HEMi的mRAM中,而永远不存储在共享RAM中或被任何其它HEMi操作。因为内部传输请求不作为IOP的结果而被调用,所以每个内部传输请求的调用IOP字段3902被留为空白。
如上所述,每个传输请求可以发出三个页面请求,并且每个页面请求可以引起一个超级页面数据的传输。因此,闪存HEMi需要发出以移动数据的内部传输请求的数量将等于超级块中的有效超级页面的数量除以3(向上取整)。
在当前的优选实施例中,假定每个闪存组八个块,每个超级块包含512个超级页面(每个块64个超级页面×8),所以,理论上,垃圾收集可能需要发出171个传输请求(不过,应该理解,如果超级块中的每一个超级页面都是有效的,则在对超级块执行垃圾收集将没有意义)。然而,实践中,因为被选择用于垃圾收集的超级块倾向具有相对较少的有效超级页面,所以需要远小于171个传输页面。
在步骤5603中,执行作为在步骤5602中设立的传输请求的结果而发出的页面请求。应该理解,步骤5602和5603将很可能重叠,这是因为,要求用于从旧超级块向开放的超级块移动有效超级页面的传输请求的数量将可能超过6,其是可以同时被闪存HEMi处理的传输请求的数量。因此,某个数量的传输请求将被分配,然后,将为这些传输请求执行页面请求,并且当每个传输请求完成时,它在局部传输请求表2901中的存取位置将开放,从而允许闪存HEMi发出新传输请求。
除了没有外部数据之外,将数据从有效页面请求复制到当前开放的超级块中的操作与常规写操作类似。如上文联系超级页面指针列表2919的描述所描述的,优选地,写对在与将被该写无效的超级页面所在子组相同的子组上的超级页面发生。这最小化所需要的传输的数量,这是因为,从闪存子组的一个位置到同一子组中的另一位置的写不需要将数据移动到闪存级缓冲器,而可以通过将数据从闪存写入闪存页面缓冲器并接着从闪存页面缓冲器写入闪存来完成。这大大快于需要将数据传输到级缓冲器的移动,并且不占用将级缓冲器与闪存组连接的总线。
使用超级页面指针列表2919,垃圾收集写优先针对同一子组。一个页面请求可以处理从闪存的读与向闪存的写两者,所以单个传输请求可以处理三个有效超级页面。与常规写一样,每次来自有效超级页面的数据被复制到新位置时,更新转发表3201中对应于这些LBA的条目。
在将数据从旧超级块移动到开放的超级中的传输请求之后,在步骤5604中,发出三个传输请求,一共包含七个页面请求(各有三个页面请求在开始的两个传输请求中,且一个页面请求在第三个传输请求中)。这些页面请求中的每个对单个块执行闪存擦除命令。如上所述,每个超级块在端口的八个子组的每个中包括相同的块。因此,每个页面请求在不同芯片选择(chip select)上擦除相同的块。如本领域的普通计数人员将理解的,闪存擦除命令引起向被擦除的块中写入一系列的“1”。这七个页面请求擦除超级块的块1-7。
垃圾收集操作所需的最后一个传输请求包含三个页面请求。在步骤5605中,这些页面请求中的第一个将缺陷列和擦除计数从存储在超级块的子组0、超级页面0中的超级块元数据表(见图35)中复制到闪存级缓冲器中。注意,其驻留于超级块的块0中,不在步骤5604中擦除块0。
在步骤5606中,闪存HEMi递增超级块元数据表中的擦除计数字段3507,反映该超级块现在被擦除了附加的一次的事实。
在步骤5607中,闪存HEMi在数据路径DRAM 107中访问用于闪存组的反转表,将来自该超级块的所有超级页面标记为有效,并将用于该超级块的计数字段设为0。
在步骤5608中,来自最后一个传输请求的第二个页面请求擦除块0。注意,这个以及步骤5609-5610可以与步骤5607并行发生。
在步骤5609中,最后一个页面请求将擦除计数和缺陷数据从级缓冲器复制回到超级块的子组0的超级页面0中,因此,在闪存中设立新的超级页面元数据表,其除了这些条目之外是空白的。
在步骤5610中,将超级块放置回超级块空闲列表2912上,并且递增超级块空闲列表计数器2913。然后,用于该超级块的垃圾收集操作完成。
虽然当前的优选实施例将有效数据从旧超级块复制到当前开放的超级块中,但正如在主机发起的写的情况中所发生的,在替代实施例中,同时具有两个“开放”超级块,一个用于常规读,第二个用于收集来自正在被通过垃圾收集处理回收的超级块的数据。在该实施例中,识别了垃圾收集发起的传输请求(例如,通过传输请求中的垃圾收集标志),并且使得数据被写入开放的垃圾收集超级块,而不是用于主机发起的写的开放超级块。
与当前对写开放的超级块中的有效数据相比,由垃圾收集产生的有效数据相对“旧”。为此原因,将由垃圾收集产生的有效数据复制到垃圾收集超级块中将倾向集中(concentrate)相对旧并因此较不可能被高频率使用的数据。本领域的普通技术人员将理解,不是最近写入的数据在近未来被读或写的可能性大大小于更近的数据。
“垃圾收集”超级块的使用具有在一个或多个超级块中压缩相对旧的数据的优势。因为这种数据被覆写的可能性相对较小,所以这种超级块将倾向用有效数据填充。如果,如上所述,垃圾收集被优先施加于带有相对较高比例的无效数据的超级块,则用作垃圾收集的库(repository)的超级块将很可能它们自身不经受垃圾收集。这具有期望是相对静态的数据将在相对较小数量的超级块中集中、以及该数据将不被垃圾收集的优点,因此不必要经常地将该数据复制到新超级块作为垃圾收集处理的一部分。相反地,用于常规写的超级块将倾向包括经常被使用和重写的数据的集中。因此,这种超级块将倾向包括相对较高比例的无效超级页面。当这种超级块自身经受垃圾收集时,将必须从超级块中复制出来的有效数据的数量将相对较低,从而降低了垃圾收集所需要的时间。
因此,尽管以额外的复杂度为代价,但通过最小化垃圾收集操作所必需的时间量,垃圾收集超级块可以提高性能。
在该替代实施例的扩展中,使用分级的存储器系统,包括相对昂贵的快速存储器和相对较便宜的慢速存储器。用于存储在垃圾收集期间收集的数据的超级块被存储在慢速存储器中,这是由于,这种超级块被预期包括不需要与更近被更新、因此被存储在保持在快速存储器中的超级块中的数据在相同的频率基础上的数据。
D.巡逻功能
如在本领域中所理解,闪存中数据完整性可能因为各种原因而退化(deteriorate)。在每次读期间,页面的单元内的电荷可能轻微地耗散,导致单元中的电压退化直到该电压不再可以被正确地读取为止。相邻页面也可以被读操作影响,从而导致这种页面的单元中的电压退化,即使实际的单元未被读取。这被称为“读干扰”。随着时间的过去,该耗散可以导致单元电压下降到阈值之下,并导致“1”记录为“0”。如果不处理这些错误,则随着时间的过去,可以存在比通过ECC可恢复的错误更多的错误,并且数据损坏可发生。
此外,编程(写)或擦除存储器单元也可降低性能并导致数据错误的增加。例如,当编程或擦除单元时,可能需要提高的电压来使电荷流入或流出浮栅。然而,提高的电压可以对用于形成单元的半导体材料施加压力。随着大量的编程或擦除周期,单元有效地存储存储电荷的能力降低,导致数据中增加的错误。
自闪存单元被写入起的时间量也可对数据不可靠性有贡献。
注意,这些问题可能、也可能不是源自导致超级页面被识别为有缺陷的闪存中的物理缺陷。物理缺陷是永久性的,并且,所影响的超级页面被永久地映射出去而不再被使用。替代地,由超级页面上的一个或多个闪存单元所保持的电荷的降低产生的这些类型的错误是瞬时的。这种瞬时的错误的检测不需要超级页面被识别为有缺陷,并且这些错误本身可以通过使用ECC校正。
然而,ECC仅可以校正每页面给定数目的错误。此外,一旦页面的完整性开始被诸如上面所列举的因素(例如,读干扰、写干扰等)影响,页面上的错误数量将可能随着时间增加,从而,在某些点上,页面上的信息将不可恢复。
错误处理始终是面对企业级闪存存储的最重要的挑战之一。如本领域所公知的,闪存存储具有相对较高的错误率,而且,这被与以下事实结合,即:闪存系统中的错误校正需要使用花费大量系统资源的读-修改-写操作来写入完整页面。
SSD控制器106独特地适合处理闪存错误,这是因为,大量处理器和多个独立的流水线允许SSD控制器106或多或少连续地检测和校正错误,而不降低主机角度的系统性能。
SSD控制器106的设计在错误校正算法上允许很大的选择,这里描述算法中的几个。
在一个实施例中,SSD控制器106使用独立的巡逻功能,其包括:在独立地“巡逻”每个闪存组的每个闪存HEMi上运行的固件,读包含有效信息的每一个超级页面,以及校正超过阈值的错误。图57中图示了该实施例。
图57的流程图从图50的步骤5004的“否”结果开始。如上文联系图50所述,步骤5007-5009在某些情况中可以由巡逻功能取代。
步骤5701表示确定巡逻功能是否正在操作的检查。在一个实施例中,巡逻功能周期性地操作。在该实施例中,该功能检查闪存组中每一个有效的超级页面,然后关闭一段时间。例如,巡逻功能可以每24个小时运行到完成一次。在该实施例中,一旦巡逻功能完成,则其将直到所指定的时间段完成前都不会重新开始,例如,其可以在每个午夜开始,运行到完成(如下所解释,该功能被周期性地中断,以允许其它操作发生),然后关闭直到下一个午夜。
在巡逻功能周期性地运行的实施例中,步骤5701的“否”结果导致图50的步骤5007,其中,闪存HEMi可以进入休眠模式。
在巡逻功能连续地操作(再次,该功能被中断用于其它任务)的实施例中,步骤5701被跳过。在这些实施例中,或者如果巡逻功能是操作中的(步骤5701的“是”结果),则在步骤5702中,进行检查,以确定是否有任何局部传输请求可用。注意,在优选实施例中,这个以及下面某些的步骤不表示独立的巡逻功能程序,而是对通常用于主机发起的读和写(例如,图49)的固件例程的调用。
如果无局部传输请求可用(步骤5702的“否”结果),则处理进行到图50的步骤5007。
如果有局部传输请求可用(步骤5702的“是”结果),则在步骤5703中,局部传输请求被弹出。
在步骤5704中,局部传输请求被填充。一般地,这反映(mirror)用于主机发起的事务(见例如图49)的处理,其中,对命令字段3907使用读命令。然而,用于传输请求的LBA范围基于该闪存组上用于巡逻功能的紧挨在前的反复的LBA范围,并考虑在闪存组之间使用的LBA分条,目标为覆盖分配给闪存组的所有LBA。
在初始化之后巡逻功能第一次运行时(或其在周期性的关闭之后第一次重新开始时),传输请求将被分配存储在闪存组中的90个LBA。下一次,传输请求将被分配存储在闪存组中的接下来的90个LBA,等等,直到到达闪存组中存储的最后一个LBA为止,此时,巡逻功能将从头重新开始(如果其连续地运行),或者关闭,等待下一触发事件(例如,下一午夜)。
巡逻功能使用闪存HEMi mRAM中的数据结构(例如局部变量2916中的变量)追踪最近分配的LBA。
如上所述(见,例如图16和所附讨论),LBA在闪存组之间被分条。因此,巡逻功能不能够简单地将下90个LBA分配给传输请求,而替代地,必须识别已经被分配给闪存组的下一组的90个LBA。这可以通过读整个转发表3201来发现带有与巡逻功能在其上运行的闪存组相等的端口值的下一行而完成。可选地,巡逻功能可以使用与用于首先将LBA分配给闪存组(例如,以90个的分条分配的LBA,带有等于90乘以闪存组的数量的间隙(gap))相同的算法。
在步骤5704中对局部传输请求的填充之后,在步骤5705中,三个页面请求被弹出并被填充,各自接收分配给传输请求的45个LBA中的15个。上文联系图49描述了页面请求被填充的方式。
在步骤5706中,页面请求被发送到子组队列。这是与用于产生页面请求来处理主机发起的事务相同的处理。参见例如图49。
在步骤5707中,执行页面请求读。注意,数据被读到闪存缓冲器,但不被传送到数据路径DRAM 107。替代地,读的唯一目的是触发ECC检查。如上联系图31所述,每次数据被读到存级缓冲器时,ECC检查3104操作,并且,如果发现了错误,则将数据传送到ECC校正引擎3101。
在步骤5708中,检查由ECC检查3104设置的指示器,以确定是否检测到任何读错误。如果没有(步骤5708的“否”结果),则处理进行回到图50的循环的开始。这允许闪存HEMi处理其它非巡逻功能任务,甚至在巡逻功能运行的同时也是如此,并且确保巡逻功能将不显著地降低对于主机发起的读和写的性能。如果无其它操作被要求,则当图50的循环返回到步骤5004时,来自该步骤的“否”结果将再次触发巡逻功能,这次使用45个LBA的新组。
如果检测到读错误(步骤5708的“是”结果),则在步骤5709中,将包含错误的区段发送到ECC校正引擎3101。上文联系图31描述ECC校正。
在步骤5710中,检查由ECC校正引擎3101校正的错误的数量,以确定其是否超过可允许的错误的阈值,当前实施例中该值设为8(见上文,联系图31)。
如果错误的数量等于或低于阈值(步骤5710的“否”结果),则巡逻功能将控制返回到图50的步骤5001。如上联系图31所述,如果所检测的错误的数量不超过该阈值,则不将所校正的数据写入到闪存中。
如果错误的数量超过阈值(步骤5710的“是”结果),则在步骤5711中,使用读-修改-写操作将所校正的数据写入到新超级页面中。见图53,以及上文所附的描述。
在步骤5711之后,巡逻功能将控制返回到图50的步骤5001。
图57描述巡逻功能的一个实施例,其中,该功能独立地在每个闪存组上运行。这由于独立的闪存HEMi服务每个闪存组的事实而变得可能。SSD控制器106中固有的处理能力允许闪存错误被连续地或周期性地检测和校正,而对整个系统性能没有任何影响,并且不需要设法预测闪存中的哪些区域特别易于有错误。
在不同的实施例中,SSD控制器106发出用于巡逻功能的IOP。每个IOP指定一个LBA范围,并且,IOP被周期性地发出直到覆盖了由SSD控制器106管理的整个LBA范围。在该实施例中,不必要单独地计算哪些LBA被分配到哪些闪存组,这是因为,当SSD控制器106处理IOP(见上文)时其被自动地处理(见上)。
在该实施例中,不进行检查来确定是否有其它的任务正等待被处理。为此原因,应该隔开IOP发出(例如,一分钟一个)。此外,在一个替代选择中,作为巡逻功能IOP的结果而被调用的传输请求和页面请求可能被识别为具有较低的优先级,并在其它传输请求和页面请求(见上文)之后被处理。
E.中止处理
需要SSD控制器106来正确地响应SCSI中止命令、以及其它相关协议中的类似命令。中止命令可能需要中止特定的读或写命令,或者所有来自特定启动器的命令。SSD控制器106还必须正确地响应硬复位,其中,所有当前的命令被中止,并且系统返回到缺省的上电状态。
在中止命令或硬复位之后,存储在经受了已中止的写命令(其已开始,但在中止之前未结束)的LBA中的数据在未定义的状态中,并且,需要启动器重写这种数据,以将其返回到已知状态。
在请求中止特定命令的情况中,SSD控制器通过以下步骤响应:识别与中止命令一起接收的SCSI标签,并将该信息与存在在CDBinfo表4109中的CDBinfo中的SCSI标签字段3705匹配,由此识别响应于现在正被中止的命令而被创建的CDBinfo。然后,该CDBinfo的IOP字段3704被用于识别被调用来处理事务的IOP。接着,检查该IOP的传输请求指针阵列3809,以识别作为该IOP的结果而被发出的每个传输请求。然后,中止这些传输请求中的每个,意味着设置了它的中止标志3906,并且,闪存HEMi执行循环为每个传输请求发起中止处理程序。中止处理程序将传输请求置入完成的状态,并且,将在页面请求指针阵列3913中识别的所有页面请求从子组队列中移除。页面请求、传输请求和IOP的清理如联系图55所描述的进行。
中止队列命令需要中止由负责中止队列命令的启动器发出的所有命令。根据伴随中止队列命令的元数据识别该启动器。识别该启动器的所有CDBinfo和IOP通过被从所有工作列表中移除而被停用(retire),并返回到它们的空闲列表中,并且,由这样的IOP发出的所有传输请求也被停用。
硬复位需要求终止所有有效的命令。在一个实施例中,通过在所有有效的IOP中设置中止标志3811而不采取其它动作来处理它。当IOP被发送到传送HEMi用于向主机发送数据(对于写)或状态信息(对于读)的目的时(见图55,步骤5507),传送HEMi读取中止标志并终止IOP的处理,而不向主机发送任何通信。否则,事务正常地完成。因此,在该实施例中,因为除了不向主机发送通信外所有的事务正常地完成,所以不需要特殊的处理。
在替代实施例中,硬复位使得在所有有效的IOP和传输请求上设置中止标志。一旦这完成了,从HEMi工作列表中弹出的IOP和传输请求便不被处理,而是被忽略,并且,所有页面请求被从子组队列中移除。一旦所有的HEMi都没有了工作(由于所有页面请求、IOP和传输请求的停用),则控制被转交给ARM 2002,其负责清理,包括将所有页面请求、IOP和传输请求返回到空闲列表,以及将所有状态参数设为缺省值。该替代实施例比允许所有事务完成更快,但使用特殊处理的需求引入了软件错误的风险。
F.掉电恢复
如上所述,数据路径DRAM 107被用于存储转发和反转表。因为从DRAM的读以及向DRAM的写比对闪存的读或写快得多,所以在DRAM中存储该信息提供了很大的性能优势,特别是需要对这些表的大量的写的情况下。
然而,因为DRAM 107是易失性存储器,所以,如果意外地掉电,则必须重建这些表,正如必须为每个闪存端口重建用于当前开放的超级块的超级块元数据表一样,如上所述,超级块元数据表也被存储在DRAM 107中。
通常,使用存储在闪存超级页面元数据字段中的信息重建开放的超级块元数据表,并且使用存储在闪存中的超级块元数据表和重建的开放超级块元数据表中的信息重建转发和反转表。图58图示了这一点,其示出了用于单个闪存组的重建处理。
在步骤5801中,当前超级块被设为0。其设立了穿过闪存组中的所有超级块的循环。
在步骤5802中,将用于当前超级块的超级块元数据表3501从闪存复制到级缓冲器。从级缓冲器中的表读取或写入级缓冲器中的表比读取或写入闪存中的表更容易。
在步骤5803中,检查超级块元数据表开放标志3508和关闭标志3509,以确定在掉电时超级块是否在被擦除的状态下。
如果所述两个标志都被清除(步骤5803的“是”结果),则这意味着超级块被擦除。在步骤5804中,将超级块放置在超级块空闲列表2912上,其后,处理以步骤5821继续,如下所述,其触发对下一超级块的分析。
如果超级块未被擦除(步骤5803的“否”结果),则在步骤5805中,检查开放和关闭标志,以确定超级块在掉电时是否开放。这通过开放标志被设置和关闭标志未被设置而被指示。注意,该步骤可以与步骤5803组合。
如果超级块在掉电时是关闭的(步骤5805的“否”结果),则在步骤5806中,对于该超级块,将来自超级块元数据表的超级块时间戳3506复制到反转表的时间戳字段3405中。该步骤用对于该超级块正确的时间戳信息来更新反转表。
在步骤5807中,子组被设为0。其设立通过所有子组的循环,注意,每个超级块在每个子组上包括单个块。
在步骤5708中,超级页面被设为0。其设立通过块中的64个超级页面的循环。
在步骤5809中,用于当前超级页面和子组的超级块元数据表的LBA字段被用作用于向转发表3201中查找的索引。注意,子组0、超级页面0是特殊情况,这是由于,该超级页面包含超级块元数据表,从而在分析中跳过该超级页面。
如果用于LBA的转发表行已经被填充(步骤5809的“是”结果),则这意味着在重构期间已经遇到了LBA,从而意味着LBA至少被两次写入开放超级块。这需要将最后的这样的写识别为有效,并将任何在先的写无效。在步骤5810中,来自对应于LBA的转发表行的数据被用于识别LBA被写入其中的超级块。将用于在先超级块的反转表时间戳字段3405与来自用于当前正被评估的超级块的超级块元数据表的时间戳字段3506比较。
如果反转表时间戳低于(早于)超级块元数据表时间戳(步骤5810的“<”结果),则这意味着已经在转发表中的条目随后被当前正被评估的超级块元数据表中反映的较新的条目替换。在该情况中,在步骤5811中,对应于现有的用于LBA的转发表条目的现有反转表超级页面条目在反转表中被标记为无效。然后,处理进行到步骤5815,下文对其描述。
如果对应于现有的转发表条目的反转表时间戳高于(晚于)超级块元数据表时间戳(步骤5810的“>”结果),则这意味着当前在转发表中的LBA条目取代了超级块元数据表中的LBA条目(例如,LBA在被写入当前正被评估的超级块中之后再次被写入)。在该情况中,在步骤5812中,将用于包含当前超级块元数据表中的LBA的超级页面的反转表条目标记为无效。然后,处理进行到步骤5817,下文对其描述。
如果反转表时间戳等于超级块元数据表时间戳(步骤5810的“=”结果),则这意味着相同的LBA被两次写入相同的超级块中。为了确定哪个被写得更晚,必须读取来自超级页面元数据的时间戳。在步骤5813中,将来自两个超级页面的时间戳字段1403的内容从闪存复制到级缓冲器中。
在步骤5814中,比较超级页面时间戳。
在步骤5811中,在反转表中将两个超级页面的较旧者标记为无效。
在LBA在转发表中未准备好(步骤5809的“否”结果)的情况下,或者在步骤5811之后,到达步骤5815,在步骤5811中,已经在反转表中将旧超级页面标记为无效。在步骤5815中,将用于新超级页面的闪存地址信息写入对应于LBA的转发表字段中。用于LBA的转发表条目现在指向存储LBA数据的当前有效版本的超级页面。
在步骤5816中,在反转表中将该超级页面标记为有效。
在步骤5816之后或步骤5812之后到达步骤5817。在步骤5817中,递增超级页面。
在步骤5818中,将被递增的超级页面值与63比较。
如果新递增的超级页面小于或等于63(步骤5818的“否”结果),则这意味着在当前子组中还剩余附加的超级页面要被评估,并且处理返回到步骤5809,其中,下一超级页面的评估开始。注意,超级块元数据表中所列的超级页面从0至63按顺序被评估。
如果新递增的超级页面大于63(步骤5818的“是”结果),则这意味着已经到达子组中的最后一个超级页面。在步骤5819中,递增子组。
在步骤5820中,将新递增的子组值与子组的数量(标记为“n”)比较(如以上所标注的,子组的数量是实施相关的)。
如果新递增的子组小于或等于n(步骤5820的“否”结果),则这意味着超级块中还剩余附加的子组要被检查(如上所述,超级块在每个子组上包括相同的块)。在该情况中,处理返回到步骤5808,此时,下一子组的超级页面0的评估开始。应该理解,子组被按从0至n的顺序评估。
如果新递增的子组大于n(步骤5820的“是”结果),则这意味着已经到达超级块中的最后一个块。
在步骤5821中,递增超级块。注意,要么从步骤5820要么从步骤5804到达该步骤,在这两个步骤中,当前超级块被置于超级块空闲列表上。
在步骤5822中,将新递增的超级块值与每闪存组的超级块的总数量(标记为“p”)比较(如上所标注的,每闪存组的超级块的数量是实施相关的)。
如果新递增的超级块小于或等于p(步骤5822的“否”结果),则这意味着该闪存组中还剩余附加的超级块要被评估。在该情况中,处理返回到步骤5802,此时,用于下一超级块的超级块元数据表被复制到级缓冲器中,覆写用于在先的超级块的表,并且,处理再次开始用于新超级块。
如果新递增的超级块大于p(步骤5822的“是”结果),则已经评估了最后一个超级块,而且,用于该闪存组的超级块元数据表、转发表和反转表的恢复完成。
返回到步骤5805,如果开放和关闭标志的分析指示超级块在掉电时是开放的(设置了开放标志,未设置关闭标志),则存储在闪存中的用于该超级块的超级块元数据表在确定哪些LBA已经被分配给该超级块的超级页面时将没有作用,这是因为,当关闭该超级块时,该信息仅被存储到闪存中。为此原因,必须使用存储在闪存中的超级页面元数据重建超级块元数据表。一旦该表被重建,便可以接着使用与用于所有其它超级块相同的方法分析该超级块。
在步骤5823中,将当前时间写入超级块元数据表的时间戳字段3506中。虽然该时间戳不反映关闭超级块的时间(因为超级块在掉电时不关闭),但当前时间被保证晚于用于任何其它超级块的反转表时间戳的值。因此,如果相同的LBA被写入开放的超级块中与关闭的超级块中,则用于开放的超级块的时间戳值将晚于用于关闭的超级块的时间戳值,因此,导致在存储用于LBA的有效内容时接受用于开放的超级块的超级页面。这是正确的结果,这是因为,开放的超级块中的信息晚于在先关闭的超级块中的信息被定义。注意,在重建处理完成之后,开放的超级块将保持开放。当关闭超级块时,超级块元数据表时间戳值将在该表被存回到闪存中之前被关闭时间覆写,并因此将是正确的。
在步骤5824中,将子组设为0,因此设立通过超级块的所有块(每个子组一个)的循环。
在步骤5825中,将超级页面设为0,因此设立穿过子组中的所有超级页面的循环。
在步骤5826中,将用于当前超级页面的超级页面元数据1401从闪存复制到级缓冲器中。
在步骤5827中,进行检查,以确定超级页面是否在掉电前被写入。已经被写的超级页面将包括有效元数据。
如果超级页面已被写入(步骤5827的“是”结果),则在步骤5828中,超级页面元数据被用于填充超级块元数据表中用于该超级页面的条目。S页面索引字段1402被用于超级块元数据表的LBA字段。时间戳字段1403被用于超级块元数据表的超级页面时间戳字段。注意,用于该超级页面的超级块元数据缺陷字段已经包含有效信息,这是因为,缺陷信息被保持在用于擦除的超级块的元数据表的闪存版本中,并因此在用于开放的超级块被从闪存复制到级缓冲器时是有效的。
步骤5829-5832与步骤5817-5820相同地操作。如上所解释,这些步骤控制循环的处理,并确保每个超级块的每个超级页面被评估。
注意,如果当前超级页面未被写入(步骤5827的“否”结果),则处理跳到步骤5831,此时,递增子组。因为在每个子组上按顺序分配超级块的超级页面,所以,如果子组上的一超级页面未被写入,则这意味着该子组上随后的超级页面也未被写入。
一旦已经评估了超级块元数据表中的最后一个块(步骤5832的“是”结果),用于该表的重建处理完成,并且处理返回到步骤5806,此时,用于元数据表的时间戳信息被复制到反转表中,因此确保该超级块中的超级页面在发现与任何其它超级块冲突的情况下始终被认为是有效的。然后,处理对于该超级块从步骤5806继续。
VI.MLC闪存
虽然这里描述的大多数实施例使用SLC闪存,但SSD控制器106很好地适用于MLC闪存的适用。MLC闪存每个闪存单元存储多个比特,并因此能够存储更大量的数据。MCL还对每单元存储量具有更低的成本。
然而,MLC遭受几个使其难以在高性能、高稳定性应用(诸如数据中心)中使用的问题。首先,MLC比SLC慢。如上所述,MLC写可能比SLC写多花费100微秒,并且某些MLC甚至更慢。
第二,MLC闪存比SLC倾向具有更短的寿命。一般地,SLC闪存被指定处理100000个擦除周期而不失败,而目前的MLC闪存技术仅被指定处理10000个擦除周期。
第三,MLC闪存比SLC承受更高的数据错误率。
SSD控制器106被设计为与MLC闪存一起在非常高性能水平上操作,并且对控制器软件或硬件具有最小的改变或无改变。
首先,如上联系图44所解释,在SSD控制器106中使用的并行流水线掩盖写等待时间,从而,虽然MLC写比SLC写花费更长的时间,但经过一系列的写,该差别的大部分被掩盖,这是因为,SSD控制器106可以将写分解为页面大小的组块,并且,以并行和重叠的方式处理这些组块。
第二,SSD控制器106的闪存结构倾向在相对较大的存储空间中到处移动新写的数据,由此最小化擦除周期限制的影响,甚至不使用特殊的磨损均衡技术。如上所述,对不同的超级页面而不是保持现有数据的超级页面进行新的写,并且,新超级页面可以与初始超级页面在不同的块上。这倾向在闪存组内到处移动数据,从而,如果特定数据元素相对频繁地被擦除,则这些擦除将横跨大量物理闪存页面分散。
在不同的实施例中,SSD控制器106可以使用显性的磨损均衡技术。例如,在识别要经受垃圾收集的超级块时,SSD控制器106可以优先选择带有在擦除计数字段3507中(见图35)识别的相对低的擦除计数的超级块。用于每个超级块的擦除计数信息可以以与时间戳字段3405类似的方式被存储在反转表的行中。SSD控制器106可以使用擦除计数信息来打破带有相同数量的有效超级页面的超级块之间的垃圾收集平局(见联系图56的讨论),或者可以使用擦除计数信息将超级块分为多类,具有接近危险区(例如,5000次擦除)的擦除计数的超级块被优先选择为“垃圾收集”超级块(如上联系图56所述,在一个实施例中,来自与垃圾收集操作有关的、正被擦除的超级块的有效数据被存储在垃圾收集超级块中,导致垃圾收集超级块上相对较少的数据无效,从而该超级块的擦除将倾向相对较不频繁地发生)。类似地,如上所述,可以识别带有超过阈值的擦除计数值的超级块,以便它们被优先选择用于常规的垃圾收集,由此降低对这种超级块的额外磨损。
虽然本发明已被描述的各个方面的实施例是优选实施例,但本领域的技术人员将理解,它们的变化也是可以的。因此,本发明被给予所附权利要求的全部范围内的保护。

Claims (24)

1.一种闪存控制器,包括:
多个处理器,每个处理器包括寄存器、ALU和内部存储器;
多个存储器,所述存储器中的至少一些包含数据结构,所述数据结构包括与存储器命令相关的元数据,所述存储器中的至少一些包含用于所述多个处理器的工作队列;
交叉切换器,其将所述处理器与所述存储器连接,所述交叉切换器包括:一组处理器端口,其对于每个处理器包括一个端口;以及一组存储器端口,其对于每个存储器包括一个端口;以及内部切换机制,其允许任何处理器端口与任何存储器端口连接,但不允许处理器端口与另一处理器端口连接、或存储器端口与另一存储器端口连接;
由此,处理器通过使用所述交叉切换器来在与另一处理器关联的工作队列上放置任务,与另一处理器通信,
其中,所述工作队列中的至少一个包含指向所述数据结构之一的指针。
2.如权利要求1所述的闪存控制器,还包括:
仲裁器,其在多于一个处理器寻求对交叉切换器存储器端口的访问的情况下,控制对所述端口的访问,所述仲裁器控制交叉切换器内部切换电路,以提供对已经赢得仲裁的处理器的访问。
3.如权利要求1所述的闪存控制器,其中:
所述存储器中的至少一个包含指向数据结构的指针,所述数据结构被格式化来存储元数据,但包括当前未存储有效元数据的一个或多个字段。
4.如权利要求1所述的闪存控制器,其中:
至少一个工作队列被寄存器组控制,所述寄存器组包括存储信息的第一寄存器,根据所述信息,可以将空的工作队列与至少包含一个任务的工作队列区分开;并且
所述控制器还包括连接到处理器的信号,所述信号由所述第一寄存器控制,所述信号由空的工作队列与包含任务的工作队列之间的转变触发,所述信号引起所述处理器终止休眠模式。
5.一种操作闪存控制器的方法,包括以下步骤:
(a)接收指定读或写以及逻辑地址的主机命令;
(b)创建与所述主机命令相关的元数据结构,所述结构指定所述主机命令、以及所述逻辑地址、或与所述逻辑地址相关的地址;
(c)在第一存储器或存储器区域中存储所述元数据结构;
(d)第一处理器访问第二存储器或存储器区域,所述第二存储器包含与第二处理器关联的排序的工作列表;
(e)所述第一处理器将指向所述元数据结构的指针写入所述工作列表上;以及
(f)作为响应,所述第二处理器执行与所述元数据结构相关的任务,
其中,所述第一处理器与所述第二处理器无端口连接,且所述第一存储器与所述第二存储器无端口连接。
6.如权利要求5所述的方法,其中:
步骤(d)还包括:所述第一处理器访问交叉切换器,并连接到与所述第二存储器关联的端口。
7.如权利要求5所述的方法,其中:
步骤(f)中的第二处理器的任务包括以下子步骤:
(i)访问所述第一存储器或存储器区域,并且将所述元数据结构复制到所述第二处理器内部的存储器中。
8.如权利要求7所述的方法,其中:
步骤(f)中的访问所述第一存储器或存储器区域的动作包括:所述第二处理器访问交叉切换器,并连接到与所述第一存储器或存储器区域关联的端口。
9.如权利要求7所述的方法,其中:
步骤(f)中的第二处理器的任务包括以下附加子步骤:
(ii)在所述元数据结构被存储在所述第二处理器的内部存储器中的同时,修改所述元数据结构的内容;以及
(iii)将修改的元数据结构复制到所述第一存储器中。
10.一种闪存控制器,包括:
交叉切换器,其将多个处理器与多个存储器连接,所述交叉切换器包括仲裁器,所述仲裁器基于仲裁的结果分配所述交叉切换器上的存储器端口的控制,其中,所述多个处理器彼此无端口连接,且所述多个存储器彼此无端口连接;
所述多个存储器,其存储:
多个填充的元数据结构,所述元数据结构与主机命令相关;
指向空闲元数据结构的指针的列表;以及
第一和第二工作列表,其各自包含指向填充的元数据结构的指针,
每个工作列表与单独的处理器关联。
11.如权利要求10所述的控制器,还包括:
第一处理器和第二处理器,每个处理器包括ALU、寄存器和内部处理器存储器,所述第一处理器的内部处理器存储器存储与第一主机命令相关的第一元数据结构,所述第二处理器的内部处理器存储器存储第二元数据结构。
12.如权利要求11所述的控制器,其中:
所述第一工作列表与所述第一处理器关联,所述第二工作列表与所述第二处理器关联;
在所述第一工作列表上的指针指向第三元数据结构,所述第三元数据结构被存储在控制器存储器中,所述第三元数据结构与所述第一元数据结构相关;并且
在所述第二工作列表上的指针指向第四元数据结构,所述第四元数据结构被存储在控制器存储器中,所述第四元数据结构与所述第二元数据结构相关。
13.如权利要求12所述的控制器,其中:
所述第一元数据结构与所述第二元数据结构是第一类型;
所述第三元数据结构与所述第四元数据结构是第二类型;并且
所述第一元数据结构包含指向所述第三元数据结构的指针,所述第二元数据结构包含指向所述第四元数据结构的指针。
14.如权利要求13所述的控制器,其中:
所述第三元数据结构包含第一逻辑地址;
所述第四元数据结构包含第二逻辑地址;
所述第一元数据结构包含与所述第一逻辑地址相关的第一物理地址;并且
所述第二元数据结构包含与所述第二逻辑地址相关的第二物理地址。
15.一种操作闪存控制器的方法,所述闪存控制器包括第一处理器和第二处理器、交叉切换器、以及第一和第二控制器存储器,其中,所述第一处理器与所述第二处理器无端口连接,且所述第一控制器存储器与所述第二控制器存储器无端口连接,所述方法包括以下步骤:
(a)所述第一处理器在所述第一处理器内部的处理器存储器中存储第一元数据结构;
(b)所述第一处理器访问与所述第一控制器存储器关联的第一交叉切换器端口;
(c)所述第一处理器将所述第一元数据结构复制到所述第一控制器存储器中;
(d)所述第一处理器访问与所述第二控制器存储器关联的第二交叉切换器端口;
(e)所述第一处理器将指向所述第一元数据结构的指针放置在被存储在所述第二控制器存储器中的工作列表中,所述工作列表与所述第二处理器关联;
(f)所述第二处理器访问所述第一交叉切换器端口;
(g)所述第二处理器将所述第一元数据结构从所述第一控制器存储器复制到所述第二处理器内部的处理器存储器中;以及
(h)所述第二处理器修改所述第一元数据结构。
16.如权利要求15所述的方法,还包括:
(i)所述第二处理器填充第二元数据结构的字段,所述第二元数据结构位于所述第二处理器内部的处理器存储器中;以及
步骤(h)中的修改包括:向所述第一元数据结构加入指向所述第二元数据结构的指针。
17.如权利要求16所述的方法,其中:
所述第一元数据结构包括逻辑地址;并且
步骤(i)包括:将第一物理闪存地址置于第二元数据结构字段中,所述第一物理闪存地址与所述逻辑地址相关。
18.如权利要求17所述的方法,还包括:
(j)所述第二处理器填充第三元数据结构的字段,所述第三元数据结构位于所述第二处理器内部的处理器存储器中;以及
步骤(h)中的修改包括:向所述第一元数据结构加入指向所述第三元数据结构的指针。
19.如权利要求18所述的方法,其中:
步骤(j)包括:将第二物理闪存地址置于第三元数据结构字段中,所述第二物理闪存地址与所述逻辑地址相关。
20.一种闪存控制器,包括:
第一处理器和第二处理器,每个处理器包括寄存器、ALU以及内部处理器存储器;
第一易失性存储器,其包含第一工作列表,所述第一工作列表与所述第一处理器关联;
第二易失性存储器,其包含第二工作列表,所述第二工作列表与所述第二处理器关联;
第三易失性存储器,其包含与第一主机命令相关的第一元数据结构;
第四易失性存储器,其包含与第二主机命令相关的第二元数据结构;
其中,所述第一处理器与所述第二处理器无端口连接,且各个易失性存储器彼此无端口连接,
交叉切换器,其包括:
各自连接到处理器的一组处理器端口,其包括连接到所述第一处理器的第一处理器端口、以及连接到所述第二处理器的第二处理器端口;
各自连接到易失性存储器的一组存储器端口,其包括连接到所述第一易失性存储器的第一存储器端口、连接到所述第二易失性存储器的第二存储器端口、连接到所述第三易失性存储器的第三存储器端口、以及连接到所述第四易失性存储器的第四存储器端口;
所述交叉切换器包括内部电路,其选择性地将所述处理器端口之一连接到所述存储器端口之一。
21.如权利要求20所述的控制器,其中:
所述第一工作列表包含与所述第一主机命令相关的第一信息,并且,所述第二工作列表包含与所述第二主机命令相关的第二信息。
22.如权利要求21所述的控制器,其中:
所述第一信息构成指向所述第一元数据结构的指针;以及
所述第二信息构成指向所述第二元数据结构的指针。
23.如权利要求22所述的控制器,其中:
所述第一工作列表包括指向第三元数据结构的指针,所述第三元数据结构与所述第二主机命令相关。
24.如权利要求22所述的控制器,其中:
所述第一元数据结构和所述第二元数据结构包括逻辑地址,但不包括物理地址;并且
所述第一处理器的内部处理器存储器包括第四元数据结构,所述第四元数据结构包括物理地址。
CN2008801276238A 2007-12-27 2008-12-23 包括将处理器与内部存储器连接的交叉切换器的用于闪存的存储控制器 Expired - Fee Related CN101965559B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210334987.1A CN103150275B (zh) 2007-12-27 2008-12-23 掉电后重建闪存控制器中使用的元数据的方法及闪存装置

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US1712307P 2007-12-27 2007-12-27
US61/017,123 2007-12-27
US12/082,207 2008-04-08
US12/082,207 US8775717B2 (en) 2007-12-27 2008-04-08 Storage controller for flash memory including a crossbar switch connecting a plurality of processors with a plurality of internal memories
PCT/US2008/088154 WO2009086371A1 (en) 2007-12-27 2008-12-23 Storage controller for flash memory including a crossbar switch connecting processors with internal memories

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201210334987.1A Division CN103150275B (zh) 2007-12-27 2008-12-23 掉电后重建闪存控制器中使用的元数据的方法及闪存装置

Publications (2)

Publication Number Publication Date
CN101965559A CN101965559A (zh) 2011-02-02
CN101965559B true CN101965559B (zh) 2013-10-09

Family

ID=40798195

Family Applications (2)

Application Number Title Priority Date Filing Date
CN2008801276238A Expired - Fee Related CN101965559B (zh) 2007-12-27 2008-12-23 包括将处理器与内部存储器连接的交叉切换器的用于闪存的存储控制器
CN201210334987.1A Expired - Fee Related CN103150275B (zh) 2007-12-27 2008-12-23 掉电后重建闪存控制器中使用的元数据的方法及闪存装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201210334987.1A Expired - Fee Related CN103150275B (zh) 2007-12-27 2008-12-23 掉电后重建闪存控制器中使用的元数据的方法及闪存装置

Country Status (5)

Country Link
US (18) US8775717B2 (zh)
EP (1) EP2225642B1 (zh)
JP (1) JP5272019B2 (zh)
CN (2) CN101965559B (zh)
WO (10) WO2009086424A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI816183B (zh) * 2020-09-18 2023-09-21 日商鎧俠股份有限公司 用於nand多平面及多晶粒狀態傳訊的固態硬碟及方法

Families Citing this family (760)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8452912B2 (en) * 2007-10-11 2013-05-28 Super Talent Electronics, Inc. Flash-memory system with enhanced smart-storage switch and packed meta-data cache for mitigating write amplification by delaying and merging writes until a host read
US7852836B2 (en) * 2003-11-19 2010-12-14 Cray Inc. Reduced arbitration routing system and method
US8200887B2 (en) 2007-03-29 2012-06-12 Violin Memory, Inc. Memory management system and method
US9384818B2 (en) 2005-04-21 2016-07-05 Violin Memory Memory power management
US11328764B2 (en) 2005-09-26 2022-05-10 Rambus Inc. Memory system topologies including a memory die stack
WO2007132452A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Reducing programming error in memory devices
WO2007132457A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Ltd. Combined distortion estimation and error correction coding for memory devices
WO2007132456A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Ltd. Memory device with adaptive capacity
WO2007132453A2 (en) 2006-05-12 2007-11-22 Anobit Technologies Ltd. Distortion estimation and cancellation in memory devices
US8060806B2 (en) 2006-08-27 2011-11-15 Anobit Technologies Ltd. Estimation of non-linear distortion in memory devices
US7821826B2 (en) * 2006-10-30 2010-10-26 Anobit Technologies, Ltd. Memory cell readout using successive approximation
WO2008053472A2 (en) 2006-10-30 2008-05-08 Anobit Technologies Ltd. Reading memory cells using multiple thresholds
US7924648B2 (en) * 2006-11-28 2011-04-12 Anobit Technologies Ltd. Memory power and performance management
US7706182B2 (en) * 2006-12-03 2010-04-27 Anobit Technologies Ltd. Adaptive programming of analog memory cells using statistical characteristics
WO2008068747A2 (en) 2006-12-03 2008-06-12 Anobit Technologies Ltd. Automatic defect management in memory devices
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
WO2008070814A2 (en) 2006-12-06 2008-06-12 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for a scalable, composite, reconfigurable backplane
US9495241B2 (en) 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US7900102B2 (en) 2006-12-17 2011-03-01 Anobit Technologies Ltd. High-speed programming of memory devices
US8151166B2 (en) 2007-01-24 2012-04-03 Anobit Technologies Ltd. Reduction of back pattern dependency effects in memory devices
US7751240B2 (en) 2007-01-24 2010-07-06 Anobit Technologies Ltd. Memory device with negative thresholds
WO2008111058A2 (en) 2007-03-12 2008-09-18 Anobit Technologies Ltd. Adaptive estimation of memory cell read thresholds
US9632870B2 (en) 2007-03-29 2017-04-25 Violin Memory, Inc. Memory system with multiple striping of raid groups and method for performing the same
US11010076B2 (en) 2007-03-29 2021-05-18 Violin Systems Llc Memory system with multiple striping of raid groups and method for performing the same
US8001320B2 (en) 2007-04-22 2011-08-16 Anobit Technologies Ltd. Command interface for memory devices
US8234545B2 (en) 2007-05-12 2012-07-31 Apple Inc. Data storage with incremental redundancy
US8429493B2 (en) 2007-05-12 2013-04-23 Apple Inc. Memory device with internal signap processing unit
US9396103B2 (en) * 2007-06-08 2016-07-19 Sandisk Technologies Llc Method and system for storage address re-mapping for a memory device
US7925936B1 (en) 2007-07-13 2011-04-12 Anobit Technologies Ltd. Memory device with non-uniform programming levels
US8683126B2 (en) * 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8259497B2 (en) 2007-08-06 2012-09-04 Apple Inc. Programming schemes for multi-level analog memory cells
US8174905B2 (en) 2007-09-19 2012-05-08 Anobit Technologies Ltd. Programming orders for reducing distortion in arrays of multi-level analog memory cells
US7773413B2 (en) * 2007-10-08 2010-08-10 Anobit Technologies Ltd. Reliable data storage in analog memory cells in the presence of temperature variations
WO2009050703A2 (en) 2007-10-19 2009-04-23 Anobit Technologies Data storage in analog memory cell arrays having erase failures
US8068360B2 (en) 2007-10-19 2011-11-29 Anobit Technologies Ltd. Reading analog memory cells using built-in multi-threshold commands
US8000141B1 (en) 2007-10-19 2011-08-16 Anobit Technologies Ltd. Compensation for voltage drifts in analog memory cells
WO2009063450A2 (en) 2007-11-13 2009-05-22 Anobit Technologies Optimized selection of memory units in multi-unit memory devices
US8959307B1 (en) * 2007-11-16 2015-02-17 Bitmicro Networks, Inc. Reduced latency memory read transactions in storage devices
US8225181B2 (en) 2007-11-30 2012-07-17 Apple Inc. Efficient re-read operations from memory devices
US8209588B2 (en) 2007-12-12 2012-06-26 Anobit Technologies Ltd. Efficient interference cancellation in analog memory cell arrays
US8775717B2 (en) 2007-12-27 2014-07-08 Sandisk Enterprise Ip Llc Storage controller for flash memory including a crossbar switch connecting a plurality of processors with a plurality of internal memories
US8085586B2 (en) 2007-12-27 2011-12-27 Anobit Technologies Ltd. Wear level estimation in analog memory cells
US8156398B2 (en) 2008-02-05 2012-04-10 Anobit Technologies Ltd. Parameter estimation based on error correction code parity check equations
US7924587B2 (en) 2008-02-21 2011-04-12 Anobit Technologies Ltd. Programming of analog memory cells using a single programming pulse per state transition
US7864573B2 (en) * 2008-02-24 2011-01-04 Anobit Technologies Ltd. Programming analog memory cells for reduced variance after retention
JP4498426B2 (ja) * 2008-03-01 2010-07-07 株式会社東芝 メモリシステム
US8230300B2 (en) 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
US8059457B2 (en) 2008-03-18 2011-11-15 Anobit Technologies Ltd. Memory device with multiple-accuracy read commands
US8493783B2 (en) 2008-03-18 2013-07-23 Apple Inc. Memory device readout using multiple sense times
US8400858B2 (en) 2008-03-18 2013-03-19 Apple Inc. Memory device with reduced sense time readout
US8966155B1 (en) * 2008-04-01 2015-02-24 Daniel P. Mulligan System and method for implementing a high performance data storage system
US7983051B2 (en) * 2008-04-09 2011-07-19 Apacer Technology Inc. DRAM module with solid state disk
US20110235260A1 (en) * 2008-04-09 2011-09-29 Apacer Technology Inc. Dram module with solid state disk
US20090271562A1 (en) * 2008-04-25 2009-10-29 Sinclair Alan W Method and system for storage address re-mapping for a multi-bank memory device
US9594679B2 (en) * 2008-05-01 2017-03-14 Sandisk Il Ltd. Flash cache flushing method and system
GB2474592B (en) 2008-05-13 2013-01-23 Rambus Inc Fractional program commands for memory devices
US20090307523A1 (en) * 2008-06-06 2009-12-10 Allison Brian D System Performance Through Invalidation of Speculative Memory Scrub Commands
US8843691B2 (en) * 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
TW201003358A (en) * 2008-07-01 2010-01-16 Asustek Comp Inc Daughter board with solid state storage device of computer system
US7924613B1 (en) 2008-08-05 2011-04-12 Anobit Technologies Ltd. Data storage in analog memory cells with protection against programming interruption
US7995388B1 (en) 2008-08-05 2011-08-09 Anobit Technologies Ltd. Data storage using modified voltages
US8169825B1 (en) 2008-09-02 2012-05-01 Anobit Technologies Ltd. Reliable data storage in analog memory cells subjected to long retention periods
US8949684B1 (en) 2008-09-02 2015-02-03 Apple Inc. Segmented data storage
US8000135B1 (en) 2008-09-14 2011-08-16 Anobit Technologies Ltd. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8482978B1 (en) 2008-09-14 2013-07-09 Apple Inc. Estimation of memory cell read thresholds by sampling inside programming level distribution intervals
US8838876B2 (en) * 2008-10-13 2014-09-16 Micron Technology, Inc. Translation layer in a solid state storage device
US8239734B1 (en) 2008-10-15 2012-08-07 Apple Inc. Efficient data storage in storage device arrays
US8656117B1 (en) * 2008-10-30 2014-02-18 Nvidia Corporation Read completion data management
US8261159B1 (en) 2008-10-30 2012-09-04 Apple, Inc. Data scrambling schemes for memory devices
US8208304B2 (en) 2008-11-16 2012-06-26 Anobit Technologies Ltd. Storage at M bits/cell density in N bits/cell analog memory cell devices, M>N
KR101543434B1 (ko) * 2008-12-15 2015-08-10 삼성전자주식회사 반도체 메모리 시스템의 제조 방법
JP2010152853A (ja) * 2008-12-26 2010-07-08 Toshiba Corp データ記憶装置
US8397131B1 (en) 2008-12-31 2013-03-12 Apple Inc. Efficient readout schemes for analog memory cell devices
US8248831B2 (en) 2008-12-31 2012-08-21 Apple Inc. Rejuvenation of analog memory cells
US8924661B1 (en) 2009-01-18 2014-12-30 Apple Inc. Memory system including a controller and processors associated with memory devices
US8924819B2 (en) * 2009-01-23 2014-12-30 Macronix International Co., Ltd. Memory device and operation method thereof
US8327040B2 (en) 2009-01-26 2012-12-04 Micron Technology, Inc. Host controller
US8266361B1 (en) * 2009-01-28 2012-09-11 Cypress Semiconductor Corporation Access methods and circuits for devices having multiple buffers
US8228701B2 (en) 2009-03-01 2012-07-24 Apple Inc. Selective activation of programming schemes in analog memory cell arrays
US8239614B2 (en) * 2009-03-04 2012-08-07 Micron Technology, Inc. Memory super block allocation
KR101581311B1 (ko) * 2009-03-11 2015-12-31 삼성전자주식회사 플래시 메모리 장치 및 그 제어 방법
KR101581679B1 (ko) * 2009-03-18 2015-12-31 삼성전자주식회사 저장 장치 및 저장 장치의 버퍼 메모리 관리 방법
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8977805B2 (en) 2009-03-25 2015-03-10 Apple Inc. Host-assisted compaction of memory blocks
US9164914B1 (en) * 2009-04-07 2015-10-20 Marvell World Trade Ltd. Multiple port routing circuitry for flash memory storage systems
US8238157B1 (en) 2009-04-12 2012-08-07 Apple Inc. Selective re-programming of analog memory cells
TW201037711A (en) * 2009-04-13 2010-10-16 Jmicron Technology Corp Data access method used in multi-channel flash memory system and data access apparatus thereof
BRPI1013576B1 (pt) * 2009-04-21 2020-05-19 Ibm aparelho e método para controlar um disco de estado sólido
US8296480B2 (en) * 2009-11-30 2012-10-23 Lsi Corporation Context execution in a media controller architecture
US8321639B2 (en) * 2009-12-30 2012-11-27 Lsi Corporation Command tracking for direct access block storage devices
US8245112B2 (en) * 2009-06-04 2012-08-14 Lsi Corporation Flash memory organization
US8516264B2 (en) * 2009-10-09 2013-08-20 Lsi Corporation Interlocking plain text passwords to data encryption keys
US20100306451A1 (en) * 2009-06-01 2010-12-02 Joshua Johnson Architecture for nand flash constraint enforcement
US8219776B2 (en) * 2009-09-23 2012-07-10 Lsi Corporation Logical-to-physical address translation for solid state disks
US8555141B2 (en) * 2009-06-04 2013-10-08 Lsi Corporation Flash memory organization
JP2010262715A (ja) * 2009-05-11 2010-11-18 Renesas Electronics Corp メモリ検査システム及びメモリ検査方法
JP2010282369A (ja) * 2009-06-03 2010-12-16 Toshiba Corp メモリシステム
WO2010144587A2 (en) * 2009-06-12 2010-12-16 Violin Memory, Inc. Memory system having persistent garbage collection
US20100318720A1 (en) * 2009-06-16 2010-12-16 Saranyan Rajagopalan Multi-Bank Non-Volatile Memory System with Satellite File System
US8144496B2 (en) * 2009-06-30 2012-03-27 Sandisk Technologies Inc. Memory system with multi-level status signaling and method for operating the same
US8479080B1 (en) 2009-07-12 2013-07-02 Apple Inc. Adaptive over-provisioning in memory systems
US8631187B2 (en) * 2009-08-07 2014-01-14 Intel Corporation Dual-scope directory for a non-volatile memory storage system
US20110035540A1 (en) * 2009-08-10 2011-02-10 Adtron, Inc. Flash blade system architecture and method
US8189379B2 (en) 2009-08-12 2012-05-29 Texas Memory Systems, Inc. Reduction of read disturb errors in NAND FLASH memory
US8688894B2 (en) * 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
US8665601B1 (en) 2009-09-04 2014-03-04 Bitmicro Networks, Inc. Solid state drive with improved enclosure assembly
US9135190B1 (en) 2009-09-04 2015-09-15 Bitmicro Networks, Inc. Multi-profile memory controller for computing devices
US8447908B2 (en) 2009-09-07 2013-05-21 Bitmicro Networks, Inc. Multilevel memory bus system for solid-state mass storage
US9779057B2 (en) 2009-09-11 2017-10-03 Micron Technology, Inc. Autonomous memory architecture
US8560804B2 (en) * 2009-09-14 2013-10-15 Bitmicro Networks, Inc. Reducing erase cycles in an electronic storage device that uses at least one erase-limited memory device
TWI427635B (zh) * 2009-09-17 2014-02-21 Moai Electronics Corp Flash memory control system and flash memory control method
US9063886B2 (en) * 2009-09-18 2015-06-23 Apple Inc. Metadata redundancy schemes for non-volatile memories
EP2302638B1 (fr) * 2009-09-21 2013-04-17 STMicroelectronics (Rousset) SAS Procédé d'écriture et de lecture de données dans une mémoire non volatile, au moyen de métadonnées
TWI506422B (zh) * 2009-09-23 2015-11-01 Silicon Motion Inc 用來管理具有多通道、多途徑的記憶裝置之方法以及相關之記憶裝置及其控制器
US8990476B2 (en) * 2009-10-01 2015-03-24 Micron Technology, Inc. Power interrupt management
US8407407B1 (en) * 2009-10-06 2013-03-26 Marvell International Ltd. Solid state drive access control system with equalized access timing
US8495465B1 (en) 2009-10-15 2013-07-23 Apple Inc. Error correction coding over multiple memory pages
US8151039B2 (en) * 2009-10-19 2012-04-03 Moai Electronics Corporation System and method for controlling flash memory without using ready/busy signal
KR101601849B1 (ko) * 2009-10-21 2016-03-09 삼성전자주식회사 불휘발성 메모리 장치, 그것의 읽기 방법, 그리고 그것을 포함하는 메모리 시스템
US8402259B2 (en) * 2009-11-30 2013-03-19 International Business Machines Corporation Accelerating wake-up time of a system
US8473669B2 (en) 2009-12-07 2013-06-25 Sandisk Technologies Inc. Method and system for concurrent background and foreground operations in a non-volatile memory array
GB2488259A (en) * 2009-12-11 2012-08-22 Ibm Flash memory controller
US8285946B2 (en) * 2009-12-15 2012-10-09 International Business Machines Corporation Reducing access contention in flash-based memory systems
US8677054B1 (en) 2009-12-16 2014-03-18 Apple Inc. Memory management schemes for non-volatile memory devices
US8694814B1 (en) 2010-01-10 2014-04-08 Apple Inc. Reuse of host hibernation storage space by memory controller
US8677203B1 (en) 2010-01-11 2014-03-18 Apple Inc. Redundant data storage schemes for multi-die memory systems
US8473695B2 (en) 2011-03-31 2013-06-25 Mosys, Inc. Memory system including variable write command scheduling
US9354823B2 (en) 2012-06-06 2016-05-31 Mosys, Inc. Memory system including variable write burst and broadcast command scheduling
KR101648531B1 (ko) * 2010-02-12 2016-08-17 삼성전자주식회사 불휘발성 메모리 시스템과 이의 동작 방법
KR101095046B1 (ko) 2010-02-25 2011-12-20 연세대학교 산학협력단 솔리드 스테이트 디스크 및 이를 포함하는 사용자 시스템
US8887142B2 (en) * 2010-03-10 2014-11-11 Microsoft Corporation Loop control flow diversion
US8365041B2 (en) 2010-03-17 2013-01-29 Sandisk Enterprise Ip Llc MLC self-raid flash data protection scheme
US20110227920A1 (en) * 2010-03-19 2011-09-22 James Adams Method and System For a Shader Processor With Closely-Coupled Peripherals
US8478796B2 (en) * 2010-03-23 2013-07-02 Apple Inc. Uncorrectable error handling schemes for non-volatile memories
US8726126B2 (en) * 2010-03-23 2014-05-13 Apple Inc. Non-regular parity distribution detection via metadata tag
US8725931B1 (en) 2010-03-26 2014-05-13 Western Digital Technologies, Inc. System and method for managing the execution of memory commands in a solid-state memory
US8392670B2 (en) 2010-04-12 2013-03-05 Hitachi, Ltd. Performance management of access to flash memory in a storage device
US9183134B2 (en) * 2010-04-22 2015-11-10 Seagate Technology Llc Data segregation in a storage device
US8694853B1 (en) 2010-05-04 2014-04-08 Apple Inc. Read commands for reading interfering memory cells
US8782327B1 (en) 2010-05-11 2014-07-15 Western Digital Technologies, Inc. System and method for managing execution of internal commands and host commands in a solid-state memory
US9026716B2 (en) 2010-05-12 2015-05-05 Western Digital Technologies, Inc. System and method for managing garbage collection in solid-state memory
US9104546B2 (en) * 2010-05-24 2015-08-11 Silicon Motion Inc. Method for performing block management using dynamic threshold, and associated memory device and controller thereof
US8572423B1 (en) 2010-06-22 2013-10-29 Apple Inc. Reducing peak current in memory systems
CN102169466A (zh) * 2010-06-22 2011-08-31 上海盈方微电子有限公司 一种基于页操作的可编程Nandflash控制器
US8959284B1 (en) 2010-06-28 2015-02-17 Western Digital Technologies, Inc. Disk drive steering write data to write cache based on workload
US9135168B2 (en) 2010-07-07 2015-09-15 Marvell World Trade Ltd. Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US8868852B2 (en) * 2010-07-07 2014-10-21 Marvell World Trade Ltd. Interface management control systems and methods for non-volatile semiconductor memory
US9141538B2 (en) 2010-07-07 2015-09-22 Marvell World Trade Ltd. Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive
US8595591B1 (en) 2010-07-11 2013-11-26 Apple Inc. Interference-aware assignment of programming levels in analog memory cells
US9104580B1 (en) 2010-07-27 2015-08-11 Apple Inc. Cache memory for hybrid disk drives
US8645794B1 (en) 2010-07-31 2014-02-04 Apple Inc. Data storage in analog memory cells using a non-integer number of bits per cell
US8856475B1 (en) 2010-08-01 2014-10-07 Apple Inc. Efficient selection of memory blocks for compaction
WO2012021379A2 (en) 2010-08-10 2012-02-16 Rambus Inc. Verify before program resume for memory devices
US8493781B1 (en) 2010-08-12 2013-07-23 Apple Inc. Interference mitigation using individual word line erasure operations
US9268499B1 (en) 2010-08-13 2016-02-23 Western Digital Technologies, Inc. Hybrid drive migrating high workload data from disk to non-volatile semiconductor memory
US9058280B1 (en) 2010-08-13 2015-06-16 Western Digital Technologies, Inc. Hybrid drive migrating data from disk to non-volatile semiconductor memory based on accumulated access time
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US8510499B1 (en) * 2010-08-30 2013-08-13 Symantec Corporation Solid state drive caching using memory structures to determine a storage space replacement candidate
US8775720B1 (en) * 2010-08-31 2014-07-08 Western Digital Technologies, Inc. Hybrid drive balancing execution times for non-volatile semiconductor memory and disk
US8850114B2 (en) 2010-09-07 2014-09-30 Daniel L Rosenband Storage array controller for flash-based storage devices
US8635412B1 (en) 2010-09-09 2014-01-21 Western Digital Technologies, Inc. Inter-processor communication
US8782334B1 (en) 2010-09-10 2014-07-15 Western Digital Technologies, Inc. Hybrid drive copying disk cache to non-volatile semiconductor memory
US20120066444A1 (en) * 2010-09-14 2012-03-15 Advanced Micro Devices, Inc. Resolution Enhancement of Video Stream Based on Spatial and Temporal Correlation
CN102402464A (zh) * 2010-09-17 2012-04-04 中国移动通信有限公司 一种智能卡中的存储器的数据擦写方法及智能卡
US9021192B1 (en) 2010-09-21 2015-04-28 Western Digital Technologies, Inc. System and method for enhancing processing of memory access requests
US9164886B1 (en) 2010-09-21 2015-10-20 Western Digital Technologies, Inc. System and method for multistage processing in a memory storage subsystem
CN103229155B (zh) * 2010-09-24 2016-11-09 德克萨斯存储系统股份有限公司 高速内存系统
US9021181B1 (en) 2010-09-27 2015-04-28 Apple Inc. Memory management for unifying memory cell conditions by using maximum time intervals
US8452911B2 (en) 2010-09-30 2013-05-28 Sandisk Technologies Inc. Synchronized maintenance operations in a multi-bank storage system
US8612804B1 (en) * 2010-09-30 2013-12-17 Western Digital Technologies, Inc. System and method for improving wear-leveling performance in solid-state memory
US8892981B2 (en) 2010-09-30 2014-11-18 Apple Inc. Data recovery using outer codewords stored in volatile memory
US20120096290A1 (en) * 2010-10-14 2012-04-19 Keynetik, Inc. Distributed Architecture for Situation Aware Sensory Application
US8755221B2 (en) * 2010-10-18 2014-06-17 Avalanche Technology, Inc. Emulation of static random access memory (SRAM) by magnetic random access memory (MRAM)
US11232022B2 (en) * 2010-10-29 2022-01-25 Samsung Electronics Co., Ltd. Memory system, data storage device, user device and data management method thereof having a data management information matching determination
US20120110244A1 (en) * 2010-11-02 2012-05-03 Micron Technology, Inc. Copyback operations
WO2012061048A1 (en) * 2010-11-04 2012-05-10 Rambus Inc. Techniques for storing data and tags in different memory arrays
JP2012118739A (ja) * 2010-11-30 2012-06-21 Toshiba Corp 記憶装置、及び制御方法
US8464137B2 (en) * 2010-12-03 2013-06-11 International Business Machines Corporation Probabilistic multi-tier error correction in not-and (NAND) flash memory
TWI451439B (zh) * 2010-12-10 2014-09-01 Phison Electronics Corp 記憶體儲存裝置、其記憶體控制器與資料寫入方法
US20120159040A1 (en) * 2010-12-15 2012-06-21 Dhaval Parikh Auxiliary Interface for Non-Volatile Memory System
US20120239860A1 (en) 2010-12-17 2012-09-20 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
US8392635B2 (en) 2010-12-22 2013-03-05 Western Digital Technologies, Inc. Selectively enabling a host transfer interrupt
US8972821B2 (en) 2010-12-23 2015-03-03 Texas Instruments Incorporated Encode and multiplex, register, and decode and error correction circuitry
US8458145B2 (en) * 2011-01-20 2013-06-04 Infinidat Ltd. System and method of storage optimization
US10049040B2 (en) * 2011-01-21 2018-08-14 Seagate Technology Llc Just in time garbage collection
US8874872B2 (en) 2011-01-21 2014-10-28 Seagate Technology Llc Garbage collection management in memories
US8954647B2 (en) * 2011-01-28 2015-02-10 Apple Inc. Systems and methods for redundantly storing metadata for non-volatile memory
US8484542B2 (en) * 2011-02-08 2013-07-09 Sandisk Technologies Inc. Data recovery using additional error correction coding data
US8909851B2 (en) 2011-02-08 2014-12-09 SMART Storage Systems, Inc. Storage control system with change logging mechanism and method of operation thereof
US8850104B2 (en) * 2011-03-21 2014-09-30 Apple Inc. Independent management of data and parity logical block addresses
US20120246385A1 (en) * 2011-03-22 2012-09-27 American Megatrends, Inc. Emulating spi or 12c prom/eprom/eeprom using flash memory of microcontroller
US8935466B2 (en) 2011-03-28 2015-01-13 SMART Storage Systems, Inc. Data storage system with non-volatile memory and method of operation thereof
US9361044B2 (en) * 2011-03-28 2016-06-07 Western Digital Technologies, Inc. Power-safe data management system
WO2012148828A2 (en) 2011-04-26 2012-11-01 Lsi Corporation Variable over-provisioning for non-volatile storage
US8918595B2 (en) * 2011-04-28 2014-12-23 Seagate Technology Llc Enforcing system intentions during memory scheduling
US9021178B2 (en) 2011-05-02 2015-04-28 Western Digital Technologies, Inc. High performance path for command processing
CN102789264A (zh) * 2011-05-18 2012-11-21 鸿富锦精密工业(深圳)有限公司 计算机装置的主板
US8543758B2 (en) * 2011-05-31 2013-09-24 Micron Technology, Inc. Apparatus including memory channel control circuit and related methods for relaying commands to logical units
US10031850B2 (en) 2011-06-07 2018-07-24 Sandisk Technologies Llc System and method to buffer data
JP5833347B2 (ja) * 2011-06-08 2015-12-16 ローム株式会社 データ処理装置
TWI436209B (zh) * 2011-06-14 2014-05-01 Phison Electronics Corp 記憶體管理表處理方法、記憶體控制器與記憶體儲存裝置
US20120324148A1 (en) * 2011-06-19 2012-12-20 Paul Roger Stonelake System and method of protecting metadata from nand flash failures
US8909982B2 (en) 2011-06-19 2014-12-09 Sandisk Enterprise Ip Llc System and method for detecting copyback programming problems
US8910020B2 (en) 2011-06-19 2014-12-09 Sandisk Enterprise Ip Llc Intelligent bit recovery for flash memory
US9003101B1 (en) 2011-06-29 2015-04-07 Western Digital Technologies, Inc. Prioritized access for media with heterogeneous access rates
US8898373B1 (en) 2011-06-29 2014-11-25 Western Digital Technologies, Inc. System and method for improving wear-leveling performance in solid-state memory
US8626991B1 (en) * 2011-06-30 2014-01-07 Emc Corporation Multi-LUN SSD optimization system and method
US9158670B1 (en) 2011-06-30 2015-10-13 Western Digital Technologies, Inc. System and method for dynamically adjusting garbage collection policies in solid-state memory
US9335939B2 (en) 2011-07-12 2016-05-10 Violin Memory Inc. RAIDed memory system
US9417823B2 (en) 2011-07-12 2016-08-16 Violin Memory Inc. Memory system management
US8806112B2 (en) 2011-07-14 2014-08-12 Lsi Corporation Meta data handling within a flash media controller
US20130019053A1 (en) * 2011-07-14 2013-01-17 Vinay Ashok Somanache Flash controller hardware architecture for flash devices
US9318166B2 (en) 2011-07-22 2016-04-19 SanDisk Technologies, Inc. Systems and methods of storing data
KR101804521B1 (ko) * 2011-08-16 2017-12-07 에스케이하이닉스 주식회사 집적회로 칩, 이를 포함하는 시스템 및 동작방법, 메모리 및 메모리 시스템
US8973018B2 (en) 2011-08-23 2015-03-03 International Business Machines Corporation Configuring and relaying events from a storage controller to a host server
US9021146B2 (en) 2011-08-30 2015-04-28 Apple Inc. High priority command queue for peripheral component
US9098399B2 (en) 2011-08-31 2015-08-04 SMART Storage Systems, Inc. Electronic system with storage management mechanism and method of operation thereof
US9063844B2 (en) 2011-09-02 2015-06-23 SMART Storage Systems, Inc. Non-volatile memory management system with time measure mechanism and method of operation thereof
US9021319B2 (en) 2011-09-02 2015-04-28 SMART Storage Systems, Inc. Non-volatile memory management system with load leveling and method of operation thereof
US9021231B2 (en) 2011-09-02 2015-04-28 SMART Storage Systems, Inc. Storage control system with write amplification control mechanism and method of operation thereof
US8707104B1 (en) 2011-09-06 2014-04-22 Western Digital Technologies, Inc. Systems and methods for error injection in data storage systems
US8713357B1 (en) 2011-09-06 2014-04-29 Western Digital Technologies, Inc. Systems and methods for detailed error reporting in data storage systems
US9195530B1 (en) 2011-09-06 2015-11-24 Western Digital Technologies, Inc. Systems and methods for improved data management in data storage systems
US8700834B2 (en) 2011-09-06 2014-04-15 Western Digital Technologies, Inc. Systems and methods for an enhanced controller architecture in data storage systems
JP5547148B2 (ja) * 2011-09-13 2014-07-09 株式会社東芝 メモリデバイス
JP2013061795A (ja) * 2011-09-13 2013-04-04 Toshiba Corp 記憶装置、コントローラ、およびリードコマンド実行方法
US10037272B2 (en) * 2012-08-08 2018-07-31 Avalanche Technology, Inc. Storage system employing MRAM and array of solid state disks with integrated switch
US8635407B2 (en) 2011-09-30 2014-01-21 International Business Machines Corporation Direct memory address for solid-state drives
US9372755B1 (en) 2011-10-05 2016-06-21 Bitmicro Networks, Inc. Adaptive power cycle sequences for data recovery
US8938658B2 (en) 2011-11-07 2015-01-20 Sandisk Enterprise Ip Llc Statistical read comparison signal generation for memory systems
US8938583B1 (en) * 2011-11-16 2015-01-20 Western Digital Technologies, Inc. System and method for concurrently executing data access requests
US8954822B2 (en) 2011-11-18 2015-02-10 Sandisk Enterprise Ip Llc Data encoder and decoder using memory-specific parity-check matrix
US9048876B2 (en) 2011-11-18 2015-06-02 Sandisk Enterprise Ip Llc Systems, methods and devices for multi-tiered error correction
US8924815B2 (en) 2011-11-18 2014-12-30 Sandisk Enterprise Ip Llc Systems, methods and devices for decoding codewords having multiple parity segments
US9164887B2 (en) * 2011-12-05 2015-10-20 Industrial Technology Research Institute Power-failure recovery device and method for flash memory
US9069657B2 (en) 2011-12-12 2015-06-30 Apple Inc. LBA bitmap usage
US10203881B2 (en) 2011-12-19 2019-02-12 Apple Inc. Optimized execution of interleaved write operations in solid state drives
US8762627B2 (en) 2011-12-21 2014-06-24 Sandisk Technologies Inc. Memory logical defragmentation during garbage collection
WO2013095471A1 (en) * 2011-12-21 2013-06-27 Intel Corporation Method and apparatus for a partial-address select-signal generator with address shift
US8713204B2 (en) 2011-12-27 2014-04-29 Apple Inc. High-performance AHCI interface
KR20130076429A (ko) * 2011-12-28 2013-07-08 삼성전자주식회사 메모리 장치의 저장 영역 관리 방법 및 이를 이용한 저장 장치
US20130173972A1 (en) * 2011-12-28 2013-07-04 Robert Kubo System and method for solid state disk flash plane failure detection
JP2013140541A (ja) * 2012-01-06 2013-07-18 Toshiba Corp 半導体記憶装置
US20130179614A1 (en) * 2012-01-10 2013-07-11 Diarmuid P. Ross Command Abort to Reduce Latency in Flash Memory Access
US8918680B2 (en) 2012-01-23 2014-12-23 Apple Inc. Trace queue for peripheral component
KR101876574B1 (ko) * 2012-02-02 2018-07-09 에스케이하이닉스 주식회사 데이터 입출력 컨트롤러 및 이를 포함하는 시스템
US9239781B2 (en) 2012-02-07 2016-01-19 SMART Storage Systems, Inc. Storage control system with erase block mechanism and method of operation thereof
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US8892787B2 (en) * 2012-03-06 2014-11-18 Lsi Corporation Methods and apparatus for packing received frames in buffers in a serial attached SCSI (SAS) device
WO2013140435A1 (en) * 2012-03-19 2013-09-26 Hitachi, Ltd. Data storage system comprising non-volatile semiconductor storage device, and storage control method
US8370567B1 (en) * 2012-03-23 2013-02-05 DSSD, Inc. Storage system with self describing data
US9053008B1 (en) 2012-03-26 2015-06-09 Western Digital Technologies, Inc. Systems and methods for providing inline parameter service in data storage devices
US9202577B2 (en) 2012-03-30 2015-12-01 Intel Corporation Solid state drive management in power loss recovery
WO2013147894A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Solid state drive management in power loss recovery
US11024352B2 (en) 2012-04-10 2021-06-01 Samsung Electronics Co., Ltd. Memory system for access concentration decrease management and access concentration decrease method
US9350386B2 (en) * 2012-04-12 2016-05-24 Samsung Electronics Co., Ltd. Memory device, memory system, and method of operating the same
US9298252B2 (en) 2012-04-17 2016-03-29 SMART Storage Systems, Inc. Storage control system with power down mechanism and method of operation thereof
US10133747B2 (en) 2012-04-23 2018-11-20 International Business Machines Corporation Preserving redundancy in data deduplication systems by designation of virtual device
US8996881B2 (en) 2012-04-23 2015-03-31 International Business Machines Corporation Preserving redundancy in data deduplication systems by encryption
US9262428B2 (en) 2012-04-23 2016-02-16 International Business Machines Corporation Preserving redundancy in data deduplication systems by designation of virtual address
US9779103B2 (en) * 2012-04-23 2017-10-03 International Business Machines Corporation Preserving redundancy in data deduplication systems
CN103389963B (zh) * 2012-05-09 2016-08-31 北京兆易创新科技股份有限公司 一种嵌入式系统控制器
US9043669B1 (en) 2012-05-18 2015-05-26 Bitmicro Networks, Inc. Distributed ECC engine for storage media
CN102722447B (zh) * 2012-06-06 2015-01-14 北京航空航天大学 一种内存垃圾收集器中对象状态的增量式跟踪记录方法
US8949689B2 (en) 2012-06-11 2015-02-03 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9003068B2 (en) 2012-07-12 2015-04-07 International Business Machines Corporation Service channel for connecting a host computer to peripheral devices
WO2014011011A1 (ko) * 2012-07-13 2014-01-16 삼성전자(주) 솔리드 스테이트 드라이브 콘트롤러, 솔리드 스테이트 드라이브, 솔리드 스테이트 드라이브의 데이터 처리 방법, 다채널 솔리드 스테이트 드라이브, 레이드 콘트롤러, 시퀀스 정보를 솔리드 스테이트 드라이브에 제공하는 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체
KR102012740B1 (ko) 2012-07-18 2019-08-21 삼성전자주식회사 복수의 불휘발성 메모리 칩들을 포함하는 저장 장치 및 그것의 제어 방법
US20140032820A1 (en) * 2012-07-25 2014-01-30 Akinori Harasawa Data storage apparatus, memory control method and electronic device with data storage apparatus
KR101992940B1 (ko) * 2012-08-08 2019-06-26 삼성전자주식회사 메모리 컨트롤러의 동작 방법, 및 상기 메모리 컨트롤러를 포함하는 시스템
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US20140052897A1 (en) * 2012-08-17 2014-02-20 Seagate Technology Llc Dynamic formation of garbage collection units in a memory
US8938645B2 (en) * 2012-09-19 2015-01-20 Sap Se Invalidation of metadata buffers
US9471484B2 (en) 2012-09-19 2016-10-18 Novachips Canada Inc. Flash memory controller having dual mode pin-out
WO2014047159A1 (en) 2012-09-21 2014-03-27 Violin Memory Inc. Write cache sorting
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US8972826B2 (en) 2012-10-24 2015-03-03 Western Digital Technologies, Inc. Adaptive error correction codes for data storage systems
US8959281B1 (en) 2012-11-09 2015-02-17 Western Digital Technologies, Inc. Data management for a storage device
WO2014077821A1 (en) 2012-11-15 2014-05-22 Empire Technology Development Llc A multi-channel storage system supporting a multi-command protocol
EP2923358A4 (en) * 2012-11-20 2016-06-29 Charles I Peddle SSD ARCHITECTURES
US11037625B2 (en) * 2012-11-20 2021-06-15 Thstyme Bermuda Limited Solid state drive architectures
US9021339B2 (en) 2012-11-29 2015-04-28 Western Digital Technologies, Inc. Data reliability schemes for data storage systems
US9671962B2 (en) 2012-11-30 2017-06-06 Sandisk Technologies Llc Storage control system with data management mechanism of parity and method of operation thereof
US9059736B2 (en) * 2012-12-03 2015-06-16 Western Digital Technologies, Inc. Methods, solid state drive controllers and data storage devices having a runtime variable raid protection scheme
US9135112B2 (en) 2012-12-11 2015-09-15 Seagate Technology Llc Policy for read operations addressing on-the-fly decoding failure in non-volatile memory
US9411718B2 (en) 2012-12-21 2016-08-09 Seagate Technology Llc Method to apply fine grain wear leveling and garbage collection
US9214963B1 (en) 2012-12-21 2015-12-15 Western Digital Technologies, Inc. Method and system for monitoring data channel to enable use of dynamically adjustable LDPC coding parameters in a data storage system
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9239751B1 (en) 2012-12-27 2016-01-19 Sandisk Enterprise Ip Llc Compressing data from multiple reads for error control management in memory systems
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9286002B1 (en) 2012-12-28 2016-03-15 Virident Systems Inc. Dynamic restriping in nonvolatile memory systems
US9842660B1 (en) 2012-12-28 2017-12-12 Virident Systems, Llc System and method to improve enterprise reliability through tracking I/O performance metrics in non-volatile random access memory
US9223693B2 (en) 2012-12-31 2015-12-29 Sandisk Technologies Inc. Memory system having an unequal number of memory die on different control channels
US9003264B1 (en) 2012-12-31 2015-04-07 Sandisk Enterprise Ip Llc Systems, methods, and devices for multi-dimensional flash RAID data protection
US8873284B2 (en) 2012-12-31 2014-10-28 Sandisk Technologies Inc. Method and system for program scheduling in a multi-layer memory
US9734911B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for asynchronous die operations in a non-volatile memory
US9336133B2 (en) 2012-12-31 2016-05-10 Sandisk Technologies Inc. Method and system for managing program cycles including maintenance programming operations in a multi-layer memory
US9465731B2 (en) 2012-12-31 2016-10-11 Sandisk Technologies Llc Multi-layer non-volatile memory system having multiple partitions in a layer
US9348746B2 (en) 2012-12-31 2016-05-24 Sandisk Technologies Method and system for managing block reclaim operations in a multi-layer memory
US9734050B2 (en) 2012-12-31 2017-08-15 Sandisk Technologies Llc Method and system for managing background operations in a multi-layer memory
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9417685B2 (en) * 2013-01-07 2016-08-16 Micron Technology, Inc. Power management
US9123445B2 (en) 2013-01-22 2015-09-01 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US9229854B1 (en) 2013-01-28 2016-01-05 Radian Memory Systems, LLC Multi-array operation support and related devices, systems and software
US11249652B1 (en) 2013-01-28 2022-02-15 Radian Memory Systems, Inc. Maintenance of nonvolatile memory on host selected namespaces by a common memory controller
US10642505B1 (en) 2013-01-28 2020-05-05 Radian Memory Systems, Inc. Techniques for data migration based on per-data metrics and memory degradation
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
CN103970669A (zh) 2013-02-06 2014-08-06 Lsi公司 用于加速在固态设备中的回收操作的物理到逻辑地址映射
US20140223086A1 (en) * 2013-02-06 2014-08-07 Curiositate, Inc. Rapid reading from memory devices
US9552288B2 (en) 2013-02-08 2017-01-24 Seagate Technology Llc Multi-tiered memory with different metadata levels
US9081666B2 (en) 2013-02-15 2015-07-14 Seagate Technology Llc Non-volatile memory channel control using a general purpose programmable processor in combination with a low level programmable sequencer
US9292451B2 (en) 2013-02-19 2016-03-22 Qualcomm Incorporated Methods and apparatus for intra-set wear-leveling for memories with limited write endurance
US9329928B2 (en) 2013-02-20 2016-05-03 Sandisk Enterprise IP LLC. Bandwidth optimization in a non-volatile memory system
US9214965B2 (en) 2013-02-20 2015-12-15 Sandisk Enterprise Ip Llc Method and system for improving data integrity in non-volatile storage
US9286936B1 (en) * 2013-02-21 2016-03-15 Seagate Technology Llc Zone based band mapping
US9348743B2 (en) * 2013-02-21 2016-05-24 Qualcomm Incorporated Inter-set wear-leveling for caches with limited write endurance
US9183137B2 (en) 2013-02-27 2015-11-10 SMART Storage Systems, Inc. Storage control system with data management mechanism and method of operation thereof
US10230396B1 (en) 2013-03-05 2019-03-12 Microsemi Solutions (Us), Inc. Method and apparatus for layer-specific LDPC decoding
US9813080B1 (en) 2013-03-05 2017-11-07 Microsemi Solutions (U.S.), Inc. Layer specific LDPC decoder
EP3333853A1 (en) 2013-03-07 2018-06-13 Charles I. Peddle High speed flash controllers
US9470720B2 (en) 2013-03-08 2016-10-18 Sandisk Technologies Llc Test system with localized heating and method of manufacture thereof
US9423457B2 (en) 2013-03-14 2016-08-23 Bitmicro Networks, Inc. Self-test solution for delay locked loops
US9069695B2 (en) 2013-03-14 2015-06-30 Apple Inc. Correction of block errors for a system having non-volatile memory
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9135164B2 (en) 2013-03-15 2015-09-15 Virident Systems Inc. Synchronous mirroring in non-volatile memory systems
US9875205B1 (en) 2013-03-15 2018-01-23 Bitmicro Networks, Inc. Network of memory systems
US9934045B1 (en) 2013-03-15 2018-04-03 Bitmicro Networks, Inc. Embedded system boot from a storage device
US9092350B1 (en) 2013-03-15 2015-07-28 Sandisk Enterprise Ip Llc Detection and handling of unbalanced errors in interleaved codewords
US9236886B1 (en) 2013-03-15 2016-01-12 Sandisk Enterprise Ip Llc Universal and reconfigurable QC-LDPC encoder
US8996796B1 (en) 2013-03-15 2015-03-31 Virident Systems Inc. Small block write operations in non-volatile memory systems
US9430386B2 (en) 2013-03-15 2016-08-30 Bitmicro Networks, Inc. Multi-leveled cache management in a hybrid storage system
US9136877B1 (en) 2013-03-15 2015-09-15 Sandisk Enterprise Ip Llc Syndrome layered decoding for LDPC codes
US9971524B1 (en) 2013-03-15 2018-05-15 Bitmicro Networks, Inc. Scatter-gather approach for parallel data transfer in a mass storage system
US9842024B1 (en) 2013-03-15 2017-12-12 Bitmicro Networks, Inc. Flash electronic disk with RAID controller
US9009576B1 (en) 2013-03-15 2015-04-14 Sandisk Enterprise Ip Llc Adaptive LLR based on syndrome weight
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
US9501436B1 (en) 2013-03-15 2016-11-22 Bitmicro Networks, Inc. Multi-level message passing descriptor
US10120694B2 (en) 2013-03-15 2018-11-06 Bitmicro Networks, Inc. Embedded system boot from a storage device
US9916213B1 (en) 2013-03-15 2018-03-13 Bitmicro Networks, Inc. Bus arbitration with routing and failover mechanism
US9720603B1 (en) 2013-03-15 2017-08-01 Bitmicro Networks, Inc. IOC to IOC distributed caching architecture
US9672178B1 (en) 2013-03-15 2017-06-06 Bitmicro Networks, Inc. Bit-mapped DMA transfer with dependency table configured to monitor status so that a processor is not rendered as a bottleneck in a system
US10489318B1 (en) 2013-03-15 2019-11-26 Bitmicro Networks, Inc. Scatter-gather approach for parallel data transfer in a mass storage system
US9244763B1 (en) 2013-03-15 2016-01-26 Sandisk Enterprise Ip Llc System and method for updating a reading threshold voltage based on symbol transition information
US9092310B2 (en) 2013-03-15 2015-07-28 Seagate Technology Llc Host command based read disturb methodology
US8966164B1 (en) * 2013-09-27 2015-02-24 Avalanche Technology, Inc. Storage processor managing NVME logically addressed solid state disk array
US9400617B2 (en) 2013-03-15 2016-07-26 Bitmicro Networks, Inc. Hardware-assisted DMA transfer with dependency table configured to permit-in parallel-data drain from cache without processor intervention when filled or drained
US9798688B1 (en) 2013-03-15 2017-10-24 Bitmicro Networks, Inc. Bus arbitration with routing and failover mechanism
US10073626B2 (en) * 2013-03-15 2018-09-11 Virident Systems, Llc Managing the write performance of an asymmetric memory system
US9734067B1 (en) 2013-03-15 2017-08-15 Bitmicro Networks, Inc. Write buffering
US9043780B2 (en) 2013-03-27 2015-05-26 SMART Storage Systems, Inc. Electronic system with system modification control mechanism and method of operation thereof
US9170941B2 (en) 2013-04-05 2015-10-27 Sandisk Enterprises IP LLC Data hardening in a storage system
US10049037B2 (en) 2013-04-05 2018-08-14 Sandisk Enterprise Ip Llc Data management in a storage system
US9543025B2 (en) 2013-04-11 2017-01-10 Sandisk Technologies Llc Storage control system with power-off time estimation mechanism and method of operation thereof
US10546648B2 (en) 2013-04-12 2020-01-28 Sandisk Technologies Llc Storage control system with data management mechanism and method of operation thereof
US9558108B2 (en) * 2013-04-15 2017-01-31 Macronix International Co., Ltd. Half block management for flash storage devices
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management
US10102144B2 (en) * 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
CN103226526A (zh) * 2013-04-19 2013-07-31 无锡云动科技发展有限公司 一种存储器访问控制装置
US20140328127A1 (en) * 2013-05-02 2014-11-06 Skymedi Corporation Method of Managing Non-Volatile Memory and Non-Volatile Storage Device Using the Same
CN104133774A (zh) * 2013-05-02 2014-11-05 擎泰科技股份有限公司 管理非易失性存储器的方法及其非易失性存储装置
US9632926B1 (en) 2013-05-16 2017-04-25 Western Digital Technologies, Inc. Memory unit assignment and selection for internal memory operations in data storage systems
TWI548990B (zh) * 2013-05-17 2016-09-11 宇瞻科技股份有限公司 記憶體儲存裝置及其還原方法與記憶體控制器
US9728526B2 (en) * 2013-05-29 2017-08-08 Sandisk Technologies Llc Packaging of high performance system topology for NAND memory systems
CN105122227B (zh) * 2013-05-29 2018-10-23 桑迪士克科技有限责任公司 用于nand存储器系统的高性能系统拓补
US9324389B2 (en) 2013-05-29 2016-04-26 Sandisk Technologies Inc. High performance system topology for NAND memory systems
US10019203B1 (en) * 2013-05-30 2018-07-10 Cavium, Inc. Method and system for processing write requests
US9159437B2 (en) 2013-06-11 2015-10-13 Sandisk Enterprise IP LLC. Device and method for resolving an LM flag issue
US9313874B2 (en) 2013-06-19 2016-04-12 SMART Storage Systems, Inc. Electronic system with heat extraction and method of manufacture thereof
US9898056B2 (en) 2013-06-19 2018-02-20 Sandisk Technologies Llc Electronic assembly with thermal channel and method of manufacture thereof
US9244519B1 (en) 2013-06-25 2016-01-26 Smart Storage Systems. Inc. Storage system with data transfer rate adjustment for power throttling
US9367353B1 (en) 2013-06-25 2016-06-14 Sandisk Technologies Inc. Storage control system with power throttling mechanism and method of operation thereof
US9280463B2 (en) 2013-07-25 2016-03-08 Globalfoundries Inc. Semiconductor memory garbage collection
US9384126B1 (en) 2013-07-25 2016-07-05 Sandisk Technologies Inc. Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems
US9043517B1 (en) 2013-07-25 2015-05-26 Sandisk Enterprise Ip Llc Multipass programming in buffers implemented in non-volatile data storage systems
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9141176B1 (en) 2013-07-29 2015-09-22 Western Digital Technologies, Inc. Power management for data storage device
US9146850B2 (en) 2013-08-01 2015-09-29 SMART Storage Systems, Inc. Data storage system with dynamic read threshold mechanism and method of operation thereof
US9448946B2 (en) 2013-08-07 2016-09-20 Sandisk Technologies Llc Data storage system with stale data mechanism and method of operation thereof
US9361222B2 (en) 2013-08-07 2016-06-07 SMART Storage Systems, Inc. Electronic system with storage drive life estimation mechanism and method of operation thereof
US9431113B2 (en) 2013-08-07 2016-08-30 Sandisk Technologies Llc Data storage system with dynamic erase block grouping mechanism and method of operation thereof
US9880926B1 (en) * 2013-08-20 2018-01-30 Seagate Technology Llc Log structured reserved zone for a data storage device
US9361221B1 (en) 2013-08-26 2016-06-07 Sandisk Technologies Inc. Write amplification reduction through reliable writes during garbage collection
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9070379B2 (en) 2013-08-28 2015-06-30 Western Digital Technologies, Inc. Data migration for data storage device
US9519577B2 (en) 2013-09-03 2016-12-13 Sandisk Technologies Llc Method and system for migrating data between flash memory devices
US9442670B2 (en) 2013-09-03 2016-09-13 Sandisk Technologies Llc Method and system for rebalancing data stored in flash memory devices
US9304709B2 (en) * 2013-09-06 2016-04-05 Western Digital Technologies, Inc. High performance system providing selective merging of dataframe segments in hardware
US20150074332A1 (en) * 2013-09-10 2015-03-12 Kabushiki Kaisha Toshiba Memory controller and memory system
US9292379B2 (en) * 2013-09-28 2016-03-22 Intel Corporation Apparatus and method to manage high capacity storage devices
US9158349B2 (en) 2013-10-04 2015-10-13 Sandisk Enterprise Ip Llc System and method for heat dissipation
US9323637B2 (en) 2013-10-07 2016-04-26 Sandisk Enterprise Ip Llc Power sequencing and data hardening architecture
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US9298608B2 (en) 2013-10-18 2016-03-29 Sandisk Enterprise Ip Llc Biasing for wear leveling in storage systems
US8917471B1 (en) 2013-10-29 2014-12-23 Western Digital Technologies, Inc. Power management for data storage device
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9263156B2 (en) 2013-11-07 2016-02-16 Sandisk Enterprise Ip Llc System and method for adjusting trip points within a storage device
US9244785B2 (en) 2013-11-13 2016-01-26 Sandisk Enterprise Ip Llc Simulated power failure and data hardening
KR102146037B1 (ko) 2013-11-14 2020-08-19 삼성전자주식회사 불휘발성 메모리 시스템 및 그것의 동작 방법
US9152555B2 (en) 2013-11-15 2015-10-06 Sandisk Enterprise IP LLC. Data management with modular erase in a data storage system
US9286959B2 (en) * 2013-11-18 2016-03-15 International Business Machines Corporation Low latency memory access control for non-volatile memories
KR102114112B1 (ko) 2013-11-19 2020-05-22 에스케이하이닉스 주식회사 데이터 저장 장치
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
KR20150061393A (ko) * 2013-11-27 2015-06-04 삼성전자주식회사 메모리 장치로부터 읽은 데이터를 고속으로 전송하는 메모리 컨트롤러 및 그것의 데이터 전송 방법.
US9280429B2 (en) 2013-11-27 2016-03-08 Sandisk Enterprise Ip Llc Power fail latching based on monitoring multiple power supply voltages in a storage device
US9122636B2 (en) 2013-11-27 2015-09-01 Sandisk Enterprise Ip Llc Hard power fail architecture
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9250676B2 (en) 2013-11-29 2016-02-02 Sandisk Enterprise Ip Llc Power failure architecture and verification
GB201321148D0 (en) * 2013-11-29 2014-01-15 Bridgeworks Ltd Data transfer
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US10003675B2 (en) 2013-12-02 2018-06-19 Micron Technology, Inc. Packet processor receiving packets containing instructions, data, and starting location and generating packets containing instructions and data
US9092370B2 (en) 2013-12-03 2015-07-28 Sandisk Enterprise Ip Llc Power failure tolerant cryptographic erase
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US11538005B2 (en) * 2013-12-16 2022-12-27 Mx Technologies, Inc. Long string pattern matching of aggregated account data
US9129665B2 (en) 2013-12-17 2015-09-08 Sandisk Enterprise Ip Llc Dynamic brownout adjustment in a storage device
US9703702B2 (en) * 2013-12-23 2017-07-11 Sandisk Technologies Llc Addressing auto address assignment and auto-routing in NAND memory network
US20150186257A1 (en) * 2013-12-26 2015-07-02 Anand S. Ramalingam Managing a transfer buffer for a non-volatile memory
KR102166924B1 (ko) * 2013-12-26 2020-10-16 삼성전자주식회사 저장 장치의 구동 방법
US9632880B2 (en) * 2013-12-26 2017-04-25 Silicon Motion, Inc. Data storage device and flash memory control method
TWI467578B (zh) * 2014-01-09 2015-01-01 Phison Electronics Corp 錯誤處理方法、記憶體儲存裝置與記憶體控制電路單元
US20150205541A1 (en) * 2014-01-20 2015-07-23 Samya Systems, Inc. High-capacity solid state disk drives
US20160342508A1 (en) * 2014-01-31 2016-11-24 Hewlett Packard Enterprise Development Lp Identifying memory regions that contain remapped memory locations
US10521387B2 (en) 2014-02-07 2019-12-31 Toshiba Memory Corporation NAND switch
US9549457B2 (en) 2014-02-12 2017-01-17 Sandisk Technologies Llc System and method for redirecting airflow across an electronic assembly
US9542344B2 (en) 2014-02-19 2017-01-10 Sandisk Technologies Llc Datapath management in a memory controller
US9933980B2 (en) * 2014-02-24 2018-04-03 Toshiba Memory Corporation NAND raid controller for connection between an SSD controller and multiple non-volatile storage units
US9497889B2 (en) 2014-02-27 2016-11-15 Sandisk Technologies Llc Heat dissipation for substrate assemblies
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9423979B2 (en) 2014-03-10 2016-08-23 Kabushiki Kaisha Toshiba Memory system and memory controller for determining whether one or plurality of pointers can be stored in a second buffer and for executing data transfer between data buffer and host using the pointers
KR20150106778A (ko) 2014-03-12 2015-09-22 삼성전자주식회사 메모리 시스템 및 메모리 시스템의 제어 방법
US20150261631A1 (en) * 2014-03-12 2015-09-17 Kabushiki Kaisha Toshiba Memory system and memory controller
US9519319B2 (en) 2014-03-14 2016-12-13 Sandisk Technologies Llc Self-supporting thermal tube structure for electronic assemblies
KR102233808B1 (ko) 2014-03-14 2021-03-30 삼성전자주식회사 저장 장치 및 그것의 테이블 관리 방법
KR102222463B1 (ko) 2014-03-14 2021-03-03 삼성전자주식회사 저장 장치 및 그것의 타이머 설정 방법 및 구동 방법들
US9485851B2 (en) 2014-03-14 2016-11-01 Sandisk Technologies Llc Thermal tube assembly structures
US9348377B2 (en) 2014-03-14 2016-05-24 Sandisk Enterprise Ip Llc Thermal isolation techniques
US9230689B2 (en) 2014-03-17 2016-01-05 Sandisk Technologies Inc. Finding read disturbs on non-volatile memories
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
JP2015197859A (ja) * 2014-04-02 2015-11-09 株式会社東芝 メモリコントローラ、半導体記憶装置、およびメモリコントローラの制御方法
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US9952991B1 (en) 2014-04-17 2018-04-24 Bitmicro Networks, Inc. Systematic method on queuing of descriptors for multiple flash intelligent DMA engine operation
US10055150B1 (en) 2014-04-17 2018-08-21 Bitmicro Networks, Inc. Writing volatile scattered memory metadata to flash device
US10042792B1 (en) 2014-04-17 2018-08-07 Bitmicro Networks, Inc. Method for transferring and receiving frames across PCI express bus for SSD device
US10078604B1 (en) 2014-04-17 2018-09-18 Bitmicro Networks, Inc. Interrupt coalescing
US10025736B1 (en) 2014-04-17 2018-07-17 Bitmicro Networks, Inc. Exchange message protocol message transmission between two devices
US9811461B1 (en) 2014-04-17 2017-11-07 Bitmicro Networks, Inc. Data storage system
US9911477B1 (en) * 2014-04-18 2018-03-06 Altera Corporation Memory controller architecture with improved memory scheduling efficiency
JP6273353B2 (ja) * 2014-04-21 2018-01-31 株式会社日立製作所 計算機システム
US9323607B2 (en) 2014-04-29 2016-04-26 Seagate Technology Llc Data recovery once ECC fails to correct the data
KR102149768B1 (ko) 2014-04-29 2020-08-31 삼성전자주식회사 불휘발성 메모리 시스템
US9214198B2 (en) 2014-04-30 2015-12-15 Sandisk Enterprise Ip Llc Continuous capacitor health monitoring and power supply system
KR20150127914A (ko) * 2014-05-07 2015-11-18 에스케이하이닉스 주식회사 복수의 프로세서들을 포함하는 반도체 장치 및 그것의 동작 방법
US9465537B2 (en) 2014-05-16 2016-10-11 Kabushiki Kaisha Toshiba Memory system and method of controlling memory system
US9286056B2 (en) 2014-05-19 2016-03-15 International Business Machines Corporation Reducing storage facility code load suspend rate by redundancy check
US9710173B2 (en) * 2014-05-20 2017-07-18 Micron Technology, Inc. Read cache memory with DRAM class promotion
US9645749B2 (en) 2014-05-30 2017-05-09 Sandisk Technologies Llc Method and system for recharacterizing the storage density of a memory device or a portion thereof
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US8891303B1 (en) 2014-05-30 2014-11-18 Sandisk Technologies Inc. Method and system for dynamic word line based configuration of a three-dimensional memory device
US9093160B1 (en) 2014-05-30 2015-07-28 Sandisk Technologies Inc. Methods and systems for staggered memory operations
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US9070481B1 (en) 2014-05-30 2015-06-30 Sandisk Technologies Inc. Internal current measurement for age measurements
US9823864B2 (en) * 2014-06-02 2017-11-21 Micron Technology, Inc. Systems and methods for throttling packet transmission in a scalable memory system protocol
CN105224546B (zh) * 2014-06-04 2020-10-30 创新先进技术有限公司 数据存储和查询方法及设备
JP6181304B2 (ja) 2014-06-19 2017-08-16 株式会社日立製作所 ストレージ装置およびインタフェース装置
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
KR102292172B1 (ko) 2014-06-23 2021-08-25 삼성전자주식회사 불휘발성 메모리 장치 및 메모리 컨트롤러의 동작 방법
US9823863B1 (en) * 2014-06-30 2017-11-21 Sk Hynix Memory Solutions Inc. Sub-blocks and meta pages for mapping table rebuild
US9348518B2 (en) 2014-07-02 2016-05-24 International Business Machines Corporation Buffered automated flash controller connected directly to processor memory bus
US9836245B2 (en) * 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
KR20160005264A (ko) 2014-07-04 2016-01-14 삼성전자주식회사 저장 장치 및 그것의 읽기 방법들
US9652415B2 (en) * 2014-07-09 2017-05-16 Sandisk Technologies Llc Atomic non-volatile memory data transfer
US9904621B2 (en) 2014-07-15 2018-02-27 Sandisk Technologies Llc Methods and systems for flash buffer sizing
US9846661B2 (en) 2014-07-17 2017-12-19 Empire Technology Development Llc Utilization of solid state memory devices
US9645744B2 (en) 2014-07-22 2017-05-09 Sandisk Technologies Llc Suspending and resuming non-volatile memory operations
US9542284B2 (en) 2014-08-06 2017-01-10 International Business Machines Corporation Buffered automated flash controller connected directly to processor memory bus
US10002044B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
KR102282006B1 (ko) 2014-08-19 2021-07-28 삼성전자주식회사 컴퓨터 장치 및 저장 장치
US10002043B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
US10388396B2 (en) * 2014-08-25 2019-08-20 Rambus Inc. Buffer circuit with adaptive repair capability
US9378149B1 (en) 2014-08-29 2016-06-28 Emc Corporation Method and system for tracking modification times of data in a storage system
US10474618B2 (en) 2014-09-04 2019-11-12 Western Digital Technologies, Inc. Debug data saving in host memory on PCIE solid state drive
US9891837B2 (en) * 2014-09-08 2018-02-13 Toshiba Memory Corporation Memory system
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US9542118B1 (en) 2014-09-09 2017-01-10 Radian Memory Systems, Inc. Expositive flash memory control
US10552085B1 (en) 2014-09-09 2020-02-04 Radian Memory Systems, Inc. Techniques for directed data migration
US9436397B2 (en) 2014-09-23 2016-09-06 Sandisk Technologies Llc. Validating the status of memory operations
US9772783B2 (en) 2014-09-25 2017-09-26 Dropbox, Inc. Constructing an index to facilitate accessing a closed extent in an append-only storage system
US9690823B2 (en) 2014-09-25 2017-06-27 Dropbox, Inc. Synchronizing copies of an extent in an append-only storage system
US9720607B2 (en) * 2014-09-25 2017-08-01 Dropbox, Inc. Append-only storage system supporting open and closed extents
US9582201B2 (en) 2014-09-26 2017-02-28 Western Digital Technologies, Inc. Multi-tier scheme for logical storage management
US9658923B2 (en) 2014-09-30 2017-05-23 International Business Machines Corporation Optimization of rebuilding in solid state drives
US9626286B2 (en) * 2014-10-03 2017-04-18 Sandisk Technologies Llc Hardware and firmware paths for performing memory read processes
US9665451B2 (en) 2014-10-07 2017-05-30 Sandisk Technologies Llc Method and device for distributing holdup energy to memory arrays
US9336136B2 (en) * 2014-10-08 2016-05-10 HGST Netherlands B.V. Apparatus, systems, and methods for providing wear leveling in solid state devices
US9672094B1 (en) * 2014-10-24 2017-06-06 Xilinx, Inc. Interconnect circuitry fault detection
US9952978B2 (en) 2014-10-27 2018-04-24 Sandisk Technologies, Llc Method for improving mixed random performance in low queue depth workloads
US9558125B2 (en) 2014-10-27 2017-01-31 Sandisk Technologies Llc Processing of un-map commands to enhance performance and endurance of a storage device
US9753649B2 (en) 2014-10-27 2017-09-05 Sandisk Technologies Llc Tracking intermix of writes and un-map commands across power cycles
KR102358053B1 (ko) 2014-10-28 2022-02-04 삼성전자주식회사 복수의 불휘발성 메모리 칩들을 포함하는 스토리지 장치
KR20160051367A (ko) * 2014-11-03 2016-05-11 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
US9684606B2 (en) * 2014-11-14 2017-06-20 Cavium, Inc. Translation lookaside buffer invalidation suppression
KR102255216B1 (ko) 2014-11-20 2021-05-24 삼성전자주식회사 Pci 장치와 이를 포함하는 pci 시스템
US9824007B2 (en) 2014-11-21 2017-11-21 Sandisk Technologies Llc Data integrity enhancement to protect against returning old versions of data
US9817752B2 (en) 2014-11-21 2017-11-14 Sandisk Technologies Llc Data integrity enhancement to protect against returning old versions of data
US9678864B2 (en) * 2014-12-03 2017-06-13 Seagate Technology Llc Data reallocation upon detection of errors
US9697074B2 (en) * 2014-12-11 2017-07-04 Internatioanl Business Machines Corporation Non-local error detection in processor systems
US9792071B2 (en) 2014-12-22 2017-10-17 Sandisk Technologies Llc End of life prediction to reduce retention triggered operations
US10474569B2 (en) * 2014-12-29 2019-11-12 Toshiba Memory Corporation Information processing device including nonvolatile cache memory and processor
US9772939B2 (en) 2015-01-05 2017-09-26 International Business Machines Corporation Heat-based key-value slot organization for flash-optimized data placement in multi-tiered storage systems
KR102355436B1 (ko) * 2015-01-09 2022-01-26 에스케이하이닉스 주식회사 데이터 저장 장치
US10061743B2 (en) 2015-01-27 2018-08-28 International Business Machines Corporation Host based non-volatile memory clustering using network mapped storage
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US9965323B2 (en) * 2015-03-11 2018-05-08 Western Digital Technologies, Inc. Task queues
EP3268864B1 (en) * 2015-03-11 2021-01-27 Rambus Inc. High performance non-volatile memory module
US9647697B2 (en) 2015-03-16 2017-05-09 Sandisk Technologies Llc Method and system for determining soft information offsets
CN106095699B (zh) * 2015-03-20 2020-12-01 爱思开海力士有限公司 用于快闪存储器的可扩展spor算法
CN107615388A (zh) 2015-03-20 2018-01-19 波利伍德有限责任公司 存储控制器中的可配置多级纠错
US10180805B2 (en) * 2015-03-25 2019-01-15 SK Hynix Inc. Memory system and operating method thereof
US9946644B2 (en) * 2015-03-25 2018-04-17 SK Hynix Inc. Memory system and operating method thereof
WO2016154078A1 (en) 2015-03-26 2016-09-29 Burlywood, LLC A medium defect management method for storage systems requiring an integrated controller
US10102146B2 (en) * 2015-03-26 2018-10-16 SK Hynix Inc. Memory system and operating method for improving rebuild efficiency
US9811420B2 (en) * 2015-03-27 2017-11-07 Intel Corporation Extracting selective information from on-die dynamic random access memory (DRAM) error correction code (ECC)
US9496018B2 (en) * 2015-04-01 2016-11-15 International Business Machines Corporation Nonvolatile memory interface for metadata shadowing
CN106155926B (zh) * 2015-04-09 2019-11-26 澜起科技股份有限公司 存储器及存储器的数据交互方法
US9645765B2 (en) 2015-04-09 2017-05-09 Sandisk Technologies Llc Reading and writing data at multiple, individual non-volatile memory portions in response to data transfer sent to single relative memory address
US9753653B2 (en) 2015-04-14 2017-09-05 Sandisk Technologies Llc High-priority NAND operations management
US9864545B2 (en) 2015-04-14 2018-01-09 Sandisk Technologies Llc Open erase block read automation
US10338827B2 (en) * 2015-04-17 2019-07-02 Johann George Digitally lending content without reproduction
US10372529B2 (en) 2015-04-20 2019-08-06 Sandisk Technologies Llc Iterative soft information correction and decoding
US9778878B2 (en) 2015-04-22 2017-10-03 Sandisk Technologies Llc Method and system for limiting write command execution
KR102298661B1 (ko) 2015-04-30 2021-09-07 삼성전자주식회사 저장 장치 및 그것의 초기화 방법
US10332613B1 (en) 2015-05-18 2019-06-25 Microsemi Solutions (Us), Inc. Nonvolatile memory system with retention monitor
US9875053B2 (en) 2015-06-05 2018-01-23 Western Digital Technologies, Inc. Scheduling scheme(s) for a multi-die storage device
US10289327B2 (en) 2015-06-05 2019-05-14 Western Digital Technologies, Inc. Scheduling scheme(s) for a multi-die storage device
CN106250050B (zh) * 2015-06-10 2021-02-05 恩智浦美国有限公司 用于数据传输中的实时空白页检测的方法和装置
TWI563509B (en) * 2015-07-07 2016-12-21 Phison Electronics Corp Wear leveling method, memory storage device and memory control circuit unit
US10078448B2 (en) 2015-07-08 2018-09-18 Samsung Electronics Co., Ltd. Electronic devices and memory management methods thereof
US9870149B2 (en) 2015-07-08 2018-01-16 Sandisk Technologies Llc Scheduling operations in non-volatile memory devices using preference values
US9916091B2 (en) * 2015-07-13 2018-03-13 Samsung Electronics Co., Ltd. Memory system architecture
US10552058B1 (en) 2015-07-17 2020-02-04 Radian Memory Systems, Inc. Techniques for delegating data processing to a cooperative memory controller
US9799405B1 (en) 2015-07-29 2017-10-24 Ip Gem Group, Llc Nonvolatile memory system with read circuit for performing reads using threshold voltage shift read instruction
US9715939B2 (en) 2015-08-10 2017-07-25 Sandisk Technologies Llc Low read data storage management
US10665305B2 (en) * 2015-09-09 2020-05-26 Toshiba Memory Corporation Host device connectable to memory device performing patrol read and memory device performing patrol read
CN105183387A (zh) * 2015-09-14 2015-12-23 联想(北京)有限公司 一种控制方法及控制器、存储设备
US9703501B2 (en) * 2015-09-30 2017-07-11 International Business Machines Corporation Virtual storage instrumentation for real time analytics
CN106569727B (zh) * 2015-10-08 2019-04-16 福州瑞芯微电子股份有限公司 一种多控制器间多存储器共享并行数据读写装置及其写入、读取方法
DE102015219844A1 (de) * 2015-10-13 2017-04-13 Robert Bosch Gmbh Verfahren und Vorrichtung zum verzögerungsfreien Betreiben eines Steuergerätes
US10303536B2 (en) * 2015-10-28 2019-05-28 Via Technologies, Inc. Non-volatile memory device and control method thereof
US10452596B2 (en) * 2015-10-29 2019-10-22 Micron Technology, Inc. Memory cells configured in multiple configuration modes
US10120613B2 (en) 2015-10-30 2018-11-06 Sandisk Technologies Llc System and method for rescheduling host and maintenance operations in a non-volatile memory
US10042553B2 (en) 2015-10-30 2018-08-07 Sandisk Technologies Llc Method and system for programming a multi-layer non-volatile memory having a single fold data path
US10133490B2 (en) 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US9778855B2 (en) 2015-10-30 2017-10-03 Sandisk Technologies Llc System and method for precision interleaving of data writes in a non-volatile memory
US9996262B1 (en) * 2015-11-09 2018-06-12 Seagate Technology Llc Method and apparatus to abort a command
US10228990B2 (en) 2015-11-12 2019-03-12 Sandisk Technologies Llc Variable-term error metrics adjustment
TWI578222B (zh) * 2015-11-18 2017-04-11 慧榮科技股份有限公司 資料儲存裝置及其資料維護方法
KR102406267B1 (ko) * 2015-11-19 2022-06-08 삼성전자주식회사 불휘발성 메모리 모듈 및 이를 포함하는 전자 장치
CN108701488A (zh) * 2015-12-01 2018-10-23 科内克斯实验室公司 用于在逻辑上去除非易失性存储器存储设备中的缺陷页的方法和装置
US9898215B2 (en) 2015-12-07 2018-02-20 International Business Machines Corporation Efficient management of page retirement in non-volatile memory utilizing page retirement classes
US9886214B2 (en) 2015-12-11 2018-02-06 Ip Gem Group, Llc Nonvolatile memory system with erase suspend circuit and method for erase suspend management
US10126970B2 (en) 2015-12-11 2018-11-13 Sandisk Technologies Llc Paired metablocks in non-volatile storage device
JP6414853B2 (ja) * 2015-12-14 2018-10-31 東芝メモリ株式会社 メモリシステムおよび制御方法
US9892794B2 (en) 2016-01-04 2018-02-13 Ip Gem Group, Llc Method and apparatus with program suspend using test mode
US9837146B2 (en) 2016-01-08 2017-12-05 Sandisk Technologies Llc Memory system temperature management
US10169144B2 (en) 2016-01-15 2019-01-01 Micron Technology, Inc. Non-volatile memory including selective error correction
US9899092B2 (en) 2016-01-27 2018-02-20 Ip Gem Group, Llc Nonvolatile memory system with program step manager and method for program step management
US10255955B2 (en) 2016-02-09 2019-04-09 Samsung Electronics Co., Ltd. Multi-port memory device and a method of using the same
CN107102814B (zh) * 2016-02-19 2020-03-17 群联电子股份有限公司 存储器管理方法、存储器控制电路单元与存储器存储装置
KR20170099018A (ko) * 2016-02-22 2017-08-31 에스케이하이닉스 주식회사 메모리 시스템 및 그의 동작방법
US10732856B2 (en) 2016-03-03 2020-08-04 Sandisk Technologies Llc Erase health metric to rank memory portions
KR102485397B1 (ko) * 2016-03-17 2023-01-06 에스케이하이닉스 주식회사 메모리 시스템 및 그 동작 방법
CN107273041A (zh) * 2016-04-07 2017-10-20 株式会社东芝 存储装置以及该装置中的数据保存方法
KR102570367B1 (ko) 2016-04-21 2023-08-28 삼성전자주식회사 불휘발성 메모리 장치 및 컨트롤러를 포함하는 스토리지 장치를 액세스하는 액세스 방법
US9898208B2 (en) * 2016-04-27 2018-02-20 Datadirect Networks, Inc. Storage system with hybrid logical volumes utilizing in-band hinting
US10402314B2 (en) 2016-05-16 2019-09-03 SK Hynix Inc. Self-management memory system and operating method thereof
FR3051574A1 (fr) * 2016-05-20 2017-11-24 Proton World Int Nv Gestion du stockage dans une memoire flash
US20170344262A1 (en) * 2016-05-25 2017-11-30 SK Hynix Inc. Data processing system and method for operating the same
CN106020735A (zh) * 2016-05-31 2016-10-12 晨星半导体股份有限公司 一种数据存储方法及数据存储装置
DE102016211386A1 (de) * 2016-06-14 2017-12-14 Robert Bosch Gmbh Verfahren zum Betreiben einer Recheneinheit
US10496289B2 (en) * 2016-06-16 2019-12-03 Nuvoton Technology Corporation System and methods for increasing useful lifetime of a flash memory device
US9934151B2 (en) 2016-06-28 2018-04-03 Dell Products, Lp System and method for dynamic optimization for burst and sustained performance in solid state drives
US10089025B1 (en) 2016-06-29 2018-10-02 EMC IP Holding Company LLC Bloom filters in a flash memory
US10261704B1 (en) 2016-06-29 2019-04-16 EMC IP Holding Company LLC Linked lists in flash memory
US10146438B1 (en) 2016-06-29 2018-12-04 EMC IP Holding Company LLC Additive library for data structures in a flash memory
US10331561B1 (en) 2016-06-29 2019-06-25 Emc Corporation Systems and methods for rebuilding a cache index
US10055351B1 (en) 2016-06-29 2018-08-21 EMC IP Holding Company LLC Low-overhead index for a flash cache
US10037164B1 (en) 2016-06-29 2018-07-31 EMC IP Holding Company LLC Flash interface for processing datasets
US10466902B2 (en) * 2016-07-18 2019-11-05 SK Hynix Inc. Memory system and operation method for the same
US10481830B2 (en) 2016-07-25 2019-11-19 Sandisk Technologies Llc Selectively throttling host reads for read disturbs in non-volatile memory system
US10291263B2 (en) 2016-07-28 2019-05-14 Ip Gem Group, Llc Auto-learning log likelihood ratio
US10283215B2 (en) 2016-07-28 2019-05-07 Ip Gem Group, Llc Nonvolatile memory system with background reference positioning and local reference positioning
US10236915B2 (en) 2016-07-29 2019-03-19 Microsemi Solutions (U.S.), Inc. Variable T BCH encoding
US10496484B2 (en) 2016-08-05 2019-12-03 Sandisk Technologies Llc Methods and apparatus for error detection for data storage devices
KR102554416B1 (ko) 2016-08-16 2023-07-11 삼성전자주식회사 메모리 장치의 내부 상태 출력 장치 및 이를 적용하는 메모리 시스템
KR102558947B1 (ko) * 2016-08-25 2023-07-25 에스케이하이닉스 주식회사 데이터 저장 장치
KR102621467B1 (ko) * 2016-09-05 2024-01-05 삼성전자주식회사 비휘발성 메모리 장치 및 비휘발성 메모리 장치의 온도 조절 방법
FR3055992A1 (fr) * 2016-09-09 2018-03-16 Proton World International N.V. Gestion d'index dans une memoire flash
US10169152B2 (en) 2016-09-12 2019-01-01 International Business Machines Corporation Resilient data storage and retrieval
CN107025066A (zh) 2016-09-14 2017-08-08 阿里巴巴集团控股有限公司 在基于闪存的存储介质中写入存储数据的方法和装置
KR102585214B1 (ko) 2016-09-22 2023-10-05 삼성전자주식회사 가변 소거 유닛 크기를 가지는 스토리지 디바이스 및 이를 포함하는 레이드 스토리지 시스템
US10162522B1 (en) * 2016-09-30 2018-12-25 Cadence Design Systems, Inc. Architecture of single channel memory controller to support high bandwidth memory of pseudo channel mode or legacy mode
KR20180055296A (ko) * 2016-11-16 2018-05-25 삼성전자주식회사 컴퓨터 시스템, 및 컴퓨터 시스템의 동작 방법
KR20180058894A (ko) * 2016-11-24 2018-06-04 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20180064588A (ko) * 2016-12-05 2018-06-15 에스케이하이닉스 주식회사 메모리 제어 장치 및 방법
US10235069B2 (en) 2016-12-22 2019-03-19 Western Digital Technologies, Inc. Load balancing by dynamically transferring memory range assignments
US10360973B2 (en) * 2016-12-23 2019-07-23 Western Digital Technologies, Inc. Data mapping enabling fast read multi-level 3D NAND to improve lifetime capacity
US10380028B2 (en) 2016-12-30 2019-08-13 Western Digital Technologies, Inc. Recovery of validity data for a data storage system
US10572181B2 (en) 2017-02-01 2020-02-25 Microsoft Technology Licensing, Llc Multiple stage garbage collector
US10628306B2 (en) 2017-02-01 2020-04-21 Microsoft Technology Licensing, Llc Garbage collector
US11288017B2 (en) * 2017-02-23 2022-03-29 Smart IOPS, Inc. Devices, systems, and methods for storing data using distributed control
KR20190061942A (ko) * 2017-11-28 2019-06-05 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
TWI653533B (zh) 2017-03-07 2019-03-11 慧榮科技股份有限公司 資料儲存裝置以及其操作方法
US10078453B1 (en) * 2017-03-15 2018-09-18 Intel Corporation Storage system, computer program product, and method for managing a hybrid memory device system
US10613772B2 (en) 2017-03-16 2020-04-07 Qualcomm Incorporated Methods and apparatuses for copying a data page in an unmanaged flash memory device
US10552050B1 (en) 2017-04-07 2020-02-04 Bitmicro Llc Multi-dimensional computer storage system
TWI628542B (zh) * 2017-04-21 2018-07-01 慧榮科技股份有限公司 快閃記憶體的垃圾回收斷電回復方法以及使用該方法的裝置
US10360045B2 (en) * 2017-04-25 2019-07-23 Sandisk Technologies Llc Event-driven schemes for determining suspend/resume periods
US10402361B2 (en) * 2017-04-28 2019-09-03 Hitachi, Ltd. Storage system
US10635339B2 (en) 2017-05-02 2020-04-28 Smart Ipos, Inc. Devices, systems, and methods for reducing storage utilization with data deduplication
US10586043B2 (en) * 2017-05-03 2020-03-10 Samsung Electronics Co., Ltd. System and method for detecting malicious software in NVME over fabrics devices
US10558567B1 (en) 2017-05-12 2020-02-11 Levyx, Inc. Storage device embedded strand architecture
WO2018211493A1 (en) * 2017-05-18 2018-11-22 Kaminario Technologies Ltd. Garbage collection in a distributed storage system
CN107229535B (zh) * 2017-05-23 2020-01-21 杭州宏杉科技股份有限公司 数据块的多副本存储方法、存储设备、数据读取方法
US10372353B2 (en) 2017-05-31 2019-08-06 Micron Technology, Inc. Apparatuses and methods to control memory operations on buffers
US10146460B1 (en) 2017-06-01 2018-12-04 Apple Inc. Programming schemes for avoidance or recovery from cross-temperature read failures
US10732896B2 (en) * 2017-06-12 2020-08-04 Western Digital Technologies, Inc. Method and system for reading data during control sync operations
US10521375B2 (en) 2017-06-22 2019-12-31 Macronix International Co., Ltd. Controller for a memory system
US10564890B2 (en) * 2017-07-07 2020-02-18 Seagate Technology Llc Runt handling data storage system
KR102270103B1 (ko) * 2017-07-11 2021-06-28 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
TWI621018B (zh) * 2017-07-24 2018-04-11 大陸商深圳大心電子科技有限公司 資料備份方法、資料恢復方法以及儲存控制器
CN109324921A (zh) * 2017-07-31 2019-02-12 大心电子(英属维京群岛)股份有限公司 数据备份方法、数据恢复方法以及存储控制器
US10393803B2 (en) * 2017-08-31 2019-08-27 Micron Technology, Inc. Memory loopback systems and methods
KR102430209B1 (ko) * 2017-09-07 2022-08-05 삼성전자주식회사 저장 장치 및 저장 장치에 포함된 컨트롤러들
FR3072476A1 (fr) 2017-10-13 2019-04-19 Proton World International N.V. Unite logique de memoire pour memoire flash
KR20190043863A (ko) * 2017-10-19 2019-04-29 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
KR102281966B1 (ko) * 2017-11-01 2021-07-26 삼성전자주식회사 데이터 스토리지 장치 및 그 동작 방법
US10387243B2 (en) * 2017-12-08 2019-08-20 Macronix International Co., Ltd. Managing data arrangement in a super block
CN108021516B (zh) * 2017-12-19 2020-12-25 联芸科技(杭州)有限公司 一种并行存储介质存储控制器的命令调度管理系统与方法
US10606692B2 (en) * 2017-12-20 2020-03-31 International Business Machines Corporation Error correction potency improvement via added burst beats in a dram access cycle
WO2019126793A2 (en) * 2017-12-22 2019-06-27 Alibaba Group Holding Limited A memory apparatus and method for controlling the same
CN108182154A (zh) * 2017-12-22 2018-06-19 深圳大普微电子科技有限公司 一种基于固态硬盘的日志文件的读写方法及固态硬盘
US10949113B2 (en) * 2018-01-10 2021-03-16 SK Hynix Inc. Retention aware block mapping in flash-based solid state drives
US10558576B2 (en) * 2018-01-22 2020-02-11 Western Digital Technologies, Inc. Storage device with rapid overlay access
CN108549584B (zh) * 2018-01-25 2020-11-27 北京奇艺世纪科技有限公司 一种服务端灰度降级方法和装置
US10475519B2 (en) * 2018-03-23 2019-11-12 Micron Technology, Inc. Methods for detecting and mitigating memory media degradation and memory devices employing the same
US10990294B2 (en) * 2018-03-26 2021-04-27 Western Digital Technologies, Inc. Non-volatile storage system with multi-read mode
US10777295B2 (en) * 2018-04-12 2020-09-15 Micron Technology, Inc. Defective memory unit screening in a memory system
CN108509652B (zh) * 2018-04-17 2021-01-22 山东大众益康网络科技有限公司 数据处理系统及方法
KR102620727B1 (ko) * 2018-04-18 2024-01-03 에스케이하이닉스 주식회사 전자 장치
US10733046B2 (en) * 2018-04-20 2020-08-04 Micron Technology, Inc. Transaction metadata
CN110413545B (zh) * 2018-04-28 2023-06-20 伊姆西Ip控股有限责任公司 存储管理方法、电子设备和计算机程序产品
US11003375B2 (en) 2018-05-15 2021-05-11 Micron Technology, Inc. Code word format and structure
US10831653B2 (en) 2018-05-15 2020-11-10 Micron Technology, Inc. Forwarding code word address
US10740026B2 (en) 2018-05-18 2020-08-11 Micron Technology, Inc. Time indicator of super block operations
US10534551B1 (en) * 2018-06-22 2020-01-14 Micron Technology, Inc. Managing write operations during a power loss
CN108919995A (zh) * 2018-06-27 2018-11-30 珠海市魅族科技有限公司 驱动控制方法、系统和电子设备
CN109002399B (zh) * 2018-07-09 2021-05-18 北京智芯微电子科技有限公司 嵌入式设备事件记录的方法
CN110781098B (zh) * 2018-07-31 2023-03-28 爱思开海力士有限公司 用于彼此接合多个存储器系统的设备和方法
US11249919B2 (en) 2018-07-31 2022-02-15 SK Hynix Inc. Apparatus and method for managing meta data for engagement of plural memory system to store data
CN110780810B (zh) 2018-07-31 2023-06-27 爱思开海力士有限公司 用于彼此接合多个存储器系统以存储数据的设备和方法
WO2020028790A1 (en) * 2018-08-02 2020-02-06 Burlywood, Inc. Dynamic data paths in flash drives
US10725931B2 (en) 2018-08-22 2020-07-28 Western Digital Technologies, Inc. Logical and physical address field size reduction by alignment-constrained writing technique
US20200073595A1 (en) * 2018-09-02 2020-03-05 Silicon Motion Inc. Flash memory controller capable of improving IOPS performance and corresponding method
US11133076B2 (en) * 2018-09-06 2021-09-28 Pure Storage, Inc. Efficient relocation of data between storage devices of a storage system
CN111341367A (zh) * 2018-12-18 2020-06-26 深圳市江波龙电子股份有限公司 一种存储设备的控制方法及存储设备、电子设备
CN109683822B (zh) * 2018-12-19 2022-03-29 深圳忆联信息系统有限公司 一种ssd soc芯片内容地址搜索控制器的方法及其系统
US10915444B2 (en) * 2018-12-27 2021-02-09 Micron Technology, Inc. Garbage collection candidate selection using block overwrite rate
US10977174B2 (en) 2018-12-31 2021-04-13 Micron Technology, Inc. Using a common pool of blocks for user data and a system data structure
KR102574580B1 (ko) 2019-01-31 2023-09-06 제네럴 일렉트릭 컴퍼니 전력 그리드에서의 배터리 충전 및 방전 전력 제어
US11138104B2 (en) * 2019-02-07 2021-10-05 Intel Corporation Selection of mass storage device streams for garbage collection based on logical saturation
CN109992205B (zh) 2019-03-27 2020-06-02 无锡海斯凯尔医学技术有限公司 数据存储的装置、方法及可读存储介质
US10929251B2 (en) 2019-03-29 2021-02-23 Intel Corporation Data loss prevention for integrated memory buffer of a self encrypting drive
FR3094507A1 (fr) 2019-03-29 2020-10-02 Stmicroelectronics (Grenoble 2) Sas Accès direct en mémoire
US11079958B2 (en) 2019-04-12 2021-08-03 Intel Corporation Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator
US20220164262A1 (en) * 2019-04-24 2022-05-26 Hewlett-Packard Development Company, L.P. Critical data storage
US11307768B2 (en) 2019-06-07 2022-04-19 Seagate Technology Llc Namespace auto-routing data storage system
US11899576B2 (en) * 2019-06-11 2024-02-13 Micron Technology, Inc. Dynamically modifying garbage collection rates for a memory subsystem in a closed-loop system
CN112100087B (zh) 2019-06-17 2024-04-02 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
CN112099985B (zh) 2019-06-17 2023-09-12 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
CN112130750B (zh) 2019-06-25 2023-11-07 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
CN112130749B (zh) 2019-06-25 2023-12-22 慧荣科技股份有限公司 数据储存装置以及非挥发式存储器控制方法
TWI718710B (zh) * 2019-06-25 2021-02-11 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
TWI716918B (zh) * 2019-06-27 2021-01-21 旺宏電子股份有限公司 電子裝置、記憶體裝置及其記憶資料的讀取方法
US10762977B1 (en) * 2019-07-22 2020-09-01 Winbond Electronics Corp. Memory storage device and memory testing method thereof
US11029874B2 (en) 2019-07-30 2021-06-08 Western Digital Technologies, Inc. Rolling XOR protection in efficient pipeline
US10860417B1 (en) * 2019-08-02 2020-12-08 Micron Technology, Inc. Multiple memory die techniques
US11907114B2 (en) 2019-08-18 2024-02-20 Smart IOPS, Inc. Devices, systems, and methods for dynamically remapping memory addresses
US11580030B2 (en) 2019-08-18 2023-02-14 Smart IOPS, Inc. Devices, systems, and methods of logical-to-physical address mapping
US11281392B2 (en) * 2019-08-28 2022-03-22 Micron Technology, Inc. Garbage collection in a memory component using an adjusted parameter
US10922012B1 (en) 2019-09-03 2021-02-16 Dropbox, Inc. Fair data scrubbing in a data storage system
TWI716993B (zh) * 2019-09-03 2021-01-21 宜鼎國際股份有限公司 雙通道資料儲存系統
US10963396B1 (en) 2019-09-17 2021-03-30 Micron Technology, Inc. Memory system for binding data to a memory namespace
US11650742B2 (en) 2019-09-17 2023-05-16 Micron Technology, Inc. Accessing stored metadata to identify memory devices in which data is stored
US11494311B2 (en) 2019-09-17 2022-11-08 Micron Technology, Inc. Page table hooks to memory types
US11269780B2 (en) 2019-09-17 2022-03-08 Micron Technology, Inc. Mapping non-typed memory access to typed memory access
CN110908928B (zh) * 2019-10-15 2022-03-11 深圳市金泰克半导体有限公司 搜寻最后写入页的方法及装置
KR20210065455A (ko) * 2019-11-27 2021-06-04 에스케이하이닉스 주식회사 메모리 시스템의 라이트 성능을 향상시키는 장치 및 방법
US11175984B1 (en) 2019-12-09 2021-11-16 Radian Memory Systems, Inc. Erasure coding techniques for flash memory
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11243694B2 (en) 2020-01-29 2022-02-08 Samsung Electronics Co., Ltd. Grouping key value object IOs to improve IO performance for key-value storage devices
US11068421B1 (en) * 2020-02-20 2021-07-20 Silicon Motion, Inc. Memory device and associated flash memory controller
US20210263762A1 (en) * 2020-02-26 2021-08-26 Samsung Electronics Co., Ltd. Storage device-assisted live virtual machine migration
US11386022B2 (en) 2020-03-05 2022-07-12 Samsung Electronics Co., Ltd. Memory storage device including a configurable data transfer trigger
US11435914B2 (en) * 2020-03-30 2022-09-06 Western Digital Technologies, Inc. Dynamic ZNS open zone active limit
US11301151B2 (en) * 2020-05-08 2022-04-12 Macronix International Co., Ltd. Multi-die memory apparatus and identification method thereof
WO2021232024A1 (en) * 2020-05-15 2021-11-18 Rey Bruce Artificial intelligence-based hybrid raid controller device
KR20210143048A (ko) * 2020-05-19 2021-11-26 삼성전자주식회사 상이한 엔디언 포맷에 따른 데이터 변환을 위한 인터페이스 회로를 갖는 메모리 장치
US11481319B2 (en) * 2020-05-22 2022-10-25 Vmware, Inc. Using data mirroring across multiple regions to reduce the likelihood of losing objects maintained in cloud object storage
US11561717B2 (en) * 2020-05-26 2023-01-24 Western Digital Technologies, Inc. Data integrity protection of SSDs utilizing streams
EP4127941A1 (en) * 2020-05-27 2023-02-08 Huawei Technologies Co., Ltd. Method for using nand flash memory sram in solid state drive controller
KR20210152706A (ko) * 2020-06-09 2021-12-16 에스케이하이닉스 주식회사 메모리 장치, 메모리 시스템 및 메모리 장치의 동작 방법
KR20210157830A (ko) * 2020-06-22 2021-12-29 에스케이하이닉스 주식회사 메모리 및 메모리의 동작 방법
KR20220003705A (ko) * 2020-07-02 2022-01-11 삼성전자주식회사 제어기, 그것을 갖는 저장 장치, 및 그것의 리드 방법
US11698734B2 (en) 2020-07-22 2023-07-11 Seagate Technology Llc Collision reduction through just-in-time resource allocation
US11372716B2 (en) * 2020-07-28 2022-06-28 Micron Technology, Inc. Detecting special handling metadata using address verification
US11822817B2 (en) 2020-07-31 2023-11-21 Seagate Technology Llc Ordering reads to limit collisions in a non-volatile memory (NVM)
US11693596B2 (en) 2020-08-13 2023-07-04 Seagate Technology Llc Pre-emptive storage strategies to reduce host command collisions
US11392509B2 (en) * 2020-08-18 2022-07-19 PetaIO Inc. Command memory buffer systems and methods
US11500555B2 (en) 2020-09-04 2022-11-15 Micron Technology, Inc. Volatile memory to non-volatile memory interface for power management
KR20220058224A (ko) * 2020-10-30 2022-05-09 에스케이하이닉스 주식회사 메모리 시스템 및 이에 포함된 메모리 컨트롤러의 동작 방법
US11698747B2 (en) 2020-11-03 2023-07-11 Micron Technology, Inc. Pulse amplitude modulation (PAM) for multi-host support in a memory sub-system
US11914893B2 (en) * 2020-11-18 2024-02-27 Micron Technology, Inc. Managed memory systems with multiple priority queues
KR20220096077A (ko) 2020-12-30 2022-07-07 삼성전자주식회사 Ecc 데이터를 이용하여 신뢰성 검사를 수행하는 스토리지 장치
US11409601B1 (en) * 2021-01-26 2022-08-09 Micron Technology, Inc. Memory device protection
US11372592B1 (en) * 2021-02-04 2022-06-28 Silicon Motion, Inc. Memory controller having a plurality of control modules and associated server for coding and decoding raw data from flash memory chips
US11698753B2 (en) * 2021-02-17 2023-07-11 Kioxia Corporation Fairshare between multiple SSD submission queues
CN112835534B (zh) * 2021-02-26 2022-08-02 上海交通大学 一种基于存储阵列数据访问的垃圾回收优化方法及装置
JP2022137811A (ja) * 2021-03-09 2022-09-22 キオクシア株式会社 情報処理システム、ストレージデバイスおよびホスト
JP2022143243A (ja) 2021-03-17 2022-10-03 キオクシア株式会社 メモリシステムおよびその制御方法
US11556420B2 (en) 2021-04-06 2023-01-17 Macronix International Co., Ltd. Managing error correction coding in memory systems
KR20220142192A (ko) * 2021-04-14 2022-10-21 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
KR20220147292A (ko) 2021-04-27 2022-11-03 삼성전자주식회사 메타 데이터 관리를 수행하는 스토리지 장치 및 이의 동작 방법
US11556416B2 (en) 2021-05-05 2023-01-17 Apple Inc. Controlling memory readout reliability and throughput by adjusting distance between read thresholds
TWI764771B (zh) * 2021-06-29 2022-05-11 群聯電子股份有限公司 跨框編碼管理方法、記憶體儲存裝置及記憶體控制電路單元
CN113409871B (zh) * 2021-06-30 2024-02-02 芯天下技术股份有限公司 一种擦除时间的获取方法、装置、电子设备及存储介质
US11847342B2 (en) 2021-07-28 2023-12-19 Apple Inc. Efficient transfer of hard data and confidence levels in reading a nonvolatile memory
US20230066344A1 (en) * 2021-08-27 2023-03-02 Micron Technology, Inc. Efficient buffer management for media management commands in memory devices
US11899974B2 (en) * 2021-10-05 2024-02-13 Silicon Motion, Inc. Method and apparatus for performing automatic setting control of memory device in predetermined communications architecture with aid of auxiliary setting management
CN113885692B (zh) * 2021-10-22 2023-09-26 合肥兆芯电子有限公司 存储器效能优化方法、存储器控制电路单元以及存储装置
CN114063910B (zh) * 2021-10-28 2024-04-02 武汉光迅科技股份有限公司 文件处理方法及装置、文件处理系统及存储介质
US20230161506A1 (en) * 2021-11-19 2023-05-25 Cryptography Research, Inc. Multiple host memory controller
KR20230082377A (ko) * 2021-12-01 2023-06-08 삼성전자주식회사 메모리 컨트롤러 및 메모리 시스템
US11940872B2 (en) 2022-04-21 2024-03-26 Analog Devices International Unlimited Company Error correction code validation
US20230384957A1 (en) * 2022-05-30 2023-11-30 Samsung Electronics Co., Ltd. Storage device providing high purge performance and memory block management method thereof
TWI824843B (zh) * 2022-11-24 2023-12-01 慧榮科技股份有限公司 記憶裝置的控制方法與相關的快閃記憶體控制器與記憶裝置
CN116303118B (zh) * 2023-05-18 2023-09-05 合肥康芯威存储技术有限公司 一种存储设备及其控制方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6484224B1 (en) * 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
US7184446B2 (en) * 2001-07-06 2007-02-27 Juniper Networks, Inc. Cross-bar switch employing a multiple entry point FIFO

Family Cites Families (496)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US702017A (en) * 1902-01-10 1902-06-10 James A Chambers Apparatus for drawing glass.
US797112A (en) * 1905-02-07 1905-08-15 Alexandre De Hemptinne Process of converting oleic acid into stearic acid.
US4173737A (en) 1978-05-04 1979-11-06 Zenith Radio Corporation Limited position, non-volatile memory tuning system
US4888750A (en) 1986-03-07 1989-12-19 Kryder Mark H Method and system for erase before write magneto-optic recording
JPS63237135A (ja) * 1987-03-26 1988-10-03 Toshiba Corp マルチcpuシステムのタスク起動方式
US4916652A (en) 1987-09-30 1990-04-10 International Business Machines Corporation Dynamic multiple instruction stream multiple data multiple pipeline apparatus for floating-point single instruction stream single data architectures
US5129089A (en) 1987-12-18 1992-07-07 Digital Equipment Corporation Distributed interlock apparatus and distributed interlock management method
US5270979A (en) 1991-03-15 1993-12-14 Sundisk Corporation Method for optimum erasing of EEPROM
JPH0594318A (ja) * 1991-09-30 1993-04-16 Nec Corp マルチcpuシステムの負荷平準化方式
US5657332A (en) * 1992-05-20 1997-08-12 Sandisk Corporation Soft errors handling in EEPROM devices
US5381528A (en) 1992-10-15 1995-01-10 Maxtor Corporation Demand allocation of read/write buffer partitions favoring sequential read cache
JPH06149717A (ja) * 1992-11-13 1994-05-31 Hitachi Ltd 磁気テープ装置システムのパススケジューリング方法
US5416915A (en) * 1992-12-11 1995-05-16 International Business Machines Corporation Method and system for minimizing seek affinity and enhancing write sensitivity in a DASD array
US5404485A (en) * 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
US5537555A (en) * 1993-03-22 1996-07-16 Compaq Computer Corporation Fully pipelined and highly concurrent memory controller
US5329491A (en) 1993-06-30 1994-07-12 Intel Corporation Nonvolatile memory card with automatic power supply configuration
US5519847A (en) * 1993-06-30 1996-05-21 Intel Corporation Method of pipelining sequential writes in a flash memory
US5708849A (en) 1994-01-26 1998-01-13 Intel Corporation Implementing scatter/gather operations in a direct memory access device on a personal computer
US5488702A (en) 1994-04-26 1996-01-30 Unisys Corporation Data block check sequence generation and validation in a file cache system
US5696917A (en) * 1994-06-03 1997-12-09 Intel Corporation Method and apparatus for performing burst read operations in an asynchronous nonvolatile memory
GB9419246D0 (en) 1994-09-23 1994-11-09 Cambridge Consultants Data processing circuits and interfaces
US5666114A (en) * 1994-11-22 1997-09-09 International Business Machines Corporation Method and means for managing linear mapped address spaces storing compressed data at the storage subsystem control unit or device level
US5530705A (en) * 1995-02-08 1996-06-25 International Business Machines Corporation Soft error recovery system and method
US5636342A (en) 1995-02-17 1997-06-03 Dell Usa, L.P. Systems and method for assigning unique addresses to agents on a system management bus
US5606532A (en) 1995-03-17 1997-02-25 Atmel Corporation EEPROM array with flash-like core
WO1997000518A1 (fr) 1995-06-14 1997-01-03 Hitachi, Ltd. Memoire a semiconducteurs, unite de memoire et carte de memoire
US5890193A (en) 1995-07-28 1999-03-30 Micron Technology, Inc. Architecture for state machine for controlling internal operations of flash memory
US6728851B1 (en) 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US5790459A (en) 1995-08-04 1998-08-04 Micron Quantum Devices, Inc. Memory circuit for performing threshold voltage tests on cells of a memory array
US5815434A (en) 1995-09-29 1998-09-29 Intel Corporation Multiple writes per a single erase for a nonvolatile memory
US6044472A (en) 1996-06-21 2000-03-28 Archos Device and method for supplying power to an external data medium reader unit connected to a computer, and external reader unit including this device
KR100412589B1 (ko) 1996-07-05 2004-04-06 마츠시타 덴끼 산교 가부시키가이샤 반도체 회로 시스템, 반도체 집적회로의 검사방법 및 그 검사계열의 생성방법
US6134148A (en) 1997-09-30 2000-10-17 Hitachi, Ltd. Semiconductor integrated circuit and data processing system
JPH10124381A (ja) * 1996-10-21 1998-05-15 Mitsubishi Electric Corp 半導体記憶装置
US5943692A (en) 1997-04-30 1999-08-24 International Business Machines Corporation Mobile client computer system with flash memory management utilizing a virtual address map and variable length data
US6006345A (en) 1997-05-09 1999-12-21 International Business Machines Corporation Pattern generator for memory burn-in and test
US6000006A (en) * 1997-08-25 1999-12-07 Bit Microsystems, Inc. Unified re-map and cache-index table with dual write-counters for wear-leveling of non-volatile flash RAM mass storage
JPH11126497A (ja) 1997-10-22 1999-05-11 Oki Electric Ind Co Ltd 不揮発性半導体記憶装置
US6018304A (en) 1997-12-18 2000-01-25 Texas Instruments Incorporated Method and apparatus for high-rate n/n+1 low-complexity modulation codes with adjustable codeword length and error control capability
US6070074A (en) 1998-04-24 2000-05-30 Trw Inc. Method for enhancing the performance of a regenerative satellite communications system
US6138261A (en) 1998-04-29 2000-10-24 Trw Inc. Concatenated coding system for satellite communications
US6182264B1 (en) 1998-05-22 2001-01-30 Vlsi Technology, Inc. Smart dynamic selection of error correction methods for DECT based data services
US7111293B1 (en) 1998-06-03 2006-09-19 Ants Software, Inc. Method for increased concurrency in a computer system
US6192092B1 (en) 1998-06-15 2001-02-20 Intel Corp. Method and apparatus for clock skew compensation
US6260120B1 (en) * 1998-06-29 2001-07-10 Emc Corporation Storage mapping and partitioning among multiple host processors in the presence of login state changes and host controller replacement
US6505305B1 (en) 1998-07-16 2003-01-07 Compaq Information Technologies Group, L.P. Fail-over of multiple memory blocks in multiple memory modules in computer system
US6314501B1 (en) 1998-07-23 2001-11-06 Unisys Corporation Computer system and method for operating multiple operating systems in different partitions of the computer system and for allowing the different partitions to communicate with one another through shared memory
US6295592B1 (en) 1998-07-31 2001-09-25 Micron Technology, Inc. Method of processing memory requests in a pipelined memory controller
US6233625B1 (en) 1998-11-18 2001-05-15 Compaq Computer Corporation System and method for applying initialization power to SCSI devices
US6288860B1 (en) 1999-01-04 2001-09-11 Maxtor Corporation Servo area numbering strategy for computer disk drives
US6438661B1 (en) 1999-03-03 2002-08-20 International Business Machines Corporation Method, system, and program for managing meta data in a storage system and rebuilding lost meta data in cache
US6449625B1 (en) * 1999-04-20 2002-09-10 Lucent Technologies Inc. Use of a two-way stack approach to optimize flash memory management for embedded database systems
US6728879B1 (en) 1999-06-02 2004-04-27 Microsoft Corporation Transactional log with multi-sector log block validation
US6564271B2 (en) 1999-06-09 2003-05-13 Qlogic Corporation Method and apparatus for automatically transferring I/O blocks between a host system and a host adapter
US6104304A (en) 1999-07-06 2000-08-15 Conexant Systems, Inc. Self-test and status reporting system for microcontroller-controlled devices
US20050114587A1 (en) 2003-11-22 2005-05-26 Super Talent Electronics Inc. ExpressCard with On-Card Flash Memory with Shared Flash-Control Bus but Separate Ready Lines
US7333364B2 (en) 2000-01-06 2008-02-19 Super Talent Electronics, Inc. Cell-downgrading and reference-voltage adjustment for a multi-bit-cell flash memory
US20080282128A1 (en) 1999-08-04 2008-11-13 Super Talent Electronics, Inc. Method of Error Correction Code on Solid State Disk to Gain Data Security and Higher Performance
US7660941B2 (en) * 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
US7318117B2 (en) 2004-02-26 2008-01-08 Super Talent Electronics, Inc. Managing flash memory including recycling obsolete sectors
US7620769B2 (en) * 2000-01-06 2009-11-17 Super Talent Electronics, Inc. Recycling partially-stale flash blocks using a sliding window for multi-level-cell (MLC) flash memory
US6412042B1 (en) 1999-11-17 2002-06-25 Maxtor Corporation System and method for improved disk drive performance and reliability
JP3576437B2 (ja) * 1999-11-30 2004-10-13 松下電器産業株式会社 マルチプロセッサタスク制御方法及びタスク制御装置
DE19961138C2 (de) 1999-12-17 2001-11-22 Siemens Ag Multiport-RAM-Speichervorrichtung
US7082056B2 (en) * 2004-03-12 2006-07-25 Super Talent Electronics, Inc. Flash memory device and architecture with multi level cells
US8037234B2 (en) 2003-12-02 2011-10-11 Super Talent Electronics, Inc. Command queuing smart storage transfer manager for striping data to raw-NAND flash modules
US6339338B1 (en) 2000-01-18 2002-01-15 Formfactor, Inc. Apparatus for reducing power supply noise in an integrated circuit
US20020152305A1 (en) 2000-03-03 2002-10-17 Jackson Gregory J. Systems and methods for resource utilization analysis in information management environments
US6516437B1 (en) 2000-03-07 2003-02-04 General Electric Company Turbo decoder control for use with a programmable interleaver, variable block length, and multiple code rates
JP3555859B2 (ja) 2000-03-27 2004-08-18 広島日本電気株式会社 半導体生産システム及び半導体装置の生産方法
US6615307B1 (en) * 2000-05-10 2003-09-02 Micron Technology, Inc. Flash with consistent latency for read operations
US6629047B1 (en) 2000-03-30 2003-09-30 Intel Corporation Method and apparatus for flash voltage detection and lockout
US20030188045A1 (en) 2000-04-13 2003-10-02 Jacobson Michael B. System and method for distributing storage controller tasks
US6647387B1 (en) * 2000-04-27 2003-11-11 International Business Machine Corporation System, apparatus, and method for enhancing storage management in a storage area network
US6678788B1 (en) 2000-05-26 2004-01-13 Emc Corporation Data type and topological data categorization and ordering for a mass storage system
US6934755B1 (en) 2000-06-02 2005-08-23 Sun Microsystems, Inc. System and method for migrating processes on a network
US6442076B1 (en) * 2000-06-30 2002-08-27 Micron Technology, Inc. Flash memory with multiple status reading capability
US6980985B1 (en) 2000-08-30 2005-12-27 At&T Corp. Distributed evalulation of directory queries using a topology cache
US6941505B2 (en) 2000-09-12 2005-09-06 Hitachi, Ltd. Data processing system and data processing method
US6865650B1 (en) 2000-09-29 2005-03-08 Emc Corporation System and method for hierarchical data storage
US7028165B2 (en) 2000-12-06 2006-04-11 Intel Corporation Processor stalling
US6862651B2 (en) * 2000-12-20 2005-03-01 Microsoft Corporation Automotive computing devices with emergency power shut down capabilities
US6738870B2 (en) 2000-12-22 2004-05-18 International Business Machines Corporation High speed remote storage controller
KR100381955B1 (ko) 2001-01-03 2003-04-26 삼성전자주식회사 기입 드라이버를 이용한 셀 전류 측정 스킴을 갖는 플래시메모리 장치
US6763424B2 (en) * 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US20020178162A1 (en) 2001-01-29 2002-11-28 Ulrich Thomas R. Integrated distributed file system with variable parity groups
JPWO2002082435A1 (ja) 2001-03-30 2004-07-29 富士通株式会社 記憶装置及びそのフォーカス制御方法
US7017107B2 (en) 2001-04-30 2006-03-21 Sun Microsystems, Inc. Storage array employing scrubbing operations at the disk-controller level
US6938253B2 (en) * 2001-05-02 2005-08-30 Portalplayer, Inc. Multiprocessor communication system and method
US6757768B1 (en) * 2001-05-17 2004-06-29 Cisco Technology, Inc. Apparatus and technique for maintaining order among requests issued over an external bus of an intermediate network node
JP4256600B2 (ja) * 2001-06-19 2009-04-22 Tdk株式会社 メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム及びフラッシュメモリの制御方法
US6836815B1 (en) 2001-07-11 2004-12-28 Pasternak Solutions Llc Layered crossbar for interconnection of multiple processors and shared memories
US6928602B2 (en) 2001-07-18 2005-08-09 Sony Corporation Encoding method and encoder
JP4569055B2 (ja) 2001-08-06 2010-10-27 ソニー株式会社 信号処理装置及び信号処理方法
TW539946B (en) * 2001-08-07 2003-07-01 Solid State System Company Ltd Window-based flash memory storage system, and the management method and the access method thereof
JP4437519B2 (ja) 2001-08-23 2010-03-24 スパンション エルエルシー 多値セルメモリ用のメモリコントローラ
US7028213B2 (en) * 2001-09-28 2006-04-11 Hewlett-Packard Development Company, L.P. Error indication in a raid memory system
US7032123B2 (en) * 2001-10-19 2006-04-18 Sun Microsystems, Inc. Error recovery
JP3663377B2 (ja) 2001-10-23 2005-06-22 インターナショナル・ビジネス・マシーンズ・コーポレーション データ記憶装置、読み出しデータの処理装置および読み出しデータの処理方法
US7380085B2 (en) * 2001-11-14 2008-05-27 Intel Corporation Memory adapted to provide dedicated and or shared memory to multiple processors and method therefor
US6798696B2 (en) 2001-12-04 2004-09-28 Renesas Technology Corp. Method of controlling the operation of non-volatile semiconductor memory chips
US6582257B1 (en) * 2001-12-17 2003-06-24 Alstom Propulsion unit
US6871257B2 (en) * 2002-02-22 2005-03-22 Sandisk Corporation Pipelined parallel programming operation in a non-volatile memory system
US6836808B2 (en) * 2002-02-25 2004-12-28 International Business Machines Corporation Pipelined packet processing
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
KR100476888B1 (ko) * 2002-04-04 2005-03-17 삼성전자주식회사 온도보상기능을 가진 멀티비트 플래쉬메모리
AUPS193202A0 (en) * 2002-04-23 2002-05-30 Pickup, Robert Barkley Mr A method and system for authorising electronic mail
JP4079684B2 (ja) 2002-05-08 2008-04-23 株式会社日立製作所 ヒープメモリ管理方法およびそれを用いた計算機システム
US6966006B2 (en) 2002-05-09 2005-11-15 International Business Machines Corporation Adaptive startup policy for accelerating multi-disk array spin-up
US6895464B2 (en) 2002-06-03 2005-05-17 Honeywell International Inc. Flash memory management system and method utilizing multiple block list windows
US6885530B2 (en) 2002-06-11 2005-04-26 Stmicroelectronics, Inc. Power limiting time delay circuit
KR100484147B1 (ko) * 2002-07-26 2005-04-18 삼성전자주식회사 플래시 메모리 관리 방법
US7051155B2 (en) * 2002-08-05 2006-05-23 Sun Microsystems, Inc. Method and system for striping data to accommodate integrity metadata
US6978343B1 (en) * 2002-08-05 2005-12-20 Netlogic Microsystems, Inc. Error-correcting content addressable memory
US8050085B2 (en) 2002-08-29 2011-11-01 Renesas Electronics Corporation Semiconductor processing device and IC card
US20040045009A1 (en) * 2002-08-29 2004-03-04 Bae Systems Information Electronic Systems Integration, Inc. Observation tool for signal processing components
US7120856B2 (en) 2002-09-25 2006-10-10 Leanics Corporation LDPC code and encoder/decoder regarding same
JP2004178782A (ja) 2002-10-04 2004-06-24 Sharp Corp 半導体記憶装置およびその制御方法および携帯電子機器
KR100457812B1 (ko) * 2002-11-14 2004-11-18 삼성전자주식회사 플래시 메모리, 그에 따른 플래시 메모리 액세스 장치 및방법
US7818519B2 (en) 2002-12-02 2010-10-19 Silverbrook Research Pty Ltd Timeslot arbitration scheme
US20040114265A1 (en) 2002-12-16 2004-06-17 Xerox Corporation User-selectable automatic secure data file erasure of job after job completion
US7155579B1 (en) 2002-12-27 2006-12-26 Unisys Corporation Memory controller having programmable initialization sequence
US20040153902A1 (en) * 2003-01-21 2004-08-05 Nexflash Technologies, Inc. Serial flash integrated circuit having error detection and correction
US7296216B2 (en) 2003-01-23 2007-11-13 Broadcom Corporation Stopping and/or reducing oscillations in low density parity check (LDPC) decoding
JP4110000B2 (ja) 2003-01-28 2008-07-02 株式会社ルネサステクノロジ 記憶装置
US7043505B1 (en) * 2003-01-28 2006-05-09 Unisys Corporation Method variation for collecting stability data from proprietary systems
JP2004240555A (ja) 2003-02-04 2004-08-26 Fujitsu Ltd バッテリ運用制御装置、バッテリ運用制御方法およびバッテリ運用制御プログラム
US7478096B2 (en) 2003-02-26 2009-01-13 Burnside Acquisition, Llc History preservation in a computer storage system
US7162678B2 (en) * 2003-03-14 2007-01-09 Quantum Corporation Extended error correction codes
US7527466B2 (en) 2003-04-03 2009-05-05 Simmons Robert J Building-erection structural member transporter
KR100543447B1 (ko) 2003-04-03 2006-01-23 삼성전자주식회사 에러정정기능을 가진 플래쉬메모리장치
KR100526186B1 (ko) * 2003-04-04 2005-11-03 삼성전자주식회사 플래시 메모리의 오류블록 관리방법 및 장치
WO2004099985A1 (ja) 2003-05-09 2004-11-18 Fujitsu Limited 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
US7877647B2 (en) 2003-05-23 2011-01-25 Hewlett-Packard Development Company, L.P. Correcting a target address in parallel with determining whether the target address was received in error
EP2511787B1 (en) 2003-05-23 2017-09-20 IP Reservoir, LLC Data decompression and search using FPGA devices
US7685254B2 (en) * 2003-06-10 2010-03-23 Pandya Ashish A Runtime adaptable search processor
US7076598B2 (en) 2003-09-09 2006-07-11 Solid State System Co., Ltd. Pipeline accessing method to a large block memory
US7100002B2 (en) * 2003-09-16 2006-08-29 Denali Software, Inc. Port independent data transaction interface for multi-port devices
US7054968B2 (en) 2003-09-16 2006-05-30 Denali Software, Inc. Method and apparatus for multi-port memory controller
US7523157B2 (en) * 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
US7012835B2 (en) 2003-10-03 2006-03-14 Sandisk Corporation Flash memory data correction and scrub techniques
US7173852B2 (en) * 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7881133B2 (en) 2003-11-11 2011-02-01 Samsung Electronics Co., Ltd. Method of managing a flash memory and the flash memory
TW200516821A (en) 2003-11-14 2005-05-16 Hon Hai Prec Ind Co Ltd System and method for starting up devices orderly
US7401174B2 (en) 2003-12-16 2008-07-15 Matsushita Electric Industrial Co., Ltd. File system defragmentation and data processing method and apparatus for an information recording medium
US7197652B2 (en) 2003-12-22 2007-03-27 International Business Machines Corporation Method and system for energy management in a simultaneous multi-threaded (SMT) processing system including per-thread device usage monitoring
US7376887B2 (en) 2003-12-22 2008-05-20 International Business Machines Corporation Method for fast ECC memory testing by software including ECC check byte
US20050144516A1 (en) * 2003-12-30 2005-06-30 Gonzalez Carlos J. Adaptive deterministic grouping of blocks into multi-block units
US7383375B2 (en) * 2003-12-30 2008-06-03 Sandisk Corporation Data run programming
US8504798B2 (en) * 2003-12-30 2013-08-06 Sandisk Technologies Inc. Management of non-volatile memory systems having large erase blocks
US7631138B2 (en) * 2003-12-30 2009-12-08 Sandisk Corporation Adaptive mode switching of flash memory address mapping based on host usage characteristics
US20050251617A1 (en) 2004-05-07 2005-11-10 Sinclair Alan W Hybrid non-volatile memory system
US7631148B2 (en) 2004-01-08 2009-12-08 Netapp, Inc. Adaptive file readahead based on multiple factors
JP4357304B2 (ja) * 2004-01-09 2009-11-04 株式会社バッファロー 外部記憶装置
US7328377B1 (en) 2004-01-27 2008-02-05 Altera Corporation Error correction for programmable logic integrated circuits
JP4477365B2 (ja) 2004-01-29 2010-06-09 株式会社日立製作所 複数インタフェースを有する記憶装置、および、その記憶装置の制御方法
US7389465B2 (en) * 2004-01-30 2008-06-17 Micron Technology, Inc. Error detection and correction scheme for a memory device
US7350044B2 (en) 2004-01-30 2008-03-25 Micron Technology, Inc. Data move method and apparatus
US20080147964A1 (en) 2004-02-26 2008-06-19 Chow David Q Using various flash memory cells to build usb data flash cards with multiple partitions and autorun function
JP2005266861A (ja) 2004-03-16 2005-09-29 Nec Electronics Corp マイクロコンピュータ及びそのテスト方法
US7035159B2 (en) 2004-04-01 2006-04-25 Micron Technology, Inc. Techniques for storing accurate operating current values
US7020017B2 (en) 2004-04-06 2006-03-28 Sandisk Corporation Variable programming of non-volatile memory
EP1870814B1 (en) 2006-06-19 2014-08-13 Texas Instruments France Method and apparatus for secure demand paging for processor devices
US7490283B2 (en) 2004-05-13 2009-02-10 Sandisk Corporation Pipelined data relocation and improved chip architectures
JP2005332471A (ja) 2004-05-19 2005-12-02 Hitachi Ltd ディスクアレイ装置
US20050273560A1 (en) 2004-06-03 2005-12-08 Hulbert Jared E Method and apparatus to avoid incoherency between a cache memory and flash memory
US7334179B2 (en) * 2004-06-04 2008-02-19 Broadcom Corporation Method and system for detecting and correcting errors while accessing memory devices in microprocessor systems
US7159069B2 (en) 2004-06-23 2007-01-02 Atmel Corporation Simultaneous external read operation during internal programming in a flash memory device
US7126873B2 (en) * 2004-06-29 2006-10-24 Super Talent Electronics, Inc. Method and system for expanding flash storage device capacity
US7529898B2 (en) 2004-07-09 2009-05-05 International Business Machines Corporation Method for backing up and restoring data
US8190808B2 (en) 2004-08-17 2012-05-29 Rambus Inc. Memory device having staggered memory operations
JP2008511929A (ja) * 2004-08-30 2008-04-17 シリコン ストレージ テクノロジー、 インク. 携帯電話の不揮発性メモリを管理するシステムおよび方法
FR2875358B1 (fr) 2004-09-15 2006-12-15 Eads Telecom Soc Par Actions S Insertion d'un flux secondaire d'informations binaires dans un flux principal de symboles d'une modulation numerique
US7038948B2 (en) 2004-09-22 2006-05-02 Spansion Llc Read approach for multi-level virtual ground memory
JP2006099665A (ja) 2004-09-30 2006-04-13 Hitachi Global Storage Technologies Netherlands Bv データ記憶装置及びそのシリアル・インターフェース部のパワー・セーブ・モードの制御方法
US7760880B2 (en) 2004-10-13 2010-07-20 Viasat, Inc. Decoder architecture system and method
JP4956922B2 (ja) 2004-10-27 2012-06-20 ソニー株式会社 記憶装置
KR100695891B1 (ko) 2004-11-17 2007-03-19 삼성전자주식회사 동작 모드에 따라 락 아웃을 선택적으로 수행하는 장치 및방법
US7395404B2 (en) * 2004-12-16 2008-07-01 Sandisk Corporation Cluster auto-alignment for storing addressable data packets in a non-volatile memory array
US20060136681A1 (en) * 2004-12-21 2006-06-22 Sanjeev Jain Method and apparatus to support multiple memory banks with a memory block
CN100583651C (zh) 2004-12-22 2010-01-20 Lg电子株式会社 用于使用信道代码解码的装置和方法
US20060156177A1 (en) 2004-12-29 2006-07-13 Sailesh Kottapalli Method and apparatus for recovering from soft errors in register files
US7212440B2 (en) * 2004-12-30 2007-05-01 Sandisk Corporation On-chip data grouping and alignment
US7657696B2 (en) 2005-02-25 2010-02-02 Lsi Corporation Method to detect NAND-flash parameters by hardware automatically
US7822912B2 (en) * 2005-03-14 2010-10-26 Phision Electronics Corp. Flash storage chip and flash array storage system
US7251160B2 (en) 2005-03-16 2007-07-31 Sandisk Corporation Non-volatile memory and method with power-saving read and program-verify operations
JP2006277395A (ja) 2005-03-29 2006-10-12 Matsushita Electric Ind Co Ltd 情報処理装置及び情報処理方法
JP4794194B2 (ja) * 2005-04-01 2011-10-19 株式会社日立製作所 ストレージシステム及び記憶制御方法
US7707232B2 (en) 2005-05-13 2010-04-27 Microsoft Corporation Implementation for collecting unmanaged memory
US7765454B2 (en) 2005-05-24 2010-07-27 Sgi International, Inc. Fault tolerant memory system
US7283395B2 (en) 2005-06-24 2007-10-16 Infineon Technologies Flash Gmbh & Co. Kg Memory device and method for operating the memory device
EP1897223A1 (en) 2005-06-27 2008-03-12 Thomson Licensing S.A. Stopping criteria in iterative decoders
US7669003B2 (en) * 2005-08-03 2010-02-23 Sandisk Corporation Reprogrammable non-volatile memory systems with indexing of directly stored data files
US7409489B2 (en) 2005-08-03 2008-08-05 Sandisk Corporation Scheduling of reclaim operations in non-volatile memory
US20070061597A1 (en) * 2005-09-14 2007-03-15 Micky Holtzman Secure yet flexible system architecture for secure devices with flash mass storage memory
KR100705220B1 (ko) 2005-09-15 2007-04-06 주식회사 하이닉스반도체 프로그램 속도를 증가시키기 위한 플래시 메모리 장치의소거 및 프로그램 방법
JP2009510585A (ja) 2005-09-27 2009-03-12 エヌエックスピー ビー ヴィ 誤り検出/訂正回路及び方法
US7652922B2 (en) * 2005-09-30 2010-01-26 Mosaid Technologies Incorporated Multiple independent serial link memory
KR100715147B1 (ko) 2005-10-06 2007-05-10 삼성전자주식회사 전류소모를 감소시키는 내부전원전압 발생회로를 가지는멀티칩 반도체 메모리 장치
US20070083697A1 (en) * 2005-10-07 2007-04-12 Microsoft Corporation Flash memory management
US8223553B2 (en) 2005-10-12 2012-07-17 Macronix International Co., Ltd. Systems and methods for programming a memory device
US7743363B2 (en) * 2005-10-13 2010-06-22 Microsoft Corporation Extensible meta-data
US7954037B2 (en) 2005-10-25 2011-05-31 Sandisk Il Ltd Method for recovering from errors in flash memory
US8006161B2 (en) 2005-10-26 2011-08-23 Samsung Electronics Co., Ltd Apparatus and method for receiving signal in a communication system using a low density parity check code
US7631162B2 (en) * 2005-10-27 2009-12-08 Sandisck Corporation Non-volatile memory with adaptive handling of data writes
KR100966043B1 (ko) 2005-10-31 2010-06-25 삼성전자주식회사 저밀도 패리티 검사 부호를 사용하는 통신 시스템에서 신호 송수신 장치 및 방법
US7606812B2 (en) 2005-11-04 2009-10-20 Sun Microsystems, Inc. Dynamic intent log
WO2007058617A1 (en) 2005-11-17 2007-05-24 Chee Keng Chang A controller for non-volatile memories, and methods of operating the memory controller
US7500062B2 (en) 2005-11-17 2009-03-03 International Business Machines Corporation Fast path memory read request processing in a multi-level memory architecture
US8813052B2 (en) 2005-12-07 2014-08-19 Microsoft Corporation Cache metadata for implementing bounded transactional memory
EP1966708A2 (en) * 2005-12-20 2008-09-10 Nxp B.V. Multi-processor circuit with shared memory banks
US7562283B2 (en) 2005-12-27 2009-07-14 D.S.P. Group Ltd. Systems and methods for error correction using binary coded hexidecimal or hamming decoding
US7546515B2 (en) 2005-12-27 2009-06-09 Sandisk Corporation Method of storing downloadable firmware on bulk media
US7349264B2 (en) * 2005-12-28 2008-03-25 Sandisk Corporation Alternate sensing techniques for non-volatile memories
US7716180B2 (en) 2005-12-29 2010-05-11 Amazon Technologies, Inc. Distributed storage system with web services client interface
WO2007080586A2 (en) 2006-01-10 2007-07-19 Saifun Semiconductors Ltd. Rd algorithm improvement for nrom technology
US8020060B2 (en) 2006-01-18 2011-09-13 Sandisk Il Ltd Method of arranging data in a multi-level cell memory device
KR100725410B1 (ko) 2006-01-20 2007-06-07 삼성전자주식회사 전원 상태에 따라 비휘발성 메모리의 블록 회수를 수행하는장치 및 그 방법
US20070234143A1 (en) * 2006-01-25 2007-10-04 Samsung Electronics Co., Ltd. Semiconductor memory devices and methods of testing for failed bits of semiconductor memory devices
JP4859471B2 (ja) * 2006-02-02 2012-01-25 株式会社日立製作所 ストレージシステム及びストレージコントローラ
US7546478B2 (en) 2006-02-10 2009-06-09 International Business Machines Corporation Apparatus and method to provide power to a plurality of data storage devices disposed in a data storage system
US7870326B2 (en) * 2006-07-28 2011-01-11 Samsung Electronics Co., Ltd. Multiprocessor system and method thereof
US7590473B2 (en) 2006-02-16 2009-09-15 Intel Corporation Thermal management using an on-die thermal sensor
US7681106B2 (en) 2006-03-29 2010-03-16 Freescale Semiconductor, Inc. Error correction device and methods thereof
JP4863749B2 (ja) 2006-03-29 2012-01-25 株式会社日立製作所 フラッシュメモリを用いた記憶装置、その消去回数平準化方法、及び消去回数平準化プログラム
US20070245061A1 (en) 2006-04-13 2007-10-18 Intel Corporation Multiplexing a parallel bus interface and a flash memory interface
US7685494B1 (en) 2006-05-08 2010-03-23 Marvell International, Ltd. Error correction coding for varying signal-to-noise ratio channels
US8000134B2 (en) 2006-05-15 2011-08-16 Apple Inc. Off-die charge pump that supplies multiple flash devices
US7707481B2 (en) * 2006-05-16 2010-04-27 Pitney Bowes Inc. System and method for efficient uncorrectable error detection in flash memory
US20070300130A1 (en) 2006-05-17 2007-12-27 Sandisk Corporation Method of Error Correction Coding for Multiple-Sector Pages in Flash Memory Devices
US7701764B2 (en) 2006-05-17 2010-04-20 Micron Technology, Inc. Apparatus and method for reduced peak power consumption during common operation of multi-NAND flash memory devices
US7606084B2 (en) 2006-06-19 2009-10-20 Sandisk Corporation Programming differently sized margins and sensing with compensations at select states for improved read operations in non-volatile memory
JP4842719B2 (ja) 2006-06-28 2011-12-21 株式会社日立製作所 ストレージシステム及びそのデータ保護方法
WO2008003094A2 (en) 2006-06-29 2008-01-03 Digital Fountain, Inc. Efficient representation of symbol-based transformations with application to encoding and decoding of forward error correction codes
US7774684B2 (en) 2006-06-30 2010-08-10 Intel Corporation Reliability, availability, and serviceability in a memory device
US7403438B2 (en) 2006-07-12 2008-07-22 Infineon Technologies Flash Gmbh & Co. Kg Memory array architecture and method for high-speed distribution measurements
JP2008047273A (ja) * 2006-07-20 2008-02-28 Toshiba Corp 半導体記憶装置およびその制御方法
US7831895B2 (en) 2006-07-25 2010-11-09 Communications Coding Corporation Universal error control coding system for digital communication and data storage systems
TW200813724A (en) * 2006-07-28 2008-03-16 Samsung Electronics Co Ltd Multipath accessible semiconductor memory device with host interface between processors
US20080052446A1 (en) 2006-08-28 2008-02-28 Sandisk Il Ltd. Logical super block mapping for NAND flash memory
US7450425B2 (en) 2006-08-30 2008-11-11 Micron Technology, Inc. Non-volatile memory cell read failure reduction
JP2008059315A (ja) 2006-08-31 2008-03-13 Hitachi Ltd 負荷分散方法及び計算機システム
US7566987B2 (en) 2006-09-14 2009-07-28 Lutron Electronics Co., Inc. Method of powering up a plurality of loads in sequence
KR100843133B1 (ko) * 2006-09-20 2008-07-02 삼성전자주식회사 플래시 메모리에서 매핑 정보 재구성을 위한 장치 및 방법
TW200816651A (en) 2006-09-25 2008-04-01 Sunplus Technology Co Ltd Decoding method and system of real-time wireless channel estimation
US7886204B2 (en) * 2006-09-27 2011-02-08 Sandisk Corporation Methods of cell population distribution assisted read margining
US8171380B2 (en) 2006-10-10 2012-05-01 Marvell World Trade Ltd. Adaptive systems and methods for storing and retrieving data to and from memory cells
CN100596029C (zh) 2006-10-20 2010-03-24 北京泰美世纪科技有限公司 Ldpc码校验矩阵构造方法及利用该方法的编码解码装置
JP2008117195A (ja) 2006-11-06 2008-05-22 Hitachi Ltd 半導体記憶装置
TWI307100B (en) 2006-11-07 2009-03-01 Macronix Int Co Ltd Memory and method for reading error checking thereof
US7508703B2 (en) 2006-11-13 2009-03-24 Sandisk Corporation Non-volatile memory with boost structures
WO2008070814A2 (en) * 2006-12-06 2008-06-12 Fusion Multisystems, Inc. (Dba Fusion-Io) Apparatus, system, and method for a scalable, composite, reconfigurable backplane
US8074011B2 (en) 2006-12-06 2011-12-06 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery after reaching a read count limit
KR100808664B1 (ko) 2006-12-08 2008-03-07 한국전자통신연구원 패리티 검사행렬 저장 방법 및 이를 이용한 블록 저밀도패리티 검사 부호화 방법 및 장치
WO2008075292A2 (en) 2006-12-18 2008-06-26 Nxp B.V. Power-on temperature sensor/spd detect
KR100881669B1 (ko) 2006-12-18 2009-02-06 삼성전자주식회사 비휘발성 데이터 저장장치의 정적 데이터 영역 검출 방법,마모도 평준화 방법 및 데이터 유닛 병합 방법과 그 장치
US7620781B2 (en) 2006-12-19 2009-11-17 Intel Corporation Efficient Bloom filter
KR100842680B1 (ko) * 2007-01-08 2008-07-01 삼성전자주식회사 플래시 메모리 장치의 오류 정정 컨트롤러 및 그것을포함하는 메모리 시스템
US7603490B2 (en) 2007-01-10 2009-10-13 International Business Machines Corporation Barrier and interrupt mechanism for high latency and out of order DMA device
KR100855587B1 (ko) * 2007-01-17 2008-09-01 삼성전자주식회사 메일박스 영역을 가지는 멀티 패스 액세스블 반도체 메모리장치 및 그에 따른 메일박스 액세스 제어방법
US7707461B2 (en) 2007-01-31 2010-04-27 Hewlett-Packard Development Company, L.P. Digital media drive failure prediction system and method
US7596643B2 (en) 2007-02-07 2009-09-29 Siliconsystems, Inc. Storage subsystem with configurable buffer
US7913022B1 (en) * 2007-02-14 2011-03-22 Xilinx, Inc. Port interface modules (PIMs) in a multi-port memory controller (MPMC)
WO2008111058A2 (en) 2007-03-12 2008-09-18 Anobit Technologies Ltd. Adaptive estimation of memory cell read thresholds
KR100918707B1 (ko) * 2007-03-12 2009-09-23 삼성전자주식회사 플래시 메모리를 기반으로 한 메모리 시스템
JP4897524B2 (ja) 2007-03-15 2012-03-14 株式会社日立製作所 ストレージシステム及びストレージシステムのライト性能低下防止方法
KR100907218B1 (ko) * 2007-03-28 2009-07-10 삼성전자주식회사 읽기 레벨 제어 장치 및 그 방법
WO2008121553A1 (en) 2007-03-29 2008-10-09 Sandisk Corporation Non-volatile storage with decoding of data using reliability metrics based on multiple reads
WO2008121577A1 (en) 2007-03-31 2008-10-09 Sandisk Corporation Soft bit data transmission for error correction control in non-volatile memory
US8032724B1 (en) 2007-04-04 2011-10-04 Marvell International Ltd. Demand-driven opportunistic garbage collection in memory components
US7996642B1 (en) * 2007-04-25 2011-08-09 Marvell International Ltd. Digital locked loop on channel tagged memory requests for memory optimization
EP1988474A1 (en) 2007-05-04 2008-11-05 Axalto SA System and method of managing indexation of flash memory
US8151171B2 (en) 2007-05-07 2012-04-03 Broadcom Corporation Operational parameter adaptable LDPC (low density parity check) decoder
US8073648B2 (en) 2007-05-14 2011-12-06 Sandisk Il Ltd. Measuring threshold voltage distribution in memory using an aggregate characteristic
US7930547B2 (en) 2007-06-15 2011-04-19 Alcatel-Lucent Usa Inc. High accuracy bloom filter using partitioned hashing
KR100891005B1 (ko) * 2007-06-28 2009-03-31 삼성전자주식회사 고온 스트레스로 인한 읽기 마진의 감소를 보상하기 위한플래시 메모리 장치 및 그것의 읽기 전압 조정 방법
US7778070B2 (en) 2007-06-29 2010-08-17 Qimonda Ag Memory with dynamic redundancy configuration
JP2009020986A (ja) 2007-07-15 2009-01-29 Hitachi Global Storage Technologies Netherlands Bv ディスク・ドライブ装置及びディスク・ドライブ装置において不揮発性半導体メモリ領域上のデータを管理するテーブルを保存する方法
US8024525B2 (en) 2007-07-25 2011-09-20 Digi-Data Corporation Storage control unit with memory cache protection via recorded log
US8724789B2 (en) 2007-08-06 2014-05-13 Yellow Pages Systems and methods to connect people for real time communications via directory assistance
JP4564520B2 (ja) 2007-08-31 2010-10-20 株式会社東芝 半導体記憶装置およびその制御方法
US8095851B2 (en) 2007-09-06 2012-01-10 Siliconsystems, Inc. Storage subsystem capable of adjusting ECC settings based on monitored conditions
JP4404125B2 (ja) 2007-09-12 2010-01-27 株式会社デンソー 電子制御装置及び信号監視回路
KR101239690B1 (ko) 2007-10-31 2013-03-06 에이저 시스템즈 엘엘시 다중―레벨 플래시 메모리를 위한 체계적 에러 정정
US7894264B2 (en) 2007-11-07 2011-02-22 Micron Technology, Inc. Controlling a memory device responsive to degradation
US7945825B2 (en) 2007-11-25 2011-05-17 Spansion Isreal, Ltd Recovery while programming non-volatile memory (NVM)
US8429492B2 (en) * 2007-11-30 2013-04-23 Marvell World Trade Ltd. Error correcting code predication system and method
US8453022B2 (en) 2007-12-05 2013-05-28 Densbits Technologies Ltd. Apparatus and methods for generating row-specific reading thresholds in flash memory
US8185903B2 (en) 2007-12-13 2012-05-22 International Business Machines Corporation Managing system resources
US8775717B2 (en) * 2007-12-27 2014-07-08 Sandisk Enterprise Ip Llc Storage controller for flash memory including a crossbar switch connecting a plurality of processors with a plurality of internal memories
JP4533968B2 (ja) 2007-12-28 2010-09-01 株式会社東芝 半導体記憶装置及びその制御方法、コントローラ、情報処理装置
US20090172335A1 (en) 2007-12-31 2009-07-02 Anand Krishnamurthi Kulkarni Flash devices with raid
US8159874B2 (en) * 2008-01-22 2012-04-17 Micron Technology, Inc. Cell operation monitoring
US8271515B2 (en) 2008-01-29 2012-09-18 Cadence Design Systems, Inc. System and method for providing copyback data integrity in a non-volatile memory system
JP4617405B2 (ja) 2008-02-05 2011-01-26 富士通株式会社 不良メモリを検出する電子機器、不良メモリ検出方法およびそのためのプログラム
US20090204823A1 (en) 2008-02-07 2009-08-13 Analog Devices, Inc. Method and apparatus for controlling system access during protected modes of operation
JP4672743B2 (ja) * 2008-03-01 2011-04-20 株式会社東芝 誤り訂正装置および誤り訂正方法
JP2009211233A (ja) 2008-03-01 2009-09-17 Toshiba Corp メモリシステム
US8230300B2 (en) 2008-03-07 2012-07-24 Apple Inc. Efficient readout from analog memory cells using data compression
JP2009266349A (ja) 2008-04-28 2009-11-12 Toshiba Corp 不揮発性半導体記憶装置
US8185706B2 (en) 2008-04-30 2012-05-22 Apple Inc. Copyback optimization for memory system
KR101518199B1 (ko) 2008-05-23 2015-05-06 삼성전자주식회사 오류 정정 장치, 그 방법 및 상기 장치를 포함하는 메모리장치
KR101412690B1 (ko) 2008-05-28 2014-06-27 삼성전자주식회사 메모리 장치 및 메모리 프로그래밍 방법
KR101412974B1 (ko) 2008-05-28 2014-06-30 삼성전자주식회사 메모리 장치 및 메모리 프로그래밍 방법
JP5072723B2 (ja) 2008-06-11 2012-11-14 株式会社東芝 不揮発性半導体記憶装置
US8959280B2 (en) 2008-06-18 2015-02-17 Super Talent Technology, Corp. Super-endurance solid-state drive with endurance translation layer (ETL) and diversion of temp files for reduced flash wear
US8627169B2 (en) 2008-06-20 2014-01-07 Cadence Design Systems, Inc. Method and apparatus for dynamically configurable multi level error correction
KR101413137B1 (ko) 2008-07-04 2014-07-01 삼성전자주식회사 메모리 장치 및 메모리 프로그래밍 방법
US8037380B2 (en) 2008-07-08 2011-10-11 International Business Machines Corporation Verifying data integrity of a non-volatile memory system during data caching process
US8325554B2 (en) 2008-07-10 2012-12-04 Sanmina-Sci Corporation Battery-less cache memory module with integrated backup
KR101436506B1 (ko) 2008-07-23 2014-09-02 삼성전자주식회사 메모리 장치 및 메모리 데이터 프로그래밍 방법
JP2010055692A (ja) 2008-08-28 2010-03-11 Toshiba Corp 読み出し回路及び読み出し方法
US8130552B2 (en) * 2008-09-11 2012-03-06 Sandisk Technologies Inc. Multi-pass programming for memory with reduced data storage requirement
US8429514B1 (en) 2008-09-24 2013-04-23 Network Appliance, Inc. Dynamic load balancing of distributed parity in a RAID array
KR101484556B1 (ko) * 2008-10-28 2015-01-20 삼성전자주식회사 독출 보상 회로
US8023334B2 (en) 2008-10-31 2011-09-20 Micron Technology, Inc. Program window adjust for memory cell signal line delay
US8214599B2 (en) 2008-11-04 2012-07-03 Gridiron Systems, Inc. Storage device prefetch system using directed graph clusters
KR101516577B1 (ko) 2008-11-10 2015-05-06 삼성전자주식회사 비휘발성 반도체 메모리 장치, 그를 포함하는 메모리 카드와 메모리 시스템 및 그의 리드 전압 추정 방법
US9063874B2 (en) 2008-11-10 2015-06-23 SanDisk Technologies, Inc. Apparatus, system, and method for wear management
KR20100058166A (ko) 2008-11-24 2010-06-03 삼성전자주식회사 불휘발성 메모리 장치 및 그것을 포함하는 메모리 시스템
KR101555022B1 (ko) 2008-12-02 2015-09-23 삼성전자주식회사 메모리 장치, 그것을 포함한 메모리 시스템 및 그것의 맵핑정보 복원 방법
US8209466B2 (en) 2008-12-16 2012-06-26 Intel Corporation Methods and systems to allocate addresses in a high-endurance/low-endurance hybrid flash memory
US9128699B2 (en) 2008-12-22 2015-09-08 Intel Corporation Method and system for queuing transfers of multiple non-contiguous address ranges with a single command
KR101535225B1 (ko) 2009-01-06 2015-07-09 삼성전자주식회사 디코딩 방법 및 그 방법을 이용하는 메모리 시스템 장치
CN101799783A (zh) 2009-01-19 2010-08-11 中国人民大学 一种数据存储处理方法、查找方法及其装置
KR100996009B1 (ko) 2009-02-02 2010-11-22 주식회사 하이닉스반도체 불휘발성 메모리 소자 및 그 동작 방법
US8645749B2 (en) * 2009-02-04 2014-02-04 Micron Technology, Inc. Systems and methods for storing and recovering controller data in non-volatile memory devices
KR20100090439A (ko) 2009-02-06 2010-08-16 주식회사 하이닉스반도체 불휘발성 메모리 장치의 독출 방법 및 이를 구현하는 불휘발성 메모리 장치
US7830732B2 (en) 2009-02-11 2010-11-09 Stec, Inc. Staged-backup flash backed dram module
KR20100093885A (ko) 2009-02-17 2010-08-26 삼성전자주식회사 불휘발성 메모리 장치, 그것의 동작 방법, 그리고 그것을 포함하는 메모리 시스템
US8259506B1 (en) 2009-03-25 2012-09-04 Apple Inc. Database of memory read thresholds
US8230239B2 (en) 2009-04-02 2012-07-24 Qualcomm Incorporated Multiple power mode system and method for memory
US8042011B2 (en) 2009-04-28 2011-10-18 Synopsys, Inc. Runtime programmable BIST for testing a multi-port memory device
KR101575248B1 (ko) 2009-04-30 2015-12-07 삼성전자주식회사 메모리 컨트롤러 및 그것을 포함하는 메모리 시스템
US20100281207A1 (en) 2009-04-30 2010-11-04 Miller Steven C Flash-based data archive storage system
US8166258B2 (en) 2009-07-24 2012-04-24 Lsi Corporation Skip operations for solid state disks
US8161244B2 (en) 2009-05-13 2012-04-17 Microsoft Corporation Multiple cache directories
US8463820B2 (en) 2009-05-26 2013-06-11 Intel Corporation System and method for memory bandwidth friendly sorting on multi-core architectures
US8180763B2 (en) 2009-05-29 2012-05-15 Microsoft Corporation Cache-friendly B-tree accelerator
US8885434B2 (en) 2009-06-17 2014-11-11 Stmicroelectronics International N.V. Retention of data during stand-by mode
US8627117B2 (en) 2009-06-26 2014-01-07 Seagate Technology Llc Device with power control feature involving backup power reservoir circuit
US8479032B2 (en) 2009-06-26 2013-07-02 Seagate Technology Llc Systems, methods and devices for regulation or isolation of backup power in memory devices
US8412985B1 (en) 2009-06-30 2013-04-02 Micron Technology, Inc. Hardwired remapped memory
US8880835B2 (en) 2009-07-07 2014-11-04 International Business Machines Corporation Adjusting location of tiered storage residence based on usage patterns
US8516219B2 (en) 2009-07-24 2013-08-20 Apple Inc. Index cache tree
US7941696B2 (en) 2009-08-11 2011-05-10 Texas Memory Systems, Inc. Flash-based memory system with static or variable length page stripes including data protection information and auxiliary protection stripes
US7818525B1 (en) 2009-08-12 2010-10-19 Texas Memory Systems, Inc. Efficient reduction of read disturb errors in NAND FLASH memory
JP5752686B2 (ja) 2009-08-20 2015-07-22 ラムバス・インコーポレーテッド 原子メモリ装置
US8464106B2 (en) 2009-08-24 2013-06-11 Ocz Technology Group, Inc. Computer system with backup function and method therefor
KR20120059506A (ko) 2009-08-25 2012-06-08 샌디스크 아이엘 엘티디 플래시 저장 디바이스로의 데이터 복원
US8077515B2 (en) 2009-08-25 2011-12-13 Micron Technology, Inc. Methods, devices, and systems for dealing with threshold voltage change in memory devices
US8289801B2 (en) 2009-09-09 2012-10-16 Fusion-Io, Inc. Apparatus, system, and method for power reduction management in a storage device
US8478725B2 (en) 2009-09-14 2013-07-02 Vmware, Inc. Method and system for performing live migration of persistent data of a virtual machine
WO2011036228A1 (en) 2009-09-23 2011-03-31 Conor Maurice Ryan A flash memory device and control method
US8479061B2 (en) 2009-09-24 2013-07-02 AGIGA Tech Solid state memory cartridge with wear indication
US8171257B2 (en) 2009-09-25 2012-05-01 International Business Machines Corporation Determining an end of valid log in a log of write records using a next pointer and a far ahead pointer
WO2011036727A1 (ja) 2009-09-25 2011-03-31 富士通株式会社 メモリシステム及びメモリシステムの制御方法
US8266501B2 (en) 2009-09-29 2012-09-11 Micron Technology, Inc. Stripe based memory operation
JP5197544B2 (ja) * 2009-10-05 2013-05-15 株式会社東芝 メモリシステム
US8312349B2 (en) 2009-10-27 2012-11-13 Micron Technology, Inc. Error detection/correction based memory management
US8423866B2 (en) 2009-10-28 2013-04-16 SanDisk Technologies, Inc. Non-volatile memory and method with post-write read and adaptive re-write to manage errors
CN101699406B (zh) * 2009-11-12 2011-12-14 威盛电子股份有限公司 数据储存系统与方法
US8335123B2 (en) 2009-11-20 2012-12-18 Sandisk Technologies Inc. Power management of memory systems
US8130553B2 (en) 2009-12-02 2012-03-06 Seagate Technology Llc Systems and methods for low wear operation of solid state memory
FR2953666B1 (fr) 2009-12-09 2012-07-13 Commissariat Energie Atomique Procede de codage ldpc a redondance incrementale
US8250380B2 (en) 2009-12-17 2012-08-21 Hitachi Global Storage Technologies Netherlands B.V. Implementing secure erase for solid state drives
TWI399645B (zh) 2010-01-15 2013-06-21 Silicon Motion Inc 管理記憶體讀出資料之方法以及記憶裝置
US8380915B2 (en) 2010-01-27 2013-02-19 Fusion-Io, Inc. Apparatus, system, and method for managing solid-state storage media
US8661184B2 (en) 2010-01-27 2014-02-25 Fusion-Io, Inc. Managing non-volatile media
JP5788183B2 (ja) 2010-02-17 2015-09-30 三星電子株式会社Samsung Electronics Co.,Ltd. 不揮発性メモリ装置、それの動作方法、そしてそれを含むメモリシステム
US8213255B2 (en) * 2010-02-19 2012-07-03 Sandisk Technologies Inc. Non-volatile storage with temperature compensation based on neighbor state information
US8355280B2 (en) 2010-03-09 2013-01-15 Samsung Electronics Co., Ltd. Data storage system having multi-bit memory device and operating method thereof
US8458417B2 (en) 2010-03-10 2013-06-04 Seagate Technology Llc Garbage collection in a storage device
US8365041B2 (en) 2010-03-17 2013-01-29 Sandisk Enterprise Ip Llc MLC self-raid flash data protection scheme
US8164967B2 (en) 2010-03-24 2012-04-24 Apple Inc. Systems and methods for refreshing non-volatile memory
US9183134B2 (en) 2010-04-22 2015-11-10 Seagate Technology Llc Data segregation in a storage device
JP2011233114A (ja) 2010-04-30 2011-11-17 Toshiba Corp メモリシステム
EP2386958A1 (en) 2010-05-13 2011-11-16 Assa Abloy AB Method for incremental anti-tear garbage collection
US20110283119A1 (en) 2010-05-13 2011-11-17 GCCA Inc. System and Method for Providing Energy Efficient Cloud Computing
CN102906957B (zh) 2010-06-01 2016-01-27 皇家飞利浦电子股份有限公司 用于向各个电负载顺序地施加电力的系统和方法
WO2011153478A2 (en) 2010-06-04 2011-12-08 Flashsoft Corporation Cache management and acceleration of storage media
JP5596143B2 (ja) 2010-06-29 2014-09-24 パナソニック株式会社 不揮発性記憶システム、メモリシステム用の電源回路、フラッシュメモリ、フラッシュメモリコントローラ、および不揮発性半導体記憶装置
US20120011393A1 (en) 2010-07-06 2012-01-12 Roberts Richard B Bios recovery
US8737141B2 (en) 2010-07-07 2014-05-27 Stec, Inc. Apparatus and method for determining an operating condition of a memory cell based on cycle information
US8737136B2 (en) * 2010-07-09 2014-05-27 Stec, Inc. Apparatus and method for determining a read level of a memory cell based on cycle information
KR101131560B1 (ko) 2010-07-15 2012-04-04 주식회사 하이닉스반도체 웨어 레벨링을 수행하는 비휘발성 메모리 장치 및 그의 제어 방법
US8503238B1 (en) 2010-07-21 2013-08-06 Sk Hynix Memory Solutions Inc. Error recovery for flash memory
US20120023144A1 (en) 2010-07-21 2012-01-26 Seagate Technology Llc Managing Wear in Flash Memory
KR20120011642A (ko) 2010-07-29 2012-02-08 삼성전자주식회사 기준 셀을 포함하는 불휘발성 메모리 장치 및 그것의 기준 전류 설정 방법
US8832384B1 (en) 2010-07-29 2014-09-09 Violin Memory, Inc. Reassembling abstracted memory accesses for prefetching
US8694854B1 (en) 2010-08-17 2014-04-08 Apple Inc. Read threshold setting based on soft readout statistics
US8510499B1 (en) 2010-08-30 2013-08-13 Symantec Corporation Solid state drive caching using memory structures to determine a storage space replacement candidate
CN102385902A (zh) 2010-09-01 2012-03-21 建兴电子科技股份有限公司 固态储存装置及其数据控制方法
JP2012058860A (ja) 2010-09-06 2012-03-22 Toshiba Corp メモリシステム
US8417878B2 (en) 2010-09-20 2013-04-09 Seagate Technology Llc Selection of units for garbage collection in flash memory
US8738846B2 (en) * 2010-10-15 2014-05-27 Arkologic Limited File system-aware solid-state storage management system
US20120275466A1 (en) 2010-10-21 2012-11-01 Texas Instruments Incorporated System and method for classifying packets
CN103329103B (zh) 2010-10-27 2017-04-05 希捷科技有限公司 使用用于基于闪存的数据存储的自适应ecc技术的方法和设备
US9063878B2 (en) 2010-11-03 2015-06-23 Densbits Technologies Ltd. Method, system and computer readable medium for copy back
US8909957B2 (en) 2010-11-04 2014-12-09 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Dynamic voltage adjustment to computer system memory
US8806106B2 (en) 2010-11-12 2014-08-12 Seagate Technology Llc Estimating wear of non-volatile, solid state memory
US8484433B2 (en) 2010-11-19 2013-07-09 Netapp, Inc. Dynamic detection and reduction of unaligned I/O operations
KR101774496B1 (ko) 2010-12-08 2017-09-05 삼성전자주식회사 비휘발성 메모리 장치, 이를 포함하는 장치들, 및 이의 동작 방법
KR20120064462A (ko) 2010-12-09 2012-06-19 삼성전자주식회사 메모리 컨트롤러, 이의 오류정정 방법, 및 이를 포함하는 메모리 시스템
US8615681B2 (en) 2010-12-14 2013-12-24 Western Digital Technologies, Inc. System and method for maintaining a data redundancy scheme in a solid state memory in the event of a power loss
US9038066B2 (en) 2010-12-22 2015-05-19 Vmware, Inc. In-place snapshots of a virtual disk configured with sparse extent
TWI446345B (zh) 2010-12-31 2014-07-21 Silicon Motion Inc 用來進行區塊管理之方法以及記憶裝置及控制器
JP2012151676A (ja) 2011-01-19 2012-08-09 Jvc Kenwood Corp 復号装置および復号方法
US8364888B2 (en) 2011-02-03 2013-01-29 Stec, Inc. Erase-suspend system and method
US8489653B2 (en) 2011-02-08 2013-07-16 International Business Machines Corporation Incremental class unloading in a region-based garbage collector
WO2012109679A2 (en) 2011-02-11 2012-08-16 Fusion-Io, Inc. Apparatus, system, and method for application direct virtual memory management
US8966319B2 (en) 2011-02-22 2015-02-24 Apple Inc. Obtaining debug information from a flash memory device
US8909894B1 (en) 2011-03-16 2014-12-09 Tintri Inc. Automatically aligning virtual blocks to physical blocks
US8601036B2 (en) 2011-03-23 2013-12-03 International Business Machines Corporation Handling persistent/long-lived objects to reduce garbage collection pause times
US9047955B2 (en) 2011-03-30 2015-06-02 Stec, Inc. Adjusting operating parameters for memory cells based on wordline address and cycle information
US8874515B2 (en) 2011-04-11 2014-10-28 Sandisk Enterprise Ip Llc Low level object version tracking using non-volatile memory write generations
US8909888B2 (en) 2011-04-29 2014-12-09 Seagate Technology Llc Secure erasure of data from a non-volatile memory
US8713380B2 (en) 2011-05-03 2014-04-29 SanDisk Technologies, Inc. Non-volatile memory and method having efficient on-chip block-copying with controlled error rate
US9176864B2 (en) 2011-05-17 2015-11-03 SanDisk Technologies, Inc. Non-volatile memory and method having block management with hot/cold data sorting
US8745318B2 (en) 2011-06-28 2014-06-03 Seagate Technology Llc Parameter tracking for memory devices
US9378138B2 (en) 2011-06-29 2016-06-28 International Business Machines Corporation Conservative garbage collection and access protection
US8898373B1 (en) 2011-06-29 2014-11-25 Western Digital Technologies, Inc. System and method for improving wear-leveling performance in solid-state memory
US8645773B2 (en) 2011-06-30 2014-02-04 Seagate Technology Llc Estimating temporal degradation of non-volatile solid-state memory
US20130024735A1 (en) 2011-07-19 2013-01-24 Ocz Technology Group Inc. Solid-state memory-based storage method and device with low error rate
US8566667B2 (en) 2011-07-29 2013-10-22 Stec, Inc. Low density parity check code decoding system and method
US8692561B2 (en) 2011-08-11 2014-04-08 International Business Machines Corporation Implementing chip to chip calibration within a TSV stack
US20130047045A1 (en) 2011-08-19 2013-02-21 Stec, Inc. Error indicator from ecc decoder
US8934311B2 (en) 2011-09-06 2015-01-13 Samsung Electronics Co., Ltd. Semiconductor memory device capable of screening a weak bit and repairing the same
US9047210B2 (en) 2011-09-15 2015-06-02 Sandisk Technologies Inc. Data storage device and method to correct bit values using multiple read voltages
KR20130031046A (ko) 2011-09-20 2013-03-28 삼성전자주식회사 플래시 메모리 장치 및 플래시 메모리 장치의 데이터 관리 방법
US8553468B2 (en) 2011-09-21 2013-10-08 Densbits Technologies Ltd. System and method for managing erase operations in a non-volatile memory
US9378133B2 (en) 2011-09-30 2016-06-28 Intel Corporation Autonomous initialization of non-volatile random access memory in a computer system
US8516019B2 (en) 2011-10-03 2013-08-20 Oracle America, Inc. Time-based object aging for generational garbage collectors
US8825721B2 (en) 2011-10-03 2014-09-02 Oracle International Corporation Time-based object aging for generational garbage collectors
JP2014534503A (ja) 2011-10-05 2014-12-18 エルエスアイ コーポレーション 不揮発性記憶のための自己ジャーナリングおよび階層的整合性
US8711619B2 (en) 2011-10-18 2014-04-29 Seagate Technology Llc Categorizing bit errors of solid-state, non-volatile memory
US10359949B2 (en) 2011-10-31 2019-07-23 Apple Inc. Systems and methods for obtaining and using nonvolatile memory health information
JP5943395B2 (ja) 2011-11-02 2016-07-05 国立大学法人 東京大学 メモリコントローラおよびデータ記憶装置
US8683297B2 (en) 2011-11-02 2014-03-25 Sandisk Technologies Inc. Systems and methods of generating a replacement default read threshold
US9053809B2 (en) 2011-11-09 2015-06-09 Apple Inc. Data protection from write failures in nonvolatile memory
US8456919B1 (en) 2011-11-10 2013-06-04 Sandisk Technologies Inc. Method and apparatus to provide data including hard bit data and soft bit data to a rank modulation decoder
US9081663B2 (en) 2011-11-18 2015-07-14 Stec, Inc. Optimized garbage collection algorithm to improve solid state drive reliability
US8687421B2 (en) 2011-11-21 2014-04-01 Sandisk Technologies Inc. Scrub techniques for use with dynamic read
US9274945B2 (en) 2011-12-15 2016-03-01 International Business Machines Corporation Processing unit reclaiming requests in a solid state memory device
US8830746B2 (en) 2011-12-28 2014-09-09 Apple Inc. Optimized threshold search in analog memory cells using separator pages of the same type as read pages
JP2013142947A (ja) 2012-01-10 2013-07-22 Sony Corp 記憶制御装置、記憶装置および記憶制御装置の制御方法
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
WO2013112332A1 (en) 2012-01-24 2013-08-01 Apple Inc. Enhanced programming and erasure schemes for analog memory cells
US8964482B2 (en) 2012-01-30 2015-02-24 Freescale Semiconductor, Inc. Dynamic healing of non-volatile memory cells
US9208871B2 (en) 2012-01-30 2015-12-08 HGST Netherlands B.V. Implementing enhanced data read for multi-level cell (MLC) memory using threshold voltage-drift or resistance drift tolerant moving baseline memory data encoding
US9679664B2 (en) 2012-02-11 2017-06-13 Samsung Electronics Co., Ltd. Method and system for providing a smart memory architecture
US8832050B2 (en) 2012-03-09 2014-09-09 Hewlett-Packard Development Company, L.P. Validation of distributed balanced trees
US8817569B2 (en) 2012-03-19 2014-08-26 Sandisk Technologies Inc. Immunity against temporary and short power drops in non-volatile memory
US20130290611A1 (en) 2012-03-23 2013-10-31 Violin Memory Inc. Power management in a flash memory
JP5853899B2 (ja) 2012-03-23 2016-02-09 ソニー株式会社 記憶制御装置、記憶装置、情報処理システム、および、それらにおける処理方法
US9311501B2 (en) 2012-03-26 2016-04-12 International Business Machines Corporation Using different secure erase algorithms to erase chunks from a file associated with different security levels
US8923066B1 (en) 2012-04-09 2014-12-30 Sk Hynix Memory Solutions Inc. Storage of read thresholds for NAND flash storage using linear approximation
US8990477B2 (en) 2012-04-19 2015-03-24 Sandisk Technologies Inc. System and method for limiting fragmentation
US20130297613A1 (en) 2012-05-04 2013-11-07 Monmouth University Indexing based on key ranges
US20130343131A1 (en) 2012-06-26 2013-12-26 Lsi Corporation Fast tracking for flash channels
US8634267B2 (en) 2012-05-14 2014-01-21 Sandisk Technologies Inc. Flash memory chip power management for data reliability and methods thereof
US20130346672A1 (en) 2012-06-22 2013-12-26 Microsoft Corporation Multi-Tiered Cache with Storage Medium Awareness
US9529724B2 (en) 2012-07-06 2016-12-27 Seagate Technology Llc Layered architecture for hybrid controller
CN102789427B (zh) 2012-07-17 2015-11-25 威盛电子股份有限公司 数据储存装置与其操作方法
KR101997079B1 (ko) 2012-07-26 2019-07-08 삼성전자주식회사 가변 저항 메모리를 포함하는 저장 장치 및 그것의 동작 방법
US9002791B2 (en) 2012-08-28 2015-04-07 Hewlett-Packard Development Company, L. P. Logging modifications to a variable in persistent memory
KR20140028481A (ko) 2012-08-29 2014-03-10 에스케이하이닉스 주식회사 쓰기 전류를 측정할 수 있는 반도체 메모리 장치 및 쓰기 전류 측정 방법
US9329986B2 (en) 2012-09-10 2016-05-03 Sandisk Technologies Inc. Peak current management in multi-die non-volatile memory devices
US20140071761A1 (en) 2012-09-10 2014-03-13 Sandisk Technologies Inc. Non-volatile storage with joint hard bit and soft bit reading
US8938656B2 (en) 2012-09-14 2015-01-20 Sandisk Technologies Inc. Data storage device with intermediate ECC stage
US8886882B2 (en) 2012-09-14 2014-11-11 Hitachi, Ltd. Method and apparatus of storage tier and cache management
US9128690B2 (en) 2012-09-24 2015-09-08 Texas Instruments Incorporated Bus pin reduction and power management
US10489295B2 (en) 2012-10-08 2019-11-26 Sandisk Technologies Llc Systems and methods for managing cache pre-fetch
US9268709B2 (en) 2012-10-18 2016-02-23 Marvell International Ltd. Storage controllers and storage control methods
WO2014068617A1 (en) 2012-10-31 2014-05-08 Hitachi, Ltd. Storage apparatus and method for controlling storage apparatus
US8634248B1 (en) 2012-11-09 2014-01-21 Sandisk Technologies Inc. On-device data analytics using NAND flash based intelligent memory
US8817541B2 (en) 2012-11-09 2014-08-26 Sandisk Technologies Inc. Data search using bloom filters and NAND based content addressable memory
US8930778B2 (en) 2012-11-15 2015-01-06 Seagate Technology Llc Read disturb effect determination
US8949544B2 (en) 2012-11-19 2015-02-03 Advanced Micro Devices, Inc. Bypassing a cache when handling memory requests
US9183945B2 (en) 2012-11-30 2015-11-10 Sandisk Technologies Inc. Systems and methods to avoid false verify and false read
US9135185B2 (en) 2012-12-23 2015-09-15 Advanced Micro Devices, Inc. Die-stacked memory device providing data translation
US8869008B2 (en) 2013-01-17 2014-10-21 Apple Inc. Adaptation of analog memory cell read thresholds using partial ECC syndromes
KR20140100330A (ko) 2013-02-06 2014-08-14 삼성전자주식회사 메모리 시스템 및 그것의 동작 방법
DE102013101863A1 (de) 2013-02-26 2014-08-28 Fujitsu Technology Solutions Intellectual Property Gmbh Hochverfügbares Hauptspeicher-Datenbanksystem, Arbeitsverfahren und deren Verwendungen
US9383795B2 (en) 2013-03-10 2016-07-05 Seagate Technololgy Llc Storage device power failure infrastructure
US9042181B2 (en) 2013-03-15 2015-05-26 SanDisk Technologies, Inc. Periodic erase operation for a non-volatile medium
US10546648B2 (en) 2013-04-12 2020-01-28 Sandisk Technologies Llc Storage control system with data management mechanism and method of operation thereof
US9378830B2 (en) 2013-07-16 2016-06-28 Seagate Technology Llc Partial reprogramming of solid-state non-volatile memory cells
US9043517B1 (en) 2013-07-25 2015-05-26 Sandisk Enterprise Ip Llc Multipass programming in buffers implemented in non-volatile data storage systems
US9531038B2 (en) 2013-07-31 2016-12-27 Dell Products, Lp System and method of cell block voltage analytics to improve balancing effectiveness and identify self-discharge rate
US9329789B1 (en) 2013-10-14 2016-05-03 Marvell International Ltd. Methods and apparatus for efficiently operating on a storage device
US9250676B2 (en) 2013-11-29 2016-02-02 Sandisk Enterprise Ip Llc Power failure architecture and verification
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US9471497B2 (en) 2014-01-24 2016-10-18 Netapp, Inc. Methods for combining access history and sequentiality for intelligent prefetching and devices thereof
TWI533308B (zh) 2014-03-21 2016-05-11 群聯電子股份有限公司 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6484224B1 (en) * 1999-11-29 2002-11-19 Cisco Technology Inc. Multi-interface symmetric multiprocessor
US7184446B2 (en) * 2001-07-06 2007-02-27 Juniper Networks, Inc. Cross-bar switch employing a multiple entry point FIFO

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Chanik Park,Prakash Talawar etc.A High Performance Controller for NAND Flash-based Solid State Disk(NSSD).《Non-Volatile Semiconductor Memory Workshop, 2006. IEEE NVSMW 2006. 21st》.2006,17-18. *
ChanikPark Prakash Talawar etc.A High Performance Controller for NAND Flash-based Solid State Disk(NSSD).《Non-Volatile Semiconductor Memory Workshop

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI816183B (zh) * 2020-09-18 2023-09-21 日商鎧俠股份有限公司 用於nand多平面及多晶粒狀態傳訊的固態硬碟及方法

Also Published As

Publication number Publication date
WO2009086419A1 (en) 2009-07-09
JP2011508349A (ja) 2011-03-10
WO2009086404A1 (en) 2009-07-09
US20140108715A1 (en) 2014-04-17
US8386700B2 (en) 2013-02-26
WO2009086412A1 (en) 2009-07-09
US9239783B2 (en) 2016-01-19
US9483210B2 (en) 2016-11-01
JP5272019B2 (ja) 2013-08-28
CN101965559A (zh) 2011-02-02
US9152556B2 (en) 2015-10-06
US9448743B2 (en) 2016-09-20
US20090172499A1 (en) 2009-07-02
WO2009086365A1 (en) 2009-07-09
EP2225642A1 (en) 2010-09-08
US20130339582A1 (en) 2013-12-19
EP2225642A4 (en) 2012-03-28
US20090172308A1 (en) 2009-07-02
US20140101378A1 (en) 2014-04-10
US8533384B2 (en) 2013-09-10
US7978516B2 (en) 2011-07-12
US8959282B2 (en) 2015-02-17
WO2009086359A1 (en) 2009-07-09
WO2009086376A1 (en) 2009-07-09
US8775717B2 (en) 2014-07-08
US8245101B2 (en) 2012-08-14
US7934052B2 (en) 2011-04-26
US20120072654A1 (en) 2012-03-22
US8621137B2 (en) 2013-12-31
US20090172263A1 (en) 2009-07-02
US20090172262A1 (en) 2009-07-02
US20090172259A1 (en) 2009-07-02
US20090172261A1 (en) 2009-07-02
US20090172257A1 (en) 2009-07-02
US20090172260A1 (en) 2009-07-02
WO2009086421A1 (en) 2009-07-09
CN103150275B (zh) 2015-12-16
US8959283B2 (en) 2015-02-17
US8738841B2 (en) 2014-05-27
US20160034227A1 (en) 2016-02-04
US9158677B2 (en) 2015-10-13
EP2225642B1 (en) 2016-11-16
US20140237168A1 (en) 2014-08-21
US20130262753A1 (en) 2013-10-03
US20090172258A1 (en) 2009-07-02
WO2009086357A1 (en) 2009-07-09
US8751755B2 (en) 2014-06-10
US8621138B2 (en) 2013-12-31
US20130339581A1 (en) 2013-12-19
WO2009086371A1 (en) 2009-07-09
WO2009086424A1 (en) 2009-07-09
US8762620B2 (en) 2014-06-24
US20090168525A1 (en) 2009-07-02
CN103150275A (zh) 2013-06-12

Similar Documents

Publication Publication Date Title
CN101965559B (zh) 包括将处理器与内部存储器连接的交叉切换器的用于闪存的存储控制器
CN103744790B (zh) 智能可缩放存储切换架构
US7925847B2 (en) Method and apparatus for adjusting timing signal between media controller and storage media
CN104025060B (zh) 支持近存储器和远存储器访问的存储器通道
CN104040515B (zh) 在逻辑驱动器模型下呈现直接存取的存储设备
US8990462B2 (en) Storage device, computing system including the same and data transferring method thereof
CN1965298B (zh) 用于管理奇偶raid数据重建的方法、系统和设备
US8370603B2 (en) Architecture for address mapping of managed non-volatile memory
TWI699696B (zh) 具有介面控制機構之電子系統及其操作方法
US20160132237A1 (en) Data storage device, data processing system and method of operation
TW201227506A (en) Controller and method for performing background operations
US20110055457A1 (en) Method for giving program commands to flash memory, and controller and storage system using the same
CN110147335A (zh) 用于ssd储存器中nvme命令间关联的系统和方法
CN104520932A (zh) 闪存存储器控制器
JP2013025795A (ja) フラッシュデバイスのためのフラッシュコントローラハードウェアアーキテクチャ
CN102736863A (zh) 支持失序主机命令组块介质访问的非易失性半导体存储器模块
CN103403667A (zh) 数据处理方法和设备
CN104281413A (zh) 命令队列管理方法、存储器控制器及存储器储存装置
CN207008602U (zh) 一种基于NandFlash存储器多通道的存储阵列控制装置
CN104461961A (zh) 一种多核多线程的闪存装置及闪存控制方法
KR20180063419A (ko) 호스트와 양방향 통신을 수행하도록 구성된 스토리지 장치 및 그것의 동작 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: SANDISK ENTERPRISE INTELLECTUAL PROPERTY CO., LTD.

Free format text: FORMER OWNER: PLIANT TECHNOLOGY INC.

Effective date: 20120105

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20120105

Address after: Texas, USA

Applicant after: Sandyike Enterprise Intellectual Property Co.,Ltd.

Address before: California, USA

Applicant before: PLIANT TECHNOLOGY, Inc.

C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20160518

Address after: Texas, USA

Patentee after: SANDISK TECHNOLOGIES Inc.

Address before: Texas, USA

Patentee before: Sandyike Enterprise Intellectual Property Co.,Ltd.

C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: Texas, USA

Patentee after: SANDISK TECHNOLOGIES LLC

Address before: Texas, USA

Patentee before: SANDISK TECHNOLOGIES Inc.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20131009

CF01 Termination of patent right due to non-payment of annual fee