專利名稱:存儲設備、中斷控制方法以及供電時間測量方法
技術領域:
本發明涉及固態存儲設備(Solid Storage Device, SSD),更具體地,本發明涉及存儲設備向主機發出的中斷。
背景技術:
同機械式硬盤相類似,固態存儲設備(SSD)也是用于計算機系統的大容量、非易失性存儲設備。固態存儲設備一般以閃存(Flash)作為存儲介質。在中國專利文獻CN102043689A中公開了如圖17所示的固態存儲設備。如圖17所示,為目前一般的固態存儲設備的功能框圖。其中主要包括主機系統1701和固態存儲設備1702。其中,固態存儲設備1702包括接口模塊1703,固態存儲處理器1704,以及以Flash顆粒1705為單位組成 的Flash陣列1706。其中,接口模塊1703主要用于實現與主機系統一致的接口協議,例如SATA (Serial Advanced Tec hnology Attachment,串行高級技術附件)、USB (UniversalSerial Bus,通用串行總線)、PCIE (Peripheral Component Interconnect Express,快速外圍組件互連)、SCSI (Small Compu ter System Interface,小型計算機系統接口)、IDE(Integrated Drive Electronics,集成驅動器電子)等。通過接口模塊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公開了用電容作為存儲設備的備用電源的方案,并在運行時檢測電容的性能,在檢測到電容容量過低時,對電容進行充電。中國專利文獻CN101483480A中公開了檢測主板電壓不存在時,產生報警信號以指示電源掉電。以及在中國專利文獻CN101467212A中公開了基于電力來源的不同,存儲設備選擇不同的工作模式。
發明內容
然而,半導體技術發展的速度遠超過作為備用電源的電容。作為備用電源的電容所提供的能量限制了可在存儲設備中使用的緩沖存儲器的大小。并且,計算機或者類似的信息處理設備的電源或供電電路在斷電后,或者計算機向外圍設備指示掉電事件后,其向外圍設備提供的電力并非立刻完全停止。由于電源或主板等電路中諸如電容的儲能元件的存在,在掉電后,儲能兀件中的電能將向外釋放。然而,在現有技術中,這部分能量將被忽略。通過本發明的技術方案,將使得外圍設備能夠在檢測到計算機掉電后,充分利用計算機或類似的信息處理設備中的剩余電路,延長外圍設備的工作時間。并且,對這部分能量的利用還意味著提升了備用電源的容量,進而,可以在存儲設備上使用更大的緩沖存儲器或使用更大的緩沖存儲器的存儲空間。在本發明的第一實施例中,提供了一種存儲設備的中斷控制方法,所述存儲設備包括閃存存儲器以及緩沖存儲器,所述方法包括從信息處理設備接收要寫入存儲設備的數據;將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器;將所述緩沖存儲器中的數據取出并寫入所述閃存存儲器;其中,在將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器后,若所述緩沖存儲器中的數據量小于預定閾值,則向所述信息處理設備發送指示寫操作完成的消息;所述方法還包括檢測到所述信息處理設備的電源掉電而啟動計時器,當所述信息處理設備的電源向所述存儲設備提供的電壓小于預定電壓閾值時停止計時器,根據所述計時器的計時時間修改所述預定閾值。根據本發明第一實施例的方法,還包括所述存儲設備從所述信息處理設備接收唯一標識所述信息處理設備的第一標識符,若所述第一標識符與所述存儲設備中存儲的第二標識符相同,則根據所述計時器的計時時間修改所述預定閾值。根據本發明第一實施例的方法,若所述第一標識符與所述存儲設備中存儲的第二標識符不同,則將所述預定閾值設置為默認值;以及在所述存儲設備中存儲所述第一標識符以替換所述第二標識符。根據本發明第一實施例的方法,還包括存儲所述計時器的計時時間。根據本發明第一實施例的方法,其中在所述信息處理設備啟動時,所述存儲設備從所述信息處理設備接收唯一標識所述信息處理設備的第一標識符,若所述第一標識符與所述存儲設備中存儲的第二標識符相同,則根據所存儲的所述計時器的計時時間修改所述預定閾值。根據本發明第一實施例的方法,其中所述存儲設備接收到將所述預定閾值設置為默認值的指示,將所述預定閾值設置為默認值,并清除所存儲的所述計時器的計時時間。根據本發明第一實施例的方法,還包括根據所述計時器的計時時間而確定所述預 定閾值,并存儲所述預定閾值。根據本發明第一實施例的方法,其中在將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器后,若所述緩沖存儲器中的數據量不小于預定閾值,則不向所述信息處理設備發送指示寫操作完成的消息。根據本發明第一實施例的方法,其中所述預定閾值對應于利用所述存儲設備的備用電源能夠可靠地從所述緩沖存儲器中取出并寫入所述閃存存儲器的數據量。根據本發明的第二實施例,提供了一種存儲設備的中斷控制方法,所述存儲設備包括閃存存儲器以及緩沖存儲器,所述方法包括從信息處理設備接收寫入請求;基于所述寫入請求,將數據寫入所述緩沖存儲器,并使計數器遞增;將所述緩沖存儲器中的所述數據取出并寫入所述閃存存儲器,并使所述計數器遞減;其中,若所述計數器小于預定閾值,則向所述信息處理設備發送指示所述寫入請求處理完成的消息;所述方法還包括檢測到所述信息處理設備的電源掉電而記錄所述計數器的第一值,當所述信息處理設備的電源向所述存儲設備提供的電壓小于預定電壓閾值時記錄所述計數器的第二值,根據所述第一值與所述第二值的差而修改所述預定閾值。根據本發明的第三實施例,提供了一種存儲設備,所述存儲設備包括緩沖存儲器、閃存存儲器、信息處理設備接口以及控制電路,所述控制電路還包括計數器以及中斷控制器,所述存儲設備與信息處理設備可通信地連接,其中所述信息處理設備接口從信息處理設備接收寫入請求;所述控制電路基于所述寫入請求,將數據寫入所述緩沖存儲器,并使所述計數器遞增;所述控制電路將所述緩沖存儲器中的所述數據取出并寫入所述閃存存儲器,并使所述計數器遞減;在所述計數器小于預定閾值的情況下,所述中斷控制器向所述信息處理設備發送指示所述寫入請求處理完成的消息;所述控制電路確定所述信息處理設備的電源處于掉電狀態時,啟動定時器;所述控制電路確定所述信息處理設備的電源提供的電壓小于預定電壓閾值時,停止所述定時器,并根據所述計時器的計時時間修改所述預定閾值。
根據本發明的第四實施例,提供了一種存儲設備,所述存儲設備包括緩沖存儲器、閃存存儲器、信息處理設備接口以及控制電路,所述控制電路還包括計數器以及中斷控制器,所述存儲設備與信息處理設備可通信地連接,其中所述信息處理設備接口從信息處理設備接收要寫入存儲設備的數據;所述控制電路將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器;所述控制電路將所述緩沖存儲器中的數據取出并寫入所述閃存存儲器;在將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器后,若所述緩沖存儲器中的數據量小于預定閾值,則所述中斷控制器向所述信息處理設備發送指示寫操作完成的消息;所述控制電路確定所述信息處理設備的電源處于掉電狀態時,啟動定時器;所述 控制電路確定所述信息處理設備的電源提供的電壓小于預定電壓閾值時,停止所述定時器,并根據所述計時器的計時時間修改所述預定閾值。根據本發明的第五實施例,提供了一種測量電源掉電后的供電時間的方法,包括響應于檢測到所述電源掉電而啟動定時器;檢測所述電源提供的電壓,當所述電壓小于預定電壓閾值時,停止計時器;存儲所述計時器的計時時間作為所述電源掉電后的供電時間。根據本發明的第五實施例的方法,還包括存儲多次測量的電源掉電后的供電時間,并基于所述多次測量的電源掉電后的供電時間,得到估計的所述電源掉電后的供電時間。
當連同附圖閱讀時,通過參考后面對示出性的實施例的詳細描述,將最佳地理解本發明以及優選的使用模式和其進一步的目的和優點,其中附圖包括圖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是根據現有技術的固態存儲設備的結構框圖;圖18A是根據本發明的一個實施例的外圍設備的供電電路的原理圖;圖18B是根據本發明的一個實施例的外圍設備的供電電路的原理圖;圖18C是根據本發明的一個實施例的外圍設備的供電電路的原理圖;圖19A、19B、19C、19D和19E分別示出了本發明的供電電路中的控制電路的實施例;圖20A是根據本發明的實施例確定緩沖區數據量閾值的方法的流程圖;圖20B是根據本發明的另一實施例的確定緩沖區數據量閾值的方法的流程圖;以及圖21是根據本發明的實施例的設置緩沖區數據量閾值的方法的流程圖。
具體實施例方式圖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-programmable 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變為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微指令存儲在微指令FIF0733中。微指令FIF0733能夠緩存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微指令,并保存在微指令FIF0733中。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微指令,并保存在微指令FIF0733中。在存儲設備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微指令存儲在微指令FIF0733中。微指令FIF0733能夠緩存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的主機RAM722中由該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的指示電量的參數,并進而改變閾值設定。結合圖18-21,也提供了根據本發明實施例的改變閾值設定的方案。在一個例子中,中斷控制電路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描述符的執行完成。 供電電路、供電方法以及主機供電能力測量主機的電源或供電電路在斷電后,或者計算機向外圍設備指示掉電事件后,其向外圍設備提供的電力并非立刻完全停止。由于電源或主板等電路中諸如電容的儲能元件的存在,在掉電后,儲能元件中的電能將向外釋放。在圖18A-18C中提供了布置于存儲設備中的供電電路,而在圖19A-19E中提供了供電電路中的控制電路的多種布置。圖18A是根據本發明的一個實施例的外圍設備的供電電路的原理圖。如圖18A所示的實施例包括主機1800以及同主機1800相耦合的存儲設備1810。主機1800同存儲設備1810之間可通過多種方式相耦合,耦合方式包括但不限于通過例如SATA、IDE、USB、PCIE、SCSI、以太網、光纖通道、無線通信網絡等連接主機1800與存儲設備1810。主機1800可以是能夠通過上述方式同存儲設備相通信的信息處理設備,例如,個人計算機、平板電腦、月艮務器、便攜式計算機、網絡交換機、路由器、蜂窩電話、個人數字助理等。所屬領域技術人員將意識到,其他類型的外圍設備,諸如網絡適配器、圖形適配器等也可采用本發明所提供的供電電路。主機1800包括電源1802,用于向主機中的各個電子部件及連接到主機1800的存儲設備1810提供電力。在主機1800的電源、主板等電子部件中,還包括諸如電容1804的儲能元件。在主機1800的儲能元件可以有一個或多個,這里為了清楚地目的,而展示為電容1804。電容1804耦合在電源1802的輸出端和地之間。
存儲設備1810的供電電路從主機中接收電力,并供給負載1880。在存儲設備1810中,負載1880可以是閃存存儲器以及存儲器控制電路。存儲設備1810的供電電路包括二極管1814、N溝道MOSFET (金屬氧化物半導體場效應晶體管)1816以及控制電路1818。二極管1814的陽極耦合到電源1802的輸出端,二極管1814的陰極耦合到負載1880。二極管1814形成了向負載1880供電的供電通路1823。N溝道MOSFET 1816的源極耦合到電源1802的輸出端,N溝道MOSFET 1816的漏極耦合到負載1880,用于向負載1880提供電力。控制電路1818耦合到N溝道M0SFET1816的柵極,用于控制N溝道MOSFET 1816的閉合或斷開。N溝道MOSFET 1816作為一開關而工作,并形成了向負載1880供電的供電通路1821。例如,N溝道MOSFET 1816的源極作為開關的輸入端,而N溝道MOSFET 1816的漏極作為開關的輸出端,而N溝道MOSFET 1816的柵極作為控制端用于控制開關的閉合與斷開。所屬領域技術人員將意識到,可以采用其他形式的開關以形成供電通路1821,其他形式的開關包括但不限于諸如三級管的PN結形態的開關,也可以諸如繼電器的機械式開關。控制電路1818基于電源1802的輸出電壓或者來自主機1800的其他信號,而對N溝道M0SFET1816的閉合或斷開進行控制。在電源1802正常工作時,其輸出電壓大于或等于 預定電壓。控制電路1818檢測電源1802的輸出電壓,在所檢測的輸出電壓大于或等于預定電壓時,控制電路1818向N溝道MOSFET 1816輸出控制信號,以使N溝道MOSFET 1816閉合。在此情況下,來自主機1800的電源1802的電力通過N溝道MOSFET 1816被施加給負載1880。在優選的實施例中,選取二極管1814,使得其導通電阻大于N溝道MOSFET 1816的導通電阻,從而在電源1802正常工作時,電力通過供電通路1821被提供給負載1880,而不是通過供電通路1823被提供給負載1880。顯然,也可以選擇N溝道MOSFET 1816,使其導通電阻大于二極管1814的導通電阻;或者協同考慮二極管1814和N溝道MOSFET 1816的選取,以使得N溝道M0SFET1816的導通電阻小于二極管1814的導通電阻。所屬領域技術人員還將意識到,二極管1814和N溝道MOSFET 1816可以同時導通,從而同時通過供電通路1821、1823向負載1880提供電力。在掉電時,由于電容1804的存在,電源1802輸出的電壓逐漸下降。當電源1802的輸出電壓下降到預定電壓之下時,其意味著主機1800掉電,電源1802將無法繼續有效地為存儲設備1810提供電力。控制電路1818基于對電源1802的輸出電壓小于預定電壓的檢測,向N溝道MOSFET 1816輸出控制信號,以斷開N溝道MOSFET 1816。雖然此時電源1802的輸出電壓小于預定電壓,但其能夠使得二極管1814導通,從而存儲在電容1804中的電力可通過供電通路1823被提供給負載1880。在另一個實施例中,主機1800在發生掉電時,或者主機1800將停止向存儲設備1810提供電力時(例如,由于休眠),主機1800將向存儲設備1810發出消息以指示掉電事件的發生。控制電路1818可基于對來自主機1800的掉電事件的接收和識別,而向N溝道MOSFET1816輸出控制信號,以斷開N溝道MOSFET 1816。在進一步的實施例中,控制電路1818在識別主機1800掉電后,啟動計時器。控制電路1818維持該計時器計時,直到檢測到在供電通路1823上提供給負載1880的電壓小于可維持負載1880正常工作的電壓閾值。記錄并保存計時器的計時時間,該計時時間對應于利用主機電容1804的電量可維持負載1880正常工作的時間。在另一個實施例中,為提高可靠性,可在檢測到供電通路1823上提供給負載1880的電壓小于可維持負載1880正常工作的電壓閾值之上的電壓值時停止計時,從而為向負載1880的供電提供裕度。返回參看圖13,中斷控制電路1301監控在緩沖存儲器106中且尚未寫入閃存芯片105中的數據量。當該數據量超過一預定閾值,而使得備用電源1305的能量無法支持將該數據量寫入到閃存芯片105時,中斷控制電路1301將暫時地抑制向主機101發送消息或中斷的活動。而利用在圖18A中提供的供電電路,由于可利用在主機的電容1804中存儲的電量,因而在掉電后,可支持將緩沖存儲器106中的更多數量的數據寫入到閃存芯片105中。因而,基于計時器測量的計時時間,修改中斷控制電路1301所監視的預定閾值。使得在存儲設備正常工作時,可以利用更大的緩沖存儲器106,從而獲得更好的性能。計時時間與緩沖存儲器106的預定閾值的增量的對應關系可通過實驗獲得,并以擬合函數或者查找表等形式存儲在存儲設備1810中。從而,存儲設備1810在獲得了計時器的計時時間后,可更新中斷控制電路1301所監視的緩沖存儲器106的預定閾值。類似地,返回參看圖16A、圖16B,可更新中斷控制器1601所監視的用于緩沖存儲器106中的尚未寫入到閃存芯片105的數據量的預定閾值;返回參看圖16C,可更新中斷控制器1602所監視的用于緩沖存儲器106中的尚未寫入到閃存芯片105的數據量的預定閾值;以及返回參看圖16D,可更新中斷控制 器1603所監視的對應于Flash接口 1231、1232、1233的每一個的用于緩沖存儲器106中的尚未寫入到閃存芯片105的數據量的預定閾值。依然參看圖13,在一個例子中,中斷控制電路1301維護一個計數器。當控制電路104將數據寫入緩沖存儲器106時,計數器遞增;而當控制電路104將緩沖存儲器106中的數據取出并寫入閃存芯片105時,計數器遞減。從而,當該計數器的值超過預定閾值時,中斷控制電路1301實施中斷抑制。在控制電路1818 (圖18A)在識別主機1800掉電后,記錄中斷控制電路1301維護的計數器的第一計數值。而在檢測到在供電通路1823上提供給負載1880的電壓小于可維持負載1880正常工作的電壓閾值時,記錄該計數器的第二計數值。當掉電后,主機不會再向存儲設備1810發出寫入請求,因而計數器不會再遞增;而只會隨著緩沖存儲器106里的數據被寫入閃存芯片105而單調遞減。因而第一計數值與第二計數值的差值對應于利用主機電容1804的電量可維持將緩沖存儲器106中的數據寫入到閃存芯片105中的數據量。可依據該數據量而修改中斷控制電路1301所監視的預定閾值。類似地,也可記錄圖16A、16B、16C中指示緩沖存儲器106中的待寫入閃存芯片105的數據量的計數器的計數值。并相應地修改用于緩沖存儲器106的預定閾值。圖18B是根據本發明的又一個實施例的外圍設備的供電電路的原理圖。圖188所提供的供電電路同圖18A中展示的供電電路相類似。不同之處在于,圖18B中還包括二極管1820和電容1812。電容1812的另一端耦合到地。電容1812作為存儲設備1810的備用電源,用于向存儲設備1810的負載1880提供應急電力。二極管1820的導通電阻大于N溝道MOSFET 1816的導通電阻,因而,在電源1802正常供電時,控制電路1818控制作為開關的N溝道MOSFET 1816閉合,從而來自電源1802的電力通過N溝道MOSFET 1816被提供給負載1880。而在控制電路1818通過檢測供電通路1821上來自電源1802的電壓而確定電源1802掉電時,輸出控制信號使得N溝道MOSFET 1816斷開,而供電通路1821的來自電源1802的輸出電壓可使得二極管1820導通,從而使得電源1802的電力通過二極管1820被提供給負載1880。而此時,電容1812也向負載1880提供電力,并可以穩定供電通路1823上的電壓。在另一個實施例中,主機1800在發生掉電時,或者主機1800將停止向存儲設備1810提供電力時(例如,由于休眠),主機1800將向存儲設備1810發出消息以指示掉電事件的發生。控制電路1818可基于對來自主機1800的掉電事件的接收和識別,而向N溝道MOSFET 1816輸出控制信號,以斷開N溝道MOSFET 1816。所屬領域技術人員將意識到,電源1802還可以為電容1812充電。在一個實施例中,對電容1812的充電通過二極管1814進行,而隨著電容1812中電量的增加,二極管1814陰極的電壓升高,當二極管1814兩端的電壓差小于其開啟電壓時,二極管1814截止。也可以通過N溝道MOSFET 1816,以向電容1812充電。所屬領域技術人員也將意識到,可使用多種形態的電池、可充電電池替代電容1812,或者與電容1812 —同使用而作為存儲設備1810的備用電源。在具有電容1812的供電電路中,控制電路1818所記錄并保存的計時器的計時時間,對應于利用主機電容1804以及電容1812的電量可維持負載1880正常工作的時間。基于該計時器的計時時間,修改例如圖13中的中斷控制電路1301所監視的預定閾值。使得在存儲設備正常工作時,可以利用更大的緩沖存儲器106,從而獲得更好的性能。也可以修改用于圖16A、16B、16C中的緩沖存儲器106的預定閾值,從而可利用更大的緩沖存儲器106的存儲空間。圖18C是根據本發明的另一個實施例的外圍設備的供電電路的原理圖。圖18C所提供的供電電路同圖18B中展示的供電電路相類似。不同之處在于,圖18C中還包括N溝道MOSFET 1822。控制電路1818通過檢測供電通路1821的來自電源1802的輸出電壓而確定電源1802正常供電時,控制電路1818使作為開關的N溝道MOSFET 1816閉合,并輸出控制信號,使作為開關的N溝道MOSFET 1822斷開,從而來自電源1802的電力通過N溝道MOSFET 1816被提供給負載1880。而在控制電路1818通過檢測供電通路1821的來自電源1802的輸出電壓而確定電源1802掉電時,輸出控制信號使得N溝道MOSFET 1816斷開,并輸出控制信號使得作為開關的N溝道MOSFET 1822閉合。從而使得電源1802的電力可通過二極管1814和作為開關的N溝道MOSFET 1822被提供給負載1880,以及來自電容1812的電力也可通過N溝道MOSFET 1822被提供給負載1880。以及來自電源1802的電力也可通過二極管1820被提供給負載1880。所屬領域技術人員還將意識到,在如圖18C所提供的供電電路中,也可以不使用二極管1820。可以采用其他形式的開關以替代N溝道MOSFET1822,其他形式的開關包括但不限于諸如P溝道M0SFET、三級管、其他PN結形態的開關,也可以是諸如繼電器的機械式開關。圖19A、19B、19C、19D和19E分別示出了本發明的供電電路中的控制電路的實施例。參看圖19A,其控制電路1818包括ADC (Analog Digital Converter,模擬-數字轉換器)1901和數字比較器1903。ADC 1901將供電通路1821的來自電源1802的輸出電壓進行模數轉換,得到指示電源1802的輸出電壓的數字值。數字比較器1903將ADC 1901輸出的數字值與預定數字值相比較。在ADC 1901輸出的數字值大于或等于預定數字值時,數字比較器1903輸出控制信號以閉合N溝道MOSFET 1816;而在ADC 1901輸出的數字值小于預定數字值時,數字比較器1903輸出控制信號以斷開N溝道MOSFET 1816。基于類似的原理,數字比較器1903還可以向圖18C中的N溝道MOSFET 1822提供控制信號。在進一步的實施例中,在ADC 1901輸出的數字值小于預定數字值時,控制電路1818啟動計時器。還利用ADC1901檢測提供給負載1880的電壓或者供電通路1821上的電壓,并將其轉換為數字值。當ADC1901輸出的數字值小于同維持負載1880正常工作的電壓相對應的第二預定數字值時,停止計時器的計時,并保存計時器的計時時間。參看圖19B,其提供了根據本發明的另一實施例的控制電路1818。圖19B中的控制電路1818包括比較器1913。比較器1913是模擬比較器,并從供電通路1821上接收來自電源1802的輸出電壓以及參考電壓1915,參考電壓1915指示電源1802正常工作時的輸出電壓。當電源1802的輸出電壓大于或等于參考電壓1915時,比較器1913向N溝道M0SFET1816輸出控制信號,以閉合N溝道M0SFET1816。而當電源1802的輸出電壓小于參考電壓1915時,比較器1913向N溝道M0SFET1816輸出控制信號,以斷開N溝道M0SFET1816。基于類似的原理,比較器1913還可以向圖18C中的N溝道M0SFET1822提供控制信號。在進一步的實施例中,而當電源1802的輸出電壓小于參考電壓1915時,控制電路1818啟動計時器。還利用比較器1913檢測提供給負載1880的電壓或者供電通路1821上的電壓與第二參考電壓的大小關系。當比較器1913檢測到的提供給負載1880的電壓或者供電通路 1821上的電壓小于同維持負載1880正常工作的電壓相對應的第二參考電壓時,停止計時器的計時,并保存計時器的計時時間。參看圖19C,其提供了根據本發明的另一實施例的控制電路1818。電源1802的輸出電壓可能具有較高的電壓值,而在存儲設備1810上提供具有較高電壓值的參考電壓可能是不方便的。圖19C中的控制電路1818包括比較器1923以及由電阻器1928、1929所組成的分壓電路。電阻器1928、1929串聯,電阻器1929的一端耦合到供電通路1821以接收來自電源1802的輸出電壓,電阻器1929的另一端耦合到電阻器1928的一端,而電阻器1928的另一端耦合到參考電位(例如地)。電阻器1928、1929互相耦合的一端提供對電源1802的輸出電壓的分壓輸出,將該分壓輸出I禹合到比較器1923,比較器1923的另一輸入端接收參考電壓1925。當電源1802正常工作時,該分壓輸出大于或等于參考電壓1825,比較器1923向N溝道M0SFET1816輸出控制信號,以閉合N溝道M0SFET1816。而當電源1802掉電時,該分壓輸出小于參考電壓1925,比較器1923向N溝道M0SFET1816輸出控制信號,以斷開N溝道M0SFET1816。基于類似的原理,比較器1923還可以向圖18C中的N溝道M0SFET1822提供控制信號。在進一步的實施例中,而當電源1802的輸出電壓小于參考電壓1925時,控制電路1818啟動計時器。還利用比較器1923檢測經過分壓的提供給負載1880的電壓或者供電通路1821上的電壓與第二參考電壓的大小關系。當比較器1923檢測到的提供給負載1880的電壓或者供電通路1821上的電壓經過分壓后小于同維持負載1880正常工作的電壓相對應的第二參考電壓時,停止計時器的計時,并保存計時器的計時時間。參看圖19D,其提供了根據本發明的另一實施例的控制電路1818。圖19D中,控制電路1818包括ORing控制器1933。ORing控制器1933的輸入端耦合到供電通路1821上的電源1802的輸出端以及N溝道M0SFET1816的輸出端(漏極)1935。ORing控制器1933的輸出端耦合到N溝道M0SFET1816的柵極,以控制N溝道M0SFET1816的閉合與斷開。當供電通路1821上的電源1802的輸出端的電壓與N溝道M0SFET1816的輸出端1935的電壓之間的差值大于或等于預定值時,ORing控制器1933控制N溝道M0SFET1816的輸出端閉合,而當供電通路1821上的電源1802的輸出端的電壓與N溝道M0SFET1816的輸出端1935的電壓之間的差值小于預定值時,ORing控制器1933控制N溝道M0SFET1816的輸出端斷開。ORing控制器1933可以是來自德州儀器公司的型號為TPS2419的ORing控制器。基于類似的原理,ORing控制器1933還可以向圖18C中的N溝道M0SFET1822提供控制信號。在進一步的實施例中,可基于ORing控制器1933控制N溝道M0SFET1816的輸出端斷開而啟動計時器,并在提供給負載1880的電壓或者供電通路1821上的電壓小于維持負載1880正常工作的電壓時,控制計時器停止計時。參看圖19E,其提供了根據本發明的另一實施例的控制電路1818。圖19E中,控制電路1818包括控制器1943,其接收并識別主機發出的指示掉電的消息。在未接收到指示掉電的消息時,控制器1943向N溝道M0SFET1816提供控制信號,以指示N溝道M0SFET1816閉合,而在接收到指示掉電的消息后,控制器1943向N溝道M0SFET1816提供控制信號,以指示N溝道M0SFET1816斷開。控制器1943可以實現于存儲設備1810用于與主機1800通信的接口控制器中。基于接口類型的不同,接口控制器可以SATA(Serial Advanced Technology Attachment,串行高級技術附件)控制器、USB (Universal Serial Bus,通用串行總線)控制器、PCI (Peripheral Component Interconnect,外圍組件互連)控制器、PCIE(Peripheral Component Interconnect Express,快速外圍組件互連)控制器、SCSI (SmallComputer Syste m Interface,小型計算機系統接口)控制器、IDE (Integrated Drive·Electronics,集成驅動器電子)控制器等。基于類似的原理,控制器1943還可以向圖18C中的N溝道M0SFET1822提供控制信號。在進一步的實施例中,可基于控制器1943接收到指示掉電的消息而啟動計時器,并在提供給負載1880的電壓或者供電通路1821或供電通路1823上的電壓小于維持負載1880正常工作的電壓時,控制計時器停止計時。圖20A是根據本發明的實施例確定緩沖區數據量閾值的方法的流程圖。參看圖18A-18C,當控制器1818接收到來自主機的復位信號(步驟2001 ),啟動計時器(步驟2003)。該復位信號指示主機1800即將停止向存儲設備1810提供電力。控制電路1818檢測提供給負載1880的電壓、供電通路1821或供電通路1823上的電壓是否小于可維持負載1880正常工作的可用閾值(步驟2005 )。如果電壓大等于可用閾值,意味著向負載1880提供的電力還可以維持負載1880正常工作,則保持計時器計時。若電壓小于可用閾值,意味著向負載1880提供的電力無法維持負載1880正常工作,則停止計時器(步驟2007)。計時器的計時時間,是利用主機1800的電容1804和或存儲設備1810的電容1812的電量可維持負載1880正常工作的時間。基于該時間,通過預先存儲的查找表或函數而得到對應于該時間的緩沖存儲器數據量閾值(步驟2009)。表示時間與緩沖存儲器數據量閾值的對應關系的查找表或函數,可預先存儲在存儲設備1810中,并通過實驗方式測得。也可以統計多次實驗的測量結果,并基于可靠性需要而設置該對應關系或將對應關系擬合為適當的函數。在一個實施例中,在主機掉電之后,且向負載1880提供的電力還可以維持負載1880正常工作時,兩次或多次測量施加給負載1880的電壓、供電通路1821或供電通路1823上的電壓,依據測量結果在時間上的分布,基于供電電壓的衰減函數或曲線而計算在主機掉電和向負載1880提供的電力無法維持負載1880正常工作之間的時間,并基于該時間確定緩沖存儲器數據量閾值。在一個實施例中,記錄在主機掉電之后直到向負載1880提供的電力無法維持負載1880正常工作之間,從存儲設備的緩沖存儲器寫入閃存芯片的數據量,并基于該數據量確定緩沖區數據量閾值。
在一個實施例中,參看圖16D,當存儲設備中包括閃存接口 1231、1232、1233時,閃存接口 1231、1232、1233將并行地將緩沖存儲器106中的數據寫入閃存芯片105。在主機掉電后,利用電容1804和或存儲設備1810的電容1812的電力,閃存接口 1231、1232、1233可寫入閃存芯片105的數據量主要依賴于來自電容1804和或存儲設備1810的電容1812的電力可維持在可用閾值電壓之上的時間。因為設置緩沖區數據量閾值,使得閃存接口 1231、1232、1233中具有最多待寫入數據量的閃存接口可在主機掉電發生后,將緩沖存儲器106中的待寫入數據寫入到閃存芯片105。以及對于多個閃存接口 1231、1232、1233,設置單一的緩沖存儲器數據量閾值。當多個閃存接口 1231、1232、1233中的任何一個閃存接口的待寫入數據量超過該緩沖存儲器數據量閾值時,則實施結合圖16D已經描述的中斷抑制。圖20B是根據本發明的另一實施例的確定緩沖區數據量閾值的方法的流程圖。參看圖18A-18C,控制器1818檢測主機電源1802所提供的電壓(步驟2011)。判斷主機電源1802所提供的電壓與關機電壓的大小關系(步驟2013)。當主機電源1802所提供的電壓小于關機電壓時,啟動計時器(步驟2015)。主機電源1802提供的電壓小于關機電壓,意味著主機1800即將停止向存儲設備1810提供電力。控制電路1818檢測提供給負載1880的電 壓、供電通路1821或供電通路1823上的電壓是否小于可維持負載1880正常工作的可用閾值(步驟2017)。如果電壓大等于可用閾值,意味著向負載1880提供的電力還可以維持負載1880正常工作,則保持計時器計時。若電壓小于可用閾值,意味著向負載1880提供的電力無法維持負載1880正常工作,則停止計時器(步驟2019)。計時器的計時時間,是利用主機1800的電容1804和或存儲設備1810的電容1812的電量可維持負載1880正常工作的時間。基于該時間,通過預先存儲的查找表或函數而得到對應于該時間的緩沖存儲器數據量閾值(步驟2021)。表示時間與緩沖存儲器數據量閾值的對應關系的查找表或函數,可預先存儲在存儲設備1810中,并通過實驗方式測得。也可以統計多次實驗的測量結果,并基于可靠性需要而設置該對應關系或將對應關系擬合為適當的函數。圖21是根據本發明的實施例的設置緩沖區數據量閾值的方法的流程圖。不同的主機1800會具有不同的配置,因而,在掉電后,主機的電容1802可提供存儲設備1810的電力可能是不同的。主機電容1802的供電能力也會因老化等因素而隨著時間而改變。在一個實施例中,在主機1800上首次使用存儲設備1810時,使用緩沖存儲器數據量閾值的默認設置。一般情況下,該默認設置采用保守的選擇方式。例如,依據僅利用存儲設備的電容1812所能提供的電量而設置緩沖存儲器數據量閾值。因而,需要確定存儲設備1810是否為首次在主機1800上被使用。為此目的,在主機1800啟動時(步驟2101),主機1800向存儲設備1810提供主機標識。主機標識可以是主機1800的網卡MAC地址或者是其他硬件設備的序列號,使得該主機標識可以唯一地標識主機1800。存儲設備1810接收該主機標識,并與在存儲設備1810中存儲的主機標識相比較(步驟2103)。如果從主機1800接收的主機標識同存儲設備1810中存儲的主機標識不同,意味著存儲設備1810沒有在主機1800上使用或者至少存儲設備1810的上一次使用不是在主機1800上。那么,存儲設備1810選擇使用默認的緩沖存儲器數據量閾值,其為依據僅利用存儲設備的電容1812所能提供的電量而設置緩沖存儲器數據量閾值(步驟2113)。以及可選地,還清除在存儲設備1810中存儲的(非默認)緩沖存儲器數據量閾值(步驟2111)。在步驟2103,如果從主機1800接收的主機標識同存儲設備1810中存儲的主機標識相同,意味著主機1800向存儲設備1810發送過該主機標識,或者存儲設備1810的前一次使用是在主機1800上進行。在步驟2105,存儲設備1810判斷是否使用默認的緩沖存儲器數據量閾值。在一些情況下,例如,主機1800的配置發生了改變,其電容1804在主機掉電后的供電能力可能發生變化,在此情況下,主機1800可向存儲設備1810發出命令,以指示存儲設備1810使用默認緩沖存儲器數據量閾值。在另一個實施例中,在存儲設備1810上設置例如跳線開關,以指示存儲設備1810是否使用默認的緩沖存儲器數據量閾值。當存儲設備1810將使用默認的緩沖存儲器數據量閾值時,執行步驟2113和/或步驟2111。當在步驟2105判斷不需要使用默認緩沖存儲器數據量閾值時,執行步驟2107,確定緩沖存儲器數據量閾值。可從存儲設備1810中讀出已經通過在圖20A或20B中提供的實施例而得到并存儲在存儲設備1810上的緩沖存儲器數據量閾值。在一個實施例中,每當主機1800關機或主機1800的電源1802掉電時,執行在圖20A或20B中提供的方法,并得到一個緩沖存儲器數據量閾值。在步驟2107,可依據所存儲的多個緩沖存儲器數據量閾值,計算出優選的緩沖存儲器數據量閾值。計算方法可包括對多個緩沖存儲器數據量閾值求平均值或加權平均值。也可以依據多個緩沖存儲器數據量閾值,計算其均值和方差,并得到滿足一定備用電源可靠供電概率的緩沖存儲器數據量閾值。在步驟2109,將所確定的緩沖存儲器數據量閾值設置為在存儲設備1810中使用的緩沖存儲器數據量閾 值。已經為了示出和描述的目的而展現了對本發明的描述,并且不旨在以所公開的形式窮盡或限制本發明。對所屬領域技術人員,許多調整和變化是顯而易見的。
權利要求
1.一種存儲設備的中斷控制方法,所述存儲設備包括閃存存儲器以及緩沖存儲器,所述方法包括 從信息處理設備接收要寫入存儲設備的數據; 將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器; 將所述緩沖存儲器中的數據取出并寫入所述閃存存儲器; 其中,在將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器后,若所述緩沖存儲器中的數據量小于預定閾值,則向所述信息處理設備發送指示寫操作完成的消息; 所述方法還包括檢測到所述信息處理設備的電源掉電而啟動計時器,當所述信息處理設備的電源向所述存儲設備提供的電壓小于預定電壓閾值時停止計時器,根據所述計時器的計時時間修改所述預定閾值。
2.根據權利要求I所述的方法,還包括所述存儲設備從所述信息處理設備接收唯一標識所述信息處理設備的第一標識符,若所述第一標識符與所述存儲設備中存儲的第二標識符相同,則根據所述計時器的計時時間修改所述預定閾值。
3.根據權利要求2所述的方法,若所述第一標識符與所述存儲設備中存儲的第二標識符不同,則將所述預定閾值設置為默認值;以及在所述存儲設備中存儲所述第一標識符以替換所述第二標識符。
4.根據權利要求2或3所述的方法,還包括存儲所述計時器的計時時間。
5.根據權利要求4所述的方法,其中在所述信息處理設備啟動時,所述存儲設備從所述信息處理設備接收唯一標識所述信息處理設備的第一標識符,若所述第一標識符與所述存儲設備中存儲的第二標識符相同,則根據所存儲的所述計時器的計時時間修改所述預定閾值。
6.一種存儲設備的中斷控制方法,所述存儲設備包括閃存存儲器以及緩沖存儲器,所述方法包括 從信息處理設備接收寫入請求; 基于所述寫入請求,將數據寫入所述緩沖存儲器,并使計數器遞增; 將所述緩沖存儲器中的所述數據取出并寫入所述閃存存儲器,并使所述計數器遞減; 其中,若所述計數器小于預定閾值,則向所述信息處理設備發送指示所述寫入請求處理完成的消息; 所述方法還包括檢測到所述信息處理設備的電源掉電而記錄所述計數器的第一值,當所述信息處理設備的電源向所述存儲設備提供的電壓小于預定電壓閾值時記錄所述計數器的第二值,根據所述第一值與所述第二值的差而修改所述預定閾值。
7.一種存儲設備,所述存儲設備包括緩沖存儲器、閃存存儲器、信息處理設備接口以及控制電路,所述控制電路還包括計數器以及中斷控制器,所述存儲設備與信息處理設備可通信地連接,其中 所述信息處理設備接口從信息處理設備接收寫入請求; 所述控制電路基于所述寫入請求,將數據寫入所述緩沖存儲器,并使所述計數器遞增; 所述控制電路將所述緩沖存儲器中的所述數據取出并寫入所述閃存存儲器,并使所述計數器遞減;在所述計數器小于預定閾值的情況下,所述中斷控制器向所述信息處理設備發送指示所述寫入請求處理完成的消息; 所述控制電路確定所述信息處理設備的電源處于掉電狀態時,啟動定時器;所述控制電路確定所述信息處理設備的電源提供的電壓小于預定電壓閾值時,停止所述定時器,并根據所述計時器的計時時間修改所述預定閾值。
8.一種存儲設備,所述存儲設備包括緩沖存儲器、閃存存儲器、信息處理設備接口以及控制電路,所述控制電路還包括計數器以及中斷控制器,所述存儲設備與信息處理設備可通信地連接,其中 所述信息處理設備接口從信息處理設備接收要寫入存儲設備的數據; 所述控制電路將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器; 所述控制電路將所述緩沖存儲器中的數據取出并寫入所述閃存存儲器; 在將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器后,若所述緩沖存儲器中的數據量小于預定閾值,則所述中斷控制器向所述信息處理設備發送指示寫操作完成的消息; 所述控制電路確定所述信息處理設備的電源處于掉電狀態時,啟動定時器;所述控制電路確定所述信息處理設備的電源提供的電壓小于預定電壓閾值時,停止所述定時器,并根據所述計時器的計時時間修改所述預定閾值。
9.一種測量電源掉電后的供電時間的方法,包括 響應于檢測到所述電源掉電而啟動定時器; 檢測所述電源提供的電壓,當所述電壓小于預定電壓閾值時,停止計時器; 存儲所述計時器的計時時間作為所述電源掉電后的供電時間。
10.根據權利要求9所述的方法,還包括存儲多次測量的電源掉電后的供電時間,并基于所述多次測量的電源掉電后的供電時間,得到估計的所述電源掉電后的供電時間。
全文摘要
本發明提供了存儲設備、中斷控制方法以及供電時間測量方法。該存儲設備包括閃存存儲器以及緩沖存儲器。該方法包括從信息處理設備接收要寫入存儲設備的數據;將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器;將所述緩沖存儲器中的數據取出并寫入所述閃存存儲器;其中,在將所接收的要寫入存儲設備的數據寫入所述緩沖存儲器后,若所述緩沖存儲器中的數據量小于預定閾值,則向所述信息處理設備發送指示寫操作完成的消息;所述方法還包括檢測到所述信息處理設備的電源掉電而啟動計時器,當所述信息處理設備的電源向所述存儲設備提供的電壓小于預定電壓閾值時停止計時器,根據所述計時器的計時時間修改所述預定閾值。
文檔編號G06F13/32GK102799396SQ20121025488
公開日2012年11月28日 申請日期2012年7月22日 優先權日2012年7月22日
發明者王祎磊, 殷雪冰 申請人:北京憶恒創源科技有限公司