CN102681952A - 将数据写入存储设备的方法与存储设备 - Google Patents

将数据写入存储设备的方法与存储设备 Download PDF

Info

Publication number
CN102681952A
CN102681952A CN2012101500778A CN201210150077A CN102681952A CN 102681952 A CN102681952 A CN 102681952A CN 2012101500778 A CN2012101500778 A CN 2012101500778A CN 201210150077 A CN201210150077 A CN 201210150077A CN 102681952 A CN102681952 A CN 102681952A
Authority
CN
China
Prior art keywords
dma
address
data
memory buffer
memory
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.)
Granted
Application number
CN2012101500778A
Other languages
English (en)
Other versions
CN102681952B (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.)
Beijing Memblaze Technology Co Ltd
Original Assignee
Beijing Memblaze Technology Co Ltd
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 Beijing Memblaze Technology Co Ltd filed Critical Beijing Memblaze Technology Co Ltd
Priority to CN201210150077.8A priority Critical patent/CN102681952B/zh
Publication of CN102681952A publication Critical patent/CN102681952A/zh
Priority to PCT/CN2013/075524 priority patent/WO2013170731A1/zh
Priority to EP13790266.4A priority patent/EP2849077B1/en
Priority to US14/400,467 priority patent/US9395921B2/en
Application granted granted Critical
Publication of CN102681952B publication Critical patent/CN102681952B/zh
Active 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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/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
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Bus Control (AREA)

Abstract

一种将数据写入存储设备的方法,所述存储设备包括缓冲存储器和闪存存储器,所述存储设备与主机可通信地连接,所述方法包括:从主机接收第一写入命令,所述第一写入命令包括要写入的数据、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;基于所述用于所述缓冲存储器的地址,将所述要写入的数据写入到所述缓冲存储器;基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述要写入的数据,写入到所述闪存存储器。

Description

将数据写入存储设备的方法与存储设备
技术领域
本发明涉及固态存储设备(Solid Storage Device,SSD),更具体地,本发明涉及将数据写入固态存储设备中的随机访问存储器的方法及装置。
背景技术
同机械式硬盘相类似,固态存储设备(SSD)也是用于计算机系统的大容量、非易失性存储设备。固态存储设备一般以闪存(Flash)作为存储介质。在中国专利文献CN102043689A中公开了如图13所示的固态存储设备。如图13所示,为目前一般的固态存储设备的功能框图。其中主要包括主机系统1301和固态存储设备1302。其中,固态存储设备1302包括接口模块1303,固态存储处理器1304,以及以Flash颗粒1305为单位组成的Flash阵列1306。其中,接口模块1303主要用于实现与主机系统一致的接口协议,例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,快速外围组件互连)、SCSI(SmallComputer System Interface,小型计算机系统接口)、IDE(Integrated Drive Electronics,集成驱动器电子)等。通过接口模块1303,固态存储设备呈现给主机系统的是一个拥有一定逻辑空间的标准存储设备。固态存储处理器1304是整个存储设备的控制核心,主要负责接口模块1303以及闪存阵列1306之间的控制信号及数据的传输、Flash管理、主机逻辑地址到Flash物理地址的转换或映射、损耗均衡(将逻辑地址映射到不同的物理地址从而防止单个Flash被过于集中地操作而提前失效)、坏块管理等。可由软件、硬件、固件或者其组合的多种方式实现固态存储处理器1304。1305为单个Flash颗粒,多个Flash颗粒1305组成Flash阵列1306。
为提高固态存储设备的读、写速度,可以在固态存储设备中设置诸如DRAM或SRAM的随机访问存储器或其他类型的适于高速读/写操作的存储器,作为同闪存读写数据时的高速缓冲存储器。在存储设备访问过程中,作为一个例子,计算机向存储设备发出SCSI(小型计算机系统接口)命令,存储设备接收并处理SCSI命令,依据SCSI命令所指示的操作执行相应的存储介质读写过程。在这一过程中,SCSI命令并不直接操作高速缓冲存储器。即,高速缓冲存储器对计算机或者用户是“透明”的。也有一些存储设备提供了高速缓冲存储器的“清洗”机制,计算机或用户可使用预定的命令强制存储设备将高速缓冲存储器中的数据写入到非易失性存储介质(例如,磁盘或者闪存)中。
然而,对高速缓冲存储器的分配和管理将成为固态存储设备上的控制器的工作负担。而且当高速缓冲存储器被完全占用后,如果固态存储设备接收到来自主机系统的新的访问请求,则还需要执行对高速缓冲存储器的替换操作。这样既增加了控制器的复杂度,又会让主机经历在读/写性能上的颠簸。
在主机与设备之间还可以进行DMA(Direct Memory Access,直接存储器访问)传输。在中国专利文献CN101221544A中公开了执行DMA传输的方法和设备。DMA传输的一个典型过程是分散/收集(Scatter/Gather)操作。分散/收集操作中,待传输的多个数据块存储在系统(主机)存储器的不连续的多个地址位置。处理器不需要为要从某一源移动到某一目的地的每个数据块对DMA控制器进行编程的操作。而是,处理器在系统存储器中建立描述符表或描述符链接表。描述符表或描述符链接表中包括一组描述符。每个描述符都描述了数据块移动方向、源地址、目的地地址以及可选的传输的字节数。在一个描述符中不包括传输字节数的情况下,可通过DMA方式传输约定长度的数据。
发明内容
因而,分担存储设备上的控制器的工作负担是有益的。通过将与存储设备的缓冲存储器有关的维护工作转移给主机,既减轻了存储设备的控制器的负载,也向主机提供了更灵活控制存储设备的能力。
在本发明的一个实施例中,提供了一种将数据写入存储设备的方法,所述存储设备包括缓冲存储器和闪存存储器,所述存储设备与信息处理设备可通信地连接,所述方法包括:
从信息处理设备接收第一DMA描述符,所述DMA描述符包括用于所述信息处理设备的地址、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
当所述第一DMA描述符指示DMA写操作时,基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
根据本发明的第一实施例,其中所述第一DMA描述符包括第一DMA描述符命令和第一DMA描述符数据,所述第一DMA描述符数据包括用于所述信息处理设备的地址和用于所述缓冲存储器的地址,所述DMA描述符命令包括用于所述闪存存储器的地址;所述方法还包括:
将所述第一DMA描述符数据变换为第一DMA微指令,所述第一DMA微指令指示用于所述闪存存储器的地址、用于所述信息处理设备的地址以及用于所述缓冲存储器的地址;
其中,当所述第一DMA微指令指示DMA写操作时,基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
根据本发明的第一实施例,其中所述第一DMA描述符包括第一DMA描述符命令、第一DMA描述符数据以及第二DMA描述符数据,所述第一DMA描述符数据包括第一用于所述信息处理设备的地址和第一用于所述缓冲存储器的地址,所述第二DMA描述符数据包括第二用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址,所述DMA描述符命令包括用于所述闪存存储器的地址;所述方法还包括:
将所述第一DMA描述符数据变换为第一DMA微指令,将所述第二DMA描述符数据变换为第二DMA微指令,所述第一DMA微指令指示第一用于所述闪存存储器的地址、第一用于所述信息处理设备的地址以及第一用于所述缓冲存储器的地址,所述第二DMA微指令指示第二用于所述闪存存储器的地址、第二用于所述信息处理设备的地址以及第二用于所述缓冲存储器的地址,其中所述第二闪存存储器地址与所述第一闪存存储器地址相距预定偏移值;
其中,当所述第一DMA微指令指示DMA写操作时,基于第一用于所述信息处理设备的地址和第一用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;当所述第二DMA微指令指示DMA写操作时,基于第二用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第二数据写入到所述缓冲存储器;
基于第一用于所述闪存存储器的地址和第一用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器;基于第二用于所述闪存存储器的地址和第二用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第二数据,写入到所述闪存存储器。
根据本发明的第一实施例,其中:当将所述第一数据写入到所述闪存存储器之后,向所述信息处理设备发送消息,以指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
根据本发明的第一实施例,其中:当将所述第一数据写入到所述缓冲存储器之后,向所述信息处理设备发送消息,以指示对所述第一DMA描述符的操作完成。
根据本发明的第一实施例,其中:当将所述第一数据写入到所述闪存存储器之后,向所述信息处理设备发送消息,以指示对所述第一DMA描述符的操作完成,以及指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
在本发明的第二实施例中提供了一种存储设备,所述存储设备包括缓冲存储器、闪存存储器、信息处理设备接口以及控制电路,所述存储设备与信息处理设备可通信地连接,其中:
所述信息处理设备接口从信息处理设备接收第一DMA描述符,所述DMA描述符包括用于所述信息处理设备的地址、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
当所述控制电路识别出所述第一DMA描述符指示DMA写操作时,基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
所述控制电路基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
根据根据本发明的第二实施例,其中当将所述第一数据写入到所述闪存存储器之后,所述控制电路还向所述信息处理设备发送消息,以指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
根据根据本发明的第二实施例,其中当将所述第一数据写入到所述缓冲存储器之后,所述控制电路还向所述信息处理设备发送消息,以指示对所述第一DMA描述符的操作完成。
根据根据本发明的第二实施例,其中所述第一DMA描述符包括第一DMA描述符命令和第一DMA描述符数据,所述第一DMA描述符数据包括用于所述信息处理设备的地址和用于所述缓冲存储器的地址,所述DMA描述符命令包括用于所述闪存存储器的地址;所述存储设备还包括DMA指令分析器、DMA写操作控制器和闪存接口控制器:
所述DMA指令分析器,将所述第一DMA描述符数据变换为第一DMA微指令,所述第一DMA微指令指示用于所述闪存存储器的地址、用于所述信息处理设备的地址以及用于所述缓冲存储器的地址;
其中,当所述第一DMA微指令指示DMA写操作时,所述DMA写操作控制器基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
所述闪存接口控制器基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
根据根据本发明的第二实施例,其中所述第一DMA描述符包括第一DMA描述符命令、第一DMA描述符数据以及第二DMA描述符数据,所述第一DMA描述符数据包括第一用于所述信息处理设备的地址和第一用于所述缓冲存储器的地址,所述第二DMA描述符数据包括第二用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址,所述DMA描述符命令包括用于所述闪存存储器的地址;所述存储设备还包括DMA指令分析器、DMA写操作控制器和闪存接口控制器:
所述DMA指令分析器将所述第一DMA描述符数据变换为第一DMA微指令,将所述第二DMA描述符数据变换为第二DMA微指令,所述第一DMA微指令指示第一用于所述闪存存储器的地址、第一用于所述信息处理设备的地址以及第一用于所述缓冲存储器的地址,所述第二DMA微指令指示第二用于所述闪存存储器的地址、第二用于所述信息处理设备的地址以及第二用于所述缓冲存储器的地址,其中所述第二闪存存储器地址与所述第一闪存存储器地址相距预定偏移值;
其中,当所述第一DMA微指令指示DMA写操作时,所述DMA写操作控制器基于第一用于所述信息处理设备的地址和第一用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;当所述第二DMA微指令指示DMA写操作时,所述DMA写操作控制器基于第二用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第二数据写入到所述缓冲存储器;
所述闪存接口控制器基于第一用于所述闪存存储器的地址和第一用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器;基于第二用于所述闪存存储器的地址和第二用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第二数据,写入到所述闪存存储器。
根据根据本发明的第二实施例,其中当将所述第一数据与所述第二数据写入到所述闪存存储器之后,所述控制电路还向所述信息处理设备发送中断,以指示对同所述第一用于所述缓冲存储器的地址和所述第二用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放,以及指示对所述第一DMA描述符的操作完成。
在本发明的第三实施例中,提供了一种将数据写入存储设备的方法,所述存储设备包括缓冲存储器和闪存存储器,所述存储设备与信息处理设备可通信地连接,所述方法包括:
从信息处理设备接收第一写入命令,所述第一写入命令包括要写入的数据、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
基于所述用于所述缓冲存储器的地址,将所述要写入的数据写入到所述缓冲存储器;
基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述要写入的数据,写入到所述闪存存储器。
根据本发明的第三实施例,其中将所述要写入的数据写入到所述缓冲存储器后,向所述信息处理设备发送消息,以指示对所述第一写入命令的操作完成。
根据本发明的第三实施例,其中当将所述要写入的数据写入到所述闪存存储器之后,向所述信息处理设备发送消息,以指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
根据本发明的第三实施例,其中将所述要写入的数据写入到所述闪存存储器后,向所述信息处理设备发送消息,以指示对所述第一写入命令的操作完成以及对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
在本发明的第四实施例中提供了一种存储设备,所述存储设备包括缓冲存储器、闪存存储器、信息处理设备接口以及控制电路,所述存储设备与信息处理设备可通信地连接,其中:
所述信息处理设备接口从信息处理设备接收第一写入命令,第一写入命令包括要写入的数据、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
所述控制电路基于所述用于所述缓冲存储器的地址,将所述要写入的数据写入到所述缓冲存储器;
所述控制电路基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述要写入的数据,写入到所述闪存存储器。
根据本发明的第四实施例,其中当将所述要写入的数据写入到所述缓冲存储器后,所述控制电路还向所述信息处理设备发送消息,以指示对所述第一写入命令的操作完成。
根据本发明的第四实施例,其中当将所述要写入的数据写入到所述闪存存储器之后,所述控制电路还向所述信息处理设备发送消息,以指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
根据本发明的第四实施例,其中将所述要写入的数据写入到所述闪存存储器后,所述控制电路还向所述信息处理设备发送消息,以指示对所述第一写入命令的操作完成以及对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
附图说明
当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:
图1是根据本发明实施例的存储设备的结构框图;
图2A、2B是根据本发明实施例的写入命令的示意图;
图3是根据本发明实施例的存储设备执行写入命令的方法的流程图;
图4是根据本发明实施例的主机的示意图;
图5是根据本发明实施例的主机执行写入操作的流程图;
图6是根据本发明实施例的第二写入命令的示意图;
图7A、7B是根据本发明实施例的存储设备执行第二写入命令的流程图;
图7C中展示了用于实施图7A、7B中的执行第二写入命令的存储设备的硬件方框图;
图8是根据本发明实施例的主机的软件方框图;
图9A是根据本发明实施例的主机创建并执行第二写入命令的流程图;
图9B是根据本发明另一实施例的主机创建并执行第二写入命令的流程图;
图10A是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;
图10B是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;
图10C是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图;
图11A-11F展示出了与图10B、图10C相关联的缓冲存储器的多种状态;
图12是根据本发明的又一实施例的存储设备的硬件方框图。
具体实施方式
图1是根据本发明实施例的存储设备的结构框图。如图1所示的实施例包括主机101以及同主机101相耦合的存储设备102。主机101同存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道、无线通信网络等连接主机101与存储设备102。主机101可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括主机接口103、控制电路104、一个或多个闪存芯片105以及缓冲存储器106。主机接口103可适配于通过例如SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道等方式与主机101交换数据。控制电路104用于控制在主机接口103、闪存芯片105以及缓冲存储器106之间的数据传输,还用于闪存管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制电路104。控制电路104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application Specific IntegratedCircuit,应用专用集成电路)或者其组合的形式。控制电路104也可以包括处理器或者控制器。
根据本发明的一个实施例,主机101向存储设备102发出读出命令或者写入命令。控制电路104经由主机接口103接收到该读出命令或写入命令。在附图2中详细描述了作为例子的第一写入命令200。
参看图2A、2B,图2A是根据本发明实施例的写入命令的示意图。写入命令200包括字段201、202、203和204。字段201指示该命令为写入命令,字段202为闪存地址,字段203为数据,该写入命令200指示存储设备102将数据字段203中的数据基于由字段202所指示的闪存地址写入闪存芯片105。字段204为缓冲存储器地址,存储设备102接收到该写入命令200时,先将数据字段203中的数据基于写入由字段204所指示缓冲存储器地址写入缓冲存储器106,再将数据字段203中的数据基于由字段202所指示的闪存地址写入闪存芯片105。在一个例子中,存储设备102将数据字段203中的数据基于写入由字段204所指示缓冲存储器地址写入缓冲存储器106后,再从缓冲存储器106中读出该数据,继而将该数据写入到闪存芯片105。将数据写入到缓冲存储器106的操作,同将存储器106中的另一数据读出并写入到闪存芯片105的操作可以并发执行,从而使得主机101向存储设备102的写入操作的并发性能得到提升,并且不会显著增加控制电路104的复杂度,因为控制电路104无需处理缓冲存储器106的空间分配任务。在一个实施例中,字段204中可以是缓冲存储器106的完整地址,而在另一个实施例中,字段204是相对某一基地址的偏移值。在一个实施例中,字段203中携带要写入闪存105的数据。而在另一个实施例中,字段203中可携带一个指针,该指针指向要写入存储设备102的数据,而该数据可以存储在主机101的存储器中,在此情况下,存储设备102通过随后的DMA传输过程从主机101获得该数据。在依然另一个实施例中,字段203可携带一个指针,该指针指向要写入存储设备102的数据,而该数据可以存储在存储设备102的缓冲存储器中。字段202可以是要将数据写入的闪存芯片105的物理地址或逻辑地址。字段202也可以是一个指针,指向缓冲存储器106,在其中存储有用于闪存芯片105的物理地址或逻辑地址。逻辑地址到物理地址的转换过程,可以通过查找地址映射表的方式实现。
所属领域技术人员将容易意识到,写入命令可以具有多种具体编码方式和字段顺序。例如,参看图2B,指示写入命令210的类型是写操作的字段214可以在写入命令210的末尾或者其他位置。而在字段211中携带缓冲存储器地址,在字段212中携带数据或指向数据的存放位置的指针。在字段213中存放闪存地址,或者指向存放闪存地址的指针,闪存地址可以是逻辑地址或物理地址。
图3是根据本发明实施例的存储设备执行写入命令的方法的流程图。在步骤301,存储设备102从主机101接收到写入命令200。存储设备102的控制电路104通过主机接口103接收到写入命令200后,提取出包含于写入命令200中的用于指示操作类型为写操作的字段201,用于指示要写入的闪存的地址的字段202,用于指示要写入的数据的字段203,以及用于指示缓冲存储器106的地址的字段204。在步骤302,响应于该写入命令200,控制电路104基于字段204得到用于缓冲存储器106的地址,并基于字段203得到要写入的数据,以及将要写入的数据写入到缓冲存储器106中由字段204所指示的位置。当将数据写入到缓冲存储器106中后,存储设备102可向主机发送消息以指示写入命令200的执行完成,虽然数据此时尚未被实际写入到闪存芯片105之中。以此方式,在主机101看来,在步骤302执行完成后,写入命令200已经执行完成,从而提升了存储设备102的执行写入命令200的性能。向主机发送的消息可以包含于存储设备102向主机101所发送的中断请求之中,也可以基于主机101与存储设备102之间的耦合方式(SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道、无线通信网络等)而选择适当的其他消息发送方式。在将要写入的数据写入到缓冲存储器106之后,在控制电路104的控制下,将由字段203所指示的要写入的数据,基于由字段202所指示的闪存地址,写入到闪存芯片105中(步骤303)。当将数据写入到闪存芯片105中后,存储设备102也可向主机发送消息以指示写入命令200的执行完成,特别地,此时主机可以在写入命令200中再次指定将数据写入该用于指示缓冲存储器106的地址,而不会因对该地址处的数据的重写而导致数据错误。在一个例子中,如果字段202所指示的是用于闪存芯片105的逻辑地址,则将该逻辑地址转换为用于闪存芯片105的物理地址。逻辑地址到物理地址的转换方式是所属领域技术人员所了解的。在一个例子中,在步骤303,从缓冲存储器106中重新取得所写入的数据,并将该数据写入到闪存芯片105。所属领域技术人员将意识到,在控制电路104的控制下,步骤302中将数据写入到缓冲存储器106的操作,与步骤303中将数据写入到闪存存储器105的操作,可以并行执行。这样,在存储设备102中可以同时处理多个写入命令,其中,在一个时刻,基于一个写入命令,控制电路104将第一数据写入到缓冲存储器106中;而基于另一个写入命令,控制电路104将存在于缓冲存储器106中的第二数据写入到闪存芯片105中。缓冲存储器106可以是双端口存储器,使得在经由第一端口向缓冲存储器106写入第一数据的同时,可以从第二端口从缓冲存储器106读出第二数据。所属领域技术人员可意识到缓冲存储器106的其他实施方式,以支持对多份数据的同时读出和/或写入操作。
通过在写入命令中携带用于指示缓冲存储器106的地址的字段204,将维护缓冲存储器106的工作从控制电路104移除了,并且使主机101拥有了更灵活控制存储设备102的能力。
图4是根据本发明实施例的主机的示意图。图4是示出了主机400的软件组成的方框图。主机400可以是个人计算机、服务器计算机或者其他具有计算能力的设备。主机400包括一个或多个用户应用程序401、402和403,以及操作系统404。操作系统404中具有存储设备驱动程序405。在根据本发明的实施例中,驱动程序405中包括缓冲区控制块406,用以在主机400中控制存储设备102的缓冲存储器106。缓冲区控制块406由多个存储单元(411、412……41n)组成,缓冲区控制块406中的每个存储单元(411、412……41n)对应于缓冲存储器106中的一个存储单元,并记录缓冲存储器106中的对应存储单元的工作状态。在一个实施例中,缓冲区控制块406中的存储单元(411、412……41n)的每一个,记录缓冲存储器106中的对应存储单元是空闲的还是已经被占用。在进一步的一个实施例中,在发送给存储设备102的一个读/写命令中涉及缓冲存储器中的多个存储单元,例如2个。在此情况下,将缓冲区控制块406中的2个存储单元(411、412)关联在一起,在存储单元411、412中还记录存储单元411与412之间的这种关联关系,例如,在存储单元411中记录指向存储单元412的一个或多个指针。在依然进一步的实施例中,在存储单元412中还记录指向存储单元411的一个或多个指针。
图5是根据本发明实施例的主机执行写入操作的流程图。当用户应用程序或者其他程序请求执行将数据写入到存储设备的操作时,应用程序或其他程序会发送写请求。图4中的存储设备驱动程序405接收该写请求(步骤501),该写请求中包括应用程序或其他程序所提供的要写入的数据已经用于存储设备的地址,用于存储设备的地址可以是文件路径及偏移值,并进一步被转换为用于存储设备的逻辑地址。在一个例子中,该逻辑地址是用于存储设备上的闪存芯片的逻辑地址,该写请求要将数据基于该逻辑地址写入到闪存芯片中。在步骤502,存储设备驱动程序405为该写请求分配空闲的缓冲存储器。具体地,遍历缓冲区控制块406,找到其中为空闲状态的存储单元,例如,存储单元411。存储单元411为空闲状态,表示在存储设备102的缓冲存储器106中的对应存储单元为空闲状态,可以接收写入的数据。
在步骤503中,存储设备驱动程序405向存储设备102发送写命令,在写命令中包括要写入的数据以及用于存储设备102的地址,在该写命令中还包括同存储单元411相对应的用于缓冲存储器106的地址。所属领域技术人员将意识到,有多种方式获得存储单元411与缓冲存储器106中的对应存储单元的对应关系。例如,缓冲区控制块406中有n个存储单元(411、412……41n),而缓冲存储器106中也包括n个存储单元,存储单元411对应于缓冲存储器106中的第一个存储单元,而存储单元412对应于缓冲存储器106中的第二个存储单元,以及类似地,存储单元41n对应于缓冲存储器106中的第n个存储单元,使得基于存储单元411在缓冲区控制块406中的位置可计算出缓冲存储器106中的对应存储单元的地址。依然作为一个例子,还可以在存储单元(411、412……412)中存储缓冲存储器106中的对应存储单元的地址。在依然另一个例子中,在写命令中携带一个序号,该序号既指示存储单元411在缓冲区控制块406中的位置,又指示在缓冲存储器106中的对应存储单元的位置。
在步骤504,接收到来自存储设备102的消息。在一个例子中,该消息是中断请求,该中断请求指示在步骤503中发送的写命令已经执行完毕。如前面所述的,在一个例子中,存储设备102中的控制电路104在将写命令中的数据写入到缓冲存储器106(特别地,写入到缓冲存储器106中与缓冲区控制块406的存储单元411相对应的存储单元)之后,存储设备即发送中断,指示该写命令执行完成。在一个例子中,控制电路104将数据写入到闪存芯片105之后,存储设备102向主机101发送中断。在一个例子中,该中断请求中还包括指示步骤503中发送的写命令相关的缓冲区控制块406的存储单元的信息。该信息可以是一个或多个存储单元(411、412……41n)的地址,一个或多个存储单元(411、412……41n)的序号。
在步骤505,响应于在步骤504中接收到的该中断请求,并基于该中断请求中所指示的与该写命令相关的缓冲区控制块406的存储单元的信息,释放与该写命令相关的缓冲区控制块406的存储单元(411、412……41n)。释放存储单元(411、412……41n)具体可以是在存储单元(411、412……41n)中设置缓冲存储器106中的对应存储单元是空闲状态。
在一个例子中,步骤503中的写命令涉及缓冲区控制块406的两个存储单元411与412,并且,存储单元411与412中分别记录了指向彼此的指针,以表示这两个存储单元411、412关联于同一个写命令。在步骤504中接收到的中断请求中,既可以指示存储单元411也可以指示存储单元412。在步骤505中,基于指示存储单元411与412之一的指针,可获得两个存储单元411与412,并将其释放。类似地,所属领域技术人员可意识到以此方式还可以在写命令中关联三个或更多的存储单元(411、412……41n)。
图6是根据本发明实施例的第二写入命令的示意图。第二写入命令指示存储设备102以DMA方式从主机101获得数据并写入到闪存芯片105中。第二写入命令可以是DMA描述符600。DMA描述符600包括DMA命令610以及一个或多个DMA数据(620、630)。DMA命令610包括字段611,用于指示DMA方式,即该DMA描述符600指示的操作,其可以为闪存读、写、擦除或者其他操作。字段612指示存储设备的逻辑地址。字段613指示该DMA描述符600的长度,即该DMA描述符600所包括的DMA数据(620、630)的个数,其可以为1个或多个。字段614指示缓冲存储器106的地址。DMA数据620、630分别包括字段621、631,用于指示DMA传输中的主机地址。DMA数据620、630还分别包括字段622、632,用于指示缓冲存储器106的地址。
DMA命令610中的字段612的存储设备的逻辑地址可用于DMA数据620、630。在DMA描述符600中仅包括一个DMA数据620的情况下,存储设备102根据字段621指示的主机地址和字段622指示的缓冲存储器地址,在主机101和存储设备102之间发起DMA传输,并最终将接收到的数据存储到由字段612所指示的闪存芯片105中。在DMA描述符600包括DMA数据620与630的情况下,存储设备102将根据DMA数据620而执行DMA传输所得的数据,最终存储在由字段612所指示的闪存芯片105中,而存储设备102还将根据DMA数据630而执行DMA传输所得的数据,最终存储在由字段612加上一预定偏移值所指示的闪存芯片105中。换句话说,DMA描述符600可以指示在主机101和存储设备102之间的多次DMA传输,每次DMA传输同DMA数据620、630中的一个相对应,每次DMA传输中传输相同数量的数据(例如4K字节),并且DMA数据620与DMA数据630所对应的DMA传输的存储设备的逻辑地址是连续的(例如,相距预定的偏移值,该偏移值可以与DMA传输的数据量相对应)。这样,可以在DMA描述符600中仅携带一个存储设备逻辑地址(字段612)。而DMA数据620与DMA数据630所对应的DMA传输的两个DMA主机地址(字段621、631)可以是不连续的,这样可以支持分散-收集(Scatter-Gather)方式的DMA传输。
在对应于DMA数据620的DMA传输中,将来自字段621所指示的DMA主机地址的数据,写入到字段622所指示的缓冲存储器106中,继而再写入到闪存芯片105中。在对应于DMA数据630的DMA传输中,将来自字段631所指示的DMA主机地址的数据,写入到字段632所指示的缓冲存储器106中,继而再写入到闪存芯片105中。
字段614是可选的。在字段614所对应的缓冲存储器地址处,作为一个例子,可保存字段613所指示的DMA描述符600的长度。从而可以记录DMA多个数据620、630所对应的DMA传输有多少已经得到执行,或者有多少尚未被执行。对于DMA描述符600,当其全部DMA数据620、630所对应的DMA传输均已执行完毕后,例如,所对应的数据均写入到闪存芯片105中后,存储设备102向主机101发送中断,以指示对DMA描述符600的执行完成。这样,对于DMA描述符600,虽然其对应于2次DMA传输过程,但仅向主机101发送一次中断。减少中断请求次数,将有助于降低主机101的工作负荷。
图7A、7B是根据本发明实施例的存储设备执行第二写入命令的流程图。第二写入命令可以是如图6所示的描述符600。参看图7A,在步骤701,存储设备102接收DMA描述符600。在DMA描述符600中包括用于主机的地址(例如,DMA主机地址621、631),用于闪存芯片105的地址(例如,存储设备逻辑地址612)以及用于缓冲存储器106的地址(例如,缓冲存储器地址622、632)。虽然在图6中的DMA描述符600包括DMA命令610、DMA数据620、630,但这仅是为了清楚表达的目的。DMA命令610、DMA数据620、630也可以组合在一起。存储设备102从DMA描述符600中提取出用于主机的地址,用于闪存芯片105的地址以及用于缓冲存储器106的地址。
在步骤702,存储设备102基于用于主机的地址和用于缓冲存储器的地址,以DMA传输方式从主机101将数据写入到缓冲存储器106。在步骤703,基于用于闪存存储器的地址和用于缓冲存储器,将在步骤702中写入到缓冲存储器中的数据,写入到闪存芯片105。
在一个例子中,在步骤702,将数据写入到缓冲存储器106之后,向主机101发送中断,以指示对DMA传输的执行完成。如果DMA描述符600中仅包括这一次DMA传输(例如,DMA描述600仅包括DMA命令610与DMA数据620),则该中断也表示对DMA描述符600的执行完成。在一个例子中,在步骤703,将数据写入到闪存芯片105之后,向主机101发送中断,以指示对DMA传输的执行完成。
参看图7B,其示出了对包含多个DMA数据(620、630)的DMA描述符600的更详细的处理过程。在步骤711,存储设备102接收DMA描述符600,DMA描述符600包括DMA命令610、DMA数据620以及DMA数据630。
在步骤712,基于DMA描述符600,将DMA数据620变换为第一DMA微指令,将DMA数据630变换为第二DMA微指令。第一DMA微指令中包括DMA主机地址621和缓冲存储器地址622。基于第一DMA微指令,还可以获得与其对应的存储设备的逻辑地址612、DMA操作类型以及DMA描述符长度613。该存储设备的逻辑地址612和DMA操作类型可以是第一DMA微指令的一部分,也可以是存储在缓冲存储器106中,并通过在第一DMA微指令中的索引来访问,还可以通过将第一DMA微指令放置在特定的操作队列(读、写、擦除、其他)中,以标识第一DMA微指令的操作类型。
作为依然另一个例子,对于第一DMA微指令,根据缓冲存储器地址622与一预定的偏移值得到存储在缓冲存储器106中的指针,基于该指针,获得存储设备的逻辑地址612和/或DMA描述符长度613。通过类似的方式,对于第二DMA微指令,根据缓冲存储器地址632与一预定偏移值得到存储在缓冲存储器106中的指针,基于该指针,获得存储设备的逻辑地址612和/或DMA描述符长度613。
在优选的实施例中,基于缓冲存储器地址614,将DMA描述符长度613存储在缓冲存储器106中,其中DMA描述符长度等同于DMA描述符600中的DMA数据的个数(或者DMA描述符600中的DMA命令与DMA数据的总计个数,从中可以得到DMA数据的个数),并通过在第一DMA微指令中的索引来访问DMA描述符长度613。这样,第一DMA微指令与第二DMA微指令的执行顺序变得不重要。每执行一个DMA微指令,将缓冲存储器106中的DMA描述符长度递减(例如,减1或减去单位长度),当缓冲存储器106中的DMA描述符长度变为0时,表示对该DMA描述符600的所有DMA操作全都执行完成。
在步骤713,对于第一DMA微指令,基于DMA主机地址621和缓冲存储器地址622,以DMA传输方式将数据写入到相应缓冲存储器106中。
在步骤714,对于第二DMA微指令,基于DMA主机地址631和缓冲存储器地址632,以DMA传输方式将相应数据写入到缓冲存储器106中。
在步骤715,向主机发送中断,以指示对DMA描述符600的操作完成。
在一个例子中,步骤713,还包括将同第一DMA微指令相对应的写入到缓冲存储器106中的数据,基于存储设备逻辑地址612,写入到闪存芯片105中。步骤714还包括将同第二DMA微指令相对应的写入到缓冲存储器106中的数据,基于存储设备逻辑地址612加上预定偏移值的和,写入到闪存芯片105中。
在优选的实施例中,在步骤713、714中,将相应数据写入到缓冲存储器106中之后,还基于在第一、第二微指令中的索引,访问存储在缓冲存储器中的DMA描述符长度613,并将DMA描述符长度613递减(例如,减1或减去单位长度)。这样,当该DMA描述符长度613变为0时,意味着对DMA描述符600的操作完成。以此方式,可以在存储设备102中同时处理多个DMA描述符600,并且第一DMA微指令与第二DMA微指令的执行顺序也是不重要的。还可以采用其他方式来识别DMA描述符600中的多个DMA数据均被执行。例如,在缓冲存储器或寄存器中为每个DMA描述符600的每个DMA数据提供标志,每当一个DMA数据(DMA微指令)被执行后,将相应的标志置位。还可以顺序执行DMA描述符600中的每个DMA数据(DMA微指令),当最后一个DMA数据(DMA微指令)被执行后,意味着对该DMA描述符600的执行完成。
在依然另一个实施例中,当DMA描述符600中的每一个DMA微指令被执行后,向主机101发送中断,并由主机驱动程序来分析对DMA描述符600的执行是否已完成。分析方法同上面所描述的存储设备102中识别DMA描述符600中的多个DMA数据是否均被执行的过程相类似。
图7C中展示了用于实施图7A、7B中的执行第二写入命令的存储设备的硬件方框图。图7C中,主机101包括PCIE控制器721和主机存储器722。主机存储器722可以是随机访问存储器(RAM),PCIE控制器721用于同存储设备经由PCIE总线进行通信。存储设备102中包括PCIE接口731、DMA指令分析器732、微指令FIFO(先进先出缓冲器)733、DMA写操作控制器734、DMA写接口735、逻辑地址到物理地址转换电路736、Flash接口控制器737、闪存芯片105以及缓冲存储器106。
PCIE接口731接收主机101通过PCIE控制器721发送的DMA描述符600。主机101与存储设备102之间的连接不限于PCIE方式,还可以通过SATA、IDE、USB、PCIE、SCSI、以太网、光纤通道等连接主机101与存储设备102。DMA指令分析器732将PCIE接口731接收到的DMA描述符600变换为DMA微指令。对于如图6所示的DMA描述符600,其中包括DMA数据620和DMA数据630,则DMA指令分析器将其变换为对应于DMA数据620的第一DMA微指令和对应于第二DMA数据630的第二DMA微指令。第一DMA微指令与第二DMA微指令的结构已在上文中详细介绍。DMA指令分析器732还从DMA描述符600的DMA命令610中提取出DMA描述符长度,并对其加以保存,可以保存在缓冲存储器106、一个寄存器或者类似物中。DMA描述符长度指示了DMA描述符600所包括的DMA数据的数量,也指示了从该DMA描述符600所得到的DMA微指令的个数。DMA指令分析器732将第一DMA微指令与第二DMA微指令存储在微指令FIFO 733中。
微指令FIFO 733能够缓存DMA微指令,并按照先进先出的方式向DMA写操作控制器734提供DMA微指令。虽然这里仅以写操作为例,描述了将与DMA写操作对应的DMA微指令缓存在微指令FIFO733中,所属领域技术人员将意识到可以将与DMA读操作对应的DMA微指令同与DMA写操作对应的DMA微指令混合缓存在微指令FIFO733。还可以将微指令FIFO733配置为两部分或多个部分,其中一部分专用于存储与DMA读操作对应的DMA微指令,而将另一部分专用于存储与DMA写操作对应的DMA微指令。
对于与DMA写操作对应的DMA微指令,例如,前面所提到的第一DMA微指令与第二DMA微指令,DMA写操作控制器734基于这些DMA微指令来执行DMA写操作。如同前面所提到的,第一DMA微指令中包括,DMA主机地址621和缓冲存储器地址622。DMA写操作控制器734利用DMA主机地址621和缓冲存储器地址622,通过DMA写接口735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址621处的数据,传输到缓冲存储器地址622所指示的位置,所传输的数据可以具有预定的长度(例如4K字节)。对于第二DMA微指令,DMA写操作控制器734执行类似的操作,将存储在DMA主机地址631处的数据,传输到缓冲存储器地址632所指示的位置。
从第一DMA微指令和第二DMA微指令可获得用于各自的存储设备的逻辑地址。在逻辑地址到物理地址转换电路736,为每条DMA微指令的存储设备的逻辑地址转换为用于闪存芯片105的物理地址。对于每一条DMA微指令,Flash接口控制器737将写入到缓冲存储器106的数据,基于逻辑地址到物理地址转换电路736所提供的物理地址,写入到闪存芯片105中。
Flash接口控制器737还基于在第一、第二微指令中的索引,访问所保存的从DMA描述符600的DMA命令610中提取出DMA描述符长度,并将DMA描述符递减(例如,减1或减去单位长度)。这样,当该DMA描述符长度变为0时,意味着对DMA描述符600的操作完成。继而,可向主机发送中断,以指示对DMA描述符600的操作完成。在一个例子中,DMA写操作控制器也访问所保存的DMA描述符长度,并确定是否已将与DMA描述符600相对应的所有数据均写入到缓冲存储器106中,并向主机发送指示所有数据已写入到缓冲存储器106的中断。
图8是根据本发明实施例的主机的软件方框图。图8是示出了主机800的软件的方框图,其同图4中展示的主机的软件方框图相类似。不同之处在于,图8中的缓冲区控制块406中还包括IO请求链表801。IO请求链表801是利用缓冲区控制块406中的存储单元(411、412……41n)组成的链表。IO请求链表801可以是单向链表、双向链表或循环链表。在生成如图6所示的DMA描述符600时,对于一个DMA描述符600,创建一个与之相对应的IO请求链表801,其中包括分别与DMA命令610、DMA数据620、DMA数据630分别相对应的存储单元(811、812、813)。需要指出的是,存储单元(811、812、813)是缓冲区控制块406的存储单元(411、412……41n)中的三个存储单元,并通过设置相应的指针,形成IO请求链表801。在图8中,将存储单元(811、812、813)与存储单元(411、412……41n)分开展示,仅仅是为了清楚地描述的需要。
图9A是根据本发明实施例的主机创建并执行第二写入命令的流程图。在一个实施例中,步骤901,由主机的存储设备驱动程序405接收IO请求。该IO请求指示将分散在主机存储器的不同物理地址的多个数据块写入到存储设备102中,为此将在主机与存储设备之间执行分散-收集DMA操作。下面将以举例的方式描述主机向存储器写入数据的操作过程。
在步骤902,结合图8,从缓冲区控制块406中取出一个空闲状态的存储单元,例如存储单元411。
在步骤904,根据IO请求的内容,创建DMA描述符600的DMA命令610,填充DMA命令610中的DMA方式字段611(在该例子中,是写操作)、存储设备逻辑地址字段612(从IO请求中可获得该信息)、DMA描述符长度字段613(从IO请求中可获得该信息)以及缓冲存储器地址字段614(与步骤902中所分配的存储单元411相对应)。继而将所创建的DMA命令610发送给存储设备102。并将存储单元411作为用于该IO请求的IO请求链表801的起始节点(例如存储单元811)。创建IO请求链表801,用于在存储设备102执行完DMA描述符600之后,将所占用的存储单元归还给缓冲区控制块406,并就该IO请求的执行完成通知应用软件或其他上层软件。为此目的,在一个例子中,还在存储单元411中存储对应于该IO请求的指针。基于DMA描述符长度,还可获得DMA数据部分的剩余长度。在生成第一个DMA数据之前,DMA数据部分的剩余长度是DMA描述符600中的DMA数据(620、630)的个数,作为一个例子,其为DMA描述符长度减1。
在步骤906,从缓冲区控制块406中取出一个空闲状态的存储单元,例如,存储单元412。根据IO请求的内容,创建DMA描述符600的DMA数据620,填充DMA数据620中的DMA主机地址字段621(从IO请求中可获得该信息)以及缓冲存储器地址622(与所分配的存储单元412相对应,例如,存储单元412在缓冲区控制块406中的偏移值或序号)。继而将所创建的DMA数据620发送给存储设备102。并将存储单元412作为用于该IO请求的IO请求链表801的节点(例如存储单元812)。
在步骤908,将DMA数据部分剩余长度递减,得到DMA描述符600中尚未发送给存储设备的DMA数据的个数。
在步骤909,如果DMA数据部分的剩余长度为0,则表示DMA描述符600的生成已经完成,进而在步骤910存储设备驱动程序405将等待存储设备102返回的表示DMA描述符600的处理已经完成的中断,并依据该中断找到与之对应的IO请求链表801,以及将IO请求链表801中的存储单元(811、812)释放。换句话说,将由IO请求链表801中的存储单元(811、812)的状态设置为空闲,从而使得通过缓冲区控制块406可以获知存储单元411、412的状态为空闲。在一个例子中,在DMA描述符600指示读操作,且主机101的CPU包括高速缓冲存储器的情况下,还通知同DMA描述符600的DMA主机地址(621、631)相关联的CPU高速缓冲存储器执行一致性处理,以反映出DMA主机地址(621、631)处的数据可能因读DMA读操作而发生变化。在一个例子中,存储设备102返回的中断中包括指示IO请求链表801中的多个存储单元(811、812)之一(或者缓冲存储器地址622、632之一)的内容,依据该内容,通过IO请求链表801将存储单元(811、812)释放。
在步骤909,如果DMA数据部分的剩余长度大于0,则表示DMA描述符600的生成尚未完成,还需要为IO请求生成一个或多个DMA数据,那么处理将返回到步骤906并重复执行步骤906、908和909。
图9B是根据本发明另一实施例的主机创建并执行第二写入命令的流程图。在该实施例中,将缓冲区控制块406中的空闲存储单元进一步组织为空闲存储单元池,以有助于DMA描述符600的创建过程。通过将缓冲区控制块406中状态为空闲的存储单元(411、412……41n)组织成链表来形成空闲存储单元池。当需要从缓冲区控制块406中获得空闲存储单元时,可以从空闲存储单元池中取出存储单元,从而省去了在缓冲区控制块406中查找空闲存储单元的开销。
在一个实施例中,步骤921,由主机的存储设备驱动程序405接收IO请求。同图9A相类似,该IO请求指示将分散在主机存储器的不同物理地址的多个数据块写入到存储设备102中,为此将在主机与存储设备之间执行分散-收集DMA操作。
在步骤922,根据IO请求的内容,计算出用于与相同该IO请求相对应的DMA描述符的长度(例如,DMA命令以及DMA数据的个数)。注意到在图9A公开的实施例中,是在步骤904创建DMA命令610的过程中获得DMA描述符长度,所属领域技术人员将意识到各个步骤并非必然以本实施例中所公开的顺序执行。
在步骤923,判断空闲存储单元池中是否为空。如果空闲存储单元池非空,即缓冲区控制块406中存在处于空闲状态的存储单元,则进行到步骤924,并从空闲存储单元池中取出一个空闲存储单元(例如存储单元411)。如果空闲存储单元池为空,意味着缓冲区控制块406中没有空闲的存储单元。则在步骤925,等待空闲存储单元池被更新,以出现空闲的存储单元。当DMA描述符的执行完成后,与之相关的存储单元会被释放,从而在空闲存储单元池中出现空闲的存储单元。后面对此会详细介绍。
在步骤926,确定当前要生成用于DMA描述符600的DMA命令字段还是DMA数据字段。一般而言,DMA描述符600包括一个DMA命令和一个或多个DMA数据。当要生成DMA命令时,处理转向步骤927,并根据IO请求的内容,创建DMA描述符600的DMA命令610,填充DMA命令610中的各个字段(611、612、613、614)。在一个例子中,还在存储单元411中存储对应于该IO请求的指针,以便在该IO请求的执行完成后,可识别该IO请求并通知应用软件或其他上层软件。当要生成DMA数据时,处理转向步骤928,并根据IO请求的内容,创建DMA描述符600的DMA数据620,填充DMA数据620的各个字段(621、622)。
接下来,在步骤929,将所生成的DMA命令或DMA数据发送给存储设备102。并在步骤930,将在步骤924中获得的存储单元411设置在IO请求链表801中。作为一个例子,第一个进入到IO请求链表801的存储单元,将作为IO请求链表801的头节点,但是,也将意识到当IO请求链表801被组织为环形链表时,其中并不存在“头节点”。在步骤930,还将DMA描述符长度递减。
在步骤931,如果DMA描述符长度为0,意味着DMA描述符600的生成已经完成,进而在步骤932存储设备驱动程序405将等待存储设备102返回的表示DMA描述符600的处理已经完成的中断,并依据该中断找到与之对应的IO请求链表801,以及将IO请求链表801中的存储单元(811、812)释放。换句话说,将由IO请求链表801中的存储单元(811、812)的状态设置为空闲,从而使得通过缓冲区控制块406可以获知存储单元411、412的状态为空闲,并将存储单元411、412放入空闲存储单元池中。在一个例子中,存储设备102返回的中断中包括指示IO请求链表801中的多个存储单元(811、812)之一的内容,依据该内容,通过IO请求链表801将存储单元(811、812)释放。
在步骤931,如果DMA描述符长度大于0,则表示DMA描述符600的生成尚未完成,还需要为IO请求生成一个或多个DMA数据,那么处理将返回到步骤923并重复执行步骤923-931。
上面结合图9A、9B描述了DMA描述符600的生成过程。DMA描述符600用于在分散-收集DMA中描述要执行的多个DMA操作,该多个DMA操作的数据来源于存储在连续或不联系的存储空间中。所属领域技术人员将容易意识到,DMA描述符600的生成方式包括但不限于上面图9A、9B中描述的具体方式。
图10A是根据本发明的实施例的在存储设备的缓冲存储器中创建链表的流程图。在如图7A-7C所公开的存储设备处理DMA描述符600的过程中,将DMA描述符600转换为一个或多个微指令。在进一步的实施例中,为了有效处理一个或多个微指令之间的关联关系(例如,这些微指令均同DMA描述符600相关联),存储设备102响应于主机101所传输的DMA描述符600,还在缓冲存储器106中建立链表,该链表将对应于同一DMA描述符600的多个微指令关联起来。
如图10A所示,在步骤1002,主机101向存储设备102发送DMA描述符600。DMA描述符600包括DMA命令610与DMA数据620、630。前面已经结合图9A与图9B而描述了主机101向存储设备102发送DMA描述符600的过程的例子。还应当意识到,在存储设备的缓冲存储器中创建链表,将有助于存储设备对IO操作的执行,特别是对多个IO操作的并发/乱序执行,多个IO操作可通过访问各自的链表而关联在一起。这样不具备关联关系的IO操作可以在存储设备中并发执行。因而,还可以响应除DMA命令之外的其他类型的IO命令或其他命令,以在存储设备中创建链表。
在步骤1004,判断所接收到的是DMA命令610还是DMA数据620、630。
如果接收到DMA命令610,在步骤1006,从其中的缓冲存储器地址字段610中提取出用于该DMA命令610的缓冲存储器地址,并基于该缓冲存储器地址,为该DMA命令610在缓冲存储器106中分配存储空间。接下来,在步骤1008,保存为该DMA命令610所分配的缓冲存储器地址,用来在为DMA数据620、630分配缓冲存储器地址时使用。
如果在步骤1004判断出所接收到的是DMA数据620,则在步骤1010,从DMA数据620的缓冲存储器地址字段622从提取出用于该DMA数据620的缓冲存储器地址,并基于该缓冲存储器地址,为该DMA数据620在缓冲存储器106中分配存储空间。并在步骤1012中,在为该DMA数据620所分配的缓冲存储器的存储空间中,存储在步骤1008中保存的DMA命令610的缓冲存储器地址。这样,在缓冲存储器106中,为DMA命令610和DMA数据620所分配的存储空间形成了链表,其中为DMA命令610所分配的存储空间是链表的头节点,为DMA数据620所分配的存储空间连接到链表的头节点。
在DMA描述符600还包括DMA数据630的情况下,通过步骤1010和步骤1012,基于DMA数据630中的缓冲存储器地址632为DMA数据630在缓冲存储器106中分配存储空间,并在为DMA数据630所分配的缓冲存储器的存储空间中,保存DMA命令610的缓冲存储器地址。所属领域技术人员将意识到,也可以在为DMA数据630所分配的缓冲存储器106的存储空间中,保存用于DMA数据620的缓冲存储器地址,从而形成不同类型的链表。在其他例子中,将缓冲存储器106中为DMA命令610、DMA数据620、630所分配的存储空间创建为循环链表或双向链表。
上面结合图7A、7B、7C已经描述了存储设备102基于DMA数据(620、630)生成DMA微指令,并保存在微指令FIFO 733中。DMA数据(620、630)生成DMA微指令的操作可以发生于步骤1012之后,并在DMA微指令中携带为DMA数据(620、630)所分配的缓冲存储器地址。
图10B是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图。同图10A所提供的实施例相比,图10B的实施例中,还将与DMA描述符的处理或执行相关的信息存储在所创建的链表中。图10C是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。图11A-11F展示出了与图10B与图10C相关联的缓冲存储器的多种状态。在图11A-11F中,1100指示缓冲存储器106中的存储空间。
具体地,在步骤1020,主机101向存储设备102发送DMA描述符600。
在步骤1022,判断所接收到的是DMA命令610还是DMA数据620、630。
如果接收到DMA命令610,在步骤1024,从缓冲存储器地址字段610中提取出缓冲存储器地址,并基于该缓冲存储器地址,为该DMA命令610在缓冲存储器106中分配存储空间。参看图11A,为DMA命令610分配存储空间1101。以及还从DMA命令610中提取出DMA描述符长度字段613,从DMA描述符长度613可以得到该DMA描述符600的DMA数据部分的长度(例如,DMA描述符长度减1)。接下来,在步骤1026,保存为该DMA命令610所分配的缓冲存储器地址,用来在为DMA数据620、630分配缓冲地址时使用。并且,将DMA数据部分的长度记录在为该DMA命令610所分配的缓冲存储器中。参看图11A,在存储空间1101中保存了DMA数据部分的长度(在这个例子中,DMA数据部分的长度为2)。
如果在步骤1022判断出所接收到的是DMA数据620,则在步骤1028,从DMA数据620的缓冲存储器地址字段622从提取出用于该DMA数据620的缓冲存储器地址,并基于该缓冲存储器地址,为该DMA数据620在缓冲存储器106中分配存储空间。参看图11B,为DMA数据620分配存储空间1112。并在步骤1030中,在为该DMA数据620所分配的缓冲存储器的存储空间1112中,存储在步骤1026中保存的DMA命令610的缓冲存储器地址。这样,在缓冲存储器106中,为DMA命令610和DMA数据620所分配的存储空间(1101与1112)形成了链表,其中为DMA命令610所分配的存储空间1101是链表的头节点,为DMA数据620所分配的存储空间1112连接到链表的头节点。还在存储空间1112中存储同DMA数据620相对应的DMA主机地址。
在DMA描述符600还包括DMA数据630的情况下,通过步骤1028和步骤1030,基于DMA数据630中的缓冲存储器地址632为DMA数据630在缓冲存储器106中分配存储空间1123(参看图11C),并在存储空间1123中,保存DMA命令610的缓冲存储器地址。以及还在存储空间1123中存储同DMA数据630相对应的DMA主机地址。
因而,在缓冲存储器106中形成了同DMA描述符600相对应的链表,其中存储空间1101是链表的头节点,存储空间1112和1123是链表的节点,并指向该链表的头节点。所属领域技术人员将意识到,也可以在为DMA数据630所分配的缓冲存储器106的存储空间1123中,保存用于DMA数据620的缓冲存储器地址,从而形成不同类型的链表。在其他例子中,将缓冲存储器106中为DMA命令610、DMA数据620、630所分配的存储空间创建为循环链表或双向链表。
图10C是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。上面结合图7A、7B、7C已经描述了存储设备102基于DMA数据(620、630)生成DMA微指令,并保存在微指令FIFO 733中。在存储设备102对DMA微指令的执行中,在一个例子中,利用在缓冲存储器106中的链表。在DMA微指令中,包括缓冲存储器地址,通过该缓冲存储器地址,可以获得为同该DMA微指令相对应的DMA数据所分配的缓冲存储器106中的存储空间,进而可以获得与该DMA数据所对应的DMA主机地址以及与该DMA数据所对应的DMA描述符中的DMA数据部分长度或DMA数据的个数。
在下面的描述中,将对应于DMA数据620的DMA微指令用第一DMA微指令指示,将对应于DMA数据630的DMA微指令用第二DMA微指令指示。
在步骤1040,从微指令FIFO733中获得将第一DMA微指令。
在步骤1042,第一DMA微指令中包括为DMA数据620所分配的缓冲存储器106的存储空间1112的地址,并从存储空间1112中获得DMA主机地址。该DMA主机地址是由DMA数据620中的DMA主机地址字段621所提供的。基于DMA主机地址,在主机101和存储设备102之间进行DMA传输,将主机101的该DMA主机地址处的预定长度(例如,4KB)的数据,以DMA方式传输到存储设备102的缓冲存储器中。对于第二DMA微指令,执行类似的操作,将主机101的由DMA数据630的DMA主机地址字段632所提供的DMA主机地址处的数据,以DMA方式传输到存储设备102的缓冲存储器的为DMA数据632所分配的存储空间1123处。在图11D中,示出了执行完第一DMA微指令与第二DMA微指令后,存储了以DMA方式传输的数据的存储空间1112和存储空间1123。
在步骤1044,继续对第一DMA微指令加以执行。通过第一DMA微指令中的存储空间1112的地址,从存储空间中取出预定长度的数据,该数据是在步骤1042中,通过DMA操作从主机101传输到缓冲存储器106的存储空间1112的。并通过闪存接口控制器(例如,图7C中的Flash接口控制器737)将该数据基于第一DMA微指令中所包括的用于闪存存储器的地址,写入到闪存芯片105。该用于闪存存储器的地址是通过DMA命令610中的存储设备逻辑地址字段612所得到的。对第二DMA微指令以类似的方式加以执行。通过第二DMA微指令中包括的存储空间1123的地址,从存储空间中取出预定长度的数据,并将该数据通过闪存接口控制器,基于第二DMA微指令中所包括的用于闪存存储器的地址,写入到闪存芯片105。第二DMA微指令中所包括的用于闪存存储器的地址,是通过DMA命令610中的存储设备逻辑地址字段612加上预定值(例如对应于DMA传输的数据的长度,在该例子中,是4KB)所得到的。在一个例子中,将DMA命令610中的存储设备逻辑地址转换为存储设备的物理地址,并基于该物理地址将数据写入到闪存芯片105中。从存储设备的逻辑地址到物理地址的映射过程,是所属领域技术人员所熟知的。
在步骤1046,继续对第一DMA微指令加以执行。通过第一DMA微指令中的存储空间1112的地址,获得为DMA命令610所分配的存储空间1101的地址,并在存储空间1101中获得DMA数据部分长度,以及将存储1101中存储的DMA数据部分长度递减(例如,减1或者减去单位长度)。参看图11E,对于第一DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由2变为1。并且,存储空间1112中不再保存存储空间1101的地址,用于表明对DMA数据620的执行已经完成。在步骤1048,由于DMA数据部分的长度不为0,意味着对DMA描述符600的操作尚未完成,因为其还包含另一个DMA数据630,此时,不进行进一步的处理。
当第二DMA微指令在步骤1046被执行时,通过第二DMA微指令中的存储空间1123的地址,获得为DMA命令610所分配的存储空间1101的地址,并在存储空间1101中获得DMA数据部分长度,以及将存储1101中存储的DMA数据部分长度递减(例如,减1或者减去单位长度)。参看图11F,对于第二DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由1变为0。并且,存储空间1123中不再保存存储空间1101的地址,用于表明对DMA数据630的执行已经完成。
此时,当第二DMA描述符在步骤1048被执行时,由于DMA数据部分的长度为0,意味着对DMA描述符600的执行已经完成。接下来,在步骤1050,向主机101发送中断,以指示对DMA描述600的执行已经完成。
再次参看图11F,存储空间1112与1123均不再保存存储空间1101的地址。存储空间1101中的DMA数据部分长度的值为0。在此情况下,意味着对DMA描述符600的执行已经完成,对存储空间1101、1112与1123均不会再加以使用,这些存储空间可以被释放以用于对其他DMA描述符的执行。在一个例子中,由主机101控制对相应存储空间的释放和再利用,在上面已结合图9A与图9B对IO请求链表801中的存储空间的释放。由于缓冲区控制块406中的存储单元(411、412……41n)与缓冲存储器106中的存储空间相对应,因而对IO请求链表801中的存储空间的释放,意味着对缓冲存储器中的存储空间1101、1112与1123的释放。
上面结合图10B、10C、11A-11F而描述了在缓冲存储器106中存储对应于第一与第二微指令的DMA主机地址的方案,从而使得DMA微指令中不必携带DMA主机地址而减少了对电路资源的占用,并通过缓冲存储器106将对应于同一DMA描述符600的第一、第二DMA微指令关联在一起的方案。所属领域技术人员将意识到,还可以将对应于第一与第二微指令的存储设备逻辑地址和/或DMA主机地址存储在缓冲存储器中,从而进一步减少DMA微指令的长度及其对电路资源的占用。
图12是根据本发明的又一实施例的存储设备的硬件方框图。与图7C中公开的相似,主机101包括PCIE控制器721和主机存储器722。存储设备102中包括PCIE接口731、DMA指令分析器732、微指令先进先出缓冲器(FIFO)733、DMA写操作控制器734、DMA写接口735、逻辑地址到物理地址转换电路736以及缓冲存储器106。存储设备102中还包括DMA读写微指令判断电路1210,DMA读接口1212,闪存控制器1221、1222、1223,闪存接口1231、1232、1233,完成控制电路1242、多路选择器1241以及多路共享器1243。闪存接口1231、1232、1233耦合于闪存芯片105。
PCIE接口731接收主机101通过PCIE控制器721发送的DMA描述符600。主机101与存储设备102之间的连接不限于PCIE方式。DMA指令分析器732将PCIE接口731接收到的DMA描述符600变换为DMA微指令。对于如图6所示的DMA描述符600,则DMA指令分析器将其变换为对应于DMA数据620的第一DMA微指令和对应于DMA数据630的第二DMA微指令。在一个例子中,第一与第二DMA微指令中分别包括指示该微指令类型(读/写/擦除/其他)的字段、指示与其对应的缓冲存储器106中的存储单元的地址的字段、指示存储设备的逻辑地址的字段。
参看图10B与图11C,DMA指令分析器732还针对DMA命令610,在缓冲存储器106中分配存储单元,并在其中存储DMA数据部分的长度。DMA指令分析器还针对DMA数据620,在缓冲存储器106中分配存储单元,并在其中存储为DMA命令610所分配的存储单元的地址,以及存储DMA数据620中的DMA主机地址。DMA指令分析器还针对DMA数据630,在缓冲存储器106中分配存储单元,并在其中存储为DMA命令610所分配的存储单元的地址,以及存储DMA数据630中的DMA主机地址。
DMA指令分析器732将第一DMA微指令与第二DMA微指令存储在微指令FIFO 733中。
微指令FIFO 733能够缓存DMA微指令,并按照先进先出的方式向DMA读写微指令判断电路1210提供DMA微指令。
在DMA读写微指令判断电路1210,判断所获得的DMA微指令的类型。对于与DMA写操作对应的DMA微指令,例如,前面所提到的第一DMA微指令与第二DMA微指令,DMA写操作控制器734基于这些DMA微指令来执行DMA写操作。DMA写操作控制器734利用第一DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,从缓冲存储器106中获得DMA主机地址,并通过DMA写接口735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址中的数据,传输到与第一DMA微指令相对应的缓冲存储器106的存储单元中,所传输的数据可以具有预定的长度(例如4K字节)。对于第二DMA微指令,DMA写操作控制器734利用与其对应的缓冲存储器106中的存储单元的地址的字段,从缓冲存储器106中获得DMA主机地址,并在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址中的数据,传输到与第二DMA微指令相对应的缓冲存储器106的存储单元中。
从第一DMA微指令和第二DMA微指令的指示存储设备的逻辑地址的字段获得用于各自的存储设备的逻辑地址。在逻辑地址到物理地址转换电路736,将每条DMA微指令的存储设备的逻辑地址转换为用于闪存芯片105的物理地址。对于每一条DMA微指令,Flash控制器1221、1222、1223基于逻辑地址到物理地址转换电路736所提供的物理地址,通过闪存接口1231、1232、1233将写入到缓冲存储器106的数据,写入到闪存芯片105中,其中,Flash控制器1221同闪存接口1231相耦合,Flash控制器1222同闪存接口1232相耦合,Flash控制器1223同闪存接口1233相耦合。而闪存接口1231、1232、1233分别耦合到各自的闪存芯片。因而对于从DMA微指令中的存储设备的逻辑地址转换得到的用于闪存芯片105的物理地址,该物理地址指示了特定的闪存芯片,并且该闪存芯片与闪存接口1231、1232、1233的特定一个相耦合。因而,基于该物理地址,可以确定使用闪存接口1231、1232、1233中的哪一个将数据写入闪存芯片,也可以确定使用Flash控制器1221、1222、1223中的哪一个。闪存接口1231、1232、1233还通过多路选择器1241与缓冲存储器相耦合。基于该物理地址,多路选择器1241将数据从缓冲存储器106传送给闪存接口1231、1232、1233中的特定一个。
闪存接口1231、1232、1233将数据写入到闪存芯片105中之后,完成控制电路1242还基于在第一、第二微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,访问缓冲存储器106,并进而访问缓冲存储器中为DMA命令610所分配的存储单元,从中获得DMA数据部分的长度,并将DMA数据部分的长度递减(例如,减1或减去单位长度)。这样,当为DMA命令610所分配的存储单元中的该DMA数据部分的长度变为0时,意味着对DMA描述符600的操作完成。继而,可向主机发送中断,以指示对DMA描述符600的操作完成。
虽然图12中以举例的方式展示了包括三个Flash控制器1221、1222、1223以及三个闪存接口1231、1232、1233的实施例,所属领域技术人员将意识到可以使用多种不同数量的Flash控制器与闪存接口,以同闪存芯片的数量相适应。
对于与DMA读操作对应的DMA微指令,DMA读写微指令判断电路1210将其直接传送给逻辑地址到物理地址转换电路736,并得到用于闪存芯片105的物理地址。Flash控制器1221、1222、1223基于该物理地址,通过闪存接口1231、1232、1233将从闪存芯片105中读出数据。并基于DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,从缓冲存储器106中获得与该DMA微指令相对应的DMA主机地址,以及经由DMA读接口1212在主机101与存储设备102之间发起DMA传输,将读出数据传输到主机101的主机RAM 722中由该DMA主机地址所指示的位置处。闪存接口1231、1232、1233经由多路共享器1243与DMA读接口1212相耦合,使得从闪存接口1231、1232、1233获得的数据均可以通过DMA读接口1212传输到主机RAM 722。当闪存接口1231、1232、1233从闪存芯片105读出数据后,完成控制电路1242也基于在DMA微指令中的指示与其对应的缓冲存储器106中的存储单元的地址的字段,访问缓冲存储器106,并进而获得DMA数据部分的长度,并将DMA数据部分的长度递减(例如,减1或减去单位长度)。这样,当该DMA数据部分的长度变为0时,意味着对该DMA描述符的操作完成。继而,可向主机发送中断,以指示对该DMA描述符的操作完成。
在图12所公开的存储设备中,可以支持对多个DMA描述符600的并发操作。对于多个DMA描述符600的每一个,通过在缓冲存储器106中创建的链表,将与一个DMA描述符600相对应的DMA数据关联在一起,使得对多个DMA微指令的操作顺序变得不重要。
上面已经详细描述了存储设备执行数据写入操作或与写操作相关的DMA描述符的执行。显然,存储设备执行读操作也可以从本发明公开中获益。例如,可以在读取命令中同时指定闪存芯片地址和缓冲存储器地址,并利用缓冲存储器作为读出数据的缓冲。也可以在与读操作相关的DMA描述符中描述缓冲存储器地址,在将数据从闪存芯片中读出后,可利用缓冲存储器作为读出数据的缓存。
已经为了示出和描述的目的而展现了对本发明的描述,并且不旨在以所公开的形式穷尽或限制本发明。对所属领域技术人员,许多调整和变化是显而易见的。

Claims (13)

1.一种将数据写入存储设备的方法,所述存储设备包括缓冲存储器和闪存存储器,所述存储设备与信息处理设备可通信地连接,所述方法包括:
从信息处理设备接收第一DMA描述符,所述DMA描述符包括用于所述信息处理设备的地址、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
当所述第一DMA描述符指示DMA写操作时,基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
2.根据权利要求1所述的方法,其中所述第一DMA描述符包括第一DMA描述符命令和第一DMA描述符数据,所述第一DMA描述符数据包括用于所述信息处理设备的地址和用于所述缓冲存储器的地址,所述第一DMA描述符命令包括用于所述闪存存储器的地址;所述方法还包括:
将所述第一DMA描述符数据变换为第一DMA微指令,所述第一DMA微指令指示用于所述闪存存储器的地址、用于所述信息处理设备的地址以及用于所述缓冲存储器的地址;
其中,当所述第一DMA微指令指示DMA写操作时,基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
3.根据权利要求1所述的方法,其中所述第一DMA描述符包括第一DMA描述符命令、第一DMA描述符数据以及第二DMA描述符数据,所述第一DMA描述符数据包括第一用于所述信息处理设备的地址和第一用于所述缓冲存储器的地址,所述第二DMA描述符数据包括第二用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址,所述第一DMA描述符命令包括用于所述闪存存储器的地址;所述方法还包括:
将所述第一DMA描述符数据变换为第一DMA微指令,将所述第二DMA描述符数据变换为第二DMA微指令,所述第一DMA微指令指示第一用于所述闪存存储器的地址、第一用于所述信息处理设备的地址以及第一用于所述缓冲存储器的地址,所述第二DMA微指令指示第二用于所述闪存存储器的地址、第二用于所述信息处理设备的地址以及第二用于所述缓冲存储器的地址,其中所述第二闪存存储器地址与所述第一闪存存储器地址相距预定偏移值;
其中,当所述第一DMA微指令指示DMA写操作时,基于第一用于所述信息处理设备的地址和第一用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;当所述第二DMA微指令指示DMA写操作时,基于第二用于所述信息处理设备的地址和第二用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第二数据写入到所述缓冲存储器;
基于第一用于所述闪存存储器的地址和第一用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器;基于第二用于所述闪存存储器的地址和第二用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第二数据,写入到所述闪存存储器。
4.根据权利要求1、2中的任何一项所述的方法,其中:
当将所述第一数据写入到所述闪存存储器之后,向所述信息处理设备发送消息,以指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
5.根据权利要求1、2、4中的任何一项所述的方法,其中:
当将所述第一数据写入到所述缓冲存储器之后,向所述信息处理设备发送消息,以指示对所述第一DMA描述符的操作完成。
6.根据权利要求3所述的方法,其中:
当将所述第一数据与所述第二数据写入到所述闪存存储器之后,向所述信息处理设备发送中断,以指示对同所述第一用于所述缓冲存储器的地址和所述第二用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
7.根据权利要求3或6所述的方法,其中:
当将所述第一数据与所述第二数据写入到所述缓冲存储器之后,向所述信息处理设备发送消息,以指示对所述第一DMA描述符的操作完成。
8.一种存储设备,所述存储设备包括缓冲存储器、闪存存储器、信息处理设备接口以及控制电路,所述存储设备与信息处理设备可通信地连接,其中:
所述信息处理设备接口从信息处理设备接收第一DMA描述符,所述第一DMA描述符包括用于所述信息处理设备的地址、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
当所述控制电路识别出所述第一DMA描述符指示DMA写操作时,基于用于所述信息处理设备的地址和用于所述缓冲存储器的地址,以DMA传输方式从所述信息处理设备将第一数据写入到所述缓冲存储器;
所述控制电路基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述第一数据,写入到所述闪存存储器。
9.一种将数据写入存储设备的方法,所述存储设备包括缓冲存储器和闪存存储器,所述存储设备与信息处理设备可通信地连接,所述方法包括:
从信息处理设备接收第一写入命令,所述第一写入命令包括要写入的数据、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
基于所述用于所述缓冲存储器的地址,将所述要写入的数据写入到所述缓冲存储器;
基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述要写入的数据,写入到所述闪存存储器。
10.根据权利要求9所述的方法,其中将所述要写入的数据写入到所述缓冲存储器后,向所述信息处理设备发送消息,以指示对所述第一写入命令的操作完成。
11.根据权利要求9、10所述的方法,其中当将所述要写入的数据写入到所述闪存存储器之后,向所述信息处理设备发送消息,以指示对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
12.根据权利要求9所述的方法,其中将所述要写入的数据写入到所述闪存存储器后,向所述信息处理设备发送消息,以指示对所述第一写入命令的操作完成以及对同所述用于所述缓冲存储器的地址的相对应的所述缓冲存储器的存储空间的释放。
13.一种存储设备,所述存储设备包括缓冲存储器、闪存存储器、信息处理设备接口以及控制电路,所述存储设备与信息处理设备可通信地连接,其中:
所述信息处理设备接口从信息处理设备接收第一写入命令,第一写入命令包括要写入的数据、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;
所述控制电路基于所述用于所述缓冲存储器的地址,将所述要写入的数据写入到所述缓冲存储器;
所述控制电路基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述要写入的数据,写入到所述闪存存储器。
CN201210150077.8A 2012-05-12 2012-05-12 将数据写入存储设备的方法与存储设备 Active CN102681952B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201210150077.8A CN102681952B (zh) 2012-05-12 2012-05-12 将数据写入存储设备的方法与存储设备
PCT/CN2013/075524 WO2013170731A1 (zh) 2012-05-12 2013-05-11 将数据写入存储设备的方法与存储设备
EP13790266.4A EP2849077B1 (en) 2012-05-12 2013-05-11 Method for writing data into storage device and storage device
US14/400,467 US9395921B2 (en) 2012-05-12 2013-05-11 Writing data using DMA by specifying a buffer address and a flash memory address

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210150077.8A CN102681952B (zh) 2012-05-12 2012-05-12 将数据写入存储设备的方法与存储设备

Publications (2)

Publication Number Publication Date
CN102681952A true CN102681952A (zh) 2012-09-19
CN102681952B CN102681952B (zh) 2015-02-18

Family

ID=46813910

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210150077.8A Active CN102681952B (zh) 2012-05-12 2012-05-12 将数据写入存储设备的方法与存储设备

Country Status (4)

Country Link
US (1) US9395921B2 (zh)
EP (1) EP2849077B1 (zh)
CN (1) CN102681952B (zh)
WO (1) WO2013170731A1 (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013170731A1 (zh) * 2012-05-12 2013-11-21 北京忆恒创源科技有限公司 将数据写入存储设备的方法与存储设备
CN104049908A (zh) * 2013-03-15 2014-09-17 希捷科技有限公司 基于动态颗粒的中间存储
CN106257434A (zh) * 2015-06-16 2016-12-28 深圳市中兴微电子技术有限公司 一种基于增强型外设互连协议总线的数据传输方法及装置
CN106469119A (zh) * 2015-08-10 2017-03-01 北京忆恒创源科技有限公司 一种基于nvdimm的数据写缓存方法及其装置
CN106575206A (zh) * 2014-09-26 2017-04-19 英特尔公司 计算机系统中的存储器写入管理
CN107085557A (zh) * 2015-11-23 2017-08-22 联发科技股份有限公司 直接存储器访问系统以及相关方法
WO2017162174A1 (zh) * 2016-03-25 2017-09-28 北京书生国际信息技术有限公司 一种存储系统
CN107797760A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 基于缓存优化写命令处理的方法、装置与驱动器
CN107797759A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 访问缓存信息的方法、装置与驱动器
TWI621946B (zh) * 2017-06-28 2018-04-21 緯創資通股份有限公司 排程方法、PCIe控制器及其相關電子系統
CN108446009A (zh) * 2018-03-10 2018-08-24 北京联想核芯科技有限公司 掉电控制方法、装置、设备及介质
CN109189759A (zh) * 2018-08-01 2019-01-11 华为技术有限公司 Kv存储系统中的数据读取方法、数据查询方法、装置及设备
CN110212983A (zh) * 2018-02-28 2019-09-06 中航光电科技股份有限公司 一种fc信号和以太网信号的转换方法及装置
CN110244907A (zh) * 2018-03-08 2019-09-17 爱思开海力士有限公司 存储器系统及该存储器系统的操作方法
CN110647480A (zh) * 2018-06-26 2020-01-03 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
CN110865952A (zh) * 2018-08-28 2020-03-06 上海天王星智能科技有限公司 利用缓存优化dma传输
CN115543219A (zh) * 2022-11-29 2022-12-30 苏州浪潮智能科技有限公司 一种对主机io处理的优化方法、装置、设备及介质
CN115904255A (zh) * 2023-01-19 2023-04-04 苏州浪潮智能科技有限公司 一种数据请求方法、装置、设备及存储介质
CN117991995A (zh) * 2024-03-26 2024-05-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103984768B (zh) * 2014-05-30 2017-09-29 华为技术有限公司 一种数据库集群管理数据的方法、节点及系统
US20170116117A1 (en) * 2015-10-26 2017-04-27 Sandisk Technologies Inc. Identifying storage descriptors based on a metric
US10423568B2 (en) * 2015-12-21 2019-09-24 Microsemi Solutions (U.S.), Inc. Apparatus and method for transferring data and commands in a memory management environment
KR20200025184A (ko) * 2018-08-29 2020-03-10 에스케이하이닉스 주식회사 불휘발성 메모리 장치, 이를 포함하는 데이터 저장 장치 및 그 동작 방법
JP7326863B2 (ja) * 2019-05-17 2023-08-16 オムロン株式会社 転送装置、情報処理装置、および、データ転送方法
CN110716934B (zh) * 2019-10-09 2022-07-26 宁波三星医疗电气股份有限公司 数据存储方法、装置和电子设备
US11023400B1 (en) * 2020-01-20 2021-06-01 International Business Machines Corporation High performance DMA transfers in host bus adapters
JP2023136082A (ja) * 2022-03-16 2023-09-29 キオクシア株式会社 メモリシステムおよび制御方法
US20240103765A1 (en) * 2022-09-28 2024-03-28 Kioxia Corporation Non-volatile storage device offloading of host tasks
US20240103731A1 (en) * 2022-09-28 2024-03-28 Kioxia Corporation Non-volatile storage device offloading of host tasks
CN117421267A (zh) * 2023-10-09 2024-01-19 中科驭数(北京)科技有限公司 数据通道防死锁方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050141318A1 (en) * 2003-12-29 2005-06-30 Jin-Yub Lee Dual chip package
US20090037652A1 (en) * 2003-12-02 2009-02-05 Super Talent Electronics Inc. Command Queuing Smart Storage Transfer Manager for Striping Data to Raw-NAND Flash Modules
CN101963891A (zh) * 2010-09-25 2011-02-02 成都市华为赛门铁克科技有限公司 数据存储处理方法与装置、固态硬盘系统与数据处理系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2002361603A1 (en) * 2001-11-09 2003-05-26 Chaparral Network Storage, Inc. Transferring data using direct memory access
CN100507886C (zh) 2005-12-22 2009-07-01 北京中星微电子有限公司 一种对非易失性存储器进行直接存储访问的方法及其装置
US7620748B1 (en) * 2006-04-06 2009-11-17 Bitmicro Networks, Inc. Hardware assisted non-volatile memory-to-input/output direct memory access (DMA) transfer
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
KR100904758B1 (ko) * 2007-02-08 2009-06-29 삼성전자주식회사 버퍼 메모리를 포함하는 플래쉬 메모리 장치 및 시스템,플래쉬 메모리 장치의 데이터 업데이트 방법
US8127089B1 (en) * 2007-02-14 2012-02-28 Marvell International Ltd. Hard disk controller which coordinates transmission of buffered data with a host
TWI385516B (zh) * 2008-08-12 2013-02-11 Phison Electronics Corp 快閃記憶體儲存系統及其資料寫入方法
US8447908B2 (en) * 2009-09-07 2013-05-21 Bitmicro Networks, Inc. Multilevel memory bus system for solid-state mass storage
US8583984B2 (en) * 2010-12-22 2013-11-12 Intel Corporation Method and apparatus for increasing data reliability for raid operations
CN102043689B (zh) 2010-12-28 2012-11-07 武汉固捷联讯科技有限公司 一种用于固态存储设备的容错设计方法
US8966184B2 (en) * 2011-01-31 2015-02-24 Intelligent Intellectual Property Holdings 2, LLC. Apparatus, system, and method for managing eviction of data
CN102681952B (zh) 2012-05-12 2015-02-18 北京忆恒创源科技有限公司 将数据写入存储设备的方法与存储设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090037652A1 (en) * 2003-12-02 2009-02-05 Super Talent Electronics Inc. Command Queuing Smart Storage Transfer Manager for Striping Data to Raw-NAND Flash Modules
US20050141318A1 (en) * 2003-12-29 2005-06-30 Jin-Yub Lee Dual chip package
CN101963891A (zh) * 2010-09-25 2011-02-02 成都市华为赛门铁克科技有限公司 数据存储处理方法与装置、固态硬盘系统与数据处理系统

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9395921B2 (en) 2012-05-12 2016-07-19 Memblaze Technology (Beijing) Co., Ltd. Writing data using DMA by specifying a buffer address and a flash memory address
WO2013170731A1 (zh) * 2012-05-12 2013-11-21 北京忆恒创源科技有限公司 将数据写入存储设备的方法与存储设备
CN104049908A (zh) * 2013-03-15 2014-09-17 希捷科技有限公司 基于动态颗粒的中间存储
CN106575206A (zh) * 2014-09-26 2017-04-19 英特尔公司 计算机系统中的存储器写入管理
CN106257434B (zh) * 2015-06-16 2019-04-30 深圳市中兴微电子技术有限公司 一种基于增强型外设互连协议总线的数据传输方法及装置
CN106257434A (zh) * 2015-06-16 2016-12-28 深圳市中兴微电子技术有限公司 一种基于增强型外设互连协议总线的数据传输方法及装置
CN106469119A (zh) * 2015-08-10 2017-03-01 北京忆恒创源科技有限公司 一种基于nvdimm的数据写缓存方法及其装置
CN107085557A (zh) * 2015-11-23 2017-08-22 联发科技股份有限公司 直接存储器访问系统以及相关方法
WO2017162174A1 (zh) * 2016-03-25 2017-09-28 北京书生国际信息技术有限公司 一种存储系统
CN107797760A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 基于缓存优化写命令处理的方法、装置与驱动器
CN107797760B (zh) * 2016-09-05 2021-06-11 北京忆恒创源科技有限公司 一种访问缓存信息的方法、装置与固态驱动器
CN107797759A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 访问缓存信息的方法、装置与驱动器
US10628358B2 (en) 2017-06-28 2020-04-21 Wiwynn Corporation Scheduling method, PCIe switch and electronic system using the same
CN109144911A (zh) * 2017-06-28 2019-01-04 纬颖科技服务股份有限公司 排程方法、PCIe控制器及其相关电子系统
TWI621946B (zh) * 2017-06-28 2018-04-21 緯創資通股份有限公司 排程方法、PCIe控制器及其相關電子系統
CN110212983B (zh) * 2018-02-28 2022-03-08 中航光电科技股份有限公司 一种fc信号和以太网信号的转换方法及装置
CN110212983A (zh) * 2018-02-28 2019-09-06 中航光电科技股份有限公司 一种fc信号和以太网信号的转换方法及装置
CN110244907A (zh) * 2018-03-08 2019-09-17 爱思开海力士有限公司 存储器系统及该存储器系统的操作方法
CN108446009A (zh) * 2018-03-10 2018-08-24 北京联想核芯科技有限公司 掉电控制方法、装置、设备及介质
CN110647480A (zh) * 2018-06-26 2020-01-03 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
CN110647480B (zh) * 2018-06-26 2023-10-13 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
CN109189759B (zh) * 2018-08-01 2021-11-19 华为技术有限公司 Kv存储系统中的数据读取方法、数据查询方法、装置及设备
CN109189759A (zh) * 2018-08-01 2019-01-11 华为技术有限公司 Kv存储系统中的数据读取方法、数据查询方法、装置及设备
CN110865952B (zh) * 2018-08-28 2022-07-29 上海忆芯实业有限公司 利用缓存优化dma传输
CN110865952A (zh) * 2018-08-28 2020-03-06 上海天王星智能科技有限公司 利用缓存优化dma传输
CN115543219A (zh) * 2022-11-29 2022-12-30 苏州浪潮智能科技有限公司 一种对主机io处理的优化方法、装置、设备及介质
CN115904255A (zh) * 2023-01-19 2023-04-04 苏州浪潮智能科技有限公司 一种数据请求方法、装置、设备及存储介质
CN117991995A (zh) * 2024-03-26 2024-05-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备
CN117991995B (zh) * 2024-03-26 2024-06-07 中国人民解放军海军潜艇学院 一种sd卡文件连续读或写控制方法、系统及存储设备

Also Published As

Publication number Publication date
WO2013170731A1 (zh) 2013-11-21
EP2849077A4 (en) 2015-12-09
CN102681952B (zh) 2015-02-18
US9395921B2 (en) 2016-07-19
US20150143031A1 (en) 2015-05-21
EP2849077A1 (en) 2015-03-18
EP2849077B1 (en) 2017-10-25

Similar Documents

Publication Publication Date Title
CN102681952B (zh) 将数据写入存储设备的方法与存储设备
CN102693198A (zh) Dma传输方法及系统
CN102799392A (zh) 存储设备及其中断控制方法
CN102789439B (zh) 控制数据传输过程中的中断的方法与存储设备
CN105993009B (zh) 通过非透明桥向PCIe集群中的计算资源传送MSI-X中断的方法和装置
US9760281B2 (en) Sequential write stream management
CN102799396B (zh) 存储设备、中断控制方法以及供电时间测量方法
US20220019365A1 (en) Apparatus, system and method for offloading data transfer operations between source and destination storage devices to a hardware accelerator
CN108153482A (zh) Io命令处理方法与介质接口控制器
CN109164976A (zh) 利用写缓存优化存储设备性能
US11985078B2 (en) Packet arbitration for buffered packets in a network device
US20190272238A1 (en) Determining memory access categories for tasks coded in a computer program
KR20220158804A (ko) 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들의 이용
CN109558250A (zh) 一种基于fpga的通信方法、设备、主机及异构加速系统
CN103345429A (zh) 基于片上ram的高并发访存加速方法、加速器及cpu
CN108228483A (zh) 处理原子写命令的方法和设备
CN109478171A (zh) 提高openfabrics环境中的吞吐量
CN102819511A (zh) 存储设备以及在该存储设备中创建链表的方法
CN108984108A (zh) 用于调度io命令的方法与固态存储设备
KR20220044849A (ko) 계층적 메모리 장치
US20220121394A1 (en) Identifying memory hotspots
KR102444562B1 (ko) 계층적 메모리 시스템
TW202340939A (zh) 因應主機丟棄命令的資料存取方法及產品電腦程式及裝置
KR20220043226A (ko) 계층적 메모리 장치
CN117472819A (zh) 基于PXIe的DMA数据传输处理方法、系统及设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Method for writing data into memory equipment and memory equipment

Effective date of registration: 20151130

Granted publication date: 20150218

Pledgee: Zhongguancun Beijing technology financing Company limited by guarantee

Pledgor: Beijing Memblaze Technology Co., Ltd.

Registration number: 2015990001067

PLDC Enforcement, change and cancellation of contracts on pledge of patent right or utility model
PC01 Cancellation of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20170502

Granted publication date: 20150218

Pledgee: Zhongguancun Beijing technology financing Company limited by guarantee

Pledgor: Beijing Memblaze Technology Co., Ltd.

Registration number: 2015990001067

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing

Patentee after: Beijing yihengchuangyuan Technology Co.,Ltd.

Address before: 312, building D, entrepreneurship Park, No. 2, Shangdi Information Road, Haidian District, Beijing 100085

Patentee before: MEMBLAZE TECHNOLOGY (BEIJING) Co.,Ltd.