控制数据传输过程中的中断的方法

文档序号:6371807阅读:624来源:国知局
专利名称:控制数据传输过程中的中断的方法
技术领域
本发明涉及固态存储设备(Solid Storage Device, SSD),更具体地,本发明涉及存储设备向主机发出的中断。
背景技术
同机械式硬盘相类似,固态存储设备(SSD)也是用于计算机系统的大容量、非易失性存储设备。固态存储设备一般以闪存(Flash)作为存储介质。在中国专利文献CN102043689A中公开了如图17所示的固态存储设备。如图17所示,为目前一般的固态存储设备的功能框图。其中主要包括主机系统1701和固态存储设备1702。其中,固态存储设备1702包括接口模块1703,固态存储处理器1704,以及以Flash颗粒1705为单位组成的Flash阵列1706。其中,接口模块1703主要用于实现与主机系统一致的接口协议,例如SATA (Serial Advanced Technology Atta chment,串行高级技术附件)、USB (Universal·Serial Bus,通用串行总线)、PCIE (Peripheral Component Interconnect Express,快速外围组件互连)、SCSI (Small Computer System Interface,小型计算机系统接口)、IDE(Integrated Drive Electro nics,集成驱动器电子)等。通过接口模块1703,固态存储设备呈现给主机系统的是一个拥有一定逻辑空间的标准存储设备。固态存储处理器1704是整个存储设备的控制核心,主要负责接口模块1703以及闪存阵列1706之间的控制信号及数据的传输、Flash管理、主机逻辑地址到Flash物理地址的转换或映射、损耗均衡(将逻辑地址映射到不同的物理地址从而防止单个Flash被过于集中地操作而提前失效)、坏块管理等。可由软件、硬件、固件或者其组合的多种方式实现固态存储处理器1704。1705为单个Flash颗粒,多个Flash颗粒1705组成Flash阵列1706。为提高固态存储设备的读、写速度,可以在固态存储设备中设置诸如DRAM或SRAM的随机访问存储器或其他类型的适于高速读/写操作的存储器,作为向闪存写入数据或从闪存读写数据时的高速缓冲存储器。在存储设备访问过程中,作为一个例子,计算机向存储设备发出SCSI (小型计算机系统接口)命令,存储设备接收并处理SCSI命令,依据SCSI命令所指示的操作执行相应的存储介质读写过程。在这一过程中,SCSI命令并不直接操作高速缓冲存储器。即,高速缓冲存储器对计算机或者用户是“透明”的。也有一些存储设备提供了高速缓冲存储器的“清洗”机制,计算机或用户可使用预定的命令强制存储设备将高速缓冲存储器中的数据写入到非易失性存储介质(例如,磁盘或者闪存)中。然而,对高速缓冲存储器的分配和管理将成为固态存储设备上的控制器的工作负担。而且当高速缓冲存储器被完全占用后,如果固态存储设备接收到来自主机系统的新的访问请求,则还需要执行对高速缓冲存储器的替换操作。这样既增加了控制器的复杂度,又会让主机经历在读/写性能上的颠簸。在主机与设备之间还可以进行DMA (Direct Memory Access,直接存储器访问)传输。在中国专利文献CN101221544A中公开了执行DMA传输的方法和设备。DMA传输的一个典型过程是分散/收集(Scatter/Gather)操作。分散/收集操作中,待传输的多个数据块存储在系统(主机)存储器的不连续的多个地址位置。处理器不需要为要从某一源移动到某一目的地的每个数据块对DMA控制器进行编程的操作。而是,处理器在系统存储器中建立描述符表或描述符链接表。描述符表或描述符链接表中包括一组描述符。每个描述符都描述了数据块移动方向、源地址、目的地地址以及可选的传输的字节数。在一个描述符中不包括传输字节数的情况下,可通过DMA方式传输约定长度的数据。中国专利文献CN101710252B中公开了避免存储设备意外断电时缓冲存储器中的数据丢失的方案。其中,在存储设备中提供备用电源,当发生意外断电时,由备用电源向存储设备提供临时的电能,用于将缓冲存储器(Cache)中的数据转存到闪存中。在美国专利文献US8031551B2公开了用电容作为存储设备的备用电源的方案,并在运行时检测电容的性能,在检测到电容容量过低时,对电容进行充电。

发明内容
因而,分担存储设备上的控制器的工作负担是有益的。通过将与存储设备的缓冲存储器有关的维护工作转移给主机,既减轻了存储设备的控制器的负载,也向主机提供了·更灵活控制存储设备的能力。然而,半导体技术发展的速度远超过作为备用电源的电容。作为备用电源的电容所提供的能量限制了可在存储设备中使用的缓冲存储器的大小。根据本发明的第一实施例,提供了一种控制数据传输过程中的中断的方法,用于在信息处理设备和存储设备之间传输数据,所述存储设备包括闪存存储器,该方法包括所述存储设备接收所述信息处理设备发送的写请求;响应于所述写请求,向所述闪存存储器中写入数据;向所述信息处理设备发送消息,以指示所述写请求的完成,并计算预定时间间隔内向所述信息处理设备发送消息的次数;其中,若所述次数大于预定阈值,则停止向所述信息处理设备发送中断。在根据本发明的第一实施例中,其中若所述次数不大于预定阈值,则允许向所述信息处理设备发送消息。在根据本发明的第一实施例中,其中所述信息处理设备可设置所述预定阈值和/或所述预定时间间隔。根据本发明的第二实施例,提供了一种存储设备,包括闪存存储器、控制电路以及接口单元,所述控制电路还包括中断控制器,所述存储设备与信息处理设备可通信地连接;所述接口单元接收信息处理设备发送的写请求;所述控制电路基于所述写请求向所述闪存存储器中写入数据;所述中断控制器向所述信息处理设备发送中断,以指示所述写请求的执行完成;所述中断控制器统计预定时间间隔内向所述信息处理设备发送的中断的次数;所述中断控制器还将所述次数同预定阈值相比较,若所述次数大于预定阈值,则抑制向所述信息处理设备发送中断。在根据本发明的第二实施例中,其中若所述中断次数不大于预定阈值,则所述中断控制器允许向所述信息处理设备发送中断。
在根据本发明的第二实施例中,其中响应于所述接口单元接收信息处理设备发送的写请求,所述控制电路缓存所述写请求。根据本发明的第三实施例,提供了一种控制数据传输过程中的中断的方法,用于在信息处理设备和存储设备之间传输数据,所述存储设备包括闪存存储器和缓冲存储器,该方法包括所述存储设备接收所述信息处理设备发送的写请求;基于所述写入请求,将数据写入所述缓冲存储器,并使计数器递增;将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;

若所述计数器小于第一预定阈值,且预定时间间隔内向所述信息处理设备发送消息的次数小于第二预定阈值,则向所述信息处理设备发送指示所述写入请求的执行完成的消息。在根据本发明的第三实施例中,其中所述计数器不小于第一预定阈值,或者预定时间间隔内向所述信息处理设备发送消息的次数不小于第二预定阈值,则不向所述信息处理设备发送指示所述写入请求的执行完成的消息。根据本发明的第四实施例,提供了一种存储设备,包括闪存存储器、缓冲存储器、控制电路以及接口单元,所述控制电路还包括中断控制器,所述存储设备与信息处理设备可通信地连接;所述接口单元接收信息处理设备发送的写请求;所述控制电路基于所述写请求,将数据写入所述缓冲存储器,并使计数器递增;所述控制电路将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;所述中断控制器统计预定时间间隔内向所述信息处理设备发送的指示所述写请求的执行完成的消息的次数;若所述计数器小于第一预定阈值,且所述次数小于第二预定阈值,所述中断控制器向所述信息处理设备发送指示所述写请求执行完成的消息。在根据本发明的第四实施例中,所述计数器不小于第一预定阈值,或者预定时间间隔内向所述信息处理设备发送消息的次数不小于第二预定阈值,则所述中断控制器不向所述信息处理设备发送指示所述写请求的执行完成的消息。在本发明的第五实施例中,提供了一种将数据写入存储设备的方法,所述存储设备包括缓冲存储器和闪存存储器,所述存储设备与信息处理设备可通信地连接,所述方法包括从信息处理设备接收第一写入命令,所述第一写入命令包括要写入的数据、用于所述闪存存储器的地址以及用于所述缓冲存储器的地址;基于所述用于所述缓冲存储器的地址,将所述要写入的数据写入到所述缓冲存储器;基于用于所述闪存存储器的地址和用于所述缓冲存储器的地址,将所述缓冲存储器中的所述要写入的数据,写入到所述闪存存储器。在本发明的第六实施例中,提供了一种在信息处理设备和存储设备之间进行DMA传输的方法,所述存储设备包括缓冲存储器和闪存芯片,所述方法包括接收第一 IO请求;为所述第一 IO请求分配第一存储单元与第二存储单元;向所述存储设备发送所述第一 DMA描述符,所述第一 DMA描述符包括DMA主机地址、用于所述存储设备的闪存芯片的地址以及第一用于缓冲存储器的地址与第二用于缓冲存储器的地址,其中,所述第一用于缓冲存储器的地址同所述第一存储单元相对应,所述第二用于缓冲存储器的地址同所述第二存储单元相对应;在所述存储设备和所述信息处理设备之间依据所述第一 DMA描述符进行DMA传输;接收来自所述存储设备的消息,所述消息指示所述存储设备对第一 DMA描述符已执行完成;·释放所述第一存储单元与所述第二存储单元。在本发明的第七实施例中,提供了一种由与信息处理设备通信的存储设备执行的方法,所述存储设备包括缓冲存储器,所述方法包括从所述信息处理设备接收第一 DMA描述符命令,所述第一 DMA描述符命令包括第一用于缓冲存储器的地址以及长度信息;在所述存储设备的缓冲存储器中基于所述第一用于缓冲存储器的地址获得第一存储单元,在所述第一存储单元中存储所述长度信息;从所述信息处理设备接收第一 DMA描述符数据,所述第一 DMA描述符数据包括第二用于缓冲存储器的地址;在所述存储设备的缓冲存储器中基于所述第二用于缓冲存储器的地址获得第二存储单元,在所述第二存储单元中记录所述第一存储单元的地址;基于所述第一 DMA描述符数据,以DMA传输方式从所述信息处理设备将第一数据写入到所述第二存储单元;基于第二存储单元中记录的所述第一存储单元的地址,访问所述第一存储单元中的长度信息,以确定DMA操作是否完成。


当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括图I是根据本发明实施例的存储设备的结构框图;图2A、2B是根据本发明实施例的写入命令的示意图;图3是根据本发明实施例的存储设备执行写入命令的方法的流程图;图4是根据本发明实施例的主机的示意图;图5是根据本发明实施例的主机执行写入操作的流程图;图6是根据本发明实施例的第二写入命令的示意图;图7A、7B是根据本发明实施例的存储设备执行第二写入命令的流程图;图7C中展示了用于实施图7A、7B中的执行第二写入命令的存储设备的结构框图8是根据本发明实施例的主机的软件方框图;图9A是根据本发明实施例的主机创建并执行第二写入命令的流程图;图9B是根据本发明另一实施例的主机创建并执行第二写入命令的流程图;图IOA是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图;图IOB是根据本发明的一实施例的在存储设备的缓冲 存储器中创建链表的流程图;图IOC是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图;图11A-11F展示出了与图10B、图IOC相关联的缓冲存储器的多种状态;图12是根据本发明的又一实施例的存储设备的结构框图;图13是根据本发明又一实施例的存储设备的结构框图;图14A是根据本发明的又一实施例的存储设备执行中断抑制的流程图;图14B是根据本发明的又一实施例的存储设备执行中断抑制的流程图;图15是根据本发明的又一实施例的存储设备执行中断抑制的流程图;图16A是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;图16B是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;图16C是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;图16D是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图;以及图17是根据现有技术的固态存储设备的结构框图。
具体实施例方式图I是根据本发明实施例的存储设备的结构框图。如图I所示的实施例包括主机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_pro grammable gate array,现场可编程门阵列)、ASIC (Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制电路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)的个数,其可以为I个或多个。字段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描述符长度递减(例如,减I或减去单位长度),当缓冲存储器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递减(例如,减I或减去单位长度)。这样,当该DMA描述符长度613变为O时,意味着对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微指令缓存在微指令FIF0733中,所属领域技术人员将意识到可以将与DMA读操作对应的DMA微指令同与DMA写操作对应的DMA微指令混合缓存在微指令FIF0733。还可以将微指令FIF0733配置为两部分或多个部分,其中一部分专用于存储与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描述符递减(例如,减I或减去单位长度)。这样,当该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描述符长度减I。在步骤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中描述的具体方式。图IOA是根据本发明的实施例的在存储设备的缓冲存储器中创建链表的流程图。在如图7A-7C所公开的存储设备处理DMA描述符600的过程中,将DMA描述符600转换为一个或多个微指令。在进一步的实施例中,为了有效处理一个或多个微指令之间的关联关系(例如,这些微指令均同DMA描述符600相关联),存储设备102响应于主机101所传输的DMA描述符600,还在缓冲存储器106中建立链表,该链表将对应于同一 DMA描述符600的多个微指令关联起来。如图IOA所示,在步骤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)所分配的缓冲存储器地址。图IOB是根据本发明的一实施例的在存储设备的缓冲存储器中创建链表的流程图。同图IOA所提供的实施例相比,图IOB的实施例中,还将与DMA描述符的处理或执行相关的信息存储在所创建的链表中。图IOC是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行DMA描述符的流程图。图11A-11F展示出了与图IOB与图IOC相关联的缓冲存储器的多种状态。在图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描述符长度减I)。接下来,在步骤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所分配的存储空间创建为循环链表或双向链表。图IOC是根据本发明的一实施例的存储设备利用在缓冲存储器中创建的链表执行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,从微指令FIF0733中获得将第一 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处。在图IID中,示出了执行完第一 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数据部分长度递减(例如,减I或者减去单位长度)。参看图11E,对于第一 DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由2变为I。并且,存储空间1112中不再保存存储空间1101的地址,用于表明对DMA数据620的执行已经完成。在步骤1048,由于DMA数据部分的长度不为0,意味着对DMA描述符600的操作尚未完成,因为其还包含另一个DMA数据630,此时,不进行进一步的处理。当第二 DMA微指令在步骤1046被执行时,通过第二 DMA微指令中的存储空间1123的地址,获得为DMA命令610所分配的存储空间1101的地址,并在存储空间1101中获得DMA数据部分长度,以及将存储1101中存储的DMA数据部分长度递减(例如,减I或者减去单位长度)。参看图11F,对于第二 DMA微指令,将存储空间1101中的DMA数据部分长度递减后,其值由I变为O。并且,存储空间1123中不再保存存储空间1101的地址,用于表明对DMA数据630的执行已经完成。此时,当第二 DMA描述符在步骤1048被执行时,由于DMA数据部分的长度为0,意味着对DMA描述符600的执行已经完成。接下来,在步骤1050,向主机101发送中断,以指示对DMA描述600的执行已经完成。再次参看图11F,存储空间1112与1123均不再保存存储空间1101的地址。存储空间1101中的DMA数据部分长度的值为O。在此情况下,意味着对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中的存储单元的地址的字段、指示存储设备的逻辑地址的字段。参看图IOB与图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数据部分的长度递减(例如,减I或减去单位长度)。这样,当为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数据部分的长度递减(例如,减I或减去单位长度)。这样,当该DMA数据部分的长度变为0时,意味着对该DMA描述符的操作完成。继而,可向主机发送中断,以指示对该DMA描述符的操作完成。在图12所公开的存储设备中,可以支持对多个DMA描述符600的并发操作。对于多个DMA描述符600的每一个,通过在缓冲存储器106中创建的链表,将与一个DMA描述符600相对应的DMA数据关联在一起,使得对多个DMA微指令的操作顺序变得不重要。上面已经详细描述了存储设备执行数据写入操作或与写操作 相关的DMA描述符的执行。显然,存储设备执行读操作也可以从本发明公开中获益。例如,可以在读取命令中同时指定闪存芯片地址和缓冲存储器地址,并利用缓冲存储器作为读出数据的缓冲。也可以在与读操作相关的DMA描述符中描述缓冲存储器地址,在将数据从闪存芯片中读出后,可利用缓冲存储器作为读出数据的缓存。图13是根据本发明又一实施例的存储设备的结构框图。图13中的存储设备同图I中的存储设备相似。其不同之处在于,其控制电路104中还包括中断控制电路1301。在进一步的实施例中,存储设备还包括备用电源1305。可以有多种方式提供备用电源1305,例如,超级电容、UPS、可充电电池等。前面已经描述了控制电路104基于图2A中的写入命令200将来自主机101的数据先写入缓冲存储器106,再写入闪存芯片105。并且,当基于命令200将数据写入缓冲存储器106之后,可向主机101发送消息或中断请求,以指示对命令200的写入操作已完成。虽然此时数据尚未被写入到闪存芯片105,但存储设备102可确保该数据将被可靠地写入到闪存芯片105。即使此时发生意外断电,备用电源1305也可提供电能将缓冲存储器106中的该数据写入到闪存芯片105。由于备用电源1305的容量可能不足以支持缓冲存储器106中的全部数据写入到闪存芯片105,因而,中断控制电路1301还监控在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过一预定阈值,而使得备用电源1305的能量无法支持将该数据量写入到闪存芯片105时,中断控制电路1301将暂时地抑制向主机101发送消息或中断的活动。由于没有接收到来自存储设备102的消息或中断,主机101会意识到存储设备102对写入命令200的执行尚未完成,这意味着,如果此时发生掉电,存储设备102不保证对写入命令200的执行将完成,写入命令200中所携带的数据可能丢失。当没有接到来自存储设备102的指示写入命令200的执行完成的消息或中断时,主机101可以认为存储设备102处于“忙”状态,而相应地暂时不向存储设备102发出进一步的写入命令。主机101也可以不等待指示写入命令200的执行完成的消息或中断,而并发或异步地向存储设备102发出其他写入命令。但主机101应当意识到,对于没有接收到指示执行完成的消息或中断的写入命令,其执行可能是没有完成的。还应当注意到的是,当主机101分配存储设备102的缓冲存储器106的情况下,指示写入命令200的执行完成的消息或中断并非意味着对缓冲存储器106的相应的存储单元的释放,因为缓冲存储器102的相应存储单元还有尚未被写入到闪存芯片105中的数据,这些存储单元依然处于被占用状态。
因而,通过中断控制电路1301检测缓冲存储器106中待写入闪存芯片105的数据量,暂时地不向主机101发送指示写入命令200的执行完成的消息或中断,确保了缓冲存储器106中的待写入闪存芯片105的数据量不会超过备用电源1305的能力。在一个例子中,中断控制电路1301维护一个计数器。当控制电路104将数据写入缓冲存储器106时,计数器递增;而当控制电路104将缓冲存储器106中的数据取出并写入闪存芯片105时,计数器递减。从而,当该计数器的值超过预定阈值时,中断控制电路1301实施中断抑制。而随着控制电路104不断地取出缓冲存储器106中的数据并写入闪存芯片105,使得计数器递减到预定阈值之下时,中断控制电路1301恢复向主机101发送指示写入命令200操作完成的消息或中断。有多种类似方式可获得缓冲存储器106中待写入闪存芯片105的数据量,如提供缓冲队列,并监视队列深度。在一个例子中,控制电路104记录写入缓冲存储器106的数据量和写入闪存芯片105的数据量,而中断控制电路1301计算二者的差值得到在缓冲存储器106中缓存的待写入闪存芯片105的数据量。预定阈值的大小可以预先设定。其与备用电源1305的电量、存储设备102的功耗等因素相关。对于特定的备用电源1305和存储设备102,可通过实验测定合适的预定阈值。·以及出于可靠性的考虑,优选地在设定阈值时,提供一定的裕度。由于电容、电池的电量会随着时间而发生变化,还可以在运行时测量备用电源1305的电量或指示该电量的参数,如在美国专利文献US8031551B2中所提到的。并建立该参数与阈值的对应关系存储在存储设备102中,用于在运行时检测备用电源1305的参数,并调整阈值。还可以通过主机101向存储设备102设置该阈值。可提供专用的阈值设置命令,由主机101发出,由存储设备102接收。在阈值设置命令中可携带要设定的阈值,也可基于该阈值设置命令引起存储设备102检测备用电源1305的指示电量的参数,并进而改变阈值设定。在一个例子中,中断控制电路1301抑制向主机101发送消息或中断的活动通过缓存要向主机101发送的消息或中断而实现。具体地,中断控制电路1301可缓存用于向主机101标识写入命令200的标识符。可选地,可以缓存写入命令200本身。还可以缓存写入命令200所指示的缓冲存储器地址204,因为该缓冲存储器地址204可向主机101指示哪个或哪些存储单元应当被释放。并且,中断控制电路1301对消息或中断的抑制,并不依赖于写入命令200中携带的缓冲存储器地址204。对于写入命令中不包括缓冲存储器地址,而由存储设备102处理缓冲存储器106的分配的情况,也可实施消息或中断抑制。这种情况下,可以缓存写入命令本身或写入命令的标识符。需要指出的是,即使中断控制电路1301抑制了向主机101发送消息或中断的活动,控制电路104依然将缓冲存储器106中的数据写入到闪存芯片105中。在发生掉电的情况下,由中断控制电路1301所缓存的消息或中断被丢弃,与之相对应的尚未被写入到闪存芯片105的数据也被丢弃,而将缓冲存储器106中已经向主机101发送了指示执行完成的消息或中断的写入命令相对应的数据写入到闪存芯片105中。还将注意到的是,当缓冲存储器106为空时,主机101可向存储设备102发出多个写入命令,并很快接收到指示写入命令完成的消息或中断。此时,主机101会体验到存储设备102具有很好的写入性能。当缓冲存储器106的空闲空间被耗尽,或由于中断控制电路1301实施了中断抑制,主机101会体验到存储设备102的写入性能迅速变差。这种性能上的颠簸是不利的,因为写入过程消耗的时间变得不可预测。
为减少颠簸,中断控制电路1301还监视一定时间期间内向主机101发出消息或中断的次数。如果在一定时间期间内发出的消息或中断次数过多,诸如超过了一定的阈值,则中断控制电路1301将抑制向主机101发送消息或中断的活动。这样,当存储设备102中的缓冲存储器106的空闲空间较多时,虽然存储设备102可以接受较多的并发的写入命令,但通过中断控制电路1301的中断抑制,而不会向主机发出过多的消息或中断。这里的实施监视的时间周期是可以由用户设置的,并且可以在运行时动态调整,而相应的阈值也是可以由用户设置的,并且可以在运行时动态调整。还将指出的是,为减少颠簸而实施的消息或中断抑制与为同备用电源的电量相适应而实施的消息或中断抑制,可以单独实施,也可以组合实施。前面已经描述了单独实施为减少颠簸而实施的消息或中断抑制以及为同备用电源的电量相适应而实施的消息或中断抑制的例子。在组合实施的例子中,中断控制电路1301检测在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过第一预定阈值时,中断控制电路1301产生第一中断抑制信号。而中断控制电路1301还监视一定时间期间内向主机101实际发出消息或中断的次数。如果在一定时间期间内发出的消息或中断次数超过了一定的第二阈值,中断控制电路1301产生第二中断抑制信号。若第一中断抑制信号或第二中断抑制信号中的·任何一者有效,则中断控制电路1301实施消息或中断抑制,例如,中断控制电路1301暂时地不向主机101发送消息或中断,而是将其缓存起来。进一步地,随着中断抑制的实施以及随着缓冲存储器106中的数据被写入闪存芯片105,在缓冲存储器106中尚未写入闪存芯片105中的数据量将小于第一阈值,从而第一中断抑制信号将变为无效;而随着中断抑制的实施以及随着时间的流逝,在一定时间期间内发出的消息或中断次数将小于第二阈值,从而第二中断抑制信号将变为无效。当第一中断抑制信号与第二中断抑制二者均变为无效后,中断控制电路1301将可以将缓存的或新产生的消息或中断发送给主机101。图14A与14B根据本发明的又一实施例的存储设备执行中断抑制的流程图。为同备用电源的电量相适应而实施消息或中断抑制。在步骤1402,存储设备102接收到来自主机101的要写入存储设备的数据。在一个例子中,该数据包含于写入命令200中。在其他例子中,该数据可通过DMA方式从主机101传输到存储设备102。在步骤1404,控制电路104将该数据写入到缓冲存储器106,并将计数器递增。计数器的值指示在缓冲存储器106中尚未被写入到闪存芯片105中的数据量。对于具有固定数据量的写入命令,对计数器的递增可以是增加单位数量,例如I。对于具有可变数据量的写入命令,对计数器的递增可以是增加与数据量相对应的数值。前面已经公开了,当将数据写入到缓冲存储器106之后,中断控制电路1301可向主机101发送消息或中断,以指示对写入命令的执行完成。而为实施中断抑制,在步骤1406,中断控制电路1301判断计数器是否小于预定阈值。如果计数器的值小于预定阈值,则执行步骤1408,中断控制电路1301向主机发送指示写入命令已经处理完成的消息或中断。在步骤1406,若中断控制电路1301发现计数器大于预定阈值,则不向主机101发送指示写入命令已执行完成的消息或中断。中断控制电路1301可通过对消息或中断的缓存来实施消息或中断抑制。继续参看图14B,其展示了与图14A所展示的方法流程图并发的另一部分方法的流程图。当缓冲存储器106中具有尚未写入闪存芯片105的数据时,控制电路104从缓冲存储器106中读出数据,步骤1410。并且,在步骤1412,控制电路104还将读出的数据写入到闪存芯片105,并且将计数器递减。计数器的递减可以是单位数量或与数据量相对应的数值。步骤1410与1412的执行是与步骤1402、1404、1406、1408的执行并行的。因而,在步骤1406,若中断控制电路1301发现计数器大于预定阈值,中断控制器1301实施中断抑制时,随着步骤1410、1412的执行,缓冲的数据被不断的写入闪存芯片105,从而计数器的值递减,并使得计数器的值将可以变得小于预定阈值。图15为根据本发明的又一实施例的存储设备102执行中断抑制的流程图。为减少颠簸而实施消息或中断抑制。在步骤1502,存储设备102接收到来自主机101的要写入存储设备的数据。在一个例子中,该数据包含于写入命令200中。在其他例子中,该数据可通过DMA方式从主机101传输到存储设备102。在步骤1504,控制电路104将该数据写入到缓冲存储器106,并将计数器递增。计数器的值指示在缓冲 存储器106中尚未被写入到闪存芯片105中的数据量。前面已经公开了,当将数据写入到缓冲存储器106之后,中断控制电路1301可向主机101发送消息或中断,以指示对写入命令的执行完成,并对发送消息或中断的次数进行计数。而为实施中断抑制,在步骤1506,中断控制电路1301判断预定时间间隔内发出的中断次数是否大于预定阈值。在一个例子中,可使用每隔一定时间产生到时信号的定时器。并监视两次到时信号之间发生的消息或中断次数。如果中断次数不大于预定阈值,则执行步骤1510,中断控制电路1301向主机发送指示写入命令已经处理完成的消息或中断。在步骤1506,若中断控制电路1301发现计数器大于预定阈值,则不向主机101发送指示写入命令已执行完成的消息或中断。中断控制电路1301可通过对消息或中断的缓存来实施消息或中断抑制。在另一个例子中,每当定时器的到时信号有效时,为计数器设定预定数值,该数值表示在下一次定时器到时信号有效前,可向主机101发出的消息或中断的数量,并且每发出一消息或中断,将该计数器递减。若在下一定时器到时信号有效前,计数器递减为0,则中断控制器1301开始实施中断抑制。在一个例子中,定时器的定时间隔和/或预定阈值可以由主机101或者控制电路104更新。还需要指出的是,中断控制器1301实施的消息或中断抑制,并不影响控制电路104将缓冲存储器106中的数据写入到闪存芯片105中。在缓冲存储器106中存在待写入的数据的情况下,控制电路104就可以与其他操作并行地将缓冲存储器106中的数据写入到闪存芯片105中。在进一步的实施例中,可将图14A、14B所展示的为同备用电源的电量相适应而实施的消息或中断抑制,与图15所展示的为减少颠簸而实施的消息或中断抑制相结合。控制电路104接收要写入存储设备102的数据,并将数据写入缓冲存储器106。中断控制电路1301检测在缓冲存储器106中且尚未写入闪存芯片105中的数据量。当该数据量超过第一预定阈值时,中断控制电路1301产生第一中断抑制信号。而中断控制电路1301还监视一定时间期间内向主机101实际发出消息或中断的次数。如果在一定时间期间内发出的消息或中断次数超过了一定的第二阈值,中断控制电路产生第二中断抑制信号。若第一中断抑制信号或第二中断抑制信号中的任何一者有效,则中断控制电路1301实施消息或中断抑制,例如,中断控制电路1301暂时地不向主机101发送消息或中断,而是将其缓存起来。进一步地,随着中断抑制的实施以及随着缓冲存储器106中的数据被写入闪存芯片105,在缓冲存储器106中且尚未写入闪存芯片105中的数据量将小于第一阈值,从而第一中断抑制信号将变为无效;而随着中断抑制的实施以及随着时间的流逝,在一定时间期间内发出的消息或中断次数将小于第二阈值,从而第二中断抑制信号将变为无效。当第一中断抑制信号与第二中断抑制二者均变为无效后,中断控制电路1301将可以将缓存的或新产生的消息或中断发送给主机101。图16A是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16A中的存储设备同图7C中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,其还包括中断控制器1601。中断控制器1601耦合到DMA写接口 735和Flash接口控制器737。如同前面所提到的,对于第一 DMA微指令,DMA写操作控制器734利用DMA主机地址621和缓冲存储器地址622,通过DMA写接口 735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址621处的数据,传输到缓冲存储器地址622所指示的位置,所传输的数据可以具有预定的长度(例如4K字节)。接下来,中断控制器 1601记录被写入到缓冲存储器106但尚未被写入到闪存芯片105中的数据量。由于每条DMA微指令对应相同数量的数据(例如4K字节),可由中断控制器1601维护计数器,并在基于第一 DMA微指令而将数据写入到缓冲存储器106时(或之后),使计数器递增单位值(例如1,对应于4K字节)。对于第二 DMA微指令,DMA写操作控制器734执行类似的操作,将存储在DMA主机地址631处的数据,传输到缓冲存储器地址632所指示的位置。基于第二 DMA微指令而将数据写入到缓冲存储器106时(或之后),依然使计数器递增单位值。前面已经公开了,对于每一条DMA微指令,Flash接口控制器737将写入到缓冲存储器106的数据,基于逻辑地址到物理地址转换电路736所提供的物理地址,写入到闪存芯片105中。接着,中断控制器1601将计数器递减单位值。在基于第一 DMA微指令或第二 DMA微指令以DMA方式将数据写入到缓冲存储器106之后,中断控制器1601检查计数器是否大于预定阈值。若计数器大于预定阈值,意味着缓冲存储器106中已经存储了过多的待写入数据。在意外掉电的情况下,存储设备102上的备用电源的电量不足以支持将这些待写入数据保存到闪存芯片105中。因而,中断控制器1601抑制向主机101发送的指示对第一 DMA微指令或第二 DMA微指令的执行完成的消息或中断。在一个例子中,当DMA描述符600所包括的第一 DMA微指令与第二 DMA微指令均执行完成,即基于第一DMA微指令和第二DMA微指令所传输的数据均写入缓冲存储器106后,闪存控制器基于计数器是否大于预定阈值而决定是否向主机101发送指示DMA描述符600执行完成的消息或中断。在意外掉电实际发生时,为中断控制器1601所抑制的消息或中断,以及与这些消息或中断所对应的DMA微指令或其DMA描述符被丢弃。而与中断控制器1601已经向主机101发送的消息或中断相对应的DMA微指令或DMA描述符所指示传输的数据,将利用备用电源而写入到闪存芯片105中。在另一个实施例中,中断控制器1601还利用另一计数器记录在一预定时间间隔内向主机101实际发送的消息或中断的数量。可通过设置一定时器来获得预定时间间隔。若在预定时间间隔内,向主机101实际发送的消息或中断的数量超出了另一阈值,则中断控制器1601抑制向主机101发送的消息或中断。在依然另一个实施例中,为同备用电源的电量相适应而实施的消息或中断抑制,与为减少颠簸而实施的消息或中断抑制相结合。当中断控制器1601检测到缓冲存储器106中的尚未写入到闪存芯片105的数据超过预定阈值,则产生第一中断抑制信号。当中断控制器1601检测到在预定时间间隔内向主机101实际发送的消息或中断的数量超出了另一预定阈值,则产生第二中断抑制信号。当第一中断抑制信号与第二中断抑制信号中的任意一者有效时,中断控制器1601实施消息或中断抑制。随着Flash接口控制器737将缓冲存储器106中的数据写入闪存芯片105,第一中断抑制信号可变为无效,随着时间的流逝以及定时器再次发出到时信号,第二中断抑制信号可变为无效。当第一中断抑制信号与第二中断抑制信号均变为无效时,中断控制器1601停止实施中断抑制,而向主机101发送所缓存的消息或中断。这里的定时器的时间周期是可以由用户设置的,并且可以在运行时动态调整,而相应的阈值(包括与缓冲存储器106中的待写入闪存芯片105的数据量相关的阈值,以及与预定时间间隔内向主机101实际发送的消息或中断的数量相关的阈值)也是可以由用户设置的,并且可以在运行时动态调整。图16B是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16B中的存储设备同图16A中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,其还包括中断缓冲存储器1613。中断缓冲存储器1613耦合到中断控制器1601。当中断控制器1601判定要执行消息或中断抑制时,其将消息或中断缓存在中断缓冲存储器1613中。在一个例子中,中断控制器将所有要发送给主机101的消息或中断均缓存·在中断缓冲存储器1613中。并且,在无需实施中断控制的情况下,从中断缓冲存储器1613中取出消息或中断,并发送给主机101。在一个例子中,在中断缓冲存储器1613中缓存的是用于向主机101标识DMA描述符600的标识符。可选地,可以缓存第一 DMA微指令和第二DMA微指令。还可以缓存缓冲存储器地址622与缓冲存储器地址632,因为该缓冲存储器地址622、632可向主机101指示DMA描述符600。在优选的实施例中,在中断缓冲缓冲器中缓存缓冲存储器地址622与缓存缓冲存储器地址632中的一个。通过在消息或中断中向主机101指示缓存缓冲存储器地址622与缓存缓冲存储器地址632中的一个,参照图9A、图9B中公开的实施例,主机101可得到与之对应的IO请求链表,并因而获知哪个IO请求被完成。在另一个实施例中,可不设置中断缓冲存储器1613,而作为替代,在缓冲存储器106中缓存要发送给主机101的消息或中断。图16C是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16C中的存储设备同图16A中的存储设备相似,用于执行根据图6所展不的DMA描述符600。其不同之处在于,中断控制器1602不是耦合到DMA写接口 735而是耦合到DMA写操作控制器734和Flash接口控制器737。如同前面所提到的,对于第一 DMA微指令,DMA写操作控制器734利用DMA主机地址621和缓冲存储器地址622,通过DMA写接口 735在主机101和存储设备102之间发起DMA写操作,将存储在DMA主机地址621处的数据,传输到缓冲存储器地址622所指示的位置,所传输的数据可以具有预定的长度(例如4K字节)。接下来,中断控制器1602记录被写入到缓冲存储器106但尚未被写入到闪存芯片105中的数据量。由于每条DMA微指令对应相同数量的数据(例如4K字节),可由中断控制器1602维护计数器,并在基于第一 DMA微指令而将数据写入到缓冲存储器106时(或之后),使计数器递增单位值(例如1,对应于4K字节)。对于第二 DMA微指令,DMA写操作控制器734执行类似的操作,将存储在DMA主机地址631处的数据,传输到缓冲存储器地址632所指示的位置。基于第二 DMA微指令而将数据写入到缓冲存储器106时(或之后),依然使计数器递增单位值。前面已经公开了,对于每一条DMA微指令,Flash接口控制器737将写入到缓冲存储器106的数据,基于逻辑地址到物理地址转换电路736所提供的物理地址,写入到闪存芯片105中。接着,中断控制器1602将计数器递减单位值。当中断控制器1602判定要执行消息或中断抑制时,中断控制器1602指示DMA写操作控制器734暂停从微指令FIF0733中获取DMA微指令的操作。以此方式,将尚未被执行的DMA微指令缓存在FIF0733中。而对应已经通过DMA写操作控制器734和DMA写接口735而被执行的DMA微指令,中断控制器1602向主机101发送指示这些DMA微指令被执行完成的消息或中断。或者,在一个例子中,当一个DMA描述符所对应的全部DMA微指令均已经通过DMA写操作控制器734和DMA写接口 735而被执行后,中断控制器1602向主机101发送指示这些DMA微指令或该DMA描述符被执行完成的消息或中断。当随着缓冲存储器106中的数据被写入到闪存芯片105,中断控制器1602判定无需再实施中断抑制时,其指示DMA写操作控制器从微指令FIF0733中获取DMA微指令并执行。当掉电实际发生时,微指令FIF0733中的微指令被丢弃,而与中断控制器1602已经向主机101发送的消息或中断相对应的DMA微指令或DMA描述符所指示传输的数据,将利用备用电源而写入到闪存芯片105中。
·
在另一个实施例中,中断控制器1602也维护定时器来监视一定时间间隔内向主机101发送的消息或中断的数量。当一定时间间隔内向主机101发送的消息或中断的数量超过阈值时,中断控制器1602抑制向主机101发送消息或中断的活动,即指示DMA写操作控制器734暂停从微指令FIF0733中获取DMA微指令。在依然另一个实施例中,在中断控制器1602中,为同备用电源的电量相适应而实施的消息或中断抑制,与为减少颠簸而实施的消息或中断抑制相结合。图16D是根据本发明的又一实施例的执行中断抑制的存储设备的结构框图。图16D中的存储设备同图12中的存储设备相似,用于执行根据图6所展示的DMA描述符600。其不同之处在于,还包括中断控制器1603。中断控制器1603耦合到DMA写操作控制器734以及Flash接口 1231、Flash接口 1232 (未示出)、Flash接口 1233 (未示出)。中断控制器1603为同Flash接口 1231相耦合的闪存芯片设置第一计数器,为同Flash接口 1232相耦合的闪存芯片设置第二计数器,为同Flash接口 1233相耦合的闪存芯片设置第三计数器。在Flash接口 1231、1232、1233的每一个分别耦合了多个闪存芯片或闪存管芯的情况下,可为同Flash接口 1231、1232、1233的每一个所耦合的多个闪存芯片或闪存管芯分别设置与之对应的计数器。在为同备用电源的电量相适应而实施消息或中断抑制时,优选地针对同Flash接口 1231、1232、1233相耦合的多个闪存芯片或管芯分别监控其待写入的数据量。作为举例,在一个实施例中,Flash接口 1231、1232、1233的每一个均同一个闪存芯片相耦合,而每个闪存芯片上包括一个闪存管芯,第一计数器、第二计数器与第三计数器分别对应于与Flash接口 1231相耦合的闪存芯片或管芯、与Flash接口 1232相耦合的闪存芯片或管芯以及与Flash接口 1233相耦合的闪存芯片或管芯。对于Flash接口 1231、1232、1233的每一个均耦合到多个闪存芯片或管芯的情况,可采用类似的方式实施。当在DMA写控制器734的控制下,执行DMA微指令,并通过DMA写接口 735在主机101和存储设备102之间发起DMA操作,将数据以DMA方式写入缓冲存储器106后,中断控制器1603通过DMA写操作控制器734获得该DMA微指令所对应的用于闪存芯片105的逻辑地址,并进而获得与该逻辑地址相对应用于闪存芯片105的物理地址,从而确定该DMA微指令的数据将写入的闪存芯片或管芯,并将与为该闪存芯片或管芯而设置的计数器(例如,第二计数器)递增。中断控制器1603也可采用其他方式获得与DMA微指令相对应的用于闪存芯片105的物理地址。当Flash接口 1231、1232、1233之一(例如Flash接口 1232)将数据写入到与其耦合的闪存芯片105时,指示中断控制器1603将对应于写入数据的闪存芯片或管芯的计数器(在该例子中,第二计数器)递减。当第一计数器、第二计数器和第三计数器中的任何一个超过预定阈值时,中断控制器1603实施中断抑制。当第一计数器、第二计数器和第三计数器均未超过预定阈值时,中断控制器1603解除中断抑制。还将意识到,对应于第一计数器、第二计数器与第三计数器的预定阈值可以彼此不同,以同与其相对应的各个闪存芯片或管芯相适应。在另一个实施例中,中断控制器1603也维护定时器来监视一定时间间隔内向主机101发送的消息或中断的数量。当一定时间间隔内向主机101发送的消息或中断的数量超过阈值时,中断控制器1603抑制向主机101发送消息或中断的活动,即指示DMA写操作控制器734暂停从微指令FIF0733中获取DMA微指令。在依然另一个实施例中,在中断控制器1603中,为同备用电源的电量相适应而实·施的消息或中断抑制,与为减少颠簸而实施的消息或中断抑制相结合。前面已经提到,存储设备102可以支持对多个DMA描述符600的并发操作。对于多个DMA描述符600的每一个,通过在缓冲存储器106中创建的链表,将与一个DMA描述符600相对应的DMA数据关联在一起,使得对多个DMA微指令的操作顺序变得不重要。在中断控制器1603向主机101发送的消息或中断,可以指示对DMA微指令的执行完成,也可指示对与DMA微指令相关联的DMA描述符的执行完成。已经为了示出和描述的目的而展现了对本发明的描述,并且不旨在以所公开的形式穷尽或限制本发明。对所属领域技术人员,许多调整和变化是显而易见的。
权利要求
1.一种控制数据传输过程中的中断的方法,用于在信息处理设备和存储设备之间传输数据,所述存储设备包括闪存存储器,该方法包括 所述存储设备接收所述信息处理设备发送的写请求; 响应于所述写请求,向所述闪存存储器中写入数据; 向所述信息处理设备发送消息,以指示所述写请求的完成,并计算预定时间间隔内向所述信息处理设备发送消息的次数; 其中,若所述次数大于预定阈值,则停止向所述信息处理设备发送消息。
2.根据权利要求I所述的方法,其中若所述次数不大于预定阈值,则允许向所述信息处理设备发送消息。
3.根据权利要求I或2所述的方法,其中所述信息处理设备可设置所述预定阈值和/或所述预定时间间隔。
4.一种存储设备,包括闪存存储器、控制电路以及接口单元,所述控制电路还包括中断控制器,所述存储设备与信息处理设备可通信地连接; 所述接口单元接收信息处理设备发送的写请求; 所述控制电路基于所述写请求向所述闪存存储器中写入数据; 所述中断控制器向所述信息处理设备发送中断,以指示所述写请求的执行完成; 所述中断控制器统计预定时间间隔内向所述信息处理设备发送的中断的次数; 所述中断控制器还将所述次数同预定阈值相比较,若所述次数大于预定阈值,则抑制向所述信息处理设备发送中断。
5.根据权利要求4所述的存储设备,其中若所述中断次数不大于预定阈值,则所述中断控制器允许向所述信息处理设备发送中断。
6.根据权利要求4所述的存储设备,其中响应于所述接口单元接收信息处理设备发送的写请求,所述控制电路缓存所述写请求。
7.—种控制数据传输过程中的中断的方法,用于在信息处理设备和存储设备之间传输数据,所述存储设备包括闪存存储器和缓冲存储器,该方法包括 所述存储设备接收所述信息处理设备发送的写请求; 基于所述写请求,将数据写入所述缓冲存储器,并使计数器递增;将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;若所述计数器小于第一预定阈值,且预定时间间隔内向所述信息处理设备发送消息的次数小于第二预定阈值,则向所述信息处理设备发送指示所述写请求的执行完成的消息。
8.根据权利要求7所述的方法,其中所述计数器不小于第一预定阈值,或者预定时间间隔内向所述信息处理设备发送消息的次数不小于第二预定阈值,则不向所述信息处理设备发送指示所述写请求的执行完成的消息。
9.一种存储设备,包括闪存存储器、缓冲存储器、控制电路以及接口单元,所述控制电路还包括中断控制器,所述存储设备与信息处理设备可通信地连接; 所述接口单元接收信息处理设备发送的写请求; 所述控制电路基于所述写请求,将数据写入所述缓冲存储器,并使计数器递增; 所述控制电路将所述缓冲存储器中的所述数据取出并写入所述闪存存储器,并使所述计数器递减;所述中断控制器统计预定时间间隔内向所述信息处理设备发送的指示所述写请求的执行完成的消息的次数; 若所述计数器小于第一预定阈值,且所述次数小于第二预定阈值,所述中断控制器向所述信息处理设备发送指示所述写请求执行完成的消息。
10.根据权利要求9所述的存储设备,所述计数器不小于第一预定阈值,或者预定时间间隔内向所述信息处理设备发送消息的次数不小于第二预定阈值,则所述中断控制器不向所述信息处理设备发送指示所述写请求的执行完成的消息。
全文摘要
一种控制数据传输过程中的中断的方法,用于在信息处理设备和存储设备之间传输数据,所述存储设备包括闪存存储器,该方法包括所述存储设备接收所述信息处理设备发送的写请求;响应于所述写请求,向所述闪存存储器中写入数据;向所述信息处理设备发送消息,以指示所述写请求的完成,并计算预定时间间隔内向所述信息处理设备发送消息的次数;其中,若所述次数大于预定阈值,则停止向所述信息处理设备发送中断。
文档编号G06F13/28GK102789439SQ20121020477
公开日2012年11月21日 申请日期2012年6月16日 优先权日2012年6月16日
发明者殷雪冰, 路向峰 申请人:北京忆恒创源科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1